@teambit/ts-server 0.0.77 → 0.0.78
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -130,6 +130,7 @@ export declare class ProcessBasedTsServer {
|
|
|
130
130
|
private readonly deferreds;
|
|
131
131
|
private logger;
|
|
132
132
|
private cancellationPipeName;
|
|
133
|
+
private killedIntentionally;
|
|
133
134
|
constructor(options: TspClientOptions, tsServerArgs?: TsServerArgs);
|
|
134
135
|
restart(): Promise<void>;
|
|
135
136
|
start(): Promise<void>;
|
|
@@ -139,6 +140,7 @@ export declare class ProcessBasedTsServer {
|
|
|
139
140
|
notify(command: CommandTypes.Change, args: ts.server.protocol.ChangeRequestArgs): Promise<void>;
|
|
140
141
|
request<K extends keyof TypeScriptRequestTypes>(command: K, args: TypeScriptRequestTypes[K][0], token?: CancellationToken): Promise<TypeScriptRequestTypes[K][1]>;
|
|
141
142
|
kill(): void;
|
|
143
|
+
private rejectAllPendingRequests;
|
|
142
144
|
private log;
|
|
143
145
|
protected sendMessage(command: string, notification: boolean, args?: any): void;
|
|
144
146
|
protected processMessage(untrimmedMessageString: string, resolve?: () => void, reject?: (err: any) => void): void;
|
|
@@ -69,6 +69,7 @@ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r
|
|
|
69
69
|
class ProcessBasedTsServer {
|
|
70
70
|
seq = 0;
|
|
71
71
|
deferreds = {};
|
|
72
|
+
killedIntentionally = false;
|
|
72
73
|
constructor(options, tsServerArgs = {}) {
|
|
73
74
|
this.options = options;
|
|
74
75
|
this.tsServerArgs = tsServerArgs;
|
|
@@ -84,6 +85,7 @@ class ProcessBasedTsServer {
|
|
|
84
85
|
reject(new Error('server already started'));
|
|
85
86
|
return;
|
|
86
87
|
}
|
|
88
|
+
this.killedIntentionally = false;
|
|
87
89
|
const {
|
|
88
90
|
tsserverPath
|
|
89
91
|
} = this.options;
|
|
@@ -123,6 +125,16 @@ class ProcessBasedTsServer {
|
|
|
123
125
|
this.kill();
|
|
124
126
|
reject(new Error('TSServer was killed'));
|
|
125
127
|
});
|
|
128
|
+
this.tsServerProcess.on('exit', (code, signal) => {
|
|
129
|
+
if (this.killedIntentionally) return;
|
|
130
|
+
const msg = `TSServer process exited unexpectedly (code: ${code}, signal: ${signal})`;
|
|
131
|
+
this.logger.error(msg);
|
|
132
|
+
reject(new Error(msg));
|
|
133
|
+
this.rejectAllPendingRequests(msg);
|
|
134
|
+
this.tsServerProcess = null;
|
|
135
|
+
this.readlineInterface?.close();
|
|
136
|
+
this.readlineInterface = null;
|
|
137
|
+
});
|
|
126
138
|
this.readlineInterface.on('line', line => {
|
|
127
139
|
this.processMessage(line, resolve, reject);
|
|
128
140
|
});
|
|
@@ -172,12 +184,22 @@ class ProcessBasedTsServer {
|
|
|
172
184
|
}
|
|
173
185
|
}
|
|
174
186
|
kill() {
|
|
187
|
+
this.killedIntentionally = true;
|
|
175
188
|
this.tsServerProcess?.kill();
|
|
176
189
|
this.tsServerProcess?.stdin?.destroy();
|
|
177
190
|
this.readlineInterface?.close();
|
|
178
191
|
this.tsServerProcess = null;
|
|
179
192
|
this.readlineInterface = null;
|
|
180
193
|
}
|
|
194
|
+
rejectAllPendingRequests(reason) {
|
|
195
|
+
const error = new Error(reason);
|
|
196
|
+
for (const deferred of Object.values(this.deferreds)) {
|
|
197
|
+
deferred.reject(error);
|
|
198
|
+
}
|
|
199
|
+
for (const seq of Object.keys(this.deferreds)) {
|
|
200
|
+
delete this.deferreds[seq];
|
|
201
|
+
}
|
|
202
|
+
}
|
|
181
203
|
log(msg, obj = {}) {
|
|
182
204
|
msg = `[tsserver] ${msg}`;
|
|
183
205
|
if (this.options.logToConsole) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["fs","data","_interopRequireWildcard","require","path","cp","readline","decoder","_tempy","_interopRequireDefault","_utils","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ProcessBasedTsServer","seq","deferreds","constructor","options","tsServerArgs","logger","restart","kill","start","Promise","resolve","reject","tsServerProcess","Error","tsserverPath","logFile","logVerbosity","maxTsServerMemory","globalPlugins","pluginProbeLocations","args","push","length","join","cancellationPipeName","tempy","file","name","info","tsserverPathIsModule","extname","silent","execArgv","fork","spawn","readlineInterface","createInterface","stdout","stdin","undefined","process","on","line","processMessage","dec","StringDecoder","stderr","addListener","stringMsg","write","error","notify","command","ensureServerIsRunning","sendMessage","request","token","deferred","Deferred","promise","onCancelled","onCancellationRequested","dispose","requestCancellationPipeName","writeFile","err","then","unlink","result","destroy","close","log","msg","obj","logToConsole","console","JSON","stringify","trace","notification","type","arguments","serializedRequest","untrimmedMessageString","messageString","trim","startsWith","message","parse","isEvent","isResponse","resolveResponse","request_seq","success","isRequestCompletedEvent","body","onEvent","event","exports"],"sources":["process-based-tsserver.ts"],"sourcesContent":["/**\n * part of this file was copied over from https://github.com/typescript-language-server/typescript-language-server/blob/master/src/tsp-client.ts\n */\n\n/*\n * Copyright (C) 2017, 2018 TypeFox and others.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport * as cp from 'child_process';\nimport * as readline from 'readline';\nimport type { Logger } from '@teambit/logger';\nimport type { Readable, Writable } from 'stream';\nimport * as decoder from 'string_decoder';\nimport type ts from 'typescript/lib/tsserverlibrary';\nimport tempy from 'tempy';\nimport type { CancellationToken } from 'vscode-jsonrpc';\nimport type { CommandTypes } from './tsp-command-types';\nimport { Deferred } from './utils';\n\nexport interface TspClientOptions {\n logger: Logger;\n tsserverPath: string;\n logToConsole?: boolean;\n onEvent?: (event: ts.server.protocol.Event) => void;\n}\n\nexport interface TsServerArgs {\n logFile?: string;\n logVerbosity?: string;\n maxTsServerMemory?: number;\n globalPlugins?: string[];\n pluginProbeLocations?: string[];\n}\n\nexport interface StandardTsServerRequests {\n [CommandTypes.ApplyCodeActionCommand]: [\n ts.server.protocol.ApplyCodeActionCommandRequestArgs,\n ts.server.protocol.ApplyCodeActionCommandResponse,\n ];\n [CommandTypes.CompletionDetails]: [\n ts.server.protocol.CompletionDetailsRequestArgs,\n ts.server.protocol.CompletionDetailsResponse,\n ];\n [CommandTypes.CompletionInfo]: [ts.server.protocol.CompletionsRequestArgs, ts.server.protocol.CompletionInfoResponse];\n [CommandTypes.Configure]: [ts.server.protocol.ConfigureRequestArguments, ts.server.protocol.ConfigureResponse];\n [CommandTypes.Definition]: [ts.server.protocol.FileLocationRequestArgs, ts.server.protocol.DefinitionResponse];\n [CommandTypes.DefinitionAndBoundSpan]: [\n ts.server.protocol.FileLocationRequestArgs,\n ts.server.protocol.DefinitionInfoAndBoundSpanResponse,\n ];\n [CommandTypes.DocCommentTemplate]: [\n ts.server.protocol.FileLocationRequestArgs,\n ts.server.protocol.DocCommandTemplateResponse,\n ];\n [CommandTypes.DocumentHighlights]: [\n ts.server.protocol.DocumentHighlightsRequestArgs,\n ts.server.protocol.DocumentHighlightsResponse,\n ];\n [CommandTypes.Format]: [ts.server.protocol.FormatRequestArgs, ts.server.protocol.FormatResponse];\n [CommandTypes.Formatonkey]: [ts.server.protocol.FormatOnKeyRequestArgs, ts.server.protocol.FormatResponse];\n [CommandTypes.GetApplicableRefactors]: [\n ts.server.protocol.GetApplicableRefactorsRequestArgs,\n ts.server.protocol.GetApplicableRefactorsResponse,\n ];\n [CommandTypes.GetCodeFixes]: [ts.server.protocol.CodeFixRequestArgs, ts.server.protocol.CodeFixResponse];\n [CommandTypes.GetCombinedCodeFix]: [\n ts.server.protocol.GetCombinedCodeFixRequestArgs,\n ts.server.protocol.GetCombinedCodeFixResponse,\n ];\n [CommandTypes.GetEditsForFileRename]: [\n ts.server.protocol.GetEditsForFileRenameRequestArgs,\n ts.server.protocol.GetEditsForFileRenameResponse,\n ];\n [CommandTypes.GetEditsForRefactor]: [\n ts.server.protocol.GetEditsForRefactorRequestArgs,\n ts.server.protocol.GetEditsForRefactorResponse,\n ];\n [CommandTypes.GetOutliningSpans]: [ts.server.protocol.FileRequestArgs, ts.server.protocol.OutliningSpansResponse];\n [CommandTypes.GetSupportedCodeFixes]: [null, ts.server.protocol.GetSupportedCodeFixesResponse];\n [CommandTypes.Implementation]: [\n ts.server.protocol.FileLocationRequestArgs,\n ts.server.protocol.ImplementationResponse,\n ];\n [CommandTypes.JsxClosingTag]: [ts.server.protocol.JsxClosingTagRequestArgs, ts.server.protocol.JsxClosingTagResponse];\n [CommandTypes.Navto]: [ts.server.protocol.NavtoRequestArgs, ts.server.protocol.NavtoResponse];\n [CommandTypes.NavTree]: [ts.server.protocol.FileRequestArgs, ts.server.protocol.NavTreeResponse];\n [CommandTypes.OrganizeImports]: [\n ts.server.protocol.OrganizeImportsRequestArgs,\n ts.server.protocol.OrganizeImportsResponse,\n ];\n [CommandTypes.PrepareCallHierarchy]: [\n ts.server.protocol.FileLocationRequestArgs,\n ts.server.protocol.PrepareCallHierarchyResponse,\n ];\n [CommandTypes.ProvideCallHierarchyIncomingCalls]: [\n ts.server.protocol.FileLocationRequestArgs,\n ts.server.protocol.ProvideCallHierarchyIncomingCallsResponse,\n ];\n [CommandTypes.ProvideCallHierarchyOutgoingCalls]: [\n ts.server.protocol.FileLocationRequestArgs,\n ts.server.protocol.ProvideCallHierarchyOutgoingCallsResponse,\n ];\n [CommandTypes.ProjectInfo]: [ts.server.protocol.ProjectInfoRequestArgs, ts.server.protocol.ProjectInfoResponse];\n [CommandTypes.ProvideInlayHints]: [ts.server.protocol.InlayHintsRequestArgs, ts.server.protocol.InlayHintsResponse];\n [CommandTypes.Quickinfo]: [ts.server.protocol.FileLocationRequestArgs, ts.server.protocol.QuickInfoResponse];\n [CommandTypes.References]: [ts.server.protocol.FileLocationRequestArgs, ts.server.protocol.ReferencesResponse];\n [CommandTypes.Rename]: [ts.server.protocol.RenameRequestArgs, ts.server.protocol.RenameResponse];\n [CommandTypes.SelectionRange]: [\n ts.server.protocol.SelectionRangeRequestArgs,\n ts.server.protocol.SelectionRangeResponse,\n ];\n [CommandTypes.SignatureHelp]: [ts.server.protocol.SignatureHelpRequestArgs, ts.server.protocol.SignatureHelpResponse];\n [CommandTypes.TypeDefinition]: [\n ts.server.protocol.FileLocationRequestArgs,\n ts.server.protocol.TypeDefinitionResponse,\n ];\n [CommandTypes.UpdateOpen]: [ts.server.protocol.UpdateOpenRequestArgs, ts.server.protocol.Response];\n}\n\nexport interface NoResponseTsServerRequests {\n [CommandTypes.Change]: [ts.server.protocol.ChangeRequestArgs, null];\n [CommandTypes.Close]: [ts.server.protocol.FileRequestArgs, null];\n [CommandTypes.CompilerOptionsForInferredProjects]: [\n ts.server.protocol.SetCompilerOptionsForInferredProjectsArgs,\n ts.server.protocol.SetCompilerOptionsForInferredProjectsResponse,\n ];\n [CommandTypes.Configure]: [ts.server.protocol.ConfigureRequestArguments, ts.server.protocol.ConfigureResponse];\n [CommandTypes.ConfigurePlugin]: [\n ts.server.protocol.ConfigurePluginRequestArguments,\n ts.server.protocol.ConfigurePluginResponse,\n ];\n [CommandTypes.Open]: [ts.server.protocol.OpenRequestArgs, null];\n}\n\nexport interface AsyncTsServerRequests {\n [CommandTypes.Geterr]: [ts.server.protocol.GeterrRequestArgs, ts.server.protocol.Response];\n [CommandTypes.GeterrForProject]: [ts.server.protocol.GeterrForProjectRequestArgs, ts.server.protocol.Response];\n}\n\nexport type TypeScriptRequestTypes = StandardTsServerRequests & NoResponseTsServerRequests & AsyncTsServerRequests;\n\nexport class ProcessBasedTsServer {\n private readlineInterface: readline.ReadLine | null;\n private tsServerProcess: cp.ChildProcess | null;\n private seq = 0;\n\n private readonly deferreds: {\n [seq: number]: Deferred<any>;\n } = {};\n\n private logger: Logger;\n private cancellationPipeName: string | undefined;\n\n constructor(\n private options: TspClientOptions,\n private tsServerArgs: TsServerArgs = {}\n ) {\n this.logger = options.logger;\n }\n\n async restart() {\n this.kill();\n await this.start();\n }\n\n start() {\n return new Promise<void>((resolve, reject) => {\n if (this.tsServerProcess) {\n reject(new Error('server already started'));\n return;\n }\n\n const { tsserverPath } = this.options;\n const { logFile, logVerbosity, maxTsServerMemory, globalPlugins, pluginProbeLocations } = this.tsServerArgs;\n const args: string[] = [];\n if (logFile) {\n args.push('--logFile', logFile);\n }\n if (logVerbosity) {\n args.push('--logVerbosity', logVerbosity);\n }\n if (globalPlugins && globalPlugins.length) {\n args.push('--globalPlugins', globalPlugins.join(','));\n }\n if (pluginProbeLocations && pluginProbeLocations.length) {\n args.push('--pluginProbeLocations', pluginProbeLocations.join(','));\n }\n this.cancellationPipeName = tempy.file({ name: 'tscancellation' });\n args.push('--cancellationPipeName', `${this.cancellationPipeName}*`);\n this.logger.info(`Starting tsserver : '${tsserverPath} ${args.join(' ')}'`);\n const tsserverPathIsModule = path.extname(tsserverPath) === '.js';\n const options = {\n silent: true,\n execArgv: maxTsServerMemory ? [`--max-old-space-size=${maxTsServerMemory}`] : [],\n };\n this.tsServerProcess = tsserverPathIsModule ? cp.fork(tsserverPath, args, options) : cp.spawn(tsserverPath, args);\n\n this.readlineInterface = readline.createInterface(\n this.tsServerProcess.stdout as Readable,\n this.tsServerProcess.stdin as Writable,\n undefined\n );\n process.on('exit', () => {\n this.kill();\n reject(new Error('TSServer was killed'));\n });\n\n this.readlineInterface.on('line', (line) => {\n this.processMessage(line, resolve, reject);\n });\n\n const dec = new decoder.StringDecoder('utf-8');\n this.tsServerProcess.stderr?.addListener('data', (data) => {\n const stringMsg = typeof data === 'string' ? data : dec.write(data);\n this.logger.error(stringMsg);\n reject(new Error(stringMsg));\n });\n });\n }\n\n async notify(command: CommandTypes.Open, args: ts.server.protocol.OpenRequestArgs): Promise<void>;\n async notify(command: CommandTypes.Close, args: ts.server.protocol.FileRequestArgs): Promise<void>;\n async notify(command: CommandTypes.Saveto, args: ts.server.protocol.SavetoRequestArgs): Promise<void>;\n async notify(command: CommandTypes.Change, args: ts.server.protocol.ChangeRequestArgs): Promise<void>;\n async notify(command: string, args: any): Promise<void> {\n await this.ensureServerIsRunning();\n this.sendMessage(command, true, args);\n }\n\n async request<K extends keyof TypeScriptRequestTypes>(\n command: K,\n args: TypeScriptRequestTypes[K][0],\n token?: CancellationToken\n ): Promise<TypeScriptRequestTypes[K][1]> {\n await this.ensureServerIsRunning();\n this.sendMessage(command, false, args);\n const seq = this.seq;\n const deferred = new Deferred<TypeScriptRequestTypes[K][1]>();\n this.deferreds[seq] = deferred;\n const request = deferred.promise;\n\n let onCancelled;\n if (token) {\n onCancelled = token.onCancellationRequested(() => {\n onCancelled.dispose();\n if (this.cancellationPipeName) {\n const requestCancellationPipeName = `${this.cancellationPipeName}${seq}`;\n fs.writeFile(requestCancellationPipeName, '', (err) => {\n if (!err) {\n // eslint-disable-next-line\n request.then(() =>\n fs.unlink(requestCancellationPipeName, () => {\n /* no-op */\n })\n );\n }\n });\n }\n });\n }\n\n try {\n const result = await request;\n onCancelled?.dispose();\n return result;\n } catch (error) {\n this.logger.error(`Error in request: ${error}`);\n throw error;\n }\n }\n\n kill() {\n this.tsServerProcess?.kill();\n this.tsServerProcess?.stdin?.destroy();\n this.readlineInterface?.close();\n this.tsServerProcess = null;\n this.readlineInterface = null;\n }\n\n private log(msg: string, obj: Record<string, any> = {}) {\n msg = `[tsserver] ${msg}`;\n if (this.options.logToConsole) {\n this.logger.console(`${msg} ${JSON.stringify(obj, undefined, 4)}`);\n } else {\n this.logger.trace(msg, obj);\n }\n }\n\n protected sendMessage(command: string, notification: boolean, args?: any): void {\n this.seq += 1;\n const request: ts.server.protocol.Request = {\n command,\n seq: this.seq,\n type: 'request',\n };\n if (args) {\n request.arguments = args;\n }\n const serializedRequest = `${JSON.stringify(request)}\\n`;\n this.tsServerProcess?.stdin?.write(serializedRequest);\n this.log(notification ? 'notify' : 'request', request);\n }\n\n protected processMessage(untrimmedMessageString: string, resolve?: () => void, reject?: (err) => void): void {\n const messageString = untrimmedMessageString.trim();\n if (!messageString || messageString.startsWith('Content-Length:')) {\n return;\n }\n let message: ts.server.protocol.Message;\n\n try {\n message = JSON.parse(messageString);\n } catch {\n // If the message isn't valid JSON, it's not a valid tsserver message. Reject the promise.\n reject?.(new Error(`Received invalid message from TSServer: ${untrimmedMessageString}`));\n return;\n }\n\n this.log('processMessage', message);\n\n if (this.isEvent(message)) {\n resolve?.();\n }\n\n if (this.isResponse(message)) {\n this.resolveResponse(message, message.request_seq, message.success);\n } else if (this.isEvent(message)) {\n if (this.isRequestCompletedEvent(message)) {\n this.resolveResponse(message, message.body.request_seq, true);\n } else if (this.options.onEvent) {\n this.options.onEvent(message);\n }\n }\n }\n\n private resolveResponse(message: ts.server.protocol.Message, request_seq: number, success: boolean) {\n const deferred = this.deferreds[request_seq];\n this.log('request completed', { request_seq, success });\n if (deferred) {\n if (success) {\n this.deferreds[request_seq].resolve(message);\n } else {\n this.deferreds[request_seq].reject(message);\n }\n delete this.deferreds[request_seq];\n }\n }\n\n private isEvent(message: ts.server.protocol.Message): message is ts.server.protocol.Event {\n return message.type === 'event';\n }\n\n private isResponse(message: ts.server.protocol.Message): message is ts.server.protocol.Response {\n return message.type === 'response';\n }\n\n private isRequestCompletedEvent(\n message: ts.server.protocol.Message\n ): message is ts.server.protocol.RequestCompletedEvent {\n return this.isEvent(message) && message.event === 'requestCompleted';\n }\n\n private async ensureServerIsRunning() {\n if (!this.tsServerProcess) {\n await this.restart();\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["fs","data","_interopRequireWildcard","require","path","cp","readline","decoder","_tempy","_interopRequireDefault","_utils","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ProcessBasedTsServer","seq","deferreds","killedIntentionally","constructor","options","tsServerArgs","logger","restart","kill","start","Promise","resolve","reject","tsServerProcess","Error","tsserverPath","logFile","logVerbosity","maxTsServerMemory","globalPlugins","pluginProbeLocations","args","push","length","join","cancellationPipeName","tempy","file","name","info","tsserverPathIsModule","extname","silent","execArgv","fork","spawn","readlineInterface","createInterface","stdout","stdin","undefined","process","on","code","signal","msg","error","rejectAllPendingRequests","close","line","processMessage","dec","StringDecoder","stderr","addListener","stringMsg","write","notify","command","ensureServerIsRunning","sendMessage","request","token","deferred","Deferred","promise","onCancelled","onCancellationRequested","dispose","requestCancellationPipeName","writeFile","err","then","unlink","result","destroy","reason","values","keys","log","obj","logToConsole","console","JSON","stringify","trace","notification","type","arguments","serializedRequest","untrimmedMessageString","messageString","trim","startsWith","message","parse","isEvent","isResponse","resolveResponse","request_seq","success","isRequestCompletedEvent","body","onEvent","event","exports"],"sources":["process-based-tsserver.ts"],"sourcesContent":["/**\n * part of this file was copied over from https://github.com/typescript-language-server/typescript-language-server/blob/master/src/tsp-client.ts\n */\n\n/*\n * Copyright (C) 2017, 2018 TypeFox and others.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport * as cp from 'child_process';\nimport * as readline from 'readline';\nimport type { Logger } from '@teambit/logger';\nimport type { Readable, Writable } from 'stream';\nimport * as decoder from 'string_decoder';\nimport type ts from 'typescript/lib/tsserverlibrary';\nimport tempy from 'tempy';\nimport type { CancellationToken } from 'vscode-jsonrpc';\nimport type { CommandTypes } from './tsp-command-types';\nimport { Deferred } from './utils';\n\nexport interface TspClientOptions {\n logger: Logger;\n tsserverPath: string;\n logToConsole?: boolean;\n onEvent?: (event: ts.server.protocol.Event) => void;\n}\n\nexport interface TsServerArgs {\n logFile?: string;\n logVerbosity?: string;\n maxTsServerMemory?: number;\n globalPlugins?: string[];\n pluginProbeLocations?: string[];\n}\n\nexport interface StandardTsServerRequests {\n [CommandTypes.ApplyCodeActionCommand]: [\n ts.server.protocol.ApplyCodeActionCommandRequestArgs,\n ts.server.protocol.ApplyCodeActionCommandResponse,\n ];\n [CommandTypes.CompletionDetails]: [\n ts.server.protocol.CompletionDetailsRequestArgs,\n ts.server.protocol.CompletionDetailsResponse,\n ];\n [CommandTypes.CompletionInfo]: [ts.server.protocol.CompletionsRequestArgs, ts.server.protocol.CompletionInfoResponse];\n [CommandTypes.Configure]: [ts.server.protocol.ConfigureRequestArguments, ts.server.protocol.ConfigureResponse];\n [CommandTypes.Definition]: [ts.server.protocol.FileLocationRequestArgs, ts.server.protocol.DefinitionResponse];\n [CommandTypes.DefinitionAndBoundSpan]: [\n ts.server.protocol.FileLocationRequestArgs,\n ts.server.protocol.DefinitionInfoAndBoundSpanResponse,\n ];\n [CommandTypes.DocCommentTemplate]: [\n ts.server.protocol.FileLocationRequestArgs,\n ts.server.protocol.DocCommandTemplateResponse,\n ];\n [CommandTypes.DocumentHighlights]: [\n ts.server.protocol.DocumentHighlightsRequestArgs,\n ts.server.protocol.DocumentHighlightsResponse,\n ];\n [CommandTypes.Format]: [ts.server.protocol.FormatRequestArgs, ts.server.protocol.FormatResponse];\n [CommandTypes.Formatonkey]: [ts.server.protocol.FormatOnKeyRequestArgs, ts.server.protocol.FormatResponse];\n [CommandTypes.GetApplicableRefactors]: [\n ts.server.protocol.GetApplicableRefactorsRequestArgs,\n ts.server.protocol.GetApplicableRefactorsResponse,\n ];\n [CommandTypes.GetCodeFixes]: [ts.server.protocol.CodeFixRequestArgs, ts.server.protocol.CodeFixResponse];\n [CommandTypes.GetCombinedCodeFix]: [\n ts.server.protocol.GetCombinedCodeFixRequestArgs,\n ts.server.protocol.GetCombinedCodeFixResponse,\n ];\n [CommandTypes.GetEditsForFileRename]: [\n ts.server.protocol.GetEditsForFileRenameRequestArgs,\n ts.server.protocol.GetEditsForFileRenameResponse,\n ];\n [CommandTypes.GetEditsForRefactor]: [\n ts.server.protocol.GetEditsForRefactorRequestArgs,\n ts.server.protocol.GetEditsForRefactorResponse,\n ];\n [CommandTypes.GetOutliningSpans]: [ts.server.protocol.FileRequestArgs, ts.server.protocol.OutliningSpansResponse];\n [CommandTypes.GetSupportedCodeFixes]: [null, ts.server.protocol.GetSupportedCodeFixesResponse];\n [CommandTypes.Implementation]: [\n ts.server.protocol.FileLocationRequestArgs,\n ts.server.protocol.ImplementationResponse,\n ];\n [CommandTypes.JsxClosingTag]: [ts.server.protocol.JsxClosingTagRequestArgs, ts.server.protocol.JsxClosingTagResponse];\n [CommandTypes.Navto]: [ts.server.protocol.NavtoRequestArgs, ts.server.protocol.NavtoResponse];\n [CommandTypes.NavTree]: [ts.server.protocol.FileRequestArgs, ts.server.protocol.NavTreeResponse];\n [CommandTypes.OrganizeImports]: [\n ts.server.protocol.OrganizeImportsRequestArgs,\n ts.server.protocol.OrganizeImportsResponse,\n ];\n [CommandTypes.PrepareCallHierarchy]: [\n ts.server.protocol.FileLocationRequestArgs,\n ts.server.protocol.PrepareCallHierarchyResponse,\n ];\n [CommandTypes.ProvideCallHierarchyIncomingCalls]: [\n ts.server.protocol.FileLocationRequestArgs,\n ts.server.protocol.ProvideCallHierarchyIncomingCallsResponse,\n ];\n [CommandTypes.ProvideCallHierarchyOutgoingCalls]: [\n ts.server.protocol.FileLocationRequestArgs,\n ts.server.protocol.ProvideCallHierarchyOutgoingCallsResponse,\n ];\n [CommandTypes.ProjectInfo]: [ts.server.protocol.ProjectInfoRequestArgs, ts.server.protocol.ProjectInfoResponse];\n [CommandTypes.ProvideInlayHints]: [ts.server.protocol.InlayHintsRequestArgs, ts.server.protocol.InlayHintsResponse];\n [CommandTypes.Quickinfo]: [ts.server.protocol.FileLocationRequestArgs, ts.server.protocol.QuickInfoResponse];\n [CommandTypes.References]: [ts.server.protocol.FileLocationRequestArgs, ts.server.protocol.ReferencesResponse];\n [CommandTypes.Rename]: [ts.server.protocol.RenameRequestArgs, ts.server.protocol.RenameResponse];\n [CommandTypes.SelectionRange]: [\n ts.server.protocol.SelectionRangeRequestArgs,\n ts.server.protocol.SelectionRangeResponse,\n ];\n [CommandTypes.SignatureHelp]: [ts.server.protocol.SignatureHelpRequestArgs, ts.server.protocol.SignatureHelpResponse];\n [CommandTypes.TypeDefinition]: [\n ts.server.protocol.FileLocationRequestArgs,\n ts.server.protocol.TypeDefinitionResponse,\n ];\n [CommandTypes.UpdateOpen]: [ts.server.protocol.UpdateOpenRequestArgs, ts.server.protocol.Response];\n}\n\nexport interface NoResponseTsServerRequests {\n [CommandTypes.Change]: [ts.server.protocol.ChangeRequestArgs, null];\n [CommandTypes.Close]: [ts.server.protocol.FileRequestArgs, null];\n [CommandTypes.CompilerOptionsForInferredProjects]: [\n ts.server.protocol.SetCompilerOptionsForInferredProjectsArgs,\n ts.server.protocol.SetCompilerOptionsForInferredProjectsResponse,\n ];\n [CommandTypes.Configure]: [ts.server.protocol.ConfigureRequestArguments, ts.server.protocol.ConfigureResponse];\n [CommandTypes.ConfigurePlugin]: [\n ts.server.protocol.ConfigurePluginRequestArguments,\n ts.server.protocol.ConfigurePluginResponse,\n ];\n [CommandTypes.Open]: [ts.server.protocol.OpenRequestArgs, null];\n}\n\nexport interface AsyncTsServerRequests {\n [CommandTypes.Geterr]: [ts.server.protocol.GeterrRequestArgs, ts.server.protocol.Response];\n [CommandTypes.GeterrForProject]: [ts.server.protocol.GeterrForProjectRequestArgs, ts.server.protocol.Response];\n}\n\nexport type TypeScriptRequestTypes = StandardTsServerRequests & NoResponseTsServerRequests & AsyncTsServerRequests;\n\nexport class ProcessBasedTsServer {\n private readlineInterface: readline.ReadLine | null;\n private tsServerProcess: cp.ChildProcess | null;\n private seq = 0;\n\n private readonly deferreds: {\n [seq: number]: Deferred<any>;\n } = {};\n\n private logger: Logger;\n private cancellationPipeName: string | undefined;\n private killedIntentionally = false;\n\n constructor(\n private options: TspClientOptions,\n private tsServerArgs: TsServerArgs = {}\n ) {\n this.logger = options.logger;\n }\n\n async restart() {\n this.kill();\n await this.start();\n }\n\n start() {\n return new Promise<void>((resolve, reject) => {\n if (this.tsServerProcess) {\n reject(new Error('server already started'));\n return;\n }\n this.killedIntentionally = false;\n\n const { tsserverPath } = this.options;\n const { logFile, logVerbosity, maxTsServerMemory, globalPlugins, pluginProbeLocations } = this.tsServerArgs;\n const args: string[] = [];\n if (logFile) {\n args.push('--logFile', logFile);\n }\n if (logVerbosity) {\n args.push('--logVerbosity', logVerbosity);\n }\n if (globalPlugins && globalPlugins.length) {\n args.push('--globalPlugins', globalPlugins.join(','));\n }\n if (pluginProbeLocations && pluginProbeLocations.length) {\n args.push('--pluginProbeLocations', pluginProbeLocations.join(','));\n }\n this.cancellationPipeName = tempy.file({ name: 'tscancellation' });\n args.push('--cancellationPipeName', `${this.cancellationPipeName}*`);\n this.logger.info(`Starting tsserver : '${tsserverPath} ${args.join(' ')}'`);\n const tsserverPathIsModule = path.extname(tsserverPath) === '.js';\n const options = {\n silent: true,\n execArgv: maxTsServerMemory ? [`--max-old-space-size=${maxTsServerMemory}`] : [],\n };\n this.tsServerProcess = tsserverPathIsModule ? cp.fork(tsserverPath, args, options) : cp.spawn(tsserverPath, args);\n\n this.readlineInterface = readline.createInterface(\n this.tsServerProcess.stdout as Readable,\n this.tsServerProcess.stdin as Writable,\n undefined\n );\n process.on('exit', () => {\n this.kill();\n reject(new Error('TSServer was killed'));\n });\n\n this.tsServerProcess.on('exit', (code, signal) => {\n if (this.killedIntentionally) return;\n const msg = `TSServer process exited unexpectedly (code: ${code}, signal: ${signal})`;\n this.logger.error(msg);\n reject(new Error(msg));\n this.rejectAllPendingRequests(msg);\n this.tsServerProcess = null;\n this.readlineInterface?.close();\n this.readlineInterface = null;\n });\n\n this.readlineInterface.on('line', (line) => {\n this.processMessage(line, resolve, reject);\n });\n\n const dec = new decoder.StringDecoder('utf-8');\n this.tsServerProcess.stderr?.addListener('data', (data) => {\n const stringMsg = typeof data === 'string' ? data : dec.write(data);\n this.logger.error(stringMsg);\n reject(new Error(stringMsg));\n });\n });\n }\n\n async notify(command: CommandTypes.Open, args: ts.server.protocol.OpenRequestArgs): Promise<void>;\n async notify(command: CommandTypes.Close, args: ts.server.protocol.FileRequestArgs): Promise<void>;\n async notify(command: CommandTypes.Saveto, args: ts.server.protocol.SavetoRequestArgs): Promise<void>;\n async notify(command: CommandTypes.Change, args: ts.server.protocol.ChangeRequestArgs): Promise<void>;\n async notify(command: string, args: any): Promise<void> {\n await this.ensureServerIsRunning();\n this.sendMessage(command, true, args);\n }\n\n async request<K extends keyof TypeScriptRequestTypes>(\n command: K,\n args: TypeScriptRequestTypes[K][0],\n token?: CancellationToken\n ): Promise<TypeScriptRequestTypes[K][1]> {\n await this.ensureServerIsRunning();\n this.sendMessage(command, false, args);\n const seq = this.seq;\n const deferred = new Deferred<TypeScriptRequestTypes[K][1]>();\n this.deferreds[seq] = deferred;\n const request = deferred.promise;\n\n let onCancelled;\n if (token) {\n onCancelled = token.onCancellationRequested(() => {\n onCancelled.dispose();\n if (this.cancellationPipeName) {\n const requestCancellationPipeName = `${this.cancellationPipeName}${seq}`;\n fs.writeFile(requestCancellationPipeName, '', (err) => {\n if (!err) {\n // eslint-disable-next-line\n request.then(() =>\n fs.unlink(requestCancellationPipeName, () => {\n /* no-op */\n })\n );\n }\n });\n }\n });\n }\n\n try {\n const result = await request;\n onCancelled?.dispose();\n return result;\n } catch (error) {\n this.logger.error(`Error in request: ${error}`);\n throw error;\n }\n }\n\n kill() {\n this.killedIntentionally = true;\n this.tsServerProcess?.kill();\n this.tsServerProcess?.stdin?.destroy();\n this.readlineInterface?.close();\n this.tsServerProcess = null;\n this.readlineInterface = null;\n }\n\n private rejectAllPendingRequests(reason: string) {\n const error = new Error(reason);\n for (const deferred of Object.values(this.deferreds)) {\n deferred.reject(error);\n }\n for (const seq of Object.keys(this.deferreds)) {\n delete this.deferreds[seq];\n }\n }\n\n private log(msg: string, obj: Record<string, any> = {}) {\n msg = `[tsserver] ${msg}`;\n if (this.options.logToConsole) {\n this.logger.console(`${msg} ${JSON.stringify(obj, undefined, 4)}`);\n } else {\n this.logger.trace(msg, obj);\n }\n }\n\n protected sendMessage(command: string, notification: boolean, args?: any): void {\n this.seq += 1;\n const request: ts.server.protocol.Request = {\n command,\n seq: this.seq,\n type: 'request',\n };\n if (args) {\n request.arguments = args;\n }\n const serializedRequest = `${JSON.stringify(request)}\\n`;\n this.tsServerProcess?.stdin?.write(serializedRequest);\n this.log(notification ? 'notify' : 'request', request);\n }\n\n protected processMessage(untrimmedMessageString: string, resolve?: () => void, reject?: (err) => void): void {\n const messageString = untrimmedMessageString.trim();\n if (!messageString || messageString.startsWith('Content-Length:')) {\n return;\n }\n let message: ts.server.protocol.Message;\n\n try {\n message = JSON.parse(messageString);\n } catch {\n // If the message isn't valid JSON, it's not a valid tsserver message. Reject the promise.\n reject?.(new Error(`Received invalid message from TSServer: ${untrimmedMessageString}`));\n return;\n }\n\n this.log('processMessage', message);\n\n if (this.isEvent(message)) {\n resolve?.();\n }\n\n if (this.isResponse(message)) {\n this.resolveResponse(message, message.request_seq, message.success);\n } else if (this.isEvent(message)) {\n if (this.isRequestCompletedEvent(message)) {\n this.resolveResponse(message, message.body.request_seq, true);\n } else if (this.options.onEvent) {\n this.options.onEvent(message);\n }\n }\n }\n\n private resolveResponse(message: ts.server.protocol.Message, request_seq: number, success: boolean) {\n const deferred = this.deferreds[request_seq];\n this.log('request completed', { request_seq, success });\n if (deferred) {\n if (success) {\n this.deferreds[request_seq].resolve(message);\n } else {\n this.deferreds[request_seq].reject(message);\n }\n delete this.deferreds[request_seq];\n }\n }\n\n private isEvent(message: ts.server.protocol.Message): message is ts.server.protocol.Event {\n return message.type === 'event';\n }\n\n private isResponse(message: ts.server.protocol.Message): message is ts.server.protocol.Response {\n return message.type === 'response';\n }\n\n private isRequestCompletedEvent(\n message: ts.server.protocol.Message\n ): message is ts.server.protocol.RequestCompletedEvent {\n return this.isEvent(message) && message.event === 'requestCompleted';\n }\n\n private async ensureServerIsRunning() {\n if (!this.tsServerProcess) {\n await this.restart();\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@teambit/ts-server",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.78",
|
|
4
4
|
"homepage": "https://bit.cloud/teambit/typescript/ts-server",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"componentId": {
|
|
7
7
|
"scope": "teambit.typescript",
|
|
8
8
|
"name": "ts-server",
|
|
9
|
-
"version": "0.0.
|
|
9
|
+
"version": "0.0.78"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"typescript": "5.9.2",
|
|
@@ -155,6 +155,7 @@ export class ProcessBasedTsServer {
|
|
|
155
155
|
|
|
156
156
|
private logger: Logger;
|
|
157
157
|
private cancellationPipeName: string | undefined;
|
|
158
|
+
private killedIntentionally = false;
|
|
158
159
|
|
|
159
160
|
constructor(
|
|
160
161
|
private options: TspClientOptions,
|
|
@@ -174,6 +175,7 @@ export class ProcessBasedTsServer {
|
|
|
174
175
|
reject(new Error('server already started'));
|
|
175
176
|
return;
|
|
176
177
|
}
|
|
178
|
+
this.killedIntentionally = false;
|
|
177
179
|
|
|
178
180
|
const { tsserverPath } = this.options;
|
|
179
181
|
const { logFile, logVerbosity, maxTsServerMemory, globalPlugins, pluginProbeLocations } = this.tsServerArgs;
|
|
@@ -210,6 +212,17 @@ export class ProcessBasedTsServer {
|
|
|
210
212
|
reject(new Error('TSServer was killed'));
|
|
211
213
|
});
|
|
212
214
|
|
|
215
|
+
this.tsServerProcess.on('exit', (code, signal) => {
|
|
216
|
+
if (this.killedIntentionally) return;
|
|
217
|
+
const msg = `TSServer process exited unexpectedly (code: ${code}, signal: ${signal})`;
|
|
218
|
+
this.logger.error(msg);
|
|
219
|
+
reject(new Error(msg));
|
|
220
|
+
this.rejectAllPendingRequests(msg);
|
|
221
|
+
this.tsServerProcess = null;
|
|
222
|
+
this.readlineInterface?.close();
|
|
223
|
+
this.readlineInterface = null;
|
|
224
|
+
});
|
|
225
|
+
|
|
213
226
|
this.readlineInterface.on('line', (line) => {
|
|
214
227
|
this.processMessage(line, resolve, reject);
|
|
215
228
|
});
|
|
@@ -275,6 +288,7 @@ export class ProcessBasedTsServer {
|
|
|
275
288
|
}
|
|
276
289
|
|
|
277
290
|
kill() {
|
|
291
|
+
this.killedIntentionally = true;
|
|
278
292
|
this.tsServerProcess?.kill();
|
|
279
293
|
this.tsServerProcess?.stdin?.destroy();
|
|
280
294
|
this.readlineInterface?.close();
|
|
@@ -282,6 +296,16 @@ export class ProcessBasedTsServer {
|
|
|
282
296
|
this.readlineInterface = null;
|
|
283
297
|
}
|
|
284
298
|
|
|
299
|
+
private rejectAllPendingRequests(reason: string) {
|
|
300
|
+
const error = new Error(reason);
|
|
301
|
+
for (const deferred of Object.values(this.deferreds)) {
|
|
302
|
+
deferred.reject(error);
|
|
303
|
+
}
|
|
304
|
+
for (const seq of Object.keys(this.deferreds)) {
|
|
305
|
+
delete this.deferreds[seq];
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
|
|
285
309
|
private log(msg: string, obj: Record<string, any> = {}) {
|
|
286
310
|
msg = `[tsserver] ${msg}`;
|
|
287
311
|
if (this.options.logToConsole) {
|