122 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			122 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
|  | /** | ||
|  |  * @license | ||
|  |  * Copyright Google LLC All Rights Reserved. | ||
|  |  * | ||
|  |  * Use of this source code is governed by an MIT-style license that can be | ||
|  |  * found in the LICENSE file at https://angular.io/license
 | ||
|  |  */ | ||
|  | 
 | ||
|  | import {absoluteFrom} from '@angular/compiler-cli/src/ngtsc/file_system'; | ||
|  | import {MockFileSystem} from '@angular/compiler-cli/src/ngtsc/file_system/testing'; | ||
|  | 
 | ||
|  | import * as ts from 'typescript/lib/tsserverlibrary'; | ||
|  | 
 | ||
|  | const NOOP_FILE_WATCHER: ts.FileWatcher = { | ||
|  |   close() {} | ||
|  | }; | ||
|  | 
 | ||
|  | /** | ||
|  |  * Adapts from the `ts.server.ServerHost` API to an in-memory filesystem. | ||
|  |  */ | ||
|  | export class MockServerHost implements ts.server.ServerHost { | ||
|  |   constructor(private fs: MockFileSystem) {} | ||
|  | 
 | ||
|  |   get newLine(): string { | ||
|  |     return '\n'; | ||
|  |   } | ||
|  | 
 | ||
|  |   get useCaseSensitiveFileNames(): boolean { | ||
|  |     return this.fs.isCaseSensitive(); | ||
|  |   } | ||
|  | 
 | ||
|  |   readFile(path: string, encoding?: string): string|undefined { | ||
|  |     return this.fs.readFile(absoluteFrom(path)); | ||
|  |   } | ||
|  | 
 | ||
|  |   resolvePath(path: string): string { | ||
|  |     return this.fs.resolve(path); | ||
|  |   } | ||
|  | 
 | ||
|  |   fileExists(path: string): boolean { | ||
|  |     const absPath = absoluteFrom(path); | ||
|  |     return this.fs.exists(absPath) && this.fs.lstat(absPath).isFile(); | ||
|  |   } | ||
|  | 
 | ||
|  |   directoryExists(path: string): boolean { | ||
|  |     const absPath = absoluteFrom(path); | ||
|  |     return this.fs.exists(absPath) && this.fs.lstat(absPath).isDirectory(); | ||
|  |   } | ||
|  | 
 | ||
|  |   createDirectory(path: string): void { | ||
|  |     this.fs.ensureDir(absoluteFrom(path)); | ||
|  |   } | ||
|  | 
 | ||
|  |   getExecutingFilePath(): string { | ||
|  |     // This is load-bearing, as TypeScript uses the result of this call to locate the directory in
 | ||
|  |     // which it expects to find .d.ts files for the "standard libraries" - DOM, ES2015, etc.
 | ||
|  |     return '/node_modules/typescript/lib/tsserver.js'; | ||
|  |   } | ||
|  | 
 | ||
|  |   getCurrentDirectory(): string { | ||
|  |     return '/'; | ||
|  |   } | ||
|  | 
 | ||
|  |   createHash(data: string): string { | ||
|  |     return ts.sys.createHash!(data); | ||
|  |   } | ||
|  | 
 | ||
|  |   get args(): string[] { | ||
|  |     throw new Error('Property not implemented.'); | ||
|  |   } | ||
|  | 
 | ||
|  |   watchFile( | ||
|  |       path: string, callback: ts.FileWatcherCallback, pollingInterval?: number, | ||
|  |       options?: ts.WatchOptions): ts.FileWatcher { | ||
|  |     return NOOP_FILE_WATCHER; | ||
|  |   } | ||
|  | 
 | ||
|  |   watchDirectory( | ||
|  |       path: string, callback: ts.DirectoryWatcherCallback, recursive?: boolean, | ||
|  |       options?: ts.WatchOptions): ts.FileWatcher { | ||
|  |     return NOOP_FILE_WATCHER; | ||
|  |   } | ||
|  | 
 | ||
|  |   setTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]) { | ||
|  |     throw new Error('Method not implemented.'); | ||
|  |   } | ||
|  | 
 | ||
|  |   clearTimeout(timeoutId: any): void { | ||
|  |     throw new Error('Method not implemented.'); | ||
|  |   } | ||
|  | 
 | ||
|  |   setImmediate(callback: (...args: any[]) => void, ...args: any[]) { | ||
|  |     throw new Error('Method not implemented.'); | ||
|  |   } | ||
|  | 
 | ||
|  |   clearImmediate(timeoutId: any): void { | ||
|  |     throw new Error('Method not implemented.'); | ||
|  |   } | ||
|  | 
 | ||
|  |   write(s: string): void { | ||
|  |     throw new Error('Method not implemented.'); | ||
|  |   } | ||
|  | 
 | ||
|  |   writeFile(path: string, data: string, writeByteOrderMark?: boolean): void { | ||
|  |     throw new Error('Method not implemented.'); | ||
|  |   } | ||
|  | 
 | ||
|  |   getDirectories(path: string): string[] { | ||
|  |     throw new Error('Method not implemented.'); | ||
|  |   } | ||
|  | 
 | ||
|  |   readDirectory( | ||
|  |       path: string, extensions?: readonly string[], exclude?: readonly string[], | ||
|  |       include?: readonly string[], depth?: number): string[] { | ||
|  |     throw new Error('Method not implemented.'); | ||
|  |   } | ||
|  | 
 | ||
|  |   exit(exitCode?: number): void { | ||
|  |     throw new Error('Method not implemented.'); | ||
|  |   } | ||
|  | } |