UNPKG

@inst/vscode-bin-darwin

Version:

BINARY ONLY - VSCode binary deployment for macOS

673 lines 90.4 kB
/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ "use strict"; var __extends = (this && this.__extends) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; var protocol_1 = require('./protocol'); var messages_1 = require('./messages'); var Net = require('net'); var Url = require('url'); var Source = (function () { function Source(name, path, id, origin, data) { if (id === void 0) { id = 0; } this.name = name; this.path = path; this.sourceReference = id; if (origin) { this.origin = origin; } if (data) { this.adapterData = data; } } return Source; }()); exports.Source = Source; var Scope = (function () { function Scope(name, reference, expensive) { if (expensive === void 0) { expensive = false; } this.name = name; this.variablesReference = reference; this.expensive = expensive; } return Scope; }()); exports.Scope = Scope; var StackFrame = (function () { function StackFrame(i, nm, src, ln, col) { if (ln === void 0) { ln = 0; } if (col === void 0) { col = 0; } this.id = i; this.source = src; this.line = ln; this.column = col; this.name = nm; } return StackFrame; }()); exports.StackFrame = StackFrame; var Thread = (function () { function Thread(id, name) { this.id = id; if (name) { this.name = name; } else { this.name = 'Thread #' + id; } } return Thread; }()); exports.Thread = Thread; var Variable = (function () { function Variable(name, value, ref, indexedVariables, namedVariables) { if (ref === void 0) { ref = 0; } this.name = name; this.value = value; this.variablesReference = ref; if (typeof namedVariables === 'number') { this.namedVariables = namedVariables; } if (typeof indexedVariables === 'number') { this.indexedVariables = indexedVariables; } } return Variable; }()); exports.Variable = Variable; var Breakpoint = (function () { function Breakpoint(verified, line, column, source) { this.verified = verified; var e = this; if (typeof line === 'number') { e.line = line; } if (typeof column === 'number') { e.column = column; } if (source) { e.source = source; } } return Breakpoint; }()); exports.Breakpoint = Breakpoint; var Module = (function () { function Module(id, name) { this.id = id; this.name = name; } return Module; }()); exports.Module = Module; var CompletionItem = (function () { function CompletionItem(label, start, length) { if (length === void 0) { length = 0; } this.label = label; this.start = start; this.length = length; } return CompletionItem; }()); exports.CompletionItem = CompletionItem; var StoppedEvent = (function (_super) { __extends(StoppedEvent, _super); function StoppedEvent(reason, threadId, exception_text) { if (exception_text === void 0) { exception_text = null; } _super.call(this, 'stopped'); this.body = { reason: reason, threadId: threadId }; if (exception_text) { var e = this; e.body.text = exception_text; } } return StoppedEvent; }(messages_1.Event)); exports.StoppedEvent = StoppedEvent; var ContinuedEvent = (function (_super) { __extends(ContinuedEvent, _super); function ContinuedEvent(threadId, allThreadsContinued) { _super.call(this, 'continued'); this.body = { threadId: threadId }; if (typeof allThreadsContinued === 'boolean') { this.body.allThreadsContinued = allThreadsContinued; } } return ContinuedEvent; }(messages_1.Event)); exports.ContinuedEvent = ContinuedEvent; var InitializedEvent = (function (_super) { __extends(InitializedEvent, _super); function InitializedEvent() { _super.call(this, 'initialized'); } return InitializedEvent; }(messages_1.Event)); exports.InitializedEvent = InitializedEvent; var TerminatedEvent = (function (_super) { __extends(TerminatedEvent, _super); function TerminatedEvent(restart) { _super.call(this, 'terminated'); if (typeof restart === 'boolean' || restart) { var e = this; e.body = { restart: restart }; } } return TerminatedEvent; }(messages_1.Event)); exports.TerminatedEvent = TerminatedEvent; var OutputEvent = (function (_super) { __extends(OutputEvent, _super); function OutputEvent(output, category, data) { if (category === void 0) { category = 'console'; } _super.call(this, 'output'); this.body = { category: category, output: output }; if (data !== undefined) { this.body.data = data; } } return OutputEvent; }(messages_1.Event)); exports.OutputEvent = OutputEvent; var ThreadEvent = (function (_super) { __extends(ThreadEvent, _super); function ThreadEvent(reason, threadId) { _super.call(this, 'thread'); this.body = { reason: reason, threadId: threadId }; } return ThreadEvent; }(messages_1.Event)); exports.ThreadEvent = ThreadEvent; var BreakpointEvent = (function (_super) { __extends(BreakpointEvent, _super); function BreakpointEvent(reason, breakpoint) { _super.call(this, 'breakpoint'); this.body = { reason: reason, breakpoint: breakpoint }; } return BreakpointEvent; }(messages_1.Event)); exports.BreakpointEvent = BreakpointEvent; var ModuleEvent = (function (_super) { __extends(ModuleEvent, _super); function ModuleEvent(reason, module) { _super.call(this, 'module'); this.body = { reason: reason, module: module }; } return ModuleEvent; }(messages_1.Event)); exports.ModuleEvent = ModuleEvent; var LoadedSourceEvent = (function (_super) { __extends(LoadedSourceEvent, _super); function LoadedSourceEvent(reason, source) { _super.call(this, 'loadedSource'); this.body = { reason: reason, source: source }; } return LoadedSourceEvent; }(messages_1.Event)); exports.LoadedSourceEvent = LoadedSourceEvent; (function (ErrorDestination) { ErrorDestination[ErrorDestination["User"] = 1] = "User"; ErrorDestination[ErrorDestination["Telemetry"] = 2] = "Telemetry"; })(exports.ErrorDestination || (exports.ErrorDestination = {})); var ErrorDestination = exports.ErrorDestination; ; var DebugSession = (function (_super) { __extends(DebugSession, _super); function DebugSession(obsolete_debuggerLinesAndColumnsStartAt1, obsolete_isServer) { var _this = this; _super.call(this); var linesAndColumnsStartAt1 = typeof obsolete_debuggerLinesAndColumnsStartAt1 === 'boolean' ? obsolete_debuggerLinesAndColumnsStartAt1 : false; this._debuggerLinesStartAt1 = linesAndColumnsStartAt1; this._debuggerColumnsStartAt1 = linesAndColumnsStartAt1; this._debuggerPathsAreURIs = false; this._clientLinesStartAt1 = true; this._clientColumnsStartAt1 = true; this._clientPathsAreURIs = false; this._isServer = typeof obsolete_isServer === 'boolean' ? obsolete_isServer : false; this.on('close', function () { _this.shutdown(); }); this.on('error', function (error) { _this.shutdown(); }); } DebugSession.prototype.setDebuggerPathFormat = function (format) { this._debuggerPathsAreURIs = format !== 'path'; }; DebugSession.prototype.setDebuggerLinesStartAt1 = function (enable) { this._debuggerLinesStartAt1 = enable; }; DebugSession.prototype.setDebuggerColumnsStartAt1 = function (enable) { this._debuggerColumnsStartAt1 = enable; }; DebugSession.prototype.setRunAsServer = function (enable) { this._isServer = enable; }; /** * A virtual constructor... */ DebugSession.run = function (debugSession) { // parse arguments var port = 0; var args = process.argv.slice(2); args.forEach(function (val, index, array) { var portMatch = /^--server=(\d{4,5})$/.exec(val); if (portMatch) { port = parseInt(portMatch[1], 10); } }); if (port > 0) { // start as a server console.error("waiting for debug protocol on port " + port); Net.createServer(function (socket) { console.error('>> accepted connection from client'); socket.on('end', function () { console.error('>> client connection closed\n'); }); var session = new debugSession(false, true); session.setRunAsServer(true); session.start(socket, socket); }).listen(port); } else { // start a session //console.error('waiting for debug protocol on stdin/stdout'); var session_1 = new debugSession(false); process.on('SIGTERM', function () { session_1.shutdown(); }); session_1.start(process.stdin, process.stdout); } }; DebugSession.prototype.shutdown = function () { if (this._isServer) { console.error('shutdown ignored in server mode'); } else { // wait a bit before shutting down setTimeout(function () { process.exit(0); }, 100); } }; DebugSession.prototype.sendErrorResponse = function (response, codeOrMessage, format, variables, dest) { if (dest === void 0) { dest = ErrorDestination.User; } var msg; if (typeof codeOrMessage === 'number') { msg = { id: codeOrMessage, format: format }; if (variables) { msg.variables = variables; } if (dest & ErrorDestination.User) { msg.showUser = true; } if (dest & ErrorDestination.Telemetry) { msg.sendTelemetry = true; } } else { msg = codeOrMessage; } response.success = false; response.message = DebugSession.formatPII(msg.format, true, msg.variables); if (!response.body) { response.body = {}; } response.body.error = msg; this.sendResponse(response); }; DebugSession.prototype.runInTerminalRequest = function (args, timeout, cb) { this.sendRequest('runInTerminal', args, timeout, cb); }; DebugSession.prototype.dispatchRequest = function (request) { var response = new messages_1.Response(request); try { if (request.command === 'initialize') { var args = request.arguments; if (typeof args.linesStartAt1 === 'boolean') { this._clientLinesStartAt1 = args.linesStartAt1; } if (typeof args.columnsStartAt1 === 'boolean') { this._clientColumnsStartAt1 = args.columnsStartAt1; } if (args.pathFormat !== 'path') { this.sendErrorResponse(response, 2018, 'debug adapter only supports native paths', null, ErrorDestination.Telemetry); } else { var initializeResponse = response; initializeResponse.body = {}; this.initializeRequest(initializeResponse, args); } } else if (request.command === 'launch') { this.launchRequest(response, request.arguments); } else if (request.command === 'attach') { this.attachRequest(response, request.arguments); } else if (request.command === 'disconnect') { this.disconnectRequest(response, request.arguments); } else if (request.command === 'restart') { this.restartRequest(response, request.arguments); } else if (request.command === 'setBreakpoints') { this.setBreakPointsRequest(response, request.arguments); } else if (request.command === 'setFunctionBreakpoints') { this.setFunctionBreakPointsRequest(response, request.arguments); } else if (request.command === 'setExceptionBreakpoints') { this.setExceptionBreakPointsRequest(response, request.arguments); } else if (request.command === 'configurationDone') { this.configurationDoneRequest(response, request.arguments); } else if (request.command === 'continue') { this.continueRequest(response, request.arguments); } else if (request.command === 'next') { this.nextRequest(response, request.arguments); } else if (request.command === 'stepIn') { this.stepInRequest(response, request.arguments); } else if (request.command === 'stepOut') { this.stepOutRequest(response, request.arguments); } else if (request.command === 'stepBack') { this.stepBackRequest(response, request.arguments); } else if (request.command === 'reverseContinue') { this.reverseContinueRequest(response, request.arguments); } else if (request.command === 'restartFrame') { this.restartFrameRequest(response, request.arguments); } else if (request.command === 'goto') { this.gotoRequest(response, request.arguments); } else if (request.command === 'pause') { this.pauseRequest(response, request.arguments); } else if (request.command === 'stackTrace') { this.stackTraceRequest(response, request.arguments); } else if (request.command === 'scopes') { this.scopesRequest(response, request.arguments); } else if (request.command === 'variables') { this.variablesRequest(response, request.arguments); } else if (request.command === 'setVariable') { this.setVariableRequest(response, request.arguments); } else if (request.command === 'source') { this.sourceRequest(response, request.arguments); } else if (request.command === 'threads') { this.threadsRequest(response); } else if (request.command === 'evaluate') { this.evaluateRequest(response, request.arguments); } else if (request.command === 'stepInTargets') { this.stepInTargetsRequest(response, request.arguments); } else if (request.command === 'gotoTargets') { this.gotoTargetsRequest(response, request.arguments); } else if (request.command === 'completions') { this.completionsRequest(response, request.arguments); } else if (request.command === 'exceptionInfo') { this.exceptionInfoRequest(response, request.arguments); } else if (request.command === 'loadedSources') { this.loadedSourcesRequest(response, request.arguments); } else { this.customRequest(request.command, response, request.arguments); } } catch (e) { this.sendErrorResponse(response, 1104, '{_stack}', { _exception: e.message, _stack: e.stack }, ErrorDestination.Telemetry); } }; DebugSession.prototype.initializeRequest = function (response, args) { // This default debug adapter does not support conditional breakpoints. response.body.supportsConditionalBreakpoints = false; // This default debug adapter does not support hit conditional breakpoints. response.body.supportsHitConditionalBreakpoints = false; // This default debug adapter does not support function breakpoints. response.body.supportsFunctionBreakpoints = false; // This default debug adapter implements the 'configurationDone' request. response.body.supportsConfigurationDoneRequest = true; // This default debug adapter does not support hovers based on the 'evaluate' request. response.body.supportsEvaluateForHovers = false; // This default debug adapter does not support the 'stepBack' request. response.body.supportsStepBack = false; // This default debug adapter does not support the 'setVariable' request. response.body.supportsSetVariable = false; // This default debug adapter does not support the 'restartFrame' request. response.body.supportsRestartFrame = false; // This default debug adapter does not support the 'stepInTargetsRequest' request. response.body.supportsStepInTargetsRequest = false; // This default debug adapter does not support the 'gotoTargetsRequest' request. response.body.supportsGotoTargetsRequest = false; // This default debug adapter does not support the 'completionsRequest' request. response.body.supportsCompletionsRequest = false; // This default debug adapter does not support the 'restart' request. response.body.supportsRestartRequest = false; // This default debug adapter does not support the 'exceptionOptions' attribute on the 'setExceptionBreakpointsRequest'. response.body.supportsExceptionOptions = false; // This default debug adapter does not support the 'format' attribute on the 'variablesRequest', 'evaluateRequest', and 'stackTraceRequest'. response.body.supportsValueFormattingOptions = false; // This debug adapter does not support the 'exceptionInfoRequest' request. response.body.supportsExceptionInfoRequest = false; // This debug adapter does not support the 'TerminateDebuggee' attribute on the 'disconnect' request. response.body.supportTerminateDebuggee = false; // This debug adapter does not support delayed loading of stack frames. response.body.supportsDelayedStackTraceLoading = false; this.sendResponse(response); }; DebugSession.prototype.disconnectRequest = function (response, args) { this.sendResponse(response); this.shutdown(); }; DebugSession.prototype.launchRequest = function (response, args) { this.sendResponse(response); }; DebugSession.prototype.attachRequest = function (response, args) { this.sendResponse(response); }; DebugSession.prototype.restartRequest = function (response, args) { this.sendResponse(response); }; DebugSession.prototype.setBreakPointsRequest = function (response, args) { this.sendResponse(response); }; DebugSession.prototype.setFunctionBreakPointsRequest = function (response, args) { this.sendResponse(response); }; DebugSession.prototype.setExceptionBreakPointsRequest = function (response, args) { this.sendResponse(response); }; DebugSession.prototype.configurationDoneRequest = function (response, args) { this.sendResponse(response); }; DebugSession.prototype.continueRequest = function (response, args) { this.sendResponse(response); }; DebugSession.prototype.nextRequest = function (response, args) { this.sendResponse(response); }; DebugSession.prototype.stepInRequest = function (response, args) { this.sendResponse(response); }; DebugSession.prototype.stepOutRequest = function (response, args) { this.sendResponse(response); }; DebugSession.prototype.stepBackRequest = function (response, args) { this.sendResponse(response); }; DebugSession.prototype.reverseContinueRequest = function (response, args) { this.sendResponse(response); }; DebugSession.prototype.restartFrameRequest = function (response, args) { this.sendResponse(response); }; DebugSession.prototype.gotoRequest = function (response, args) { this.sendResponse(response); }; DebugSession.prototype.pauseRequest = function (response, args) { this.sendResponse(response); }; DebugSession.prototype.sourceRequest = function (response, args) { this.sendResponse(response); }; DebugSession.prototype.threadsRequest = function (response) { this.sendResponse(response); }; DebugSession.prototype.stackTraceRequest = function (response, args) { this.sendResponse(response); }; DebugSession.prototype.scopesRequest = function (response, args) { this.sendResponse(response); }; DebugSession.prototype.variablesRequest = function (response, args) { this.sendResponse(response); }; DebugSession.prototype.setVariableRequest = function (response, args) { this.sendResponse(response); }; DebugSession.prototype.evaluateRequest = function (response, args) { this.sendResponse(response); }; DebugSession.prototype.stepInTargetsRequest = function (response, args) { this.sendResponse(response); }; DebugSession.prototype.gotoTargetsRequest = function (response, args) { this.sendResponse(response); }; DebugSession.prototype.completionsRequest = function (response, args) { this.sendResponse(response); }; DebugSession.prototype.exceptionInfoRequest = function (response, args) { this.sendResponse(response); }; DebugSession.prototype.loadedSourcesRequest = function (response, args) { this.sendResponse(response); }; /** * Override this hook to implement custom requests. */ DebugSession.prototype.customRequest = function (command, response, args) { this.sendErrorResponse(response, 1014, 'unrecognized request', null, ErrorDestination.Telemetry); }; //---- protected ------------------------------------------------------------------------------------------------- DebugSession.prototype.convertClientLineToDebugger = function (line) { if (this._debuggerLinesStartAt1) { return this._clientLinesStartAt1 ? line : line + 1; } return this._clientLinesStartAt1 ? line - 1 : line; }; DebugSession.prototype.convertDebuggerLineToClient = function (line) { if (this._debuggerLinesStartAt1) { return this._clientLinesStartAt1 ? line : line - 1; } return this._clientLinesStartAt1 ? line + 1 : line; }; DebugSession.prototype.convertClientColumnToDebugger = function (column) { if (this._debuggerColumnsStartAt1) { return this._clientColumnsStartAt1 ? column : column + 1; } return this._clientColumnsStartAt1 ? column - 1 : column; }; DebugSession.prototype.convertDebuggerColumnToClient = function (column) { if (this._debuggerColumnsStartAt1) { return this._clientColumnsStartAt1 ? column : column - 1; } return this._clientColumnsStartAt1 ? column + 1 : column; }; DebugSession.prototype.convertClientPathToDebugger = function (clientPath) { if (this._clientPathsAreURIs != this._debuggerPathsAreURIs) { if (this._clientPathsAreURIs) { return DebugSession.uri2path(clientPath); } else { return DebugSession.path2uri(clientPath); } } return clientPath; }; DebugSession.prototype.convertDebuggerPathToClient = function (debuggerPath) { if (this._debuggerPathsAreURIs != this._clientPathsAreURIs) { if (this._debuggerPathsAreURIs) { return DebugSession.uri2path(debuggerPath); } else { return DebugSession.path2uri(debuggerPath); } } return debuggerPath; }; //---- private ------------------------------------------------------------------------------- DebugSession.path2uri = function (str) { var pathName = str.replace(/\\/g, '/'); if (pathName[0] !== '/') { pathName = '/' + pathName; } return encodeURI('file://' + pathName); }; DebugSession.uri2path = function (url) { return Url.parse(url).pathname; }; /* * If argument starts with '_' it is OK to send its value to telemetry. */ DebugSession.formatPII = function (format, excludePII, args) { return format.replace(DebugSession._formatPIIRegexp, function (match, paramName) { if (excludePII && paramName.length > 0 && paramName[0] !== '_') { return match; } return args[paramName] && args.hasOwnProperty(paramName) ? args[paramName] : match; }); }; DebugSession._formatPIIRegexp = /{([^}]+)}/g; return DebugSession; }(protocol_1.ProtocolServer)); exports.DebugSession = DebugSession; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVidWdTZXNzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2RlYnVnU2Vzc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O2dHQUdnRzs7Ozs7OztBQUdoRyx5QkFBNkIsWUFBWSxDQUFDLENBQUE7QUFDMUMseUJBQThCLFlBQVksQ0FBQyxDQUFBO0FBQzNDLElBQVksR0FBRyxXQUFNLEtBQUssQ0FBQyxDQUFBO0FBRTNCLElBQVksR0FBRyxXQUFNLEtBQUssQ0FBQyxDQUFBO0FBRzNCO0lBS0MsZ0JBQW1CLElBQVksRUFBRSxJQUFhLEVBQUUsRUFBYyxFQUFFLE1BQWUsRUFBRSxJQUFVO1FBQTNDLGtCQUFjLEdBQWQsTUFBYztRQUM3RCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUMxQixFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ04sSUFBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDN0IsQ0FBQztRQUNELEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDSixJQUFLLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUNoQyxDQUFDO0lBQ0YsQ0FBQztJQUNGLGFBQUM7QUFBRCxDQUFDLEFBaEJELElBZ0JDO0FBaEJZLGNBQU0sU0FnQmxCLENBQUE7QUFFRDtJQUtDLGVBQW1CLElBQVksRUFBRSxTQUFpQixFQUFFLFNBQTBCO1FBQTFCLHlCQUEwQixHQUExQixpQkFBMEI7UUFDN0UsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFNBQVMsQ0FBQztRQUNwQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztJQUM1QixDQUFDO0lBQ0YsWUFBQztBQUFELENB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