@@ -30,11 +30,11 @@ interface Array<T> { length: number; [n: number]: T; }`
30
30
inodeWatching ?: boolean ;
31
31
}
32
32
33
- export function createWatchedSystem ( fileOrFolderList : readonly FileOrFolderOrSymLink [ ] , params ?: TestServerHostCreationParameters ) : TestServerHost {
33
+ export function createWatchedSystem ( fileOrFolderList : FileOrFolderOrSymLinkMap | readonly FileOrFolderOrSymLink [ ] , params ?: TestServerHostCreationParameters ) : TestServerHost {
34
34
return new TestServerHost ( fileOrFolderList , params ) ;
35
35
}
36
36
37
- export function createServerHost ( fileOrFolderList : readonly FileOrFolderOrSymLink [ ] , params ?: TestServerHostCreationParameters ) : TestServerHost {
37
+ export function createServerHost ( fileOrFolderList : FileOrFolderOrSymLinkMap | readonly FileOrFolderOrSymLink [ ] , params ?: TestServerHostCreationParameters ) : TestServerHost {
38
38
const host = new TestServerHost ( fileOrFolderList , params ) ;
39
39
// Just like sys, patch the host to use writeFile
40
40
patchWriteFileEnsuringDirectory ( host ) ;
@@ -59,6 +59,9 @@ interface Array<T> { length: number; [n: number]: T; }`
59
59
}
60
60
61
61
export type FileOrFolderOrSymLink = File | Folder | SymLink ;
62
+ export interface FileOrFolderOrSymLinkMap {
63
+ [ path : string ] : string | Omit < FileOrFolderOrSymLink , "path" > ;
64
+ }
62
65
export function isFile ( fileOrFolderOrSymLink : FileOrFolderOrSymLink ) : fileOrFolderOrSymLink is File {
63
66
return isString ( ( fileOrFolderOrSymLink as File ) . content ) ;
64
67
}
@@ -289,7 +292,6 @@ interface Array<T> { length: number; [n: number]: T; }`
289
292
useCaseSensitiveFileNames : boolean ;
290
293
executingFilePath : string ;
291
294
currentDirectory : string ;
292
- fileOrFolderorSymLinkList : readonly FileOrFolderOrSymLink [ ] ;
293
295
newLine ?: string ;
294
296
useWindowsStylePaths ?: boolean ;
295
297
environmentVariables ?: ESMap < string , string > ;
@@ -326,7 +328,7 @@ interface Array<T> { length: number; [n: number]: T; }`
326
328
private readonly inodes ?: ESMap < Path , number > ;
327
329
watchDirectory : HostWatchDirectory ;
328
330
constructor (
329
- fileOrFolderorSymLinkList : readonly FileOrFolderOrSymLink [ ] ,
331
+ fileOrFolderorSymLinkList : FileOrFolderOrSymLinkMap | readonly FileOrFolderOrSymLink [ ] ,
330
332
{
331
333
useCaseSensitiveFileNames, executingFilePath, currentDirectory,
332
334
newLine, windowsStyleRoot, environmentVariables,
@@ -415,16 +417,27 @@ interface Array<T> { length: number; [n: number]: T; }`
415
417
return new Date ( this . time ) ;
416
418
}
417
419
418
- private reloadFS ( fileOrFolderOrSymLinkList : readonly FileOrFolderOrSymLink [ ] ) {
420
+ private reloadFS ( fileOrFolderOrSymLinkList : FileOrFolderOrSymLinkMap | readonly FileOrFolderOrSymLink [ ] ) {
419
421
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
+ }
428
441
}
429
442
}
430
443
0 commit comments