diff --git a/package.json b/package.json index e0dc0e1..69caffe 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ ], "author": { "name": "Ron S.", - "url": "http://twitter.com/ron" + "url": "https://twitter.com/ron" }, "license": "MIT", "repository": { diff --git a/src/installer/lib/patcher.ts b/src/installer/lib/patcher.ts index 962e7a0..6bc1043 100644 --- a/src/installer/lib/patcher.ts +++ b/src/installer/lib/patcher.ts @@ -27,9 +27,16 @@ const getHeader = () => `/// tsp: ${tspPackageJSON.version}\n\n`; /** * Generate insertion code for module-patch */ -const generatePatch = (isTSC: boolean) => - jsPatchSrc + - `\nObject.assign(tsp, { isTSC: ${isTSC}, tspVersion: '${tspPackageJSON.version}' });\n\n`; +const generatePatch = (isTSC: boolean, isTSServer: boolean, isTSServerLibrary: boolean) => { + // language=JavaScript + return jsPatchSrc + `\n +Object.assign(tsp, { + isTSC: ${isTSC}, + isTSServer: ${isTSServer}, + isTSServerLibrary: ${isTSServerLibrary}, + tspVersion: '${tspPackageJSON.version}' +});\n\n`; +}; /** * Validate TSModule and TSPackage before patching @@ -78,6 +85,13 @@ const patchModuleDiagnostics = (tsModule: TSModule, tsPackage: TSPackage, source restCode.substr(emitPos); } +const locateFile = (filename: string, tsPackage: TSPackage): string => { + return [ + path.join(tsPackage.packageDir, BACKUP_DIRNAME, filename), + path.join(tsPackage.libDir, filename) + ].filter(f => fs.existsSync(f))[0]; +} + /* ******************************************************************************************************************** * Patch @@ -93,20 +107,17 @@ export function patchTSModule(tsModule: TSModule, tsPackage: TSPackage) { /* Install patch */ const isTSC = (filename === 'tsc.js'); - const patchSrc = generatePatch(isTSC); + const isTSServer = (filename === 'tsserver.js'); + const isTSServerLibrary = (filename === 'tsserverlibrary.js'); + const patchSrc = generatePatch(isTSC, isTSServer, isTSServerLibrary); /* Add diagnostic modification support */ const moduleSrc = patchModuleDiagnostics(tsModule, tsPackage); try { if (isTSC) { - /* Select non-patched typescript.js */ - const tsFile = - [ - path.join(tsPackage.packageDir, BACKUP_DIRNAME, 'typescript.js'), - path.join(tsPackage.libDir, 'typescript.js') - ] - .filter(f => fs.existsSync(f))[0]; + // Select non-patched typescript.js + const tsFile = locateFile('typescript.js', tsPackage); /* Get TSC-specific module slice */ const ver = tsPackage.version.split('.') diff --git a/src/patch/lib/createProgram.ts b/src/patch/lib/createProgram.ts index 3b0847a..5ca5f34 100644 --- a/src/patch/lib/createProgram.ts +++ b/src/patch/lib/createProgram.ts @@ -86,7 +86,7 @@ namespace tsp { /* Get Config */ const projectConfig = getProjectConfig(options, rootNames); - if (tsp.isTSC) { + if (tsp.isTSC || tsp.isTSServer || tsp.isTSServerLibrary) { options = projectConfig.compilerOptions; if (createOpts) createOpts.options = options; } diff --git a/src/patch/lib/main.ts b/src/patch/lib/main.ts index a3733a4..4b74dea 100644 --- a/src/patch/lib/main.ts +++ b/src/patch/lib/main.ts @@ -1,6 +1,8 @@ namespace tsp { Object.defineProperties(ts, { isTSC: { get: () => tsp.isTSC, enumerable: true }, + isTSServer: { get: () => tsp.isTSServer, enumerable: true }, + isTSServerLibrary: { get: () => tsp.isTSServerLibrary, enumerable: true }, tspVersion: { get: () => tsp.tspVersion, enumerable: true }, PluginCreator: { get: () => tsp.PluginCreator, enumerable: true }, originalCreateProgram: { value: ts.createProgram, enumerable: true }, diff --git a/src/patch/lib/shared.ts b/src/patch/lib/shared.ts index dda9d7b..3fc2a60 100644 --- a/src/patch/lib/shared.ts +++ b/src/patch/lib/shared.ts @@ -5,6 +5,8 @@ namespace tsp { export const diagnosticMap: typeof ts.diagnosticMap = new WeakMap(); export declare let isTSC: boolean; + export declare let isTSServer: boolean; + export declare let isTSServerLibrary: boolean; export declare let tspVersion: string; /* ********************************************************* *