@teambit/ts-server 0.0.89 → 0.0.90

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.
@@ -145,6 +145,12 @@ export declare class ProcessBasedTsServer {
145
145
  protected sendMessage(command: string, notification: boolean, args?: any): void;
146
146
  protected processMessage(untrimmedMessageString: string, resolve?: () => void, reject?: (err: any) => void): void;
147
147
  private resolveResponse;
148
+ /**
149
+ * a failed tsserver response is a plain protocol object, and rejecting with it makes downstream
150
+ * logs print "[object Object]". convert it to an Error. `message` must stay identical to the
151
+ * response's message text - callers match on it (e.g. "No content available.").
152
+ */
153
+ private toRequestError;
148
154
  private isEvent;
149
155
  private isResponse;
150
156
  private isRequestCompletedEvent;
@@ -179,7 +179,7 @@ class ProcessBasedTsServer {
179
179
  onCancelled?.dispose();
180
180
  return result;
181
181
  } catch (error) {
182
- this.logger.error(`Error in request: ${error}`);
182
+ this.logger.error(`Error in request "${command}" (seq ${seq}): ${stringifyError(error)}`, error);
183
183
  throw error;
184
184
  }
185
185
  }
@@ -259,11 +259,27 @@ class ProcessBasedTsServer {
259
259
  if (success) {
260
260
  this.deferreds[request_seq].resolve(message);
261
261
  } else {
262
- this.deferreds[request_seq].reject(message);
262
+ this.deferreds[request_seq].reject(this.toRequestError(message));
263
263
  }
264
264
  delete this.deferreds[request_seq];
265
265
  }
266
266
  }
267
+
268
+ /**
269
+ * a failed tsserver response is a plain protocol object, and rejecting with it makes downstream
270
+ * logs print "[object Object]". convert it to an Error. `message` must stay identical to the
271
+ * response's message text - callers match on it (e.g. "No content available.").
272
+ */
273
+ toRequestError(response) {
274
+ const {
275
+ command,
276
+ message
277
+ } = response;
278
+ const error = new Error(message ?? `tsserver "${command}" request failed without an error message`);
279
+ error.command = command;
280
+ error.response = response;
281
+ return error;
282
+ }
267
283
  isEvent(message) {
268
284
  return message.type === 'event';
269
285
  }
@@ -280,5 +296,13 @@ class ProcessBasedTsServer {
280
296
  }
281
297
  }
282
298
  exports.ProcessBasedTsServer = ProcessBasedTsServer;
299
+ function stringifyError(error) {
300
+ if (error instanceof Error) return error.message;
301
+ try {
302
+ return JSON.stringify(error);
303
+ } catch {
304
+ return String(error);
305
+ }
306
+ }
283
307
 
284
308
  //# sourceMappingURL=process-based-tsserver.js.map
@@ -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","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":[]}
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","stringifyError","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","toRequestError","response","event","exports","String"],"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: any) {\n this.logger.error(`Error in request \"${command}\" (seq ${seq}): ${stringifyError(error)}`, 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(this.toRequestError(message));\n }\n delete this.deferreds[request_seq];\n }\n }\n\n /**\n * a failed tsserver response is a plain protocol object, and rejecting with it makes downstream\n * logs print \"[object Object]\". convert it to an Error. `message` must stay identical to the\n * response's message text - callers match on it (e.g. \"No content available.\").\n */\n private toRequestError(response: ts.server.protocol.Message): Error {\n const { command, message } = response as ts.server.protocol.Response;\n const error = new Error(message ?? `tsserver \"${command}\" request failed without an error message`);\n (error as any).command = command;\n (error as any).response = response;\n return error;\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\nfunction stringifyError(error: unknown): string {\n if (error instanceof Error) return error.message;\n try {\n return JSON.stringify(error);\n } catch {\n return String(error);\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.89",
3
+ "version": "0.0.90",
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.89"
9
+ "version": "0.0.90"
10
10
  },
11
11
  "dependencies": {
12
12
  "typescript": "5.9.2",
@@ -281,8 +281,8 @@ export class ProcessBasedTsServer {
281
281
  const result = await request;
282
282
  onCancelled?.dispose();
283
283
  return result;
284
- } catch (error) {
285
- this.logger.error(`Error in request: ${error}`);
284
+ } catch (error: any) {
285
+ this.logger.error(`Error in request "${command}" (seq ${seq}): ${stringifyError(error)}`, error);
286
286
  throw error;
287
287
  }
288
288
  }
@@ -369,12 +369,25 @@ export class ProcessBasedTsServer {
369
369
  if (success) {
370
370
  this.deferreds[request_seq].resolve(message);
371
371
  } else {
372
- this.deferreds[request_seq].reject(message);
372
+ this.deferreds[request_seq].reject(this.toRequestError(message));
373
373
  }
374
374
  delete this.deferreds[request_seq];
375
375
  }
376
376
  }
377
377
 
378
+ /**
379
+ * a failed tsserver response is a plain protocol object, and rejecting with it makes downstream
380
+ * logs print "[object Object]". convert it to an Error. `message` must stay identical to the
381
+ * response's message text - callers match on it (e.g. "No content available.").
382
+ */
383
+ private toRequestError(response: ts.server.protocol.Message): Error {
384
+ const { command, message } = response as ts.server.protocol.Response;
385
+ const error = new Error(message ?? `tsserver "${command}" request failed without an error message`);
386
+ (error as any).command = command;
387
+ (error as any).response = response;
388
+ return error;
389
+ }
390
+
378
391
  private isEvent(message: ts.server.protocol.Message): message is ts.server.protocol.Event {
379
392
  return message.type === 'event';
380
393
  }
@@ -395,3 +408,12 @@ export class ProcessBasedTsServer {
395
408
  }
396
409
  }
397
410
  }
411
+
412
+ function stringifyError(error: unknown): string {
413
+ if (error instanceof Error) return error.message;
414
+ try {
415
+ return JSON.stringify(error);
416
+ } catch {
417
+ return String(error);
418
+ }
419
+ }