@@ -30,11 +30,11 @@ interface Array<T> { length: number; [n: number]: T; }`
3030 inodeWatching ?: boolean ;
3131 }
3232
33- export function createWatchedSystem ( fileOrFolderList : readonly FileOrFolderOrSymLink [ ] , params ?: TestServerHostCreationParameters ) : TestServerHost {
33+ export function createWatchedSystem ( fileOrFolderList : FileOrFolderOrSymLinkMap | readonly FileOrFolderOrSymLink [ ] , params ?: TestServerHostCreationParameters ) : TestServerHost {
3434 return new TestServerHost ( fileOrFolderList , params ) ;
3535 }
3636
37- export function createServerHost ( fileOrFolderList : readonly FileOrFolderOrSymLink [ ] , params ?: TestServerHostCreationParameters ) : TestServerHost {
37+ export function createServerHost ( fileOrFolderList : FileOrFolderOrSymLinkMap | readonly FileOrFolderOrSymLink [ ] , params ?: TestServerHostCreationParameters ) : TestServerHost {
3838 const host = new TestServerHost ( fileOrFolderList , params ) ;
3939 // Just like sys, patch the host to use writeFile
4040 patchWriteFileEnsuringDirectory ( host ) ;
@@ -59,6 +59,9 @@ interface Array<T> { length: number; [n: number]: T; }`
5959 }
6060
6161 export type FileOrFolderOrSymLink = File | Folder | SymLink ;
62+ export interface FileOrFolderOrSymLinkMap {
63+ [ path : string ] : string | Omit < FileOrFolderOrSymLink , "path" > ;
64+ }
6265 export function isFile ( fileOrFolderOrSymLink : FileOrFolderOrSymLink ) : fileOrFolderOrSymLink is File {
6366 return isString ( ( fileOrFolderOrSymLink as File ) . content ) ;
6467 }
@@ -289,7 +292,6 @@ interface Array<T> { length: number; [n: number]: T; }`
289292 useCaseSensitiveFileNames : boolean ;
290293 executingFilePath : string ;
291294 currentDirectory : string ;
292- fileOrFolderorSymLinkList : readonly FileOrFolderOrSymLink [ ] ;
293295 newLine ?: string ;
294296 useWindowsStylePaths ?: boolean ;
295297 environmentVariables ?: ESMap < string , string > ;
@@ -326,7 +328,7 @@ interface Array<T> { length: number; [n: number]: T; }`
326328 private readonly inodes ?: ESMap < Path , number > ;
327329 watchDirectory : HostWatchDirectory ;
328330 constructor (
329- fileOrFolderorSymLinkList : readonly FileOrFolderOrSymLink [ ] ,
331+ fileOrFolderorSymLinkList : FileOrFolderOrSymLinkMap | readonly FileOrFolderOrSymLink [ ] ,
330332 {
331333 useCaseSensitiveFileNames, executingFilePath, currentDirectory,
332334 newLine, windowsStyleRoot, environmentVariables,
@@ -415,16 +417,27 @@ interface Array<T> { length: number; [n: number]: T; }`
415417 return new Date ( this . time ) ;
416418 }
417419
418- private reloadFS ( fileOrFolderOrSymLinkList : readonly FileOrFolderOrSymLink [ ] ) {
420+ private reloadFS ( fileOrFolderOrSymLinkList : FileOrFolderOrSymLinkMap | readonly FileOrFolderOrSymLink [ ] ) {
419421 Debug . assert ( this . fs . size === 0 ) ;
420- const filesOrFoldersToLoad : readonly FileOrFolderOrSymLink [ ] = ! this . windowsStyleRoot ? fileOrFolderOrSymLinkList :
421- fileOrFolderOrSymLinkList . map < FileOrFolderOrSymLink > ( f => {
422- const result = clone ( f ) ;
423- result . path = this . getHostSpecificPath ( f . path ) ;
424- return result ;
425- } ) ;
426- for ( const fileOrDirectory of filesOrFoldersToLoad ) {
427- this . ensureFileOrFolder ( fileOrDirectory ) ;
422+ if ( isArray ( fileOrFolderOrSymLinkList ) ) {
423+ fileOrFolderOrSymLinkList . forEach ( f => this . ensureFileOrFolder ( ! this . windowsStyleRoot ?
424+ f :
425+ { ...f , path : this . getHostSpecificPath ( f . path ) }
426+ ) ) ;
427+ }
428+ else {
429+ for ( const key in fileOrFolderOrSymLinkList ) {
430+ if ( hasProperty ( fileOrFolderOrSymLinkList , key ) ) {
431+ const path = this . getHostSpecificPath ( key ) ;
432+ const value = fileOrFolderOrSymLinkList [ key ] ;
433+ if ( isString ( value ) ) {
434+ this . ensureFileOrFolder ( { path, content : value } ) ;
435+ }
436+ else {
437+ this . ensureFileOrFolder ( { path, ...value } ) ;
438+ }
439+ }
440+ }
428441 }
429442 }
430443
0 commit comments