From d89553f63edab8d790e76afdfd4b541551732f6e Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Mon, 13 Mar 2017 12:42:28 -0700 Subject: [PATCH] Update LKG --- lib/cancellationToken.js | 2 +- lib/protocol.d.ts | 8 +++++ lib/tsserver.js | 70 +++++++++++++++++++++++++--------------- lib/tsserverlibrary.d.ts | 16 ++++++++- lib/tsserverlibrary.js | 5 +-- lib/typingsInstaller.js | 19 +++++++++-- 6 files changed, 88 insertions(+), 32 deletions(-) diff --git a/lib/cancellationToken.js b/lib/cancellationToken.js index 378255a37ee..0e37b0689e0 100644 --- a/lib/cancellationToken.js +++ b/lib/cancellationToken.js @@ -49,7 +49,7 @@ function createCancellationToken(args) { return { isCancellationRequested: function () { return perRequestPipeName_1 !== undefined && pipeExists(perRequestPipeName_1); }, setRequest: function (requestId) { - currentRequestId_1 = currentRequestId_1; + currentRequestId_1 = requestId; perRequestPipeName_1 = namePrefix_1 + requestId; }, resetRequest: function (requestId) { diff --git a/lib/protocol.d.ts b/lib/protocol.d.ts index 2fc15c3a256..d1283fd8e7c 100644 --- a/lib/protocol.d.ts +++ b/lib/protocol.d.ts @@ -1666,6 +1666,14 @@ declare namespace ts.server.protocol { telemetryEventName: string; payload: any; } + type TypesInstallerInitializationFailedEventName = "typesInstallerInitializationFailed"; + interface TypesInstallerInitializationFailedEvent extends Event { + event: TypesInstallerInitializationFailedEventName; + body: TypesInstallerInitializationFailedEventBody; + } + interface TypesInstallerInitializationFailedEventBody { + message: string; + } type TypingsInstalledTelemetryEventName = "typingsInstalled"; interface TypingsInstalledTelemetryEventBody extends TelemetryEventBody { telemetryEventName: TypingsInstalledTelemetryEventName; diff --git a/lib/tsserver.js b/lib/tsserver.js index 4233c39cf39..3953d062d09 100644 --- a/lib/tsserver.js +++ b/lib/tsserver.js @@ -68707,6 +68707,7 @@ var ts; server.ActionInvalidate = "action::invalidate"; server.EventBeginInstallTypes = "event::beginInstallTypes"; server.EventEndInstallTypes = "event::endInstallTypes"; + server.EventInitializationFailed = "event::initializationFailed"; var Arguments; (function (Arguments) { Arguments.GlobalCacheLocation = "--globalTypingsCacheLocation"; @@ -74259,6 +74260,13 @@ var ts; this.seq = 0; this.inGroup = false; this.firstInGroup = true; + if (this.logFilename) { + try { + this.fd = fs.openSync(this.logFilename, "w"); + } + catch (e) { + } + } } Logger.padStringRight = function (str, padding) { return (str + padding).slice(0, padding.length); @@ -74294,11 +74302,6 @@ var ts; }; Logger.prototype.msg = function (s, type) { if (type === void 0) { type = server.Msg.Err; } - if (this.fd < 0) { - if (this.logFilename) { - this.fd = fs.openSync(this.logFilename, "w"); - } - } if (this.fd >= 0 || this.traceToConsole) { s = s + "\n"; var prefix = Logger.padStringRight(type + " " + this.seq.toString(), " "); @@ -74408,6 +74411,17 @@ var ts; if (this.logger.hasLevel(server.LogLevel.verbose)) { this.logger.info("Received response: " + JSON.stringify(response)); } + if (response.kind === server.EventInitializationFailed) { + if (!this.eventSender) { + return; + } + var body = { + message: response.message + }; + var eventName = "typesInstallerInitializationFailed"; + this.eventSender.event(body, eventName); + return; + } if (response.kind === server.EventBeginInstallTypes) { if (!this.eventSender) { return; @@ -74483,6 +74497,9 @@ var ts; return IOSession; }(server.Session)); function parseLoggingEnvironmentString(logEnvStr) { + if (!logEnvStr) { + return {}; + } var logEnv = { logToFile: true }; var args = logEnvStr.split(" "); var len = args.length - 1; @@ -74495,8 +74512,8 @@ var ts; logEnv.file = ts.stripQuotes(value); break; case "-level": - var level = server.LogLevel[value]; - logEnv.detailLevel = typeof level === "number" ? level : server.LogLevel.normal; + var level = getLogLevel(value); + logEnv.detailLevel = level !== undefined ? level : server.LogLevel.normal; break; case "-traceToConsole": logEnv.traceToConsole = value.toLowerCase() === "true"; @@ -74509,27 +74526,28 @@ var ts; } return logEnv; } - function createLoggerFromEnv() { - var fileName = undefined; - var detailLevel = server.LogLevel.normal; - var traceToConsole = false; - var logEnvStr = process.env["TSS_LOG"]; - if (logEnvStr) { - var logEnv = parseLoggingEnvironmentString(logEnvStr); - if (logEnv.logToFile) { - if (logEnv.file) { - fileName = logEnv.file; - } - else { - fileName = __dirname + "/.log" + process.pid.toString(); + function getLogLevel(level) { + if (level) { + var l = level.toLowerCase(); + for (var name in server.LogLevel) { + if (isNaN(+name) && l === name.toLowerCase()) { + return server.LogLevel[name]; } } - if (logEnv.detailLevel) { - detailLevel = logEnv.detailLevel; - } - traceToConsole = logEnv.traceToConsole; } - return new Logger(fileName, traceToConsole, detailLevel); + return undefined; + } + function createLogger() { + var cmdLineLogFileName = server.findArgument("--logFile"); + var cmdLineVerbosity = getLogLevel(server.findArgument("--logVerbosity")); + var envLogOptions = parseLoggingEnvironmentString(process.env["TSS_LOG"]); + var logFileName = cmdLineLogFileName + ? ts.stripQuotes(cmdLineLogFileName) + : envLogOptions.logToFile + ? envLogOptions.file || (__dirname + "/.log" + process.pid.toString()) + : undefined; + var logVerbosity = cmdLineVerbosity || envLogOptions.detailLevel; + return new Logger(logFileName, envLogOptions.traceToConsole, logVerbosity); } function createPollingWatchedFileSet(interval, chunkSize) { if (interval === void 0) { interval = 2500; } @@ -74598,7 +74616,6 @@ var ts; }; } var pollingWatchedFileSet = createPollingWatchedFileSet(); - var logger = createLoggerFromEnv(); var pending = []; var canWrite = true; function writeMessage(buf) { @@ -74637,6 +74654,7 @@ var ts; function isUNCPath(s) { return s.length > 2 && s.charCodeAt(0) === 47 && s.charCodeAt(1) === 47; } + var logger = createLogger(); var sys = ts.sys; var useWatchGuard = process.platform === "win32" && ts.getNodeMajorVersion() >= 4; if (useWatchGuard) { diff --git a/lib/tsserverlibrary.d.ts b/lib/tsserverlibrary.d.ts index a2f4b236407..3d9330fe5fc 100644 --- a/lib/tsserverlibrary.d.ts +++ b/lib/tsserverlibrary.d.ts @@ -3253,8 +3253,13 @@ declare namespace ts.server { type ActionInvalidate = "action::invalidate"; type EventBeginInstallTypes = "event::beginInstallTypes"; type EventEndInstallTypes = "event::endInstallTypes"; + type EventInitializationFailed = "event::initializationFailed"; interface TypingInstallerResponse { - readonly kind: ActionSet | ActionInvalidate | EventBeginInstallTypes | EventEndInstallTypes; + readonly kind: ActionSet | ActionInvalidate | EventBeginInstallTypes | EventEndInstallTypes | EventInitializationFailed; + } + interface InitializationFailedResponse extends TypingInstallerResponse { + readonly kind: EventInitializationFailed; + readonly message: string; } interface ProjectResponse extends TypingInstallerResponse { readonly projectName: string; @@ -3288,6 +3293,7 @@ declare namespace ts.server { const ActionInvalidate: ActionInvalidate; const EventBeginInstallTypes: EventBeginInstallTypes; const EventEndInstallTypes: EventEndInstallTypes; + const EventInitializationFailed: EventInitializationFailed; namespace Arguments { const GlobalCacheLocation = "--globalTypingsCacheLocation"; const LogFile = "--logFile"; @@ -4025,6 +4031,14 @@ declare namespace ts.server.protocol { telemetryEventName: string; payload: any; } + type TypesInstallerInitializationFailedEventName = "typesInstallerInitializationFailed"; + interface TypesInstallerInitializationFailedEvent extends Event { + event: TypesInstallerInitializationFailedEventName; + body: TypesInstallerInitializationFailedEventBody; + } + interface TypesInstallerInitializationFailedEventBody { + message: string; + } type TypingsInstalledTelemetryEventName = "typingsInstalled"; interface TypingsInstalledTelemetryEventBody extends TelemetryEventBody { telemetryEventName: TypingsInstalledTelemetryEventName; diff --git a/lib/tsserverlibrary.js b/lib/tsserverlibrary.js index 00ba4af83ec..1924bc28544 100644 --- a/lib/tsserverlibrary.js +++ b/lib/tsserverlibrary.js @@ -37492,8 +37492,8 @@ var ts; error(declaration, ts.Diagnostics.An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements); } } - var exports_1 = getExportsOfModule(moduleSymbol); - exports_1 && exports_1.forEach(function (_a, id) { + var exports = getExportsOfModule(moduleSymbol); + exports && exports.forEach(function (_a, id) { var declarations = _a.declarations, flags = _a.flags; if (id === "__export") { return; @@ -68013,6 +68013,7 @@ var ts; server.ActionInvalidate = "action::invalidate"; server.EventBeginInstallTypes = "event::beginInstallTypes"; server.EventEndInstallTypes = "event::endInstallTypes"; + server.EventInitializationFailed = "event::initializationFailed"; var Arguments; (function (Arguments) { Arguments.GlobalCacheLocation = "--globalTypingsCacheLocation"; diff --git a/lib/typingsInstaller.js b/lib/typingsInstaller.js index 8099c21a135..62e5832c3ec 100644 --- a/lib/typingsInstaller.js +++ b/lib/typingsInstaller.js @@ -6221,6 +6221,7 @@ var ts; server.ActionInvalidate = "action::invalidate"; server.EventBeginInstallTypes = "event::beginInstallTypes"; server.EventEndInstallTypes = "event::endInstallTypes"; + server.EventInitializationFailed = "event::initializationFailed"; var Arguments; (function (Arguments) { Arguments.GlobalCacheLocation = "--globalTypingsCacheLocation"; @@ -7381,12 +7382,18 @@ var ts; var FileLog = (function () { function FileLog(logFile) { this.logFile = logFile; + this.logEnabled = true; } FileLog.prototype.isEnabled = function () { - return this.logFile !== undefined; + return this.logEnabled && this.logFile !== undefined; }; FileLog.prototype.writeLine = function (text) { - fs.appendFileSync(this.logFile, text + ts.sys.newLine); + try { + fs.appendFileSync(this.logFile, text + ts.sys.newLine); + } + catch (e) { + this.logEnabled = false; + } }; return FileLog; }()); @@ -7440,6 +7447,10 @@ var ts; if (_this.log.isEnabled()) { _this.log.writeLine("Error updating " + TypesRegistryPackageName + " package: " + e.message); } + _this.delayedInitializationError = { + kind: "event::initializationFailed", + message: e.message + }; } _this.typesRegistry = loadTypesRegistryFile(getTypesRegistryFileLocation(globalTypingsCacheLocation), _this.installTypingHost, _this.log); return _this; @@ -7447,6 +7458,10 @@ var ts; NodeTypingsInstaller.prototype.listen = function () { var _this = this; process.on("message", function (req) { + if (_this.delayedInitializationError) { + _this.sendResponse(_this.delayedInitializationError); + _this.delayedInitializationError = undefined; + } switch (req.kind) { case "discover": _this.install(req);