mirror of
https://github.com/adelphes/android-dev-ext.git
synced 2025-12-22 17:39:19 +00:00
Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cb6c78070c | ||
|
|
0bc2ab528c | ||
|
|
ec798e17f4 | ||
|
|
ba05c54e8f | ||
|
|
7bfb57121f | ||
|
|
c10fc42661 | ||
|
|
e3d835b563 | ||
|
|
456c4f935f | ||
|
|
33dd93da0c | ||
|
|
05b3877bcb | ||
|
|
d15a7bd911 |
@@ -1,23 +1,28 @@
|
||||
{
|
||||
"env": {
|
||||
"browser": false,
|
||||
"commonjs": true,
|
||||
"es6": true,
|
||||
"node": true
|
||||
"plugins": ["jsdoc"],
|
||||
"env": {
|
||||
"browser": false,
|
||||
"commonjs": true,
|
||||
"es6": true,
|
||||
"node": true
|
||||
},
|
||||
"parserOptions": {
|
||||
"ecmaVersion": 13,
|
||||
"ecmaFeatures": {
|
||||
"jsx": false
|
||||
},
|
||||
"parserOptions": {
|
||||
"ecmaFeatures": {
|
||||
"jsx": true
|
||||
},
|
||||
"sourceType": "module"
|
||||
},
|
||||
"rules": {
|
||||
"no-const-assign": "warn",
|
||||
"no-this-before-super": "warn",
|
||||
"no-undef": "warn",
|
||||
"no-unreachable": "warn",
|
||||
"no-unused-vars": "warn",
|
||||
"constructor-super": "warn",
|
||||
"valid-typeof": "warn"
|
||||
}
|
||||
"sourceType": "commonjs"
|
||||
},
|
||||
"rules": {
|
||||
"no-const-assign": "warn",
|
||||
"no-this-before-super": "warn",
|
||||
"no-undef": "warn",
|
||||
"no-unreachable": "warn",
|
||||
"no-unused-vars": [
|
||||
"warn",
|
||||
{ "varsIgnorePattern": "^_", "argsIgnorePattern": "^_" }
|
||||
],
|
||||
"constructor-super": "warn",
|
||||
"valid-typeof": "warn"
|
||||
}
|
||||
}
|
||||
2
.vscode/launch.json
vendored
2
.vscode/launch.json
vendored
@@ -8,7 +8,6 @@
|
||||
"request": "launch",
|
||||
"runtimeExecutable": "${execPath}",
|
||||
"args": ["--extensionDevelopmentPath=${workspaceRoot}" ],
|
||||
"stopOnEntry": false,
|
||||
"skipFiles": [
|
||||
"<node_internals>/**"
|
||||
]
|
||||
@@ -40,7 +39,6 @@
|
||||
"request": "launch",
|
||||
"runtimeExecutable": "${execPath}",
|
||||
"args": ["--extensionDevelopmentPath=${workspaceRoot}", "--extensionTestsPath=${workspaceRoot}/test" ],
|
||||
"stopOnEntry": false
|
||||
}
|
||||
],
|
||||
"compounds": [
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
# Change Log
|
||||
|
||||
### version 1.3.2
|
||||
* Update analytics library
|
||||
* Update lodash version - security advisory https://www.npmjs.com/advisories/1523
|
||||
|
||||
### version 1.3.0
|
||||
* Support `ADB_SERVER_SOCKET`, `ANDROID_ADB_SERVER_ADDRESS` & `ANDROID_ADB_SERVER_PORT` env vars when connecting to ADB.
|
||||
* Replace `adbPort` configuration option with a new `adbSocket` value to allow ADB server host to be overidden. (`adbPort` is now deprecated).
|
||||
|
||||
28
extension.js
28
extension.js
@@ -12,8 +12,11 @@ const { selectTargetDevice } = require('./src/utils/device');
|
||||
|
||||
/**
|
||||
* @param {vscode.ExtensionContext} context
|
||||
* @param {string} uid
|
||||
* @param {number} session_id
|
||||
* @param {*} vscode_props
|
||||
*/
|
||||
async function createLanguageClient(context) {
|
||||
async function createLanguageClient(context, uid, session_id, vscode_props) {
|
||||
// The server is implemented in node
|
||||
let serverModule = context.asAbsolutePath(path.join('langserver', 'server.js'));
|
||||
// The debug options for the server
|
||||
@@ -45,8 +48,6 @@ async function createLanguageClient(context) {
|
||||
}
|
||||
const sourceFiles = (await vscode.workspace.findFiles(`${globSearchRoot}**/*.java`, null, 1000, null)).map(uri => uri.toString());
|
||||
|
||||
const mpids = analytics.getIDs(context);
|
||||
|
||||
// Options to control the language client
|
||||
/** @type {import('vscode-languageclient').LanguageClientOptions} */
|
||||
let clientOptions = {
|
||||
@@ -57,11 +58,11 @@ async function createLanguageClient(context) {
|
||||
initializationOptions: {
|
||||
// extensionPath points to the root of the extension (the folder where this file is)
|
||||
extensionPath: context.extensionPath,
|
||||
mpuid: mpids.uid,
|
||||
mpsid: mpids.sid,
|
||||
uid,
|
||||
session_id,
|
||||
vscode_props,
|
||||
initialSettings: config,
|
||||
sourceFiles,
|
||||
vscodeVersion: vscode.version,
|
||||
workspaceFolders: (vscode.workspace.workspaceFolders || []).map(z => z.uri.toString()),
|
||||
},
|
||||
synchronize: {
|
||||
@@ -114,10 +115,18 @@ function activate(context) {
|
||||
/* Only the logcat stuff is configured here. The debugger is launched from src/debugMain.js */
|
||||
AndroidContentProvider.register(context, vscode.workspace);
|
||||
|
||||
const mpids = analytics.getIDs(context);
|
||||
analytics.init(undefined, mpids.uid, mpids.sid, package_json, { vscode_version: vscode.version });
|
||||
const { uid } = analytics.getIDs(context);
|
||||
const session_id = Math.trunc(Math.random() * Number.MAX_SAFE_INTEGER);
|
||||
const vscode_props = {
|
||||
appName: vscode.env.appName,
|
||||
language: vscode.env.language,
|
||||
shell: vscode.env.shell,
|
||||
uiKind: vscode.env.uiKind,
|
||||
vscode_version: vscode.version,
|
||||
}
|
||||
analytics.init(undefined, uid, session_id, '', package_json, vscode_props, 'extension-start');
|
||||
|
||||
createLanguageClient(context).then(client => {
|
||||
createLanguageClient(context, uid, session_id, vscode_props).then(client => {
|
||||
languageClient = client;
|
||||
refreshLanguageServerEnabledState();
|
||||
});
|
||||
@@ -172,6 +181,7 @@ function activate(context) {
|
||||
|
||||
// this method is called when your extension is deactivated
|
||||
function deactivate() {
|
||||
analytics.event('extension-deactivate');
|
||||
}
|
||||
|
||||
exports.activate = activate;
|
||||
|
||||
@@ -1,43 +1,53 @@
|
||||
const os = require('os');
|
||||
let mp;
|
||||
const uuid = require('uuid').v4;
|
||||
let client;
|
||||
/** @type {string} */
|
||||
let uid;
|
||||
/** @type {string} */
|
||||
let sid;
|
||||
let did = uuid();
|
||||
/** @type {number} */
|
||||
let session_id;
|
||||
/** @type {Map<string,[number,number]>} */
|
||||
const timeLabels = new Map();
|
||||
let session_start = Date.now();
|
||||
/** @type {string|Promise<string>} */
|
||||
let ip = getCurrentIP()
|
||||
.catch(() => null)
|
||||
.then(res => ip = res);
|
||||
let ip = '';
|
||||
let queued_events = null;
|
||||
let package_info = null;
|
||||
let vscode_info = null;
|
||||
|
||||
/**
|
||||
* @param {string} [t]
|
||||
* @param {string} [u]
|
||||
* @param {string} [s]
|
||||
* @param {{name:string,version:string}} [package_json]
|
||||
* @param {*} [props]
|
||||
* @param {string} u
|
||||
* @param {number} s
|
||||
* @param {string} ipaddr
|
||||
* @param {{name:string,version:string}} package_json
|
||||
* @param {*} vscode_props
|
||||
* @param {string} caller
|
||||
*/
|
||||
function init(t = '0cca95950055c6553804a46ce7e3df18', u, s, package_json, props) {
|
||||
if (mp) {
|
||||
function init(t = '94635b4642d80407accd3739fa35bed6', u, s, ipaddr, package_json, vscode_props, caller) {
|
||||
if (client) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
mp = require('mixpanel').init(t);
|
||||
client = require('@amplitude/node').init(t);
|
||||
}
|
||||
catch {
|
||||
return;
|
||||
}
|
||||
uid = u;
|
||||
sid = s;
|
||||
session_id = s || Math.trunc(Math.random() * Number.MAX_SAFE_INTEGER);
|
||||
ip = ipaddr || (getCurrentIP()
|
||||
.catch(() => '')
|
||||
.then(res => ip = res));
|
||||
package_info = package_json;
|
||||
vscode_info = vscode_props;
|
||||
|
||||
if (!props) {
|
||||
if (!caller) {
|
||||
return;
|
||||
}
|
||||
const now = new Date();
|
||||
event(`${package_json.name}-start`, {
|
||||
event(caller, {
|
||||
extension: package_json.name,
|
||||
ext_version: package_json.version,
|
||||
arch: process.arch,
|
||||
@@ -48,7 +58,7 @@ function init(t = '0cca95950055c6553804a46ce7e3df18', u, s, package_json, props)
|
||||
release: os.release(),
|
||||
localtime: now.toTimeString(),
|
||||
tz: now.getTimezoneOffset(),
|
||||
...props
|
||||
...vscode_props,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -69,7 +79,7 @@ function getCurrentIP() {
|
||||
* @param {*} [properties]
|
||||
*/
|
||||
function event(eventName, properties) {
|
||||
if (!mp) {
|
||||
if (!client || !eventName || (!uid && !did) || !ip) {
|
||||
return;
|
||||
}
|
||||
if (queued_events) {
|
||||
@@ -86,23 +96,21 @@ function event(eventName, properties) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
if (uid) {
|
||||
mp.track(eventName, {
|
||||
ip,
|
||||
distinct_id: uid,
|
||||
session_id: sid,
|
||||
client.logEvent({
|
||||
event_type: eventName,
|
||||
user_id: uid,
|
||||
device_id: uid ? undefined : did,
|
||||
app_version: package_info.version,
|
||||
ip,
|
||||
language: vscode_info.language,
|
||||
os_name: process.platform,
|
||||
os_version: os.release(),
|
||||
session_id,
|
||||
event_properties: {
|
||||
session_length: Math.trunc((Date.now() - session_start) / 60e3),
|
||||
...properties,
|
||||
});
|
||||
} else {
|
||||
mp.track(eventName, {
|
||||
ip,
|
||||
platform: process.platform,
|
||||
release: os.release(),
|
||||
node_version: process.version,
|
||||
...properties,
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
} catch {}
|
||||
}
|
||||
|
||||
@@ -149,29 +157,18 @@ function timeEnd(label, time_unit = 'ms', additionalProps = {}) {
|
||||
function getIDs(context) {
|
||||
if (!context || !context.globalState) {
|
||||
return {
|
||||
uid: '', sid: ''
|
||||
uid: '',
|
||||
};
|
||||
}
|
||||
let uuidv4 = () => {
|
||||
try {
|
||||
uuidv4 = require('uuid').v4;
|
||||
return uuidv4();
|
||||
} catch {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
let u = uid || (uid = context.globalState.get('mix-panel-id'));
|
||||
if (typeof u !== 'string' || u.length > 36) {
|
||||
u = uid = uuidv4();
|
||||
u = uid = uuid();
|
||||
context.globalState.update('mix-panel-id', u);
|
||||
}
|
||||
let s = sid || (sid = uuidv4());
|
||||
return {
|
||||
uid: u,
|
||||
sid: s,
|
||||
}
|
||||
}
|
||||
|
||||
exports.init = init;
|
||||
exports.event = event;
|
||||
exports.time = time;
|
||||
|
||||
@@ -1,12 +1,17 @@
|
||||
const { JavaType, CEIType, ArrayType, PrimitiveType } = require('java-mti');
|
||||
const { CEIType, ArrayType, PrimitiveType } = require('java-mti');
|
||||
const { getTypeInheritanceList } = require('./java/expression-resolver');
|
||||
const { CompletionItem, CompletionItemKind } = require('vscode-languageserver');
|
||||
const { CompletionItemKind } = require('vscode-languageserver');
|
||||
const { SourceType } = require('./java/source-types');
|
||||
const { indexAt } = require('./document');
|
||||
const { formatDoc } = require('./doc-formatter');
|
||||
const { trace } = require('./logging');
|
||||
const { event } = require('./analytics');
|
||||
|
||||
/**
|
||||
* @typedef {import('vscode-languageserver').CompletionItem} CompletionItem
|
||||
* @typedef {import('java-mti').JavaType} JavaType
|
||||
*/
|
||||
|
||||
/**
|
||||
* Case-insensitive sort routines
|
||||
*/
|
||||
@@ -116,7 +121,7 @@ function getTypedNameCompletion(typemap, type_signature, opts, typelist) {
|
||||
&& !type_signature.slice(subtype_search.length).includes('$')
|
||||
)
|
||||
.map(type_signature => typemap.get(type_signature))
|
||||
.forEach((t,idx) => inner_types.set(t.simpleTypeName, { t }));
|
||||
.forEach((t) => inner_types.set(t.simpleTypeName, { t }));
|
||||
}
|
||||
|
||||
return [
|
||||
@@ -370,7 +375,10 @@ async function getCompletionItems(params, liveParsers, androidLibrary) {
|
||||
|
||||
completionRequestCount += 1;
|
||||
if ((completionRequestCount === 1) || (completionRequestCount === 5) || ((completionRequestCount % 25) === 0)) {
|
||||
event('completion-requests', { comp_req_count: completionRequestCount });
|
||||
event('completion-requests', {
|
||||
comp_req_count: completionRequestCount, // total count for this session
|
||||
comp_req_partial_count: (completionRequestCount % 25) || 25,
|
||||
});
|
||||
}
|
||||
|
||||
let parsed = docinfo.parsed;
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
const { CEIType } = require('java-mti');
|
||||
const ParseProblem = require('./java/parsetypes/parse-problem');
|
||||
const { parse } = require('./java/body-parser');
|
||||
const { SourceUnit } = require('./java/source-types');
|
||||
const { parseMethodBodies } = require('./java/validater');
|
||||
const { time, timeEnd, trace } = require('./logging');
|
||||
|
||||
/**
|
||||
* @typedef {import('java-mti').CEIType} CEIType
|
||||
* @typedef {import('./java/source-types').SourceUnit} SourceUnit
|
||||
*/
|
||||
|
||||
/**
|
||||
* Marker to prevent early parsing of source files before we've completed our
|
||||
* initial source file load (we cannot accurately parse individual files until we
|
||||
|
||||
@@ -19,7 +19,7 @@ async function loadAndroidSystemLibrary(extensionPath, additional_libs) {
|
||||
}
|
||||
const cache_folder = path.join(extensionPath, 'langserver', '.library-cache');
|
||||
trace(`loading android library from ${cache_folder} with androidx libs: ${JSON.stringify(additional_libs)}`)
|
||||
const typemap = await loadJavaLibraryCacheFile(path.join(cache_folder, 'android-29.zip'));
|
||||
const typemap = await loadJavaLibraryCacheFile(path.join(cache_folder, 'android-34.zip'));
|
||||
if (Array.isArray(additional_libs) && additional_libs.length) {
|
||||
await loadJavaLibraryCacheFile(path.join(cache_folder, 'androidx-20200701.zip'), additional_libs, typemap);
|
||||
}
|
||||
|
||||
30
langserver/library-cache.js
Normal file
30
langserver/library-cache.js
Normal file
@@ -0,0 +1,30 @@
|
||||
/**
|
||||
* 1. Download the latest platform and source
|
||||
* ./android-sdk/cmdline-tools/bin/sdkmanager --sdk_root=$ANDROID_SDK_ROOT --install 'platforms;android-30'
|
||||
* ./android-sdk/cmdline-tools/bin/sdkmanager --sdk_root=$ANDROID_SDK_ROOT --install 'sources;android-30'
|
||||
*
|
||||
* 2. Run this file, passing in the android API version
|
||||
* node library-cache.js android-30
|
||||
*
|
||||
* 3. To create the final shipped data, move the JSON into a 'cache' folder and zip
|
||||
* mkdir cache
|
||||
* mv android-30.json cache
|
||||
* zip -9 -r android-30.zip cache
|
||||
*/
|
||||
|
||||
const path = require('path');
|
||||
const { createAndroidLibraryCacheFile } = require('java-mti/android-library');
|
||||
|
||||
/**
|
||||
* @param {`android-${number}`} api
|
||||
*/
|
||||
async function buildLibraryCache(api) {
|
||||
// `createAndroidLibraryCacheFile()` just creates the JSON (not the zipped version)
|
||||
const cache_filename = path.join(__dirname, '.library-cache', `${api}.json`);
|
||||
await createAndroidLibraryCacheFile(cache_filename, { api });
|
||||
}
|
||||
|
||||
const api = process.argv[2];
|
||||
if (!api) throw new Error('android api parameter expected');
|
||||
|
||||
buildLibraryCache(api);
|
||||
@@ -41,7 +41,10 @@ async function getSignatureHelp(request, liveParsers) {
|
||||
|
||||
methodsigRequestCount += 1;
|
||||
if ((methodsigRequestCount === 1) || (methodsigRequestCount === 5) || ((methodsigRequestCount % 25) === 0)) {
|
||||
event('method-sig-requests', { methsig_req_count: methodsigRequestCount });
|
||||
event('method-sig-requests', {
|
||||
methsig_req_count: methodsigRequestCount,
|
||||
methsig_req_partial_count: (methodsigRequestCount % 25) || 25,
|
||||
});
|
||||
}
|
||||
|
||||
// locate the token at the requested position
|
||||
|
||||
593
langserver/package-lock.json
generated
593
langserver/package-lock.json
generated
@@ -1,37 +1,430 @@
|
||||
{
|
||||
"name": "langserver",
|
||||
"version": "1.0.3",
|
||||
"lockfileVersion": 1,
|
||||
"version": "1.0.4",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
"@types/node": {
|
||||
"version": "13.13.4",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.4.tgz",
|
||||
"integrity": "sha512-x26ur3dSXgv5AwKS0lNfbjpCakGIduWU1DU91Zz58ONRWrIKGunmZBNv4P7N+e27sJkiGDsw/3fT4AtsqQBrBA==",
|
||||
"dev": true
|
||||
},
|
||||
"agent-base": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz",
|
||||
"integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==",
|
||||
"requires": {
|
||||
"es6-promisify": "^5.0.0"
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "langserver",
|
||||
"version": "1.0.4",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"@amplitude/node": "^0.3.3",
|
||||
"java-mti": "adelphes/java-mti#ec164ac",
|
||||
"uuid": "8.2.0",
|
||||
"vscode-languageserver": "6.1.1",
|
||||
"vscode-languageserver-textdocument": "1.0.1",
|
||||
"vscode-uri": "2.1.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^13.13.4"
|
||||
}
|
||||
},
|
||||
"balanced-match": {
|
||||
"node_modules/@amplitude/node": {
|
||||
"version": "0.3.3",
|
||||
"resolved": "https://registry.npmjs.org/@amplitude/node/-/node-0.3.3.tgz",
|
||||
"integrity": "sha512-Uzg4MRAuD053Ex67Iu2lm2GovnVte1uKI3q7CXlMCYZ9ylZmAkPbTnjg9OVyD4f+IiUfgK4p3bE7r9p7jqSDLA==",
|
||||
"dependencies": {
|
||||
"@amplitude/types": "^0.3.2",
|
||||
"tslib": "^1.9.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/@amplitude/types": {
|
||||
"version": "0.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@amplitude/types/-/types-0.3.2.tgz",
|
||||
"integrity": "sha512-7+m7nhJMFGbpsppOUsCH8f4FOFyAxgKFuXkKknU/LP2CMYVjWEIoLTKKgaJPc2c8wXaK5KPXVetb8VeiGbuaGg==",
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "13.13.52",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.52.tgz",
|
||||
"integrity": "sha512-s3nugnZumCC//n4moGGe6tkNMyYEdaDBitVjwPxXmR5lnMG5dHePinH2EdxkG3Rh1ghFHHixAG4NJhpJW1rthQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/balanced-match": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
|
||||
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
|
||||
},
|
||||
"node_modules/big-integer": {
|
||||
"version": "1.6.52",
|
||||
"resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz",
|
||||
"integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==",
|
||||
"engines": {
|
||||
"node": ">=0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/binary": {
|
||||
"version": "0.3.0",
|
||||
"resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz",
|
||||
"integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==",
|
||||
"dependencies": {
|
||||
"buffers": "~0.1.1",
|
||||
"chainsaw": "~0.1.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/bluebird": {
|
||||
"version": "3.4.7",
|
||||
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz",
|
||||
"integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA=="
|
||||
},
|
||||
"node_modules/brace-expansion": {
|
||||
"version": "1.1.11",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
|
||||
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
|
||||
"dependencies": {
|
||||
"balanced-match": "^1.0.0",
|
||||
"concat-map": "0.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/buffer-indexof-polyfill": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz",
|
||||
"integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==",
|
||||
"engines": {
|
||||
"node": ">=0.10"
|
||||
}
|
||||
},
|
||||
"node_modules/buffers": {
|
||||
"version": "0.1.1",
|
||||
"resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz",
|
||||
"integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==",
|
||||
"engines": {
|
||||
"node": ">=0.2.0"
|
||||
}
|
||||
},
|
||||
"node_modules/chainsaw": {
|
||||
"version": "0.1.0",
|
||||
"resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz",
|
||||
"integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==",
|
||||
"dependencies": {
|
||||
"traverse": ">=0.3.0 <0.4"
|
||||
},
|
||||
"engines": {
|
||||
"node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/concat-map": {
|
||||
"version": "0.0.1",
|
||||
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
||||
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
|
||||
},
|
||||
"node_modules/core-util-is": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
|
||||
"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
|
||||
},
|
||||
"node_modules/duplexer2": {
|
||||
"version": "0.1.4",
|
||||
"resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
|
||||
"integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==",
|
||||
"dependencies": {
|
||||
"readable-stream": "^2.0.2"
|
||||
}
|
||||
},
|
||||
"node_modules/fs.realpath": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
|
||||
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
|
||||
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
|
||||
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
|
||||
},
|
||||
"node_modules/fstream": {
|
||||
"version": "1.0.12",
|
||||
"resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz",
|
||||
"integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==",
|
||||
"dependencies": {
|
||||
"graceful-fs": "^4.1.2",
|
||||
"inherits": "~2.0.0",
|
||||
"mkdirp": ">=0.5 0",
|
||||
"rimraf": "2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/glob": {
|
||||
"version": "7.2.3",
|
||||
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
|
||||
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
|
||||
"dependencies": {
|
||||
"fs.realpath": "^1.0.0",
|
||||
"inflight": "^1.0.4",
|
||||
"inherits": "2",
|
||||
"minimatch": "^3.1.1",
|
||||
"once": "^1.3.0",
|
||||
"path-is-absolute": "^1.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "*"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/isaacs"
|
||||
}
|
||||
},
|
||||
"node_modules/graceful-fs": {
|
||||
"version": "4.2.11",
|
||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
|
||||
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
|
||||
},
|
||||
"node_modules/inflight": {
|
||||
"version": "1.0.6",
|
||||
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
|
||||
"integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
|
||||
"dependencies": {
|
||||
"once": "^1.3.0",
|
||||
"wrappy": "1"
|
||||
}
|
||||
},
|
||||
"node_modules/inherits": {
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
|
||||
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
|
||||
},
|
||||
"node_modules/isarray": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
|
||||
"integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
|
||||
},
|
||||
"node_modules/java-mti": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "git+ssh://git@github.com/adelphes/java-mti.git#ec164ace68267813a1ca9df18651b51e3f3f067d",
|
||||
"dependencies": {
|
||||
"unzipper": "0.10.11"
|
||||
}
|
||||
},
|
||||
"node_modules/listenercount": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz",
|
||||
"integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ=="
|
||||
},
|
||||
"node_modules/minimatch": {
|
||||
"version": "3.1.2",
|
||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
|
||||
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
|
||||
"dependencies": {
|
||||
"brace-expansion": "^1.1.7"
|
||||
},
|
||||
"engines": {
|
||||
"node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/minimist": {
|
||||
"version": "1.2.8",
|
||||
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
|
||||
"integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/mkdirp": {
|
||||
"version": "0.5.6",
|
||||
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
|
||||
"integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
|
||||
"dependencies": {
|
||||
"minimist": "^1.2.6"
|
||||
},
|
||||
"bin": {
|
||||
"mkdirp": "bin/cmd.js"
|
||||
}
|
||||
},
|
||||
"node_modules/once": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
|
||||
"integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
|
||||
"dependencies": {
|
||||
"wrappy": "1"
|
||||
}
|
||||
},
|
||||
"node_modules/path-is-absolute": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
|
||||
"integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/process-nextick-args": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
|
||||
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
|
||||
},
|
||||
"node_modules/readable-stream": {
|
||||
"version": "2.3.8",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
|
||||
"integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
|
||||
"dependencies": {
|
||||
"core-util-is": "~1.0.0",
|
||||
"inherits": "~2.0.3",
|
||||
"isarray": "~1.0.0",
|
||||
"process-nextick-args": "~2.0.0",
|
||||
"safe-buffer": "~5.1.1",
|
||||
"string_decoder": "~1.1.1",
|
||||
"util-deprecate": "~1.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/rimraf": {
|
||||
"version": "2.7.1",
|
||||
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
|
||||
"integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
|
||||
"dependencies": {
|
||||
"glob": "^7.1.3"
|
||||
},
|
||||
"bin": {
|
||||
"rimraf": "bin.js"
|
||||
}
|
||||
},
|
||||
"node_modules/safe-buffer": {
|
||||
"version": "5.1.2",
|
||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
|
||||
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
|
||||
},
|
||||
"node_modules/setimmediate": {
|
||||
"version": "1.0.5",
|
||||
"resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
|
||||
"integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA=="
|
||||
},
|
||||
"node_modules/string_decoder": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
|
||||
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
|
||||
"dependencies": {
|
||||
"safe-buffer": "~5.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/traverse": {
|
||||
"version": "0.3.9",
|
||||
"resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz",
|
||||
"integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==",
|
||||
"engines": {
|
||||
"node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/tslib": {
|
||||
"version": "1.14.1",
|
||||
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
|
||||
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
|
||||
},
|
||||
"node_modules/unzipper": {
|
||||
"version": "0.10.11",
|
||||
"resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz",
|
||||
"integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==",
|
||||
"dependencies": {
|
||||
"big-integer": "^1.6.17",
|
||||
"binary": "~0.3.0",
|
||||
"bluebird": "~3.4.1",
|
||||
"buffer-indexof-polyfill": "~1.0.0",
|
||||
"duplexer2": "~0.1.4",
|
||||
"fstream": "^1.0.12",
|
||||
"graceful-fs": "^4.2.2",
|
||||
"listenercount": "~1.0.1",
|
||||
"readable-stream": "~2.3.6",
|
||||
"setimmediate": "~1.0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/util-deprecate": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
||||
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
|
||||
},
|
||||
"node_modules/uuid": {
|
||||
"version": "8.2.0",
|
||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.2.0.tgz",
|
||||
"integrity": "sha512-CYpGiFTUrmI6OBMkAdjSDM0k5h8SkkiTP4WAjQgDgNB1S3Ou9VBEvr6q0Kv2H1mMk7IWfxYGpMH5sd5AvcIV2Q==",
|
||||
"bin": {
|
||||
"uuid": "dist/bin/uuid"
|
||||
}
|
||||
},
|
||||
"node_modules/vscode-jsonrpc": {
|
||||
"version": "8.2.0",
|
||||
"resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz",
|
||||
"integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==",
|
||||
"engines": {
|
||||
"node": ">=14.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/vscode-languageserver": {
|
||||
"version": "6.1.1",
|
||||
"resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-6.1.1.tgz",
|
||||
"integrity": "sha512-DueEpkUAkD5XTR4MLYNr6bQIp/UFR0/IPApgXU3YfCBCB08u2sm9hRCs6DxYZELkk++STPjpcjksR2H8qI3cDQ==",
|
||||
"dependencies": {
|
||||
"vscode-languageserver-protocol": "^3.15.3"
|
||||
},
|
||||
"bin": {
|
||||
"installServerIntoExtension": "bin/installServerIntoExtension"
|
||||
}
|
||||
},
|
||||
"node_modules/vscode-languageserver-protocol": {
|
||||
"version": "3.17.5",
|
||||
"resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz",
|
||||
"integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==",
|
||||
"dependencies": {
|
||||
"vscode-jsonrpc": "8.2.0",
|
||||
"vscode-languageserver-types": "3.17.5"
|
||||
}
|
||||
},
|
||||
"node_modules/vscode-languageserver-textdocument": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.1.tgz",
|
||||
"integrity": "sha512-UIcJDjX7IFkck7cSkNNyzIz5FyvpQfY7sdzVy+wkKN/BLaD4DQ0ppXQrKePomCxTS7RrolK1I0pey0bG9eh8dA=="
|
||||
},
|
||||
"node_modules/vscode-languageserver-types": {
|
||||
"version": "3.17.5",
|
||||
"resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz",
|
||||
"integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg=="
|
||||
},
|
||||
"node_modules/vscode-uri": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-2.1.2.tgz",
|
||||
"integrity": "sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A=="
|
||||
},
|
||||
"node_modules/wrappy": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
||||
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
|
||||
}
|
||||
},
|
||||
"dependencies": {
|
||||
"@amplitude/node": {
|
||||
"version": "0.3.3",
|
||||
"resolved": "https://registry.npmjs.org/@amplitude/node/-/node-0.3.3.tgz",
|
||||
"integrity": "sha512-Uzg4MRAuD053Ex67Iu2lm2GovnVte1uKI3q7CXlMCYZ9ylZmAkPbTnjg9OVyD4f+IiUfgK4p3bE7r9p7jqSDLA==",
|
||||
"requires": {
|
||||
"@amplitude/types": "^0.3.2",
|
||||
"tslib": "^1.9.3"
|
||||
}
|
||||
},
|
||||
"@amplitude/types": {
|
||||
"version": "0.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@amplitude/types/-/types-0.3.2.tgz",
|
||||
"integrity": "sha512-7+m7nhJMFGbpsppOUsCH8f4FOFyAxgKFuXkKknU/LP2CMYVjWEIoLTKKgaJPc2c8wXaK5KPXVetb8VeiGbuaGg=="
|
||||
},
|
||||
"@types/node": {
|
||||
"version": "13.13.52",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.52.tgz",
|
||||
"integrity": "sha512-s3nugnZumCC//n4moGGe6tkNMyYEdaDBitVjwPxXmR5lnMG5dHePinH2EdxkG3Rh1ghFHHixAG4NJhpJW1rthQ==",
|
||||
"dev": true
|
||||
},
|
||||
"balanced-match": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
|
||||
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
|
||||
},
|
||||
"big-integer": {
|
||||
"version": "1.6.48",
|
||||
"resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz",
|
||||
"integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w=="
|
||||
"version": "1.6.52",
|
||||
"resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz",
|
||||
"integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg=="
|
||||
},
|
||||
"binary": {
|
||||
"version": "0.3.0",
|
||||
"resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz",
|
||||
"integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=",
|
||||
"integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==",
|
||||
"requires": {
|
||||
"buffers": "~0.1.1",
|
||||
"chainsaw": "~0.1.0"
|
||||
@@ -40,7 +433,7 @@
|
||||
"bluebird": {
|
||||
"version": "3.4.7",
|
||||
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz",
|
||||
"integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM="
|
||||
"integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA=="
|
||||
},
|
||||
"brace-expansion": {
|
||||
"version": "1.1.11",
|
||||
@@ -52,19 +445,19 @@
|
||||
}
|
||||
},
|
||||
"buffer-indexof-polyfill": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.1.tgz",
|
||||
"integrity": "sha1-qfuAbOgUXVQoUQznLyeLs2OmOL8="
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz",
|
||||
"integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A=="
|
||||
},
|
||||
"buffers": {
|
||||
"version": "0.1.1",
|
||||
"resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz",
|
||||
"integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s="
|
||||
"integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ=="
|
||||
},
|
||||
"chainsaw": {
|
||||
"version": "0.1.0",
|
||||
"resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz",
|
||||
"integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=",
|
||||
"integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==",
|
||||
"requires": {
|
||||
"traverse": ">=0.3.0 <0.4"
|
||||
}
|
||||
@@ -72,46 +465,25 @@
|
||||
"concat-map": {
|
||||
"version": "0.0.1",
|
||||
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
||||
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
|
||||
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
|
||||
},
|
||||
"core-util-is": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
|
||||
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
|
||||
},
|
||||
"debug": {
|
||||
"version": "3.2.6",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
|
||||
"integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
|
||||
"requires": {
|
||||
"ms": "^2.1.1"
|
||||
}
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
|
||||
"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
|
||||
},
|
||||
"duplexer2": {
|
||||
"version": "0.1.4",
|
||||
"resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
|
||||
"integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
|
||||
"integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==",
|
||||
"requires": {
|
||||
"readable-stream": "^2.0.2"
|
||||
}
|
||||
},
|
||||
"es6-promise": {
|
||||
"version": "4.2.8",
|
||||
"resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz",
|
||||
"integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w=="
|
||||
},
|
||||
"es6-promisify": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz",
|
||||
"integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=",
|
||||
"requires": {
|
||||
"es6-promise": "^4.0.3"
|
||||
}
|
||||
},
|
||||
"fs.realpath": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
|
||||
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
|
||||
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
|
||||
},
|
||||
"fstream": {
|
||||
"version": "1.0.12",
|
||||
@@ -125,36 +497,27 @@
|
||||
}
|
||||
},
|
||||
"glob": {
|
||||
"version": "7.1.6",
|
||||
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
|
||||
"integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
|
||||
"version": "7.2.3",
|
||||
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
|
||||
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
|
||||
"requires": {
|
||||
"fs.realpath": "^1.0.0",
|
||||
"inflight": "^1.0.4",
|
||||
"inherits": "2",
|
||||
"minimatch": "^3.0.4",
|
||||
"minimatch": "^3.1.1",
|
||||
"once": "^1.3.0",
|
||||
"path-is-absolute": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"graceful-fs": {
|
||||
"version": "4.2.4",
|
||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
|
||||
"integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw=="
|
||||
},
|
||||
"https-proxy-agent": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-3.0.0.tgz",
|
||||
"integrity": "sha512-y4jAxNEihqvBI5F3SaO2rtsjIOnnNA8sEbuiP+UhJZJHeM2NRm6c09ax2tgqme+SgUUvjao2fJXF4h3D6Cb2HQ==",
|
||||
"requires": {
|
||||
"agent-base": "^4.3.0",
|
||||
"debug": "^3.1.0"
|
||||
}
|
||||
"version": "4.2.11",
|
||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
|
||||
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
|
||||
},
|
||||
"inflight": {
|
||||
"version": "1.0.6",
|
||||
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
|
||||
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
|
||||
"integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
|
||||
"requires": {
|
||||
"once": "^1.3.0",
|
||||
"wrappy": "1"
|
||||
@@ -168,11 +531,11 @@
|
||||
"isarray": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
|
||||
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
|
||||
"integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
|
||||
},
|
||||
"java-mti": {
|
||||
"version": "github:adelphes/java-mti#ec164ace68267813a1ca9df18651b51e3f3f067d",
|
||||
"from": "github:adelphes/java-mti#ec164ac",
|
||||
"version": "git+ssh://git@github.com/adelphes/java-mti.git#ec164ace68267813a1ca9df18651b51e3f3f067d",
|
||||
"from": "java-mti@adelphes/java-mti#ec164ac",
|
||||
"requires": {
|
||||
"unzipper": "0.10.11"
|
||||
}
|
||||
@@ -180,46 +543,33 @@
|
||||
"listenercount": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz",
|
||||
"integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc="
|
||||
"integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ=="
|
||||
},
|
||||
"minimatch": {
|
||||
"version": "3.0.4",
|
||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
|
||||
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
|
||||
"version": "3.1.2",
|
||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
|
||||
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
|
||||
"requires": {
|
||||
"brace-expansion": "^1.1.7"
|
||||
}
|
||||
},
|
||||
"minimist": {
|
||||
"version": "1.2.5",
|
||||
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
|
||||
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
|
||||
},
|
||||
"mixpanel": {
|
||||
"version": "0.11.0",
|
||||
"resolved": "https://registry.npmjs.org/mixpanel/-/mixpanel-0.11.0.tgz",
|
||||
"integrity": "sha512-TS7AkCmfC+vGshlCOjEcITFoFxlt5fdSEqmN+d+pTXAhE5v+jPQW2uUcn9W+Oq4NVXz+kdskU09dsm9vmNl0ig==",
|
||||
"requires": {
|
||||
"https-proxy-agent": "3.0.0"
|
||||
}
|
||||
"version": "1.2.8",
|
||||
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
|
||||
"integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="
|
||||
},
|
||||
"mkdirp": {
|
||||
"version": "0.5.5",
|
||||
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
|
||||
"integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
|
||||
"version": "0.5.6",
|
||||
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
|
||||
"integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
|
||||
"requires": {
|
||||
"minimist": "^1.2.5"
|
||||
"minimist": "^1.2.6"
|
||||
}
|
||||
},
|
||||
"ms": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
||||
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
|
||||
},
|
||||
"once": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
|
||||
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
|
||||
"integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
|
||||
"requires": {
|
||||
"wrappy": "1"
|
||||
}
|
||||
@@ -227,7 +577,7 @@
|
||||
"path-is-absolute": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
|
||||
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
|
||||
"integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="
|
||||
},
|
||||
"process-nextick-args": {
|
||||
"version": "2.0.1",
|
||||
@@ -235,9 +585,9 @@
|
||||
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
|
||||
},
|
||||
"readable-stream": {
|
||||
"version": "2.3.7",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
|
||||
"integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
|
||||
"version": "2.3.8",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
|
||||
"integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
|
||||
"requires": {
|
||||
"core-util-is": "~1.0.0",
|
||||
"inherits": "~2.0.3",
|
||||
@@ -264,7 +614,7 @@
|
||||
"setimmediate": {
|
||||
"version": "1.0.5",
|
||||
"resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
|
||||
"integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
|
||||
"integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA=="
|
||||
},
|
||||
"string_decoder": {
|
||||
"version": "1.1.1",
|
||||
@@ -277,7 +627,12 @@
|
||||
"traverse": {
|
||||
"version": "0.3.9",
|
||||
"resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz",
|
||||
"integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk="
|
||||
"integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ=="
|
||||
},
|
||||
"tslib": {
|
||||
"version": "1.14.1",
|
||||
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
|
||||
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
|
||||
},
|
||||
"unzipper": {
|
||||
"version": "0.10.11",
|
||||
@@ -299,7 +654,7 @@
|
||||
"util-deprecate": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
||||
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
|
||||
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
|
||||
},
|
||||
"uuid": {
|
||||
"version": "8.2.0",
|
||||
@@ -307,9 +662,9 @@
|
||||
"integrity": "sha512-CYpGiFTUrmI6OBMkAdjSDM0k5h8SkkiTP4WAjQgDgNB1S3Ou9VBEvr6q0Kv2H1mMk7IWfxYGpMH5sd5AvcIV2Q=="
|
||||
},
|
||||
"vscode-jsonrpc": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-5.0.1.tgz",
|
||||
"integrity": "sha512-JvONPptw3GAQGXlVV2utDcHx0BiY34FupW/kI6mZ5x06ER5DdPG/tXWMVHjTNULF5uKPOUUD0SaXg5QaubJL0A=="
|
||||
"version": "8.2.0",
|
||||
"resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz",
|
||||
"integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA=="
|
||||
},
|
||||
"vscode-languageserver": {
|
||||
"version": "6.1.1",
|
||||
@@ -320,12 +675,12 @@
|
||||
}
|
||||
},
|
||||
"vscode-languageserver-protocol": {
|
||||
"version": "3.15.3",
|
||||
"resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.15.3.tgz",
|
||||
"integrity": "sha512-zrMuwHOAQRhjDSnflWdJG+O2ztMWss8GqUUB8dXLR/FPenwkiBNkMIJJYfSN6sgskvsF0rHAoBowNQfbyZnnvw==",
|
||||
"version": "3.17.5",
|
||||
"resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz",
|
||||
"integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==",
|
||||
"requires": {
|
||||
"vscode-jsonrpc": "^5.0.1",
|
||||
"vscode-languageserver-types": "3.15.1"
|
||||
"vscode-jsonrpc": "8.2.0",
|
||||
"vscode-languageserver-types": "3.17.5"
|
||||
}
|
||||
},
|
||||
"vscode-languageserver-textdocument": {
|
||||
@@ -334,9 +689,9 @@
|
||||
"integrity": "sha512-UIcJDjX7IFkck7cSkNNyzIz5FyvpQfY7sdzVy+wkKN/BLaD4DQ0ppXQrKePomCxTS7RrolK1I0pey0bG9eh8dA=="
|
||||
},
|
||||
"vscode-languageserver-types": {
|
||||
"version": "3.15.1",
|
||||
"resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.15.1.tgz",
|
||||
"integrity": "sha512-+a9MPUQrNGRrGU630OGbYVQ+11iOIovjCkqxajPa9w57Sd5ruK8WQNsslzpa0x/QJqC8kRc2DUxWjIFwoNm4ZQ=="
|
||||
"version": "3.17.5",
|
||||
"resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz",
|
||||
"integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg=="
|
||||
},
|
||||
"vscode-uri": {
|
||||
"version": "2.1.2",
|
||||
@@ -346,7 +701,7 @@
|
||||
"wrappy": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
||||
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
|
||||
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "langserver",
|
||||
"version": "1.0.3",
|
||||
"version": "1.0.4",
|
||||
"description": "Language server for Android development",
|
||||
"main": "server.js",
|
||||
"scripts": {
|
||||
@@ -9,8 +9,8 @@
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"@amplitude/node": "^0.3.3",
|
||||
"java-mti": "adelphes/java-mti#ec164ac",
|
||||
"mixpanel": "0.11.0",
|
||||
"uuid": "8.2.0",
|
||||
"vscode-languageserver": "6.1.1",
|
||||
"vscode-languageserver-textdocument": "1.0.1",
|
||||
|
||||
@@ -7,11 +7,9 @@ const {
|
||||
} = require('vscode-languageserver');
|
||||
const fs = require('fs');
|
||||
|
||||
const { TextDocument } = require('vscode-languageserver-textdocument');
|
||||
const { URI } = require('vscode-uri');
|
||||
|
||||
const { loadAndroidSystemLibrary } = require('./java/java-libraries');
|
||||
const { CEIType } = require('java-mti');
|
||||
|
||||
const { Settings } = require('./settings');
|
||||
const { trace } = require('./logging');
|
||||
@@ -19,10 +17,14 @@ const { clearDefaultCompletionEntries, getCompletionItems, resolveCompletionItem
|
||||
const { getSignatureHelp } = require('./method-signatures');
|
||||
const { FileURIMap, JavaDocInfo, indexAt, reparse } = require('./document');
|
||||
|
||||
const { v4: uuidv4 } = require('uuid');
|
||||
const analytics = require('./analytics');
|
||||
const package_json = require('./package.json');
|
||||
|
||||
/**
|
||||
* @typedef {import('vscode-languageserver-textdocument').TextDocument} TextDocument
|
||||
* @typedef {import('java-mti').CEIType} CEIType
|
||||
*/
|
||||
|
||||
/**
|
||||
* The global map of Android system types
|
||||
* @typedef {Map<string, CEIType>} AndroidLibrary
|
||||
@@ -135,7 +137,7 @@ connection.onInitialize((params) => {
|
||||
}
|
||||
|
||||
Settings.set(startupOpts.initialSettings);
|
||||
analytics.init(undefined, startupOpts.mpuid, uuidv4(), package_json, { vscode_version: startupOpts.vscodeVersion });
|
||||
analytics.init(undefined, startupOpts.uid, startupOpts.session_id, '', package_json, startupOpts.vscode_props, 'langserver-start');
|
||||
|
||||
loadCodeCompletionLibrary(startupOpts.extensionPath, Settings.codeCompletionLibraries);
|
||||
|
||||
|
||||
3888
package-lock.json
generated
3888
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
29
package.json
29
package.json
@@ -2,7 +2,7 @@
|
||||
"name": "android-dev-ext",
|
||||
"displayName": "Android",
|
||||
"description": "Android debugging support for VS Code",
|
||||
"version": "1.3.1",
|
||||
"version": "1.4.0",
|
||||
"publisher": "adelphes",
|
||||
"preview": true,
|
||||
"license": "MIT",
|
||||
@@ -428,22 +428,23 @@
|
||||
"test": "node ./node_modules/vscode/bin/test"
|
||||
},
|
||||
"dependencies": {
|
||||
"long": "4.0.0",
|
||||
"unzipper": "0.10.11",
|
||||
"uuid": "8.2.0",
|
||||
"vscode-debugadapter": "1.40.0",
|
||||
"vscode-debugprotocol": "1.40.0",
|
||||
"@vscode/debugadapter": "1.64.0",
|
||||
"@vscode/debugprotocol": "^1.64.0",
|
||||
"long": "^5.2.3",
|
||||
"unzipper": "0.10.14",
|
||||
"uuid": "9.0.1",
|
||||
"vscode-languageclient": "6.1.3",
|
||||
"ws": "7.3.0",
|
||||
"xmldom": "0.1.31",
|
||||
"xpath": "0.0.27"
|
||||
"ws": "8.16.0",
|
||||
"xmldom": "0.6.0",
|
||||
"xpath": "0.0.34"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/mocha": "^5.2.5",
|
||||
"@types/node": "^10.12.5",
|
||||
"@types/mocha": "^10.0.06",
|
||||
"@types/node": "^20.10.6",
|
||||
"@types/vscode": "^1.24.0",
|
||||
"eslint": "^5.9.0",
|
||||
"mocha": "^5.2.0",
|
||||
"typescript": "^3.8.3"
|
||||
"eslint": "^8.56.0",
|
||||
"eslint-plugin-jsdoc": "^47.0.2",
|
||||
"mocha": "^10.2.0",
|
||||
"typescript": "^5.3.3"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ const { workspace, EventEmitter, Uri } = vscode;
|
||||
class AndroidContentProvider {
|
||||
|
||||
constructor() {
|
||||
/** @type {Map<Uri,*>} */
|
||||
/** @type {Map<vscode.Uri,*>} */
|
||||
this._docs = new Map(); // Map<uri, LogcatContent>
|
||||
this._onDidChange = new EventEmitter();
|
||||
}
|
||||
@@ -27,11 +27,11 @@ class AndroidContentProvider {
|
||||
* [document](TextDocument). Resources allocated should be released when
|
||||
* the corresponding document has been [closed](#workspace.onDidCloseTextDocument).
|
||||
*
|
||||
* @param {Uri} uri An uri which scheme matches the scheme this provider was [registered](#workspace.registerTextDocumentContentProvider) for.
|
||||
* @param {vscode.CancellationToken} token A cancellation token.
|
||||
* @param {vscode.Uri} uri An uri which scheme matches the scheme this provider was [registered](#workspace.registerTextDocumentContentProvider) for.
|
||||
* @param {vscode.CancellationToken} _token A cancellation token.
|
||||
* @return {string|Thenable<string>} A string or a thenable that resolves to such.
|
||||
*/
|
||||
provideTextDocumentContent(uri, token) {
|
||||
provideTextDocumentContent(uri, _token) {
|
||||
const doc = this._docs.get(uri);
|
||||
if (doc) {
|
||||
return doc.content();
|
||||
@@ -44,7 +44,7 @@ class AndroidContentProvider {
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Uri} uri
|
||||
* @param {vscode.Uri} uri
|
||||
*/
|
||||
provideLogcatDocumentContent(uri) {
|
||||
// LogcatContent depends upon AndroidContentProvider, so we must delay-load this
|
||||
|
||||
112
src/debugMain.js
112
src/debugMain.js
@@ -1,18 +1,17 @@
|
||||
const {
|
||||
DebugSession,
|
||||
InitializedEvent, TerminatedEvent, StoppedEvent, BreakpointEvent, ThreadEvent, OutputEvent,
|
||||
Thread, StackFrame, Scope, Source, Breakpoint } = require('vscode-debugadapter');
|
||||
Thread, StackFrame, Scope, Source, Breakpoint } = require('@vscode/debugadapter');
|
||||
|
||||
// node and external modules
|
||||
const os = require('os');
|
||||
const path = require('path');
|
||||
const uuidv4 = require('uuid').v4;
|
||||
|
||||
// our stuff
|
||||
const { ADBClient } = require('./adbclient');
|
||||
const { APKFileInfo } = require('./apk-file-info');
|
||||
const { Debugger } = require('./debugger');
|
||||
const { AttachBuildInfo, BreakpointOptions, DebuggerException, DebuggerValue, JavaBreakpointEvent, JavaClassType, JavaExceptionEvent, LaunchBuildInfo, SourceLocation } = require('./debugger-types');
|
||||
const { AttachBuildInfo, BreakpointOptions, DebuggerException, JavaClassType, LaunchBuildInfo } = require('./debugger-types');
|
||||
const { evaluate } = require('./expression/evaluate');
|
||||
const { PackageInfo } = require('./package-searcher');
|
||||
const ADBSocket = require('./sockets/adbsocket');
|
||||
@@ -20,9 +19,16 @@ const { AndroidThread } = require('./threads');
|
||||
const { checkADBStarted, getAndroidSourcesFolder } = require('./utils/android');
|
||||
const { D, initLogToClient, onMessagePrint } = require('./utils/print');
|
||||
const { hasValidSourceFileExtension } = require('./utils/source-file');
|
||||
const { VariableManager } = require('./variable-manager');
|
||||
const analytics = require('../langserver/analytics');
|
||||
|
||||
/**
|
||||
* @typedef {import('./debugger-types').DebuggerValue} DebuggerValue
|
||||
* @typedef {import('./debugger-types').JavaBreakpointEvent} JavaBreakpointEvent
|
||||
* @typedef {import('./debugger-types').JavaExceptionEvent} JavaExceptionEvent
|
||||
* @typedef {import('./debugger-types').SourceLocation} SourceLocation
|
||||
* @typedef {import('./variable-manager').VariableManager} VariableManager
|
||||
*/
|
||||
|
||||
class AndroidDebugSession extends DebugSession {
|
||||
|
||||
/**
|
||||
@@ -111,9 +117,8 @@ class AndroidDebugSession extends DebugSession {
|
||||
|
||||
this.terminate_reason = '';
|
||||
|
||||
this.session_id = uuidv4();
|
||||
this.session_start = new Date();
|
||||
analytics.init();
|
||||
analytics.init(undefined, undefined, undefined, '', require('../package.json'), {}, 'debugger-start');
|
||||
|
||||
// this debugger uses one-based lines and columns
|
||||
this.setDebuggerLinesStartAt1(true);
|
||||
@@ -126,7 +131,7 @@ class AndroidDebugSession extends DebugSession {
|
||||
/**
|
||||
* The 'initialize' request is the first request called by the frontend
|
||||
* to interrogate the features the debug adapter provides.
|
||||
* @param {import('vscode-debugprotocol').DebugProtocol.InitializeResponse} response
|
||||
* @param {import('@vscode/debugprotocol').DebugProtocol.InitializeResponse} response
|
||||
*/
|
||||
initializeRequest(response) {
|
||||
response.body.exceptionBreakpointFilters = [
|
||||
@@ -139,8 +144,8 @@ class AndroidDebugSession extends DebugSession {
|
||||
response.body.supportsExceptionInfoRequest = true;
|
||||
response.body.supportsHitConditionalBreakpoints = true;
|
||||
|
||||
this.sendResponse(response);
|
||||
}
|
||||
this.sendResponse(response);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} msg
|
||||
@@ -167,7 +172,7 @@ class AndroidDebugSession extends DebugSession {
|
||||
|
||||
/**
|
||||
* @param {string} msg
|
||||
* @param {import('vscode-debugprotocol').DebugProtocol.Response} response
|
||||
* @param {import('@vscode/debugprotocol').DebugProtocol.Response} response
|
||||
* @param {boolean} silent
|
||||
*/
|
||||
failRequest(msg, response, silent = false) {
|
||||
@@ -186,7 +191,7 @@ class AndroidDebugSession extends DebugSession {
|
||||
/**
|
||||
* @param {string} requestName
|
||||
* @param {number} threadId
|
||||
* @param {import('vscode-debugprotocol').DebugProtocol.Response} response
|
||||
* @param {import('@vscode/debugprotocol').DebugProtocol.Response} response
|
||||
*/
|
||||
failRequestNoThread(requestName, threadId, response) {
|
||||
this.failRequest(`${requestName} failed. Thread ${threadId} not found`, response);
|
||||
@@ -195,7 +200,7 @@ class AndroidDebugSession extends DebugSession {
|
||||
/**
|
||||
* @param {string} requestName
|
||||
* @param {number} threadId
|
||||
* @param {import('vscode-debugprotocol').DebugProtocol.Response} response
|
||||
* @param {import('@vscode/debugprotocol').DebugProtocol.Response} response
|
||||
*/
|
||||
failRequestThreadNotSuspended(requestName, threadId, response) {
|
||||
this.failRequest(`${requestName} failed. Thread ${threadId} is not suspended`, response);
|
||||
@@ -204,7 +209,7 @@ class AndroidDebugSession extends DebugSession {
|
||||
/**
|
||||
* @param {string} requestName
|
||||
* @param {number} threadId
|
||||
* @param {import('vscode-debugprotocol').DebugProtocol.Response} response
|
||||
* @param {import('@vscode/debugprotocol').DebugProtocol.Response} response
|
||||
*/
|
||||
cancelRequestThreadNotSuspended(requestName, threadId, response) {
|
||||
// now that vscode can resume threads before the locals,callstack,etc are retrieved, we only need to cancel the request
|
||||
@@ -334,8 +339,8 @@ class AndroidDebugSession extends DebugSession {
|
||||
* @property {string} targetDevice
|
||||
* @property {boolean} trace
|
||||
*
|
||||
* @param {import('vscode-debugprotocol').DebugProtocol.AttachResponse} response
|
||||
* @param {import('vscode-debugprotocol').DebugProtocol.AttachRequestArguments & AndroidAttachArguments} args
|
||||
* @param {import('@vscode/debugprotocol').DebugProtocol.AttachResponse} response
|
||||
* @param {import('@vscode/debugprotocol').DebugProtocol.AttachRequestArguments & AndroidAttachArguments} args
|
||||
*/
|
||||
async attachRequest(response, args) {
|
||||
this.debug_mode = 'attach';
|
||||
@@ -445,8 +450,7 @@ class AndroidDebugSession extends DebugSession {
|
||||
await this.dbgr.resume();
|
||||
|
||||
analytics.event('debug-started', {
|
||||
dbg_session_id: this.session_id,
|
||||
dbg_start: this.session_start.toLocaleTimeString(),
|
||||
dbg_start: this.session_start.toTimeString(),
|
||||
dbg_tz: this.session_start.getTimezoneOffset(),
|
||||
dbg_kind: 'attach',
|
||||
dbg_device_api: this.device_api_level,
|
||||
@@ -492,8 +496,8 @@ class AndroidDebugSession extends DebugSession {
|
||||
* @property {boolean} trace
|
||||
|
||||
* The entry point to the debugger
|
||||
* @param {import('vscode-debugprotocol').DebugProtocol.LaunchResponse} response
|
||||
* @param {import('vscode-debugprotocol').DebugProtocol.LaunchRequestArguments & AndroidLaunchArguments} args
|
||||
* @param {import('@vscode/debugprotocol').DebugProtocol.LaunchResponse} response
|
||||
* @param {import('@vscode/debugprotocol').DebugProtocol.LaunchRequestArguments & AndroidLaunchArguments} args
|
||||
*/
|
||||
async launchRequest(response, args) {
|
||||
this.debug_mode = 'launch';
|
||||
@@ -611,8 +615,7 @@ class AndroidDebugSession extends DebugSession {
|
||||
await this.dbgr.resume();
|
||||
|
||||
analytics.event('debug-started', {
|
||||
dbg_session_id: this.session_id,
|
||||
dbg_start: this.session_start.toLocaleTimeString(),
|
||||
dbg_start: this.session_start.toTimeString(),
|
||||
dbg_tz: this.session_start.getTimezoneOffset(),
|
||||
dbg_kind: 'debug',
|
||||
dbg_device_api: this.device_api_level,
|
||||
@@ -791,7 +794,7 @@ class AndroidDebugSession extends DebugSession {
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {import('vscode-debugprotocol').DebugProtocol.ConfigurationDoneResponse} response
|
||||
* @param {import('@vscode/debugprotocol').DebugProtocol.ConfigurationDoneResponse} response
|
||||
*/
|
||||
configurationDoneRequest(response) {
|
||||
D('configurationDoneRequest');
|
||||
@@ -811,13 +814,12 @@ class AndroidDebugSession extends DebugSession {
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {import('vscode-debugprotocol').DebugProtocol.DisconnectResponse} response
|
||||
* @param {import('@vscode/debugprotocol').DebugProtocol.DisconnectResponse} response
|
||||
*/
|
||||
async disconnectRequest(response) {
|
||||
D('disconnectRequest');
|
||||
this._isDisconnecting = true;
|
||||
analytics.event('debug-end', {
|
||||
dbg_session_id: this.session_id,
|
||||
dbg_elapsed: Math.trunc((Date.now() - this.session_start.getTime())/1e3),
|
||||
dbg_kind: this.debug_mode,
|
||||
dbg_term_reason: this.terminate_reason,
|
||||
@@ -862,8 +864,8 @@ class AndroidDebugSession extends DebugSession {
|
||||
/**
|
||||
* Called when the user requests a change to breakpoints in a source file
|
||||
* Note: all breakpoints in a file are always sent in args, even if they are not changing
|
||||
* @param {import('vscode-debugprotocol').DebugProtocol.SetBreakpointsResponse} response
|
||||
* @param {import('vscode-debugprotocol').DebugProtocol.SetBreakpointsArguments} args
|
||||
* @param {import('@vscode/debugprotocol').DebugProtocol.SetBreakpointsResponse} response
|
||||
* @param {import('@vscode/debugprotocol').DebugProtocol.SetBreakpointsArguments} args
|
||||
*/
|
||||
async setBreakPointsRequest(response, args) {
|
||||
const source_filename = args.source && args.source.path;
|
||||
@@ -933,7 +935,7 @@ class AndroidDebugSession extends DebugSession {
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {import('vscode-debugprotocol').DebugProtocol.SourceBreakpoint[]} breakpoints
|
||||
* @param {import('@vscode/debugprotocol').DebugProtocol.SourceBreakpoint[]} breakpoints
|
||||
* @param {string} relative_fpn
|
||||
*/
|
||||
async setupBreakpointsInFile(breakpoints, relative_fpn) {
|
||||
@@ -971,8 +973,8 @@ class AndroidDebugSession extends DebugSession {
|
||||
};
|
||||
|
||||
/**
|
||||
* @param {import('vscode-debugprotocol').DebugProtocol.SetExceptionBreakpointsResponse} response
|
||||
* @param {import('vscode-debugprotocol').DebugProtocol.SetExceptionBreakpointsArguments} args
|
||||
* @param {import('@vscode/debugprotocol').DebugProtocol.SetExceptionBreakpointsResponse} response
|
||||
* @param {import('@vscode/debugprotocol').DebugProtocol.SetExceptionBreakpointsArguments} args
|
||||
*/
|
||||
async setExceptionBreakPointsRequest(response, args) {
|
||||
await this.dbgr.clearBreakOnExceptions();
|
||||
@@ -989,7 +991,7 @@ class AndroidDebugSession extends DebugSession {
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {import('vscode-debugprotocol').DebugProtocol.ThreadsResponse} response
|
||||
* @param {import('@vscode/debugprotocol').DebugProtocol.ThreadsResponse} response
|
||||
*/
|
||||
async threadsRequest(response) {
|
||||
if (!this._threads.length) {
|
||||
@@ -1015,8 +1017,8 @@ class AndroidDebugSession extends DebugSession {
|
||||
|
||||
/**
|
||||
* Returns a stack trace for the given threadId
|
||||
* @param {import('vscode-debugprotocol').DebugProtocol.StackTraceResponse} response
|
||||
* @param {import('vscode-debugprotocol').DebugProtocol.StackTraceArguments} args
|
||||
* @param {import('@vscode/debugprotocol').DebugProtocol.StackTraceResponse} response
|
||||
* @param {import('@vscode/debugprotocol').DebugProtocol.StackTraceArguments} args
|
||||
*/
|
||||
async stackTraceRequest(response, args) {
|
||||
D(`stackTraceRequest thread:${args.threadId}`);
|
||||
@@ -1101,8 +1103,8 @@ class AndroidDebugSession extends DebugSession {
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {import('vscode-debugprotocol').DebugProtocol.ScopesResponse} response
|
||||
* @param {import('vscode-debugprotocol').DebugProtocol.ScopesArguments} args
|
||||
* @param {import('@vscode/debugprotocol').DebugProtocol.ScopesResponse} response
|
||||
* @param {import('@vscode/debugprotocol').DebugProtocol.ScopesArguments} args
|
||||
*/
|
||||
async scopesRequest(response, args) {
|
||||
D(`scopesRequest frame:${args.frameId}`);
|
||||
@@ -1133,8 +1135,8 @@ class AndroidDebugSession extends DebugSession {
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {import('vscode-debugprotocol').DebugProtocol.SourceResponse} response
|
||||
* @param {import('vscode-debugprotocol').DebugProtocol.SourceArguments} args
|
||||
* @param {import('@vscode/debugprotocol').DebugProtocol.SourceResponse} response
|
||||
* @param {import('@vscode/debugprotocol').DebugProtocol.SourceArguments} args
|
||||
*/
|
||||
sourceRequest(response, args) {
|
||||
D(`sourceRequest: ${args.sourceReference}`);
|
||||
@@ -1157,8 +1159,8 @@ class AndroidDebugSession extends DebugSession {
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {import('vscode-debugprotocol').DebugProtocol.VariablesResponse} response
|
||||
* @param {import('vscode-debugprotocol').DebugProtocol.VariablesArguments} args
|
||||
* @param {import('@vscode/debugprotocol').DebugProtocol.VariablesResponse} response
|
||||
* @param {import('@vscode/debugprotocol').DebugProtocol.VariablesArguments} args
|
||||
*/
|
||||
async variablesRequest(response, args) {
|
||||
D(`variablesRequest variablesReference:${args.variablesReference}`);
|
||||
@@ -1245,8 +1247,8 @@ class AndroidDebugSession extends DebugSession {
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {import('vscode-debugprotocol').DebugProtocol.ContinueResponse} response
|
||||
* @param {import('vscode-debugprotocol').DebugProtocol.ContinueArguments} args
|
||||
* @param {import('@vscode/debugprotocol').DebugProtocol.ContinueResponse} response
|
||||
* @param {import('@vscode/debugprotocol').DebugProtocol.ContinueArguments} args
|
||||
*/
|
||||
continueRequest(response, args) {
|
||||
D(`Continue thread:${args.threadId}`);
|
||||
@@ -1271,8 +1273,8 @@ class AndroidDebugSession extends DebugSession {
|
||||
/**
|
||||
* Called by the user to start a step operation
|
||||
* @param {DebuggerStepType} which
|
||||
* @param {import('vscode-debugprotocol').DebugProtocol.NextResponse} response
|
||||
* @param {import('vscode-debugprotocol').DebugProtocol.NextArguments} args
|
||||
* @param {import('@vscode/debugprotocol').DebugProtocol.NextResponse} response
|
||||
* @param {import('@vscode/debugprotocol').DebugProtocol.NextArguments} args
|
||||
*/
|
||||
doStep(which, response, args) {
|
||||
D(`step ${which}`);
|
||||
@@ -1296,24 +1298,24 @@ class AndroidDebugSession extends DebugSession {
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {import('vscode-debugprotocol').DebugProtocol.NextResponse} response
|
||||
* @param {import('vscode-debugprotocol').DebugProtocol.StepInArguments} args
|
||||
* @param {import('@vscode/debugprotocol').DebugProtocol.NextResponse} response
|
||||
* @param {import('@vscode/debugprotocol').DebugProtocol.StepInArguments} args
|
||||
*/
|
||||
stepInRequest(response, args) {
|
||||
this.doStep('in', response, args);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {import('vscode-debugprotocol').DebugProtocol.NextResponse} response
|
||||
* @param {import('vscode-debugprotocol').DebugProtocol.NextArguments} args
|
||||
* @param {import('@vscode/debugprotocol').DebugProtocol.NextResponse} response
|
||||
* @param {import('@vscode/debugprotocol').DebugProtocol.NextArguments} args
|
||||
*/
|
||||
nextRequest(response, args) {
|
||||
this.doStep('over', response, args);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {import('vscode-debugprotocol').DebugProtocol.NextResponse} response
|
||||
* @param {import('vscode-debugprotocol').DebugProtocol.StepOutArguments} args
|
||||
* @param {import('@vscode/debugprotocol').DebugProtocol.NextResponse} response
|
||||
* @param {import('@vscode/debugprotocol').DebugProtocol.StepOutArguments} args
|
||||
*/
|
||||
stepOutRequest(response, args) {
|
||||
this.doStep('out', response, args);
|
||||
@@ -1334,8 +1336,8 @@ class AndroidDebugSession extends DebugSession {
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {import('vscode-debugprotocol').DebugProtocol.ExceptionInfoResponse} response
|
||||
* @param {import('vscode-debugprotocol').DebugProtocol.ExceptionInfoArguments} args
|
||||
* @param {import('@vscode/debugprotocol').DebugProtocol.ExceptionInfoResponse} response
|
||||
* @param {import('@vscode/debugprotocol').DebugProtocol.ExceptionInfoArguments} args
|
||||
*/
|
||||
async exceptionInfoRequest(response, args) {
|
||||
D(`exceptionInfoRequest: ${args.threadId}`);
|
||||
@@ -1407,8 +1409,8 @@ class AndroidDebugSession extends DebugSession {
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {import('vscode-debugprotocol').DebugProtocol.SetVariableResponse} response
|
||||
* @param {import('vscode-debugprotocol').DebugProtocol.SetVariableArguments} args
|
||||
* @param {import('@vscode/debugprotocol').DebugProtocol.SetVariableResponse} response
|
||||
* @param {import('@vscode/debugprotocol').DebugProtocol.SetVariableArguments} args
|
||||
*/
|
||||
async setVariableRequest(response, args) {
|
||||
|
||||
@@ -1439,8 +1441,8 @@ class AndroidDebugSession extends DebugSession {
|
||||
|
||||
/**
|
||||
* Called by VSCode to perform watch, console and hover evaluations
|
||||
* @param {import('vscode-debugprotocol').DebugProtocol.EvaluateResponse} response
|
||||
* @param {import('vscode-debugprotocol').DebugProtocol.EvaluateArguments} args
|
||||
* @param {import('@vscode/debugprotocol').DebugProtocol.EvaluateResponse} response
|
||||
* @param {import('@vscode/debugprotocol').DebugProtocol.EvaluateArguments} args
|
||||
*/
|
||||
async evaluateRequest(response, args) {
|
||||
|
||||
@@ -1509,7 +1511,7 @@ class AndroidDebugSession extends DebugSession {
|
||||
class EvalQueueEntry {
|
||||
/**
|
||||
* @param {string} expression
|
||||
* @param {import('vscode-debugprotocol').DebugProtocol.EvaluateResponse} response
|
||||
* @param {import('@vscode/debugprotocol').DebugProtocol.EvaluateResponse} response
|
||||
* @param {DebuggerValue[]} locals
|
||||
* @param {VariableManager} var_manager
|
||||
* @param {AndroidThread} thread
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
const { ADBClient } = require('./adbclient');
|
||||
const { PackageInfo } = require('./package-searcher');
|
||||
//const { JavaType } = require('./util');
|
||||
const { splitSourcePath } = require('./utils/source-file');
|
||||
|
||||
/**
|
||||
* @typedef {import('./package-searcher').PackageInfo} PackageInfo
|
||||
* @typedef {import('./adbclient').ADBClient} ADBClient
|
||||
*/
|
||||
|
||||
class BuildInfo {
|
||||
/**
|
||||
* @param {Map<string,PackageInfo>} packages
|
||||
@@ -713,8 +715,8 @@ class TypeNotAvailable extends DebuggerTypeInfo {
|
||||
|
||||
constructor(type) {
|
||||
super(TypeNotAvailable.info, type);
|
||||
super.fields = [];
|
||||
super.methods = [];
|
||||
this.fields = [];
|
||||
this.methods = [];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -8,9 +8,7 @@ const { D } = require('./utils/print');
|
||||
const { sleep } = require('./utils/thread');
|
||||
const { decodeJavaStringLiteral } = require('./utils/char-decode');
|
||||
const {
|
||||
AttachBuildInfo,
|
||||
BreakpointLocation,
|
||||
BreakpointOptions,
|
||||
DebuggerBreakpoint,
|
||||
DebuggerFrameInfo,
|
||||
DebuggerMethodInfo,
|
||||
@@ -30,6 +28,11 @@ const {
|
||||
TypeNotAvailable,
|
||||
} = require('./debugger-types');
|
||||
|
||||
/**
|
||||
* @typedef {import('./debugger-types').AttachBuildInfo} AttachBuildInfo
|
||||
* @typedef {import('./debugger-types').BreakpointOptions} BreakpointOptions
|
||||
*/
|
||||
|
||||
class Debugger extends EventEmitter {
|
||||
|
||||
constructor () {
|
||||
|
||||
@@ -20,7 +20,7 @@ const { D } = require('../utils/print');
|
||||
const { decodeJavaCharLiteral } = require('../utils/char-decode');
|
||||
|
||||
/**
|
||||
* @param {Long.Long} long
|
||||
* @param {Long} long
|
||||
*/
|
||||
function hex_long(long) {
|
||||
return long.toUnsigned().toString(16).padStart(64/4, '0');
|
||||
@@ -334,7 +334,7 @@ function evaluate_binary_long_expression(lhs, rhs, operator) {
|
||||
return Long.fromString(`${local.value}`, false, radix);
|
||||
}
|
||||
|
||||
/** @type {Long.Long|boolean} */
|
||||
/** @type {Long|boolean} */
|
||||
let a = longify(lhs), b = longify(rhs);
|
||||
|
||||
// dividend cannot be zero for / and %
|
||||
@@ -362,7 +362,7 @@ function evaluate_binary_long_expression(lhs, rhs, operator) {
|
||||
case '>=': a = a.gte(b); break;
|
||||
default: throw invalid_operator(operator);
|
||||
}
|
||||
/** @type {boolean|Long.Long|string} */
|
||||
/** @type {boolean|Long|string} */
|
||||
let value = a, result_type = 'boolean';
|
||||
if (typeof a !== 'boolean') {
|
||||
value = hex_long(a);
|
||||
@@ -875,7 +875,7 @@ function incompatible_cast(type, local) {
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Long.Long} value
|
||||
* @param {Long} value
|
||||
* @param {8|16|32} bits
|
||||
*/
|
||||
function signed_from_long(value, bits) {
|
||||
|
||||
30
src/jdwp.js
30
src/jdwp.js
@@ -1,11 +1,12 @@
|
||||
const { D, E } = require('./utils/print');
|
||||
const {
|
||||
DebuggerMethodInfo,
|
||||
DebuggerTypeInfo,
|
||||
JavaTaggedValue,
|
||||
} = require('./debugger-types');
|
||||
const { JavaType } = require('./debugger-types');
|
||||
|
||||
/**
|
||||
* @typedef {import('./debugger-types').DebuggerMethodInfo} DebuggerMethodInfo
|
||||
* @typedef {import('./debugger-types').DebuggerTypeInfo} DebuggerTypeInfo
|
||||
* @typedef {import('./debugger-types').JavaTaggedValue} JavaTaggedValue
|
||||
*/
|
||||
|
||||
/** the next command ID */
|
||||
let gCommandId = 0;
|
||||
|
||||
@@ -99,9 +100,26 @@ class Reply {
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.errorcode === 50945) {
|
||||
// errorcode===50945 (0xC701) refers to a DDM chunk (set 199, cmd 1) for a
|
||||
// previous command. It's unclear why these are being sent but it appears
|
||||
// they're safe to ignore.
|
||||
//
|
||||
// see https://android.googlesource.com/platform/art/+/master/adbconnection/adbconnection.cc
|
||||
this.decoded = {
|
||||
empty: true,
|
||||
errorcode: 0
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.errorcode !== 0) {
|
||||
// https://docs.oracle.com/javase/7/docs/platform/jpda/jdwp/jdwp-protocol.html#JDWP_Error
|
||||
E(`JDWP command failed '${this.command.name}'. Error ${this.errorcode}`, this);
|
||||
if (this.command !== undefined) {
|
||||
E(`JDWP command failed '${this.command.name}'. Error ${this.errorcode}`, this);
|
||||
} else {
|
||||
E(`Unknown JDWP command with id '${this.id}' failed. Error ${this.errorcode}`, this);
|
||||
}
|
||||
}
|
||||
|
||||
if (!this.errorcode && this.command && this.command.replydecodefn) {
|
||||
|
||||
@@ -5,7 +5,8 @@
|
||||
"checkJs": true,
|
||||
"lib": [
|
||||
"es2018"
|
||||
]
|
||||
],
|
||||
"resolveJsonModule": true
|
||||
},
|
||||
"exclude": [
|
||||
"node_modules"
|
||||
|
||||
@@ -66,24 +66,27 @@ function parseManifest(xml) {
|
||||
launcher: '',
|
||||
}
|
||||
const doc = new dom().parseFromString(xml);
|
||||
const attributeValue = (/** @type {xpath.SelectedValue} */ selectedValue) => {
|
||||
return xpath.isAttribute(selectedValue) ? selectedValue.value : '';
|
||||
};
|
||||
// extract the package name from the manifest
|
||||
const pkg_xpath = '/manifest/@package';
|
||||
result.package = xpath.select1(pkg_xpath, doc).value;
|
||||
result.package = attributeValue(xpath.select1(pkg_xpath, doc));
|
||||
const android_select = xpath.useNamespaces({"android": "http://schemas.android.com/apk/res/android"});
|
||||
|
||||
// extract a list of all the (named) activities declared in the manifest
|
||||
const activity_xpath = '/manifest/application/activity/@android:name';
|
||||
const activity_nodes = android_select(activity_xpath, doc);
|
||||
if (activity_nodes) {
|
||||
result.activities = activity_nodes.map(n => n.value);
|
||||
if (Array.isArray(activity_nodes)) {
|
||||
result.activities = activity_nodes.map(n => attributeValue(n));
|
||||
}
|
||||
|
||||
// extract the default launcher activity
|
||||
const launcher_xpath = '/manifest/application/activity[intent-filter/action[@android:name="android.intent.action.MAIN"] and intent-filter/category[@android:name="android.intent.category.LAUNCHER"]]/@android:name';
|
||||
const launcher_nodes = android_select(launcher_xpath, doc);
|
||||
// should we warn if there's more than one?
|
||||
if (launcher_nodes && launcher_nodes.length >= 1) {
|
||||
result.launcher = launcher_nodes[0].value
|
||||
if (Array.isArray(launcher_nodes) && launcher_nodes.length >= 1) {
|
||||
result.launcher = attributeValue(launcher_nodes[0]);
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
@@ -15,12 +15,13 @@ class AndroidSocket extends EventEmitter {
|
||||
}
|
||||
|
||||
connect(port, hostname) {
|
||||
const stackOnError = new Error().stack;
|
||||
return new Promise((resolve, reject) => {
|
||||
if (this.socket) {
|
||||
return reject(new Error(`${this.which} Socket connect failed. Socket already connected.`));
|
||||
return reject(new Error(`${this.which} Socket connect failed. Socket already connected. ${stackOnError}`));
|
||||
}
|
||||
const connection_error = err => {
|
||||
return reject(new Error(`${this.which} Socket connect failed. ${err.message}.`));
|
||||
return reject(new Error(`${this.which} Socket connect failed. ${err.message}. ${stackOnError}`));
|
||||
}
|
||||
const post_connection_error = err => {
|
||||
this.socket_error = err;
|
||||
@@ -45,7 +46,8 @@ class AndroidSocket extends EventEmitter {
|
||||
resolve();
|
||||
})
|
||||
.on('error', err => error_handler(err));
|
||||
this.socket.connect(port, hostname);
|
||||
// for some reason if hostname is left blank, it will sometimes return ECONNREFUSED
|
||||
this.socket.connect(port, hostname || '127.0.0.1');
|
||||
});
|
||||
}
|
||||
|
||||
@@ -68,18 +70,21 @@ class AndroidSocket extends EventEmitter {
|
||||
*/
|
||||
async read_bytes(length, format, timeout_ms) {
|
||||
//D(`reading ${length} bytes`);
|
||||
let actual_length = length;
|
||||
if (typeof actual_length === 'undefined') {
|
||||
let actual_length = undefined;
|
||||
if (typeof length === 'undefined') {
|
||||
if (this.readbuffer.byteLength > 0 || this.socket_ended) {
|
||||
actual_length = this.readbuffer.byteLength;
|
||||
}
|
||||
}
|
||||
if (actual_length < 0) {
|
||||
throw new Error(`${this.which} socket read failed. Attempt to read ${actual_length} bytes.`);
|
||||
}
|
||||
if (length === 'length+data' && this.readbuffer.byteLength >= 4) {
|
||||
length = actual_length = this.readbuffer.readUInt32BE(0);
|
||||
}
|
||||
if (typeof length === 'number') {
|
||||
actual_length = length;
|
||||
}
|
||||
if (actual_length < 0) {
|
||||
throw new Error(`${this.which} socket read failed. Attempt to read ${actual_length} bytes.`);
|
||||
}
|
||||
if (this.socket_ended) {
|
||||
if (actual_length <= 0 || (this.readbuffer.byteLength < actual_length)) {
|
||||
this.check_socket_active('read');
|
||||
@@ -88,12 +93,10 @@ class AndroidSocket extends EventEmitter {
|
||||
// do we have enough data in the buffer?
|
||||
if (this.readbuffer.byteLength >= actual_length) {
|
||||
//D(`got ${actual_length} bytes`);
|
||||
let data = this.readbuffer.slice(0, actual_length);
|
||||
const data = this.readbuffer.slice(0, actual_length);
|
||||
this.readbuffer = this.readbuffer.slice(actual_length);
|
||||
if (format) {
|
||||
data = data.toString(format);
|
||||
}
|
||||
return Promise.resolve(data);
|
||||
const result = format ? data.toString(format) : data;
|
||||
return Promise.resolve(result);
|
||||
}
|
||||
// wait for the socket to update and then retry the read
|
||||
await this.wait_for_socket_data(timeout_ms);
|
||||
|
||||
@@ -1,9 +1,13 @@
|
||||
const { Debugger } = require('./debugger');
|
||||
const { DebuggerFrameInfo, DebuggerValue, JavaType, LiteralValue, VariableValue } = require('./debugger-types');
|
||||
const { DebuggerValue, JavaType, LiteralValue, VariableValue } = require('./debugger-types');
|
||||
const { assignVariable } = require('./expression/assign');
|
||||
const { NumberBaseConverter } = require('./utils/nbc');
|
||||
const { VariableManager } = require('./variable-manager');
|
||||
|
||||
/**
|
||||
* @typedef {import('./debugger').Debugger} Debugger
|
||||
* @typedef {import('./debugger-types').DebuggerFrameInfo} DebuggerFrameInfo
|
||||
*/
|
||||
|
||||
/**
|
||||
* @param {DebuggerValue[]} variables
|
||||
* @param {boolean} thisFirst
|
||||
|
||||
11
src/state.js
11
src/state.js
@@ -1,11 +0,0 @@
|
||||
const vscode = require('vscode');
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const os = require('os');
|
||||
|
||||
var adext = {};
|
||||
try {
|
||||
Object.assign(adext, JSON.parse(fs.readFileSync(path.join(path.dirname(__dirname),'package.json'),'utf8')));
|
||||
} catch (ex) { }
|
||||
|
||||
exports.adext = adext;
|
||||
@@ -1,8 +1,13 @@
|
||||
const { Debugger } = require('./debugger');
|
||||
const { DebuggerException, DebuggerFrameInfo, SourceLocation } = require('./debugger-types');
|
||||
const { DebuggerStackFrame } = require('./stack-frame');
|
||||
const { VariableManager } = require('./variable-manager');
|
||||
|
||||
/**
|
||||
* @typedef {import('./debugger').Debugger} Debugger
|
||||
* @typedef {import('./debugger-types').DebuggerException} DebuggerException
|
||||
* @typedef {import('./debugger-types').DebuggerFrameInfo} DebuggerFrameInfo
|
||||
* @typedef {import('./debugger-types').SourceLocation} SourceLocation
|
||||
*/
|
||||
|
||||
// vscode doesn't like thread id reuse (the Android runtime is OK with it)
|
||||
let nextVSCodeThreadId = 0;
|
||||
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
const { DebuggerValue, JavaType, VariableValue } = require('./debugger-types');
|
||||
const { JavaType, VariableValue } = require('./debugger-types');
|
||||
const { NumberBaseConverter } = require('./utils/nbc');
|
||||
|
||||
/**
|
||||
* @typedef {import('./debugger-types').DebuggerValue} DebuggerValue
|
||||
*/
|
||||
|
||||
/**
|
||||
* Class to manage variable references used by VS code.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user