@inst/vscode-bin-darwin
Version:
BINARY ONLY - VSCode binary deployment for macOS
673 lines • 90.4 kB
JavaScript
/*---------------------------------------------------------------------------------------------
* 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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