From c2ba5f2722c08576a16356bfe6c8e04730bb4e09 Mon Sep 17 00:00:00 2001 From: Mark Wiemer <7833360+mark-wiemer@users.noreply.github.com> Date: Sat, 28 Sep 2024 21:41:03 -0700 Subject: [PATCH] Fix debug commands, remove unused stuffs (#39) --- .gitignore | 2 +- .vscode/launch.json | 61 - client/src/browserClientMain.ts | 127 -- client/src/extension.ts | 9 +- package-lock.json | 2835 +---------------------------- package.json | 8 +- package.nls.json | 37 - package.nls.zh-cn.json | 127 -- readme.md | 363 +--- server/cli/cli.ts | 24 - server/src/browserServerMain.ts | 165 -- test-data/.gitignore | 1 - tmgrammar-test/0-v2-demo.ahk | 3 - tmgrammar-test/0-v2-demo.ahk.snap | 31 - tools/install.js | 1325 -------------- 15 files changed, 43 insertions(+), 5075 deletions(-) delete mode 100644 .vscode/launch.json delete mode 100644 client/src/browserClientMain.ts delete mode 100644 package.nls.json delete mode 100644 package.nls.zh-cn.json delete mode 100644 server/cli/cli.ts delete mode 100644 server/src/browserServerMain.ts delete mode 100644 test-data/.gitignore delete mode 100644 tmgrammar-test/0-v2-demo.ahk delete mode 100644 tmgrammar-test/0-v2-demo.ahk.snap delete mode 100644 tools/install.js diff --git a/.gitignore b/.gitignore index 96a5e3e3..6ff933f9 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,4 @@ scripts/* *.js *.js.map *.tsbuildinfo -**/out/**/*.d.ts \ No newline at end of file +**/out/**/*.d.ts diff --git a/.vscode/launch.json b/.vscode/launch.json deleted file mode 100644 index 7aae83be..00000000 --- a/.vscode/launch.json +++ /dev/null @@ -1,61 +0,0 @@ -// A launch configuration that compiles the extension and then opens it inside a new window -{ - "version": "0.2.0", - "configurations": [ - { - "name": "Run Web Extension in VS Code", - "type": "pwa-extensionHost", - "debugWebWorkerHost": true, - "request": "launch", - "args": [ - "--extensionDevelopmentPath=${workspaceFolder}", - "--extensionDevelopmentKind=web" - ], - "outFiles": ["${workspaceFolder}/client/dist/**/*.js"], - "preLaunchTask": "npm: build:watch" - }, - { - "name": "Extension Tests", - "type": "extensionHost", - "request": "launch", - "runtimeExecutable": "${execPath}", - "preLaunchTask": "npm: watch", - "args": [ - "--disable-extensions", - "--extensionDevelopmentPath=${workspaceFolder}" - ], - "testConfiguration": "${workspaceFolder}/.vscode-test.js", - "outFiles": ["${workspaceFolder}/client/dist/test/**/*.js"] - }, - { - "type": "extensionHost", - "request": "launch", - "name": "Launch Client", - "runtimeExecutable": "${execPath}", - "args": ["--extensionDevelopmentPath=${workspaceFolder}"], - "env": { - "VSCODE_AHK_SERVER_PATH": "server/dist/server.js", - "SYNTAXES_PATH": "syntaxes" - }, - "outFiles": ["${workspaceFolder}/client/dist/**/*.js"], - "preLaunchTask": "npm: build:dev" - }, - { - "type": "node", - "request": "attach", - "name": "Attach to Server", - "port": 6009, - "restart": true, - "outFiles": [ - "${workspaceFolder}/server/out/**/*.js", - "${workspaceFolder}/server/dist/**/*.js" - ] - } - ], - "compounds": [ - { - "name": "Client + Server", - "configurations": ["Launch Client", "Attach to Server"] - } - ] -} diff --git a/client/src/browserClientMain.ts b/client/src/browserClientMain.ts deleted file mode 100644 index 09f3312b..00000000 --- a/client/src/browserClientMain.ts +++ /dev/null @@ -1,127 +0,0 @@ -//* ⚠️ Not currently used in AHK++ - -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import { commands, ExtensionContext, languages, Range, RelativePattern, SnippetString, Uri, window, workspace, WorkspaceEdit } from 'vscode'; -import { LanguageClient } from 'vscode-languageclient/browser'; - -let client: LanguageClient; - -// this method is called when vs code is activated -export function activate(context: ExtensionContext) { - const serverMain = Uri.joinPath(context.extensionUri, 'server/dist/browserServerMain.js'); - /* eslint-disable-next-line */ - const request_handlers: Record any> = { - 'ahk++.getActiveTextEditorUriAndPosition': () => { - const editor = window.activeTextEditor; - if (!editor) return; - const uri = editor.document.uri.toString(), position = editor.selection.end; - return { uri, position }; - }, - 'ahk++.insertSnippet': async (params: [string, Range?]) => { - const editor = window.activeTextEditor; - if (!editor) return; - if (params[1]) { - const { start, end } = params[1]; - await editor.insertSnippet(new SnippetString(params[0]), new Range(start.line, start.character, end.line, end.character)); - } else - editor.insertSnippet(new SnippetString(params[0])); - }, - 'ahk++.setTextDocumentLanguage': async (params: [string, string?]) => { - const lang = params[1] || 'ahk'; - if (!(await languages.getLanguages()).includes(lang)) { - window.showErrorMessage(`Unknown language id: ${lang}`); - return; - } - const uri = params[0], it = workspace.textDocuments.find(it => it.uri.toString() === uri); - it && languages.setTextDocumentLanguage(it, lang); - }, - 'ahk2.getWorkspaceFiles': async (params: string[]) => { - const all = !params.length; - if (workspace.workspaceFolders) { - if (all) - return (await workspace.findFiles('**/*.{ahk,ah2,ahk2}')).forEach(it => it.toString()); - else { - const files: string[] = []; - for (const folder of workspace.workspaceFolders) - if (params.includes(folder.uri.toString().toLowerCase())) - files.push(...(await workspace.findFiles(new RelativePattern(folder, '*.{ahk,ah2,ahk2}'))).map(it => it.toString())); - return files; - } - } - }, - 'ahk2.getWorkspaceFileContent': async (params: string[]) => (await workspace.openTextDocument(Uri.parse(params[0]))).getText() - }; - - client = new LanguageClient('AutoHotkey2', 'AutoHotkey2', { - documentSelector: [{ language: 'ahk2' }], - markdown: { isTrusted: true, supportHtml: true }, - initializationOptions: { - extensionUri: context.extensionUri.toString(), - commands: Object.keys(request_handlers), - ...JSON.parse(JSON.stringify(workspace.getConfiguration('AutoHotkey2'))) - } - }, new Worker(serverMain.toString())); - - context.subscriptions.push( - commands.registerTextEditorCommand('ahk2.update.versioninfo', async textEditor => { - const infos: { content: string, uri: string, range: Range, single: boolean }[] | null = await client.sendRequest('ahk2.getVersionInfo', textEditor.document.uri.toString()); - if (!infos?.length) { - await textEditor.insertSnippet(new SnippetString([ - "/************************************************************************", - " * @description ${1:}", - " * @author ${2:}", - " * @date ${3:$CURRENT_YEAR/$CURRENT_MONTH/$CURRENT_DATE}", - " * @version ${4:0.0.0}", - " ***********************************************************************/", - "", "" - ].join('\n')), new Range(0, 0, 0, 0)); - } else { - const d = new Date; - let contents: string[] = [], value: string | undefined; - for (const info of infos) { - if (info.single) - contents.push(info.content.replace( - /(?<=^;\s*@ahk2exe-setversion\s+)(\S+|(?=[\r\n]))/i, - s => (value ||= s, '\0'))); - else contents.push(info.content.replace( - /(?<=^\s*[;*]?\s*@date[:\s]\s*)(\S+|(?=[\r\n]))/im, - date => [d.getFullYear(), d.getMonth() + 1, d.getDate()].map( - n => n.toString().padStart(2, '0')).join(date.includes('.') ? '.' : '/') - ).replace(/(?<=^\s*[;*]?\s*@version[:\s]\s*)(\S+|(?=[\r\n]))/im, s => (value ||= s, '\0'))); - } - if (value !== undefined) { - value = await window.showInputBox({ - value, prompt: 'Enter version info' - }); - if (!value) - return; - contents = contents.map(s => s.replace('\0', value!)); - } - const ed = new WorkspaceEdit(), uri = textEditor.document.uri; - infos.forEach(it => it.content !== (value = contents.shift()) && - ed.replace(uri, it.range, value!)); - ed.size && workspace.applyEdit(ed); - } - }), - commands.registerTextEditorCommand('ahk2.switch', textEditor => { - const doc = textEditor.document; - languages.setTextDocumentLanguage(doc, doc.languageId === 'ahk2' ? 'ahk' : 'ahk2'); - }), - workspace.onDidCloseTextDocument(e => { - client.sendNotification('onDidCloseTextDocument', e.isClosed ? - { uri: '', id: '' } : { uri: e.uri.toString(), id: e.languageId }); - }) - ); - - client.start().then(() => { - Object.entries(request_handlers).forEach(handler => client.onRequest(...handler)); - }); -} - -export function deactivate() { - return client?.stop(); -} \ No newline at end of file diff --git a/client/src/extension.ts b/client/src/extension.ts index 28fc4343..224f116c 100644 --- a/client/src/extension.ts +++ b/client/src/extension.ts @@ -125,7 +125,7 @@ export function activate(context: ExtensionContext): Promise { }; // Create the language client and start the client. - client = new LanguageClient('AutoHotkey2', 'AutoHotkey2', serverOptions, clientOptions); + client = new LanguageClient('AHK++', 'AHK++', serverOptions, clientOptions); loadlocalize(context.extensionPath + '/package.nls'); textdecoders.push(new TextDecoder(env.language.startsWith('zh-') ? 'gbk' : 'windows-1252')); @@ -216,10 +216,9 @@ export function activate(context: ExtensionContext): Promise { commands.registerTextEditorCommand('ahk++.run', textEditor => runScript(textEditor)), commands.registerTextEditorCommand('ahk++.runSelection', textEditor => runScript(textEditor, true)), commands.registerCommand('ahk++.stop', stopRunningScript), - commands.registerCommand('ahk++.debug.file', () => beginDebug('f')), - commands.registerCommand('ahk++.debug.configs', () => beginDebug('c')), - commands.registerCommand('ahk++.debug.params', () => beginDebug('p')), - commands.registerCommand('ahk++.debug.attach', () => beginDebug('a')), + commands.registerCommand('ahk++.debugConfigs', () => beginDebug('c')), + commands.registerCommand('ahk++.debugParams', () => beginDebug('p')), + commands.registerCommand('ahk++.debugAttach', () => beginDebug('a')), commands.registerCommand('ahk++.selectSyntaxes', selectSyntaxes), commands.registerTextEditorCommand('ahk++.updateVersionInfo', async textEditor => { if (!server_is_ready) diff --git a/package-lock.json b/package-lock.json index 3d0f8aaf..59244092 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,24 +16,19 @@ }, "devDependencies": { "@eslint/js": "^9.4.0", + "@types/mocha": "^10.0.8", "@types/node": "^20.16.0", - "@types/sinon": "^17.0.3", "@types/vscode": "^1.82.0", - "@vscode/test-cli": "^0.0.10", - "@vscode/test-electron": "^2.4.1", - "@vscode/test-web": "^0.0.56", "del-cli": "^5.1.0", "esbuild": "^0.23.1", "eslint": "^9.4.0", "globals": "^15.4.0", "mocha": "^10.7.0", "prettier": "3.3.3", - "sinon": "^18.0.0", "sort-package-json": "^2.10.0", "ts-loader": "^9.4.0", "typescript": "^5.3.2", "typescript-eslint": "^7.12.0", - "vscode-tmgrammar-test": "^0.1.3", "webpack": "^5.74.0", "webpack-cli": "^4.10.0" }, @@ -81,13 +76,6 @@ "node": ">=6.9.0" } }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmmirror.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true, - "license": "MIT" - }, "node_modules/@discoveryjs/json-ext": { "version": "0.5.7", "resolved": "https://registry.npmmirror.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", @@ -658,63 +646,6 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmmirror.com/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmmirror.com/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.5", "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", @@ -779,36 +710,6 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@koa/cors": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/@koa/cors/-/cors-5.0.0.tgz", - "integrity": "sha512-x/iUDjcS90W69PryLDIMgFyV21YLTnG9zOpPXS7Bkt2b8AsY3zZsIpOLBkYr9fBcF3HbkKaER5hOBZLfpLgYNw==", - "dev": true, - "license": "MIT", - "dependencies": { - "vary": "^1.1.2" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@koa/router": { - "version": "12.0.1", - "resolved": "https://registry.npmmirror.com/@koa/router/-/router-12.0.1.tgz", - "integrity": "sha512-ribfPYfHb+Uw3b27Eiw6NPqjhIhTpVFzEWLwyc/1Xp+DCdwRRyIlAUODX+9bPARF6aQtUu1+/PHzdNvRzcs/+Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.3.4", - "http-errors": "^2.0.0", - "koa-compose": "^4.1.0", - "methods": "^1.1.2", - "path-to-regexp": "^6.2.1" - }, - "engines": { - "node": ">= 12" - } - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -847,80 +748,6 @@ "node": ">= 8" } }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmmirror.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@playwright/browser-chromium": { - "version": "1.45.3", - "resolved": "https://registry.npmmirror.com/@playwright/browser-chromium/-/browser-chromium-1.45.3.tgz", - "integrity": "sha512-UVPW8HveE8SghaahoMy8CfG0QdJ2mO0BZLOcPT8nlQh7Z97Gkv4e3Ad69D1oCqM3m3zYkDPAiGB+hOASNS0d/g==", - "dev": true, - "hasInstallScript": true, - "license": "Apache-2.0", - "dependencies": { - "playwright-core": "1.45.3" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "11.2.2", - "resolved": "https://registry.npmmirror.com/@sinonjs/fake-timers/-/fake-timers-11.2.2.tgz", - "integrity": "sha512-G2piCSxQ7oWOxwGSAyFHfPIsyeJGXYtc6mFbnFA+kRXkiEnTl8c/8jul2S329iFBnDI9HGoeWWAZvuvOkZccgw==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, - "node_modules/@sinonjs/samsam": { - "version": "8.0.0", - "resolved": "https://registry.npmmirror.com/@sinonjs/samsam/-/samsam-8.0.0.tgz", - "integrity": "sha512-Bp8KUVlLp8ibJZrnvq2foVhP0IVX2CIprMJPK0vqGqgrDa0OHVKeZyBykqskkrdxV6yKBPmGasO8LVjAKR3Gew==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^2.0.0", - "lodash.get": "^4.4.2", - "type-detect": "^4.0.8" - } - }, - "node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/@sinonjs/commons/-/commons-2.0.0.tgz", - "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/text-encoding": { - "version": "0.7.2", - "resolved": "https://registry.npmmirror.com/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz", - "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==", - "dev": true, - "license": "(Unlicense OR Apache-2.0)" - }, "node_modules/@types/eslint": { "version": "8.56.10", "resolved": "https://registry.npmmirror.com/@types/eslint/-/eslint-8.56.10.tgz", @@ -950,13 +777,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmmirror.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -972,9 +792,9 @@ "license": "MIT" }, "node_modules/@types/mocha": { - "version": "10.0.7", - "resolved": "https://registry.npmmirror.com/@types/mocha/-/mocha-10.0.7.tgz", - "integrity": "sha512-GN8yJ1mNTcFcah/wKEFIJckJx9iJLoMSzWcfRRuxz/Jk+U6KQNnml+etbtxFK8lPjzOw3zp4Ha/kjSst9fsHYw==", + "version": "10.0.8", + "resolved": "https://registry.npmmirror.com/@types/mocha/-/mocha-10.0.8.tgz", + "integrity": "sha512-HfMcUmy9hTMJh66VNcmeC9iVErIZJli2bszuXc6julh5YGuRb/W5OnkHjwLNYdFlMis0sY3If5SEAp+PktdJjw==", "dev": true, "license": "MIT" }, @@ -995,23 +815,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/sinon": { - "version": "17.0.3", - "resolved": "https://registry.npmmirror.com/@types/sinon/-/sinon-17.0.3.tgz", - "integrity": "sha512-j3uovdn8ewky9kRBG19bOwaZbexJu/XjtkHyjvUgt4xfPFz18dcORIMqnYh66Fx3Powhcr85NT5+er3+oViapw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/sinonjs__fake-timers": "*" - } - }, - "node_modules/@types/sinonjs__fake-timers": { - "version": "8.1.5", - "resolved": "https://registry.npmmirror.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.5.tgz", - "integrity": "sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/vscode": { "version": "1.90.0", "resolved": "https://registry.npmmirror.com/@types/vscode/-/vscode-1.90.0.tgz", @@ -1137,209 +940,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/@vscode/test-cli": { - "version": "0.0.10", - "resolved": "https://registry.npmmirror.com/@vscode/test-cli/-/test-cli-0.0.10.tgz", - "integrity": "sha512-B0mMH4ia+MOOtwNiLi79XhA+MLmUItIC8FckEuKrVAVriIuSWjt7vv4+bF8qVFiNFe4QRfzPaIZk39FZGWEwHA==", - "dev": true, - "dependencies": { - "@types/mocha": "^10.0.2", - "c8": "^9.1.0", - "chokidar": "^3.5.3", - "enhanced-resolve": "^5.15.0", - "glob": "^10.3.10", - "minimatch": "^9.0.3", - "mocha": "^10.2.0", - "supports-color": "^9.4.0", - "yargs": "^17.7.2" - }, - "bin": { - "vscode-test": "out/bin.mjs" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@vscode/test-cli/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@vscode/test-cli/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmmirror.com/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@vscode/test-cli/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@vscode/test-cli/node_modules/supports-color": { - "version": "9.4.0", - "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-9.4.0.tgz", - "integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/@vscode/test-electron": { - "version": "2.4.1", - "resolved": "https://registry.npmmirror.com/@vscode/test-electron/-/test-electron-2.4.1.tgz", - "integrity": "sha512-Gc6EdaLANdktQ1t+zozoBVRynfIsMKMc94Svu1QreOBC8y76x4tvaK32TljrLi1LI2+PK58sDVbL7ALdqf3VRQ==", - "dev": true, - "dependencies": { - "http-proxy-agent": "^7.0.2", - "https-proxy-agent": "^7.0.5", - "jszip": "^3.10.1", - "ora": "^7.0.1", - "semver": "^7.6.2" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/@vscode/test-web": { - "version": "0.0.56", - "resolved": "https://registry.npmmirror.com/@vscode/test-web/-/test-web-0.0.56.tgz", - "integrity": "sha512-lR688n+D6A9odw+IZ5cU8CYr2YXLB61bGgyZpPVJe/sJy4/DYX5CAxPb7Wj9ZMYL41CTvWq5DeXtfCjlabPcYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@koa/cors": "^5.0.0", - "@koa/router": "^12.0.1", - "@playwright/browser-chromium": "^1.45.0", - "glob": "^10.4.2", - "gunzip-maybe": "^1.4.2", - "http-proxy-agent": "^7.0.2", - "https-proxy-agent": "^7.0.4", - "koa": "^2.15.3", - "koa-morgan": "^1.0.1", - "koa-mount": "^4.0.0", - "koa-static": "^5.0.0", - "minimist": "^1.2.8", - "playwright": "^1.45.0", - "tar-fs": "^3.0.6", - "vscode-uri": "^3.0.8" - }, - "bin": { - "vscode-test-web": "out/index.js" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/@vscode/test-web/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@vscode/test-web/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmmirror.com/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@vscode/test-web/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@vscode/test-web/node_modules/tar-fs": { - "version": "3.0.6", - "resolved": "https://registry.npmmirror.com/tar-fs/-/tar-fs-3.0.6.tgz", - "integrity": "sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0", - "tar-stream": "^3.1.5" - }, - "optionalDependencies": { - "bare-fs": "^2.1.1", - "bare-path": "^2.1.0" - } - }, - "node_modules/@vscode/test-web/node_modules/tar-stream": { - "version": "3.1.7", - "resolved": "https://registry.npmmirror.com/tar-stream/-/tar-stream-3.1.7.tgz", - "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "b4a": "^1.6.4", - "fast-fifo": "^1.2.0", - "streamx": "^2.15.0" - } - }, "node_modules/@webassemblyjs/ast": { "version": "1.12.1", "resolved": "https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.12.1.tgz", @@ -1554,20 +1154,6 @@ "dev": true, "license": "Apache-2.0" }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmmirror.com/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/acorn": { "version": "8.11.3", "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.11.3.tgz", @@ -1601,19 +1187,6 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmmirror.com/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, "node_modules/aggregate-error": { "version": "4.0.1", "resolved": "https://registry.npmmirror.com/aggregate-error/-/aggregate-error-4.0.1.tgz", @@ -1732,130 +1305,24 @@ "node": ">=0.10.0" } }, - "node_modules/b4a": { - "version": "1.6.6", - "resolved": "https://registry.npmmirror.com/b4a/-/b4a-1.6.6.tgz", - "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==", - "dev": true, - "license": "Apache-2.0" - }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "license": "MIT" }, - "node_modules/bare-events": { - "version": "2.4.2", - "resolved": "https://registry.npmmirror.com/bare-events/-/bare-events-2.4.2.tgz", - "integrity": "sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q==", + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, - "license": "Apache-2.0", - "optional": true - }, - "node_modules/bare-fs": { - "version": "2.3.1", - "resolved": "https://registry.npmmirror.com/bare-fs/-/bare-fs-2.3.1.tgz", - "integrity": "sha512-W/Hfxc/6VehXlsgFtbB5B4xFcsCl+pAh30cYhoFyXErf6oGrwjh8SwiPAdHgpmWonKuYpZgGywN0SXt7dgsADA==", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "bare-events": "^2.0.0", - "bare-path": "^2.0.0", - "bare-stream": "^2.0.0" - } - }, - "node_modules/bare-os": { - "version": "2.4.0", - "resolved": "https://registry.npmmirror.com/bare-os/-/bare-os-2.4.0.tgz", - "integrity": "sha512-v8DTT08AS/G0F9xrhyLtepoo9EJBJ85FRSMbu1pQUlAf6A8T0tEEQGMVObWeqpjhSPXsE0VGlluFBJu2fdoTNg==", - "dev": true, - "license": "Apache-2.0", - "optional": true - }, - "node_modules/bare-path": { - "version": "2.1.3", - "resolved": "https://registry.npmmirror.com/bare-path/-/bare-path-2.1.3.tgz", - "integrity": "sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "bare-os": "^2.1.0" - } - }, - "node_modules/bare-stream": { - "version": "2.1.3", - "resolved": "https://registry.npmmirror.com/bare-stream/-/bare-stream-2.1.3.tgz", - "integrity": "sha512-tiDAH9H/kP+tvNO5sczyn9ZAA7utrSMobyDchsnyyXBuUe2FSQWbxhtuHB8jwpHYYevVo2UJpcmvvjrbHboUUQ==", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "streamx": "^2.18.0" - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/basic-auth": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/basic-auth/-/basic-auth-2.0.1.tgz", - "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "5.1.2" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/basic-auth/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "license": "MIT" - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bottleneck": { - "version": "2.19.5", - "resolved": "https://registry.npmmirror.com/bottleneck/-/bottleneck-2.19.5.tgz", - "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==", - "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/brace-expansion": { "version": "1.1.11", @@ -1888,16 +1355,6 @@ "dev": true, "license": "ISC" }, - "node_modules/browserify-zlib": { - "version": "0.1.4", - "resolved": "https://registry.npmmirror.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz", - "integrity": "sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "pako": "~0.2.0" - } - }, "node_modules/browserslist": { "version": "4.23.0", "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.23.0.tgz", @@ -1938,111 +1395,6 @@ "dev": true, "license": "MIT" }, - "node_modules/c8": { - "version": "9.1.0", - "resolved": "https://registry.npmmirror.com/c8/-/c8-9.1.0.tgz", - "integrity": "sha512-mBWcT5iqNir1zIkzSPyI3NCR9EZCVI3WUD+AVO17MVWTSFNyUueXE82qTeampNtTr+ilN/5Ua3j24LgbCKjDVg==", - "dev": true, - "license": "ISC", - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@istanbuljs/schema": "^0.1.3", - "find-up": "^5.0.0", - "foreground-child": "^3.1.1", - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-report": "^3.0.1", - "istanbul-reports": "^3.1.6", - "test-exclude": "^6.0.0", - "v8-to-istanbul": "^9.0.0", - "yargs": "^17.7.2", - "yargs-parser": "^21.1.1" - }, - "bin": { - "c8": "bin/c8.js" - }, - "engines": { - "node": ">=14.14.0" - } - }, - "node_modules/c8/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/c8/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/c8/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/c8/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cache-content-type": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/cache-content-type/-/cache-content-type-1.0.1.tgz", - "integrity": "sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-types": "^2.1.18", - "ylru": "^1.2.0" - }, - "engines": { - "node": ">= 6.0.0" - } - }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz", @@ -2198,124 +1550,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cli-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-4.0.0.tgz", - "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", - "dev": true, - "dependencies": { - "restore-cursor": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmmirror.com/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmmirror.com/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/cliui/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/cliui/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/cliui/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/cliui/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, "node_modules/clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmmirror.com/clone-deep/-/clone-deep-4.0.1.tgz", @@ -2331,17 +1565,6 @@ "node": ">=6" } }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmmirror.com/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz", @@ -2373,56 +1596,6 @@ "dev": true, "license": "MIT" }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmmirror.com/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmmirror.com/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, - "node_modules/cookies": { - "version": "0.9.1", - "resolved": "https://registry.npmmirror.com/cookies/-/cookies-0.9.1.tgz", - "integrity": "sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==", - "dev": true, - "license": "MIT", - "dependencies": { - "depd": "~2.0.0", - "keygrip": "~1.1.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -2506,13 +1679,6 @@ "node": ">=0.10.0" } }, - "node_modules/deep-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==", - "dev": true, - "license": "MIT" - }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz", @@ -2610,34 +1776,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, "node_modules/detect-indent": { "version": "7.0.1", "resolved": "https://registry.npmmirror.com/detect-indent/-/detect-indent-7.0.1.tgz", @@ -2684,66 +1822,6 @@ "node": ">=8" } }, - "node_modules/duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmmirror.com/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dev": true, - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "node_modules/duplexify/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "license": "MIT", - "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/duplexify/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "license": "MIT" - }, - "node_modules/duplexify/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmmirror.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true, - "license": "MIT" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true, - "license": "MIT" - }, "node_modules/electron-to-chromium": { "version": "1.4.796", "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.796.tgz", @@ -2751,33 +1829,6 @@ "dev": true, "license": "ISC" }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, - "license": "MIT" - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, "node_modules/enhanced-resolve": { "version": "5.17.0", "resolved": "https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz", @@ -2872,13 +1923,6 @@ "node": ">=6" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true, - "license": "MIT" - }, "node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -3250,13 +2294,6 @@ "dev": true, "license": "MIT" }, - "node_modules/fast-fifo": { - "version": "1.3.2", - "resolved": "https://registry.npmmirror.com/fast-fifo/-/fast-fifo-1.3.2.tgz", - "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", - "dev": true, - "license": "MIT" - }, "node_modules/fast-glob": { "version": "3.3.2", "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.2.tgz", @@ -3392,33 +2429,6 @@ "dev": true, "license": "ISC" }, - "node_modules/foreground-child": { - "version": "3.2.1", - "resolved": "https://registry.npmmirror.com/foreground-child/-/foreground-child-3.2.1.tgz", - "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmmirror.com/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -3574,24 +2584,6 @@ "dev": true, "license": "MIT" }, - "node_modules/gunzip-maybe": { - "version": "1.4.2", - "resolved": "https://registry.npmmirror.com/gunzip-maybe/-/gunzip-maybe-1.4.2.tgz", - "integrity": "sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==", - "dev": true, - "license": "MIT", - "dependencies": { - "browserify-zlib": "^0.1.4", - "is-deflate": "^1.0.0", - "is-gzip": "^1.0.0", - "peek-stream": "^1.1.0", - "pumpify": "^1.3.3", - "through2": "^2.0.3" - }, - "bin": { - "gunzip-maybe": "bin.js" - } - }, "node_modules/hard-rejection": { "version": "2.1.0", "resolved": "https://registry.npmmirror.com/hard-rejection/-/hard-rejection-2.1.0.tgz", @@ -3612,35 +2604,6 @@ "node": ">=4" } }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz", @@ -3671,136 +2634,12 @@ "dev": true, "license": "ISC", "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmmirror.com/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true, - "license": "MIT" - }, - "node_modules/http-assert": { - "version": "1.5.0", - "resolved": "https://registry.npmmirror.com/http-assert/-/http-assert-1.5.0.tgz", - "integrity": "sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-equal": "~1.0.1", - "http-errors": "~1.8.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-assert/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmmirror.com/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/http-assert/node_modules/http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/http-assert/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmmirror.com/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmmirror.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/https-proxy-agent": { - "version": "7.0.5", - "resolved": "https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", - "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" + "lru-cache": "^6.0.0" }, "engines": { - "node": ">= 14" + "node": ">=10" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, "node_modules/ignore": { "version": "5.3.1", "resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.3.1.tgz", @@ -3811,12 +2650,6 @@ "node": ">= 4" } }, - "node_modules/immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmmirror.com/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", - "dev": true - }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz", @@ -3949,13 +2782,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-deflate": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/is-deflate/-/is-deflate-1.0.0.tgz", - "integrity": "sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ==", - "dev": true, - "license": "MIT" - }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz", @@ -3976,22 +2802,6 @@ "node": ">=8" } }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmmirror.com/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", @@ -4005,28 +2815,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-gzip": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/is-gzip/-/is-gzip-1.0.0.tgz", - "integrity": "sha512-rcfALRIb1YewtnksfRIHGcIY93QnK8BIQ/2c9yDYcG/Y6+vRoJuTWBmmSEbyLLYtXm7q35pHOHbZFQBaLrhlWQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-interactive": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/is-interactive/-/is-interactive-2.0.0.tgz", - "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", @@ -4096,12 +2884,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz", @@ -4119,84 +2901,6 @@ "node": ">=0.10.0" } }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmmirror.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.7", - "resolved": "https://registry.npmmirror.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz", - "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmmirror.com/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, "node_modules/jest-worker": { "version": "27.5.1", "resolved": "https://registry.npmmirror.com/jest-worker/-/jest-worker-27.5.1.tgz", @@ -4286,75 +2990,6 @@ "dev": true, "license": "MIT" }, - "node_modules/jszip": { - "version": "3.10.1", - "resolved": "https://registry.npmmirror.com/jszip/-/jszip-3.10.1.tgz", - "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", - "dev": true, - "dependencies": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "setimmediate": "^1.0.5" - } - }, - "node_modules/jszip/node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmmirror.com/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true, - "license": "(MIT AND Zlib)" - }, - "node_modules/jszip/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "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/jszip/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/jszip/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/just-extend": { - "version": "6.2.0", - "resolved": "https://registry.npmmirror.com/just-extend/-/just-extend-6.2.0.tgz", - "integrity": "sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==", - "dev": true, - "license": "MIT" - }, - "node_modules/keygrip": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/keygrip/-/keygrip-1.1.0.tgz", - "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "tsscmp": "1.0.6" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmmirror.com/keyv/-/keyv-4.5.4.tgz", @@ -4375,199 +3010,6 @@ "node": ">=0.10.0" } }, - "node_modules/koa": { - "version": "2.15.3", - "resolved": "https://registry.npmmirror.com/koa/-/koa-2.15.3.tgz", - "integrity": "sha512-j/8tY9j5t+GVMLeioLaxweJiKUayFhlGqNTzf2ZGwL0ZCQijd2RLHK0SLW5Tsko8YyyqCZC2cojIb0/s62qTAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "accepts": "^1.3.5", - "cache-content-type": "^1.0.0", - "content-disposition": "~0.5.2", - "content-type": "^1.0.4", - "cookies": "~0.9.0", - "debug": "^4.3.2", - "delegates": "^1.0.0", - "depd": "^2.0.0", - "destroy": "^1.0.4", - "encodeurl": "^1.0.2", - "escape-html": "^1.0.3", - "fresh": "~0.5.2", - "http-assert": "^1.3.0", - "http-errors": "^1.6.3", - "is-generator-function": "^1.0.7", - "koa-compose": "^4.1.0", - "koa-convert": "^2.0.0", - "on-finished": "^2.3.0", - "only": "~0.0.2", - "parseurl": "^1.3.2", - "statuses": "^1.5.0", - "type-is": "^1.6.16", - "vary": "^1.1.2" - }, - "engines": { - "node": "^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4" - } - }, - "node_modules/koa-compose": { - "version": "4.1.0", - "resolved": "https://registry.npmmirror.com/koa-compose/-/koa-compose-4.1.0.tgz", - "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==", - "dev": true, - "license": "MIT" - }, - "node_modules/koa-convert": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/koa-convert/-/koa-convert-2.0.0.tgz", - "integrity": "sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==", - "dev": true, - "license": "MIT", - "dependencies": { - "co": "^4.6.0", - "koa-compose": "^4.1.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/koa-morgan": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/koa-morgan/-/koa-morgan-1.0.1.tgz", - "integrity": "sha512-JOUdCNlc21G50afBXfErUrr1RKymbgzlrO5KURY+wmDG1Uvd2jmxUJcHgylb/mYXy2SjiNZyYim/ptUBGsIi3A==", - "dev": true, - "license": "MIT", - "dependencies": { - "morgan": "^1.6.1" - } - }, - "node_modules/koa-mount": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/koa-mount/-/koa-mount-4.0.0.tgz", - "integrity": "sha512-rm71jaA/P+6HeCpoRhmCv8KVBIi0tfGuO/dMKicbQnQW/YJntJ6MnnspkodoA4QstMVEZArsCphmd0bJEtoMjQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.0.1", - "koa-compose": "^4.1.0" - }, - "engines": { - "node": ">= 7.6.0" - } - }, - "node_modules/koa-send": { - "version": "5.0.1", - "resolved": "https://registry.npmmirror.com/koa-send/-/koa-send-5.0.1.tgz", - "integrity": "sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.1.1", - "http-errors": "^1.7.3", - "resolve-path": "^1.4.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/koa-send/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmmirror.com/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/koa-send/node_modules/http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/koa-send/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmmirror.com/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/koa-static": { - "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/koa-static/-/koa-static-5.0.0.tgz", - "integrity": "sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.1.0", - "koa-send": "^5.0.0" - }, - "engines": { - "node": ">= 7.6.0" - } - }, - "node_modules/koa-static/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/koa/node_modules/http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/koa/node_modules/http-errors/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmmirror.com/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/koa/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmmirror.com/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmmirror.com/levn/-/levn-0.4.1.tgz", @@ -4582,15 +3024,6 @@ "node": ">= 0.8.0" } }, - "node_modules/lie": { - "version": "3.3.0", - "resolved": "https://registry.npmmirror.com/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", - "dev": true, - "dependencies": { - "immediate": "~3.0.5" - } - }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -4621,13 +3054,6 @@ "node": ">=8" } }, - "node_modules/lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmmirror.com/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", - "dev": true, - "license": "MIT" - }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmmirror.com/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -4730,31 +3156,15 @@ }, "node_modules/lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "semver": "^7.5.3" + "yallist": "^4.0.0" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/map-obj": { @@ -4770,16 +3180,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmmirror.com/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/meow": { "version": "10.1.5", "resolved": "https://registry.npmmirror.com/meow/-/meow-10.1.5.tgz", @@ -4847,16 +3247,6 @@ "node": ">= 8" } }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmmirror.com/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/micromatch": { "version": "4.0.7", "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.7.tgz", @@ -4894,15 +3284,6 @@ "node": ">= 0.6" } }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/min-indent": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/min-indent/-/min-indent-1.0.1.tgz", @@ -4926,16 +3307,6 @@ "node": "*" } }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/minimist-options": { "version": "4.1.0", "resolved": "https://registry.npmmirror.com/minimist-options/-/minimist-options-4.1.0.tgz", @@ -4961,16 +3332,6 @@ "node": ">=0.10.0" } }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmmirror.com/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, "node_modules/mocha": { "version": "10.7.3", "resolved": "https://registry.npmmirror.com/mocha/-/mocha-10.7.3.tgz", @@ -5292,53 +3653,6 @@ "node": ">=10" } }, - "node_modules/morgan": { - "version": "1.10.0", - "resolved": "https://registry.npmmirror.com/morgan/-/morgan-1.10.0.tgz", - "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "basic-auth": "~2.0.1", - "debug": "2.6.9", - "depd": "~2.0.0", - "on-finished": "~2.3.0", - "on-headers": "~1.0.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/morgan/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/morgan/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/morgan/node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmmirror.com/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "dev": true, - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", @@ -5353,16 +3667,6 @@ "dev": true, "license": "MIT" }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz", @@ -5370,20 +3674,6 @@ "dev": true, "license": "MIT" }, - "node_modules/nise": { - "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/nise/-/nise-6.0.0.tgz", - "integrity": "sha512-K8ePqo9BFvN31HXwEtTNGzgrPpmvgciDsFz8aztFjt4LqKO/JeFD8tBOeuDiCMXrIl/m1YvfH8auSpxfaD09wg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.0", - "@sinonjs/fake-timers": "^11.2.2", - "@sinonjs/text-encoding": "^0.7.2", - "just-extend": "^6.2.0", - "path-to-regexp": "^6.2.1" - } - }, "node_modules/node-releases": { "version": "2.0.14", "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.14.tgz", @@ -5417,29 +3707,6 @@ "node": ">=0.10.0" } }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmmirror.com/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmmirror.com/once/-/once-1.4.0.tgz", @@ -5450,27 +3717,6 @@ "wrappy": "1" } }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/only": { - "version": "0.0.2", - "resolved": "https://registry.npmmirror.com/only/-/only-0.0.2.tgz", - "integrity": "sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==", - "dev": true - }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmmirror.com/optionator/-/optionator-0.9.4.tgz", @@ -5489,119 +3735,6 @@ "node": ">= 0.8.0" } }, - "node_modules/ora": { - "version": "7.0.1", - "resolved": "https://registry.npmmirror.com/ora/-/ora-7.0.1.tgz", - "integrity": "sha512-0TUxTiFJWv+JnjWm4o9yvuskpEJLXTcng8MJuKd+SzAzp2o+OP3HWqNhB4OdJRt1Vsd9/mR0oyaEYlOnL7XIRw==", - "dev": true, - "dependencies": { - "chalk": "^5.3.0", - "cli-cursor": "^4.0.0", - "cli-spinners": "^2.9.0", - "is-interactive": "^2.0.0", - "is-unicode-supported": "^1.3.0", - "log-symbols": "^5.1.0", - "stdin-discarder": "^0.1.0", - "string-width": "^6.1.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/ora/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmmirror.com/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "dev": true, - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/ora/node_modules/emoji-regex": { - "version": "10.3.0", - "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-10.3.0.tgz", - "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", - "dev": true - }, - "node_modules/ora/node_modules/is-unicode-supported": { - "version": "1.3.0", - "resolved": "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/log-symbols": { - "version": "5.1.0", - "resolved": "https://registry.npmmirror.com/log-symbols/-/log-symbols-5.1.0.tgz", - "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", - "dev": true, - "dependencies": { - "chalk": "^5.0.0", - "is-unicode-supported": "^1.1.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/string-width": { - "version": "6.1.0", - "resolved": "https://registry.npmmirror.com/string-width/-/string-width-6.1.0.tgz", - "integrity": "sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ==", - "dev": true, - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^10.2.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, "node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz", @@ -5657,20 +3790,6 @@ "node": ">=6" } }, - "node_modules/package-json-from-dist": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", - "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", - "dev": true, - "license": "BlueOak-1.0.0" - }, - "node_modules/pako": { - "version": "0.2.9", - "resolved": "https://registry.npmmirror.com/pako/-/pako-0.2.9.tgz", - "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", - "dev": true, - "license": "MIT" - }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz", @@ -5703,16 +3822,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz", @@ -5750,37 +3859,6 @@ "dev": true, "license": "MIT" }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmmirror.com/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/path-to-regexp": { - "version": "6.3.0", - "resolved": "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-6.3.0.tgz", - "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", - "dev": true, - "license": "MIT" - }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz", @@ -5791,18 +3869,6 @@ "node": ">=8" } }, - "node_modules/peek-stream": { - "version": "1.1.3", - "resolved": "https://registry.npmmirror.com/peek-stream/-/peek-stream-1.1.3.tgz", - "integrity": "sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "duplexify": "^3.5.0", - "through2": "^2.0.3" - } - }, "node_modules/picocolors": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.1.tgz", @@ -5836,38 +3902,6 @@ "node": ">=8" } }, - "node_modules/playwright": { - "version": "1.45.3", - "resolved": "https://registry.npmmirror.com/playwright/-/playwright-1.45.3.tgz", - "integrity": "sha512-QhVaS+lpluxCaioejDZ95l4Y4jSFCsBvl2UZkpeXlzxmqS+aABr5c82YmfMHrL6x27nvrvykJAFpkzT2eWdJww==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright-core": "1.45.3" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "2.3.2" - } - }, - "node_modules/playwright-core": { - "version": "1.45.3", - "resolved": "https://registry.npmmirror.com/playwright-core/-/playwright-core-1.45.3.tgz", - "integrity": "sha512-+ym0jNbcjikaOwwSZycFbwkWgfruWvYlJfThKYAlImbxUgdWFO2oW70ojPm4OpE4t6TAo2FY/smM+hpVTtkhDA==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "playwright-core": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -5878,60 +3912,20 @@ "node": ">= 0.8.0" } }, - "node_modules/prettier": { - "version": "3.3.3", - "resolved": "https://registry.npmmirror.com/prettier/-/prettier-3.3.3.tgz", - "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", - "dev": true, - "license": "MIT", - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmmirror.com/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - } - }, - "node_modules/pumpify/node_modules/pump": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "node_modules/prettier": { + "version": "3.3.3", + "resolved": "https://registry.npmmirror.com/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", "dev": true, "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, "node_modules/punycode": { @@ -5965,13 +3959,6 @@ ], "license": "MIT" }, - "node_modules/queue-tick": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/queue-tick/-/queue-tick-1.0.1.tgz", - "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", - "dev": true, - "license": "MIT" - }, "node_modules/quick-lru": { "version": "5.1.1", "resolved": "https://registry.npmmirror.com/quick-lru/-/quick-lru-5.1.1.tgz", @@ -6097,21 +4084,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz", @@ -6206,92 +4178,6 @@ "node": ">=8" } }, - "node_modules/resolve-path": { - "version": "1.4.0", - "resolved": "https://registry.npmmirror.com/resolve-path/-/resolve-path-1.4.0.tgz", - "integrity": "sha512-i1xevIst/Qa+nA9olDxLWnLk8YZbi8R/7JPbCMcgyWaFR6bKWaexgJgEB5oc2PKMjYdrHynyz0NY+if+H98t1w==", - "dev": true, - "license": "MIT", - "dependencies": { - "http-errors": "~1.6.2", - "path-is-absolute": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/resolve-path/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmmirror.com/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/resolve-path/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/resolve-path/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true, - "license": "ISC" - }, - "node_modules/resolve-path/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/resolve-path/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmmirror.com/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/restore-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-4.0.0.tgz", - "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", - "dev": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/restore-cursor/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz", @@ -6406,19 +4292,6 @@ "randombytes": "^2.1.0" } }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmmirror.com/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true, - "license": "ISC" - }, "node_modules/shallow-clone": { "version": "3.0.1", "resolved": "https://registry.npmmirror.com/shallow-clone/-/shallow-clone-3.0.1.tgz", @@ -6455,61 +4328,6 @@ "node": ">=8" } }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/sinon": { - "version": "18.0.0", - "resolved": "https://registry.npmmirror.com/sinon/-/sinon-18.0.0.tgz", - "integrity": "sha512-+dXDXzD1sBO6HlmZDd7mXZCR/y5ECiEiGCBSGuFD/kZ0bDTofPYc6JaeGmPSF+1j1MejGUWkORbYOLDyvqCWpA==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.1", - "@sinonjs/fake-timers": "^11.2.2", - "@sinonjs/samsam": "^8.0.0", - "diff": "^5.2.0", - "nise": "^6.0.0", - "supports-color": "^7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/sinon" - } - }, - "node_modules/sinon/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/sinon/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz", @@ -6660,168 +4478,6 @@ "dev": true, "license": "CC0-1.0" }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/stdin-discarder": { - "version": "0.1.0", - "resolved": "https://registry.npmmirror.com/stdin-discarder/-/stdin-discarder-0.1.0.tgz", - "integrity": "sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==", - "dev": true, - "dependencies": { - "bl": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/stdin-discarder/node_modules/bl": { - "version": "5.1.0", - "resolved": "https://registry.npmmirror.com/bl/-/bl-5.1.0.tgz", - "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", - "dev": true, - "dependencies": { - "buffer": "^6.0.3", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/stdin-discarder/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmmirror.com/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/stream-shift": { - "version": "1.0.3", - "resolved": "https://registry.npmmirror.com/stream-shift/-/stream-shift-1.0.3.tgz", - "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/streamx": { - "version": "2.18.0", - "resolved": "https://registry.npmmirror.com/streamx/-/streamx-2.18.0.tgz", - "integrity": "sha512-LLUC1TWdjVdn1weXGcSxyTR3T4+acB6tVGXT95y0nGbca4t4o/ng1wKAGTljm9VicuCVLvRlqFYXYy5GwgM7sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-fifo": "^1.3.2", - "queue-tick": "^1.0.1", - "text-decoder": "^1.1.0" - }, - "optionalDependencies": { - "bare-events": "^2.2.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmmirror.com/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -6835,20 +4491,6 @@ "node": ">=8" } }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/strip-indent": { "version": "4.0.0", "resolved": "https://registry.npmmirror.com/strip-indent/-/strip-indent-4.0.0.tgz", @@ -6958,34 +4600,9 @@ "node_modules/terser/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmmirror.com/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "license": "ISC", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/text-decoder/-/text-decoder-1.1.1.tgz", - "integrity": "sha512-8zll7REEv4GDD3x4/0pW+ppIxSNs7H1J10IKFZsuOMscumCdM2a+toDGLPA3T+1+fLBql4zbt5z83GEQGGV5VA==", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "b4a": "^1.6.4" - } + "license": "MIT" }, "node_modules/text-table": { "version": "0.2.0", @@ -6994,50 +4611,6 @@ "dev": true, "license": "MIT" }, - "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmmirror.com/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/through2/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "license": "MIT", - "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/through2/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "license": "MIT" - }, - "node_modules/through2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -7051,16 +4624,6 @@ "node": ">=8.0" } }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, "node_modules/trim-newlines": { "version": "4.1.1", "resolved": "https://registry.npmmirror.com/trim-newlines/-/trim-newlines-4.1.1.tgz", @@ -7184,16 +4747,6 @@ "node": ">=8" } }, - "node_modules/tsscmp": { - "version": "1.0.6", - "resolved": "https://registry.npmmirror.com/tsscmp/-/tsscmp-1.0.6.tgz", - "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.6.x" - } - }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmmirror.com/type-check/-/type-check-0.4.0.tgz", @@ -7207,16 +4760,6 @@ "node": ">= 0.8.0" } }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmmirror.com/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/type-fest": { "version": "1.4.0", "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-1.4.0.tgz", @@ -7230,20 +4773,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmmirror.com/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/typescript": { "version": "5.4.5", "resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.4.5.tgz", @@ -7447,28 +4976,6 @@ "punycode": "^2.1.0" } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true, - "license": "MIT" - }, - "node_modules/v8-to-istanbul": { - "version": "9.3.0", - "resolved": "https://registry.npmmirror.com/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", - "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", - "dev": true, - "license": "ISC", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^2.0.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmmirror.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -7480,16 +4987,6 @@ "spdx-expression-parse": "^3.0.0" } }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/vscode-jsonrpc": { "version": "8.2.0", "resolved": "https://registry.npmmirror.com/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", @@ -7568,60 +5065,6 @@ "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", "license": "MIT" }, - "node_modules/vscode-oniguruma": { - "version": "1.7.0", - "resolved": "https://registry.npmmirror.com/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", - "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", - "dev": true, - "license": "MIT" - }, - "node_modules/vscode-textmate": { - "version": "7.0.4", - "resolved": "https://registry.npmmirror.com/vscode-textmate/-/vscode-textmate-7.0.4.tgz", - "integrity": "sha512-9hJp0xL7HW1Q5OgGe03NACo7yiCTMEk3WU/rtKXUbncLtdg6rVVNJnHwD88UhbIYU2KoxY0Dih0x+kIsmUKn2A==", - "dev": true, - "license": "MIT" - }, - "node_modules/vscode-tmgrammar-test": { - "version": "0.1.3", - "resolved": "https://registry.npmmirror.com/vscode-tmgrammar-test/-/vscode-tmgrammar-test-0.1.3.tgz", - "integrity": "sha512-Wg6Pz+ePAT1O+F/A1Fc4wS5vY2X+HNtgN4qMdL+65NLQYd1/zdDWH4fhwsLjX8wTzeXkMy49Cr4ZqWTJ7VnVxg==", - "dev": true, - "license": "MIT", - "dependencies": { - "bottleneck": "^2.19.5", - "chalk": "^2.4.2", - "commander": "^9.2.0", - "diff": "^4.0.2", - "glob": "^7.1.6", - "vscode-oniguruma": "^1.5.1", - "vscode-textmate": "^7.0.1" - }, - "bin": { - "vscode-tmgrammar-snap": "dist/snapshot.js", - "vscode-tmgrammar-test": "dist/unit.js" - } - }, - "node_modules/vscode-tmgrammar-test/node_modules/commander": { - "version": "9.5.0", - "resolved": "https://registry.npmmirror.com/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || >=14" - } - }, - "node_modules/vscode-tmgrammar-test/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/vscode-uri": { "version": "3.0.8", "resolved": "https://registry.npmmirror.com/vscode-uri/-/vscode-uri-3.0.8.tgz", @@ -7813,143 +5256,6 @@ "dev": true, "license": "Apache-2.0" }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz", @@ -7957,16 +5263,6 @@ "dev": true, "license": "ISC" }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4" - } - }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz", @@ -7984,35 +5280,6 @@ "dev": true, "license": "ISC" }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmmirror.com/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, "node_modules/yargs-unparser": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz", @@ -8029,38 +5296,6 @@ "node": ">=10" } }, - "node_modules/yargs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/yargs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ylru": { - "version": "1.4.0", - "resolved": "https://registry.npmmirror.com/ylru/-/ylru-1.4.0.tgz", - "integrity": "sha512-2OQsPNEmBCvXuFlIni/a+Rn+R2pHW9INm0BxXJ4hVDA8TirqMj+J/Rp9ItLatT/5pZqWwefVrTQcHpixsxnVlA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmmirror.com/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index dca2e131..338be832 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,6 @@ "prebuild:dev": "npm run clean", "build:dev": "node build.mjs", "build:old": "webpack", - "chrome": "vscode-test-web --browserType=chromium --extensionDevelopmentPath=. ./test-data", "clean:dist": "del-cli client/dist server/dist/*.js*", "clean:out": "del-cli client/out server/out", "compile-cli": "webpack --config webpack.config.cli.js --mode production --devtool hidden-source-map", @@ -87,24 +86,19 @@ }, "devDependencies": { "@eslint/js": "^9.4.0", + "@types/mocha": "^10.0.8", "@types/node": "^20.16.0", - "@types/sinon": "^17.0.3", "@types/vscode": "^1.82.0", - "@vscode/test-cli": "^0.0.10", - "@vscode/test-electron": "^2.4.1", - "@vscode/test-web": "^0.0.56", "del-cli": "^5.1.0", "esbuild": "^0.23.1", "eslint": "^9.4.0", "globals": "^15.4.0", "mocha": "^10.7.0", "prettier": "3.3.3", - "sinon": "^18.0.0", "sort-package-json": "^2.10.0", "ts-loader": "^9.4.0", "typescript": "^5.3.2", "typescript-eslint": "^7.12.0", - "vscode-tmgrammar-test": "^0.1.3", "webpack": "^5.74.0", "webpack-cli": "^4.10.0" }, diff --git a/package.nls.json b/package.nls.json deleted file mode 100644 index c9049eeb..00000000 --- a/package.nls.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "ahk2.actionwhenv1isdetected": "Action when v1 script is detected", - "ahk2.autolibinclude": "Provide completion and automatic include from User and Standard library, Local library", - "ahk2.commenttags": "A regular expression used to extract named tags from comments and generate module symbols", - "ahk2.compile": "Compile Script", - "ahk2.compilercmd": "Compiler command line options. If ahk2exe.exe is not specified, the default path will be used. `${execPath}` is equal to the currently selected AutoHotkey.exe", - "ahk2.completefunctionparens": "Parentheses are added to function completion when there is no `(` or `[` on the right; otherwise move the cursor to the right", - "ahk2.completioncommitcharacters": "Characters which commit auto completion, such as `.(`", - "ahk2.debug.attach": "Attach to ahk process", - "ahk2.debug.configs": "Debug ahk File using launch.json", - "ahk2.debug.file": "Debug ahk File", - "ahk2.debug.params": "Debug ahk File with Params", - "ahk2.debugconfiguration": "Append debugging configuration to the currently started debugger, same as launch.json configuration", - "ahk2.description": "Autohotkey2 Language Support using vscode-lsp", - "ahk2.diagnose.all": "Diagnostic All", - "ahk2.diagnostics.class-non-dynamic-member-check": "Check whether non-dynamic members of class exist", - "ahk2.diagnostics.paramscheck": "Check that the function call has the correct number of arguments", - "ahk2.warn.varunset": "Display warnings for each variable that has never been directly assigned or used with the reference operator", - "ahk2.warn.localsameasglobal": "Display warnings for each undeclared local variable which has the same name as a global variable", - "ahk2.warn.callwithoutparentheses": "Display warnings for each function or method call without parentheses", - "ahk2.extract.symbols": "Extract Symbol Information", - "ahk2.files.exclude": "Configure glob patterns for excluding files and folders when scanning ahk files.", - "ahk2.files.scanmaxdepth": "Controls the depth when scanning ahk files.", - "ahk2.generate.comment": "Generate Comment Template", - "ahk2.help": "Quick Help", - "ahk2.interpreterpath": "The path of the `AutoHotkey.exe` executable file. If `AutoHotkeyUX.exe` is selected, the script will be launched using UX Launcher.", - "ahk2.run": "Run ahk File", - "ahk2.run.selection": "Run Selected Script", - "ahk2.select.syntaxes": "Select Language Definition Folder", - "ahk2.set.interpreter": "Select AutoHotkey2 Interpreter", - "ahk2.set.scriptdir": "Set Here as A_ScriptDir", - "ahk2.stop": "Stop Running Script", - "ahk2.symbolfoldingfromopenbrace": "Forced symbol folding starts at open brace", - "ahk2.syntaxes": "Specifies the folder path to the `ahk2.json`, `*.snippet.json` and `ahk2.d.ahk` files used for IntelliSense.", - "ahk2.update.versioninfo": "Update File Version Info", - "ahk2.workingdirs": "Sets the working directory for the script" -} diff --git a/package.nls.zh-cn.json b/package.nls.zh-cn.json deleted file mode 100644 index 97b62fc1..00000000 --- a/package.nls.zh-cn.json +++ /dev/null @@ -1,127 +0,0 @@ -{ - "ahk2.actionwhenv1isdetected": "检测到v1脚本时的行为", - "ahk2.autolibinclude": "对用户库和标准库, 本地库提供补全和自动include", - "ahk2.browse": "浏览文件系统来选择一个 AutoHotkey2 解释器", - "ahk2.commenttags": "用来从注释中提取命名标记的正则表达式, 并生成模块符号", - "ahk2.compile": "编译脚本", - "ahk2.compiledfailed": "编译失败!", - "ahk2.compiledsuccessfully": "编译成功!", - "ahk2.compilercmd": "编译器命令行选项. 如果未指定ahk2exe.exe, 将使用默认路径. `${execPath}`等价于当前选择的AutoHotkey.exe", - "ahk2.completefunctionparens": "当右侧不存在`(`或`[`时, 给函数补全添加括号; 否则向右移动光标", - "ahk2.completioncommitcharacters": "提交自动完成的字符, 例如`.(`", - "ahk2.current": "当前: {0}", - "ahk2.debug.attach": "附加到ahk进程", - "ahk2.debug.configs": "使用launch.json调试ahk文件", - "ahk2.debug.file": "调试ahk文件", - "ahk2.debug.params": "带参数调试", - "ahk2.debugconfiguration": "追加调试配置到当前启动的调试器, 与launch.json配置相同", - "ahk2.debugextnotexist": "未找到debug扩展, 请先安装debug扩展!", - "ahk2.description": "基于 vscode-lsp 协议的 Autohotkey2 语言支持", - "ahk2.diagnose.all": "诊断全部", - "ahk2.diagnostics.class-non-dynamic-member-check": "检查类非动态成员是否存在", - "ahk2.diagnostics.paramscheck": "检查函数调用参数个数是否正确", - "ahk2.enterahkpath": "请输入 AutoHotkey2 解释器的路径", - "ahk2.entercmd": "输入需要传递的命令行参数", - "ahk2.enterorfind": "输入路径或选择一个现有的解释器", - "ahk2.enterversion": "输入版本号", - "ahk2.filenotexist": "'{0}'文件不存在", - "ahk2.files.exclude": "配置 glob 模式以在扫描ahk文件时排除文件和文件夹.", - "ahk2.files.scanmaxdepth": "控制扫描ahk文件时的深度.", - "ahk2.find": "浏览...", - "ahk2.generate.comment": "生成注释模板", - "ahk2.help": "快捷帮助", - "ahk2.interpreterpath": "`AutoHotkey.exe`可执行文件的路径. 如果选择`AutoHotkeyUX.exe`, 将使用UX Launcher启动脚本.", - "ahk2.extract.symbols": "提取符号信息", - "ahk2.run": "运行ahk文件", - "ahk2.run.selection": "运行选择的脚本", - "ahk2.savebeforecompilation": "编译前请先保存脚本", - "ahk2.select": "选择", - "ahk2.select.syntaxes": "选择语言定义文件夹", - "ahk2.set.interpreter": "选择AutoHotkey2解释器", - "ahk2.set.scriptdir": "设置此处为A_ScriptDir", - "ahk2.stop": "停止运行中的脚本", - "ahk2.symbolfoldingfromopenbrace": "强制符号折叠从大括号处开始", - "ahk2.syntaxes": "指定用于智能感知的`ahk2.json`, `*.snippet.json`和`ahk2.d.ahk`文件的文件夹路径.", - "ahk2.unknownversion": "未知版本", - "ahk2.update.versioninfo": "更新文件版本信息", - "ahk2.warn.callwithoutparentheses": "为每个不带括号的函数或方法调用显示警告", - "ahk2.warn.localsameasglobal": "为每个与全局变量同名的未声明的局部变量显示警告", - "ahk2.warn.varunset": "为每个从未直接赋值或与引用操作符一起使用的变量的显示警告", - "ahk2.workingdirs": "设置脚本的工作目录", - "action.skipline": "跳过行", - "action.stopparsing": "停止解析", - "action.switchtov1": "切换到ahk v1", - "codeaction.include": "导入 '{0}'", - "completionitem.author": "添加作者, 描述, 日期, 版本等文件信息.", - "completionitem.generatecomment": "生成当前作用域函数/方法的注释模板.", - "completionitem.include": "从'{0}'自动导入", - "completionitem.new": "构造类的新实例.", - "completionitem.prototype": "检索或设置类的所有实例所基于的对象.", - "completionitem.super": "在继承类中, super 可以代替 this 来访问在派生类中被重写的方法或属性的超类版本.", - "completionitem.this": "在类中, 通过 this 访问该类的其他实例变量和方法.", - "completionitem.thishotkey": "热键函数的隐藏参数.", - "completionitem.value": "在动态属性 set 中, Value 包含被分配的值.", - "diagnostic.acceptparams": "'{0}' 接受{1}个参数", - "diagnostic.assignerr": "{0} '{1}'不能用作输出变量", - "diagnostic.classinfuncerr": "函数不能包含类", - "diagnostic.classuseerr": "类不能用作输出变量", - "diagnostic.conflictserr": "{0} '{2}'声明和已存在的{1}冲突", - "diagnostic.declarationerr": "意外的声明", - "diagnostic.defaultvalmissing": "'{0}' 需要参数默认值", - "diagnostic.deprecated": "使用'{0}'而不是'{1}'", - "diagnostic.didyoumean": "你是想用'{0}'吗?", - "diagnostic.dupdeclaration": "重复声明", - "diagnostic.duplabel": "重复的标签声明", - "diagnostic.filenotexist": "'{0}'文件不存在", - "diagnostic.funccallerr": "函数调用需要空格或'(', 仅在参数之间使用逗号", - "diagnostic.funccallerr2": "在表达式中, 函数调用需要括号", - "diagnostic.hotdeferr": "热键/热字串不能在函数/类中定义", - "diagnostic.hotmissbrace": "热键或热字符串缺少左括号", - "diagnostic.invaliddefinition": "无效的{0}定义", - "diagnostic.invalidencoding": "'{0}' 无效的文件编码", - "diagnostic.invalidhotdef": "无效的热键定义", - "diagnostic.invalidparam": "无效的参数定义", - "diagnostic.invalidprop": "不是有效的getter/setter属性", - "diagnostic.invalidpropname": "对象字面量中的属性名无效", - "diagnostic.invalidsymbolname": "无效的符号命名 '{0}'", - "diagnostic.invalidscope": "'{0}'不能在函数/类中使用", - "diagnostic.invalidsuper": "'super'仅在类内部有效", - "diagnostic.maybehavenotmember": "类'{0}'可能没有成员'{1}'", - "diagnostic.maybev1": "这可能是一个v1脚本, lexer停止解析.", - "diagnostic.missing": "丢失对应的 '{0}'", - "diagnostic.missingparam": "缺少必需的参数", - "diagnostic.missingoperand": "缺少操作数", - "diagnostic.missingretval": "函数缺少返回值", - "diagnostic.missingspace": "前面缺少空格或运算符", - "diagnostic.objectliteralerr": "对象字面量存在错误", - "diagnostic.outofloop": "Break/Continue必须被循环包围", - "diagnostic.paramcounterr": "应有 {0} 个参数, 但获得 {1} 个", - "diagnostic.pathinvalid": "无效的文件路径", - "diagnostic.propdeclaraerr": "不是有效的方法, 类或属性定义", - "diagnostic.propemptyparams": "动态属性不允许使用空[]", - "diagnostic.propnotinit": "属性声明未初始化", - "diagnostic.requirev1": "此脚本需要AutoHotkey v1, lexer停止解析.", - "diagnostic.requirevariable": "'&'需要一个变量", - "diagnostic.requireversion": "该特性需要AutoHotkey版本 >= v{0}", - "diagnostic.reservedworderr": "保留字'{0}'不得用作变量名", - "diagnostic.resourcenotfound": "未找到或无法解析资源", - "diagnostic.skipline": "该行被跳过且未解析", - "diagnostic.syntaxerror": "语法错误. 具体为: {0}", - "diagnostic.tryswitchtov1": "尝试切换到AutoHotkey v1.", - "diagnostic.typemaybenot": "类型可能不是 '{0}'", - "diagnostic.unexpected": "意外的'{0}'", - "diagnostic.unknown": "未知的{0}", - "diagnostic.unknownoperatoruse": "未知的操作符使用", - "diagnostic.unknowntoken": "未知的Token '{0}'", - "diagnostic.unsupportinclude": "函数、类中的#include无法正确地推导作用域和代码补全", - "diagnostic.unterminated": "未终止的字符串文本", - "warn.varisunset": "变量'{0}'似乎从未被赋值", - "warn.localsameasglobal": "局部变量'{0}'与全局变量具有相同的名称", - "warn.callwithoutparentheses": "函数或方法调用没有使用括号", - "response.cannotrename": "无法重命名此元素。", - "response.cannotrenamestdlib": "不能重命名标准AutoHotkey库中定义的元素。", - "setting.ahkpatherr": "AutoHotkey解释器不存在, 在'设置-AutoHotkey2.InterpreterPath'中重新指定", - "setting.getenverr": "获取环境变量失败", - "setting.uialimit": "由于安全限制, UIA可执行文件不允许重定向stdin/stdout, 因此依赖于此的一些功能将无法工作", - "setting.versionerr": "当前AutoHotkey.exe不是v2版本, 无法获得正确的语法解析、补全等功能" -} diff --git a/readme.md b/readme.md index d7ba6748..6e4d1702 100644 --- a/readme.md +++ b/readme.md @@ -1,364 +1,5 @@ -**English** | [中文](./README.zh-CN.md) - # AutoHotkey v2 Language Support -[![installs](https://img.shields.io/visual-studio-marketplace/i/thqby.vscode-autohotkey2-lsp?label=Extension%20Install&style=for-the-badge&logo=visualstudiocode)](https://marketplace.visualstudio.com/items?itemName=thqby.vscode-autohotkey2-lsp) -[![version](https://img.shields.io/visual-studio-marketplace/v/thqby.vscode-autohotkey2-lsp?label=Extension%20Version&style=for-the-badge&logo=visualstudiocode)](https://marketplace.visualstudio.com/items?itemName=thqby.vscode-autohotkey2-lsp) -[![](https://img.shields.io/badge/Compatibility-autohotkey%20v2.0+-green?style=for-the-badge&logo=autohotkey)](https://www.autohotkey.com/) - -**Repositories**: [Github](https://github.com/thqby/vscode-autohotkey2-lsp) | [Gitee](https://gitee.com/orz707/vscode-autohotkey2-lsp) - -AutoHotkey v2 Language support for VS Code, features realization based on v2 syntax analysis. -Supports running on the Web, such as `Chrome/Edge`. https://vscode.dev or https://github.dev/github/dev - -- [AutoHotkey v2 Language Support](#autohotkey-v2-language-support) - - [Language Features](#language-features) - - [Rename Symbol](#rename-symbol) - - [Diagnostics](#diagnostics) - - [IntelliSense](#intellisense) - - [Signature](#signature) - - [Document Symbol](#document-symbol) - - [Semantic Highlight](#semantic-highlight) - - [Tags](#tags) - - [Document Color](#document-color) - - [Hover](#hover) - - [Goto Definition](#goto-definition) - - [Find All References](#find-all-references) - - [CodeFormat](#codeformat) - - [Custom folding](#custom-folding) - - [Declaration document](#declaration-document) - - [Context Menu](#context-menu) - - [Quick Help](#quick-help) - - [Run Script](#run-script) - - [Run Selected Script](#run-selected-script) - - [Compile Script](#compile-script) - - [Debug Script](#debug-script) - - [Generate Comment](#generate-comment) - - [Use in other editors](#use-in-other-editors) - - [Sublime Text4](#sublime-text4) - - [Vim and Neovim](#vim-and-neovim) - - [Emacs](#Emacs) - - [Use in Web Browser](#use-in-web-browser) - -## Language Features - -### Rename Symbol - -Rename variables and function names in the scope in batches. - -![rename](./pic/rename.gif) - -### Diagnostics - -Simple syntax error diagnosis. - -![diagnostics](./pic/diagnostics2.png) - -### IntelliSense - -Supports intelligent completion of variables, functions, parameters, class names, and method names within the scope (by simple type deduction), and supports the completion of include files and function libraries. - -![snippet1](./pic/snippet.png) - -![snippet2](./pic/snippet.gif) - -### Signature - -Support for intelligent prompts for function parameters. - -![signature](./pic/signature.gif) - -### Document Symbol - -1. Displays class, method, function, variable, label, hotkey, hot string, block information in the left outline column. -2. press Ctrl + P, Input @symbol_name to retrieve and jump -3. You can comment a method with a semicolon or /\* \*/ on the top line of a function, variable. Jsdoc-style annotations can mark variable types. - - - -```js -/** - * @param {Array} a - a param - * @return {Integer} - */ -fn(a*) { - /** @type {Map} */ - d := Map() - /** - * @var {Map} e - * @var {Object} f - */ - e := Map(), f := {} - /** @type {(a,b)=>Integer} */ - cb := (a, b) => a + b - /** @type {ComObject} */ - wb := ComObject('Excel.Sheet.12') - return a[1] + a[2] -} -class abc { - /** @type {Map} */ - p := dosomethingandreturnmap() -} -``` - -### Semantic Highlight - -Semantic highlighting is an addition to syntax highlighting, resolves symbols in the context of a project. The editor applies the highlighting from semantic tokens on top of the highlighting from grammars. - -![semanticTokens](./pic/semanticTokens.png) - -### Tags - -usage: Add `;;`(default) or `; TODO ` to the comment code Tags. - -![codeSymbole](./pic/codeSymbol.png) - -### Document Color - -Compute and resolve colors inside a document to provide color picker in editor. - -![documentcolor](./pic/documentcolor.png) - -### Hover - -Supports hover prompts and comments for scoped variables, functions, global classes, and labels. -usage: Move the mouse over the symbol. - -![hover](./pic/hover.png) - -### Goto Definition - -1. Support for jumping to the declaration location of scoped variables, functions, global classes, and labels. -2. usage: Press ctrl Then move the mouse over to the code and click. - -![gotoDefinition](./pic/gotoDefinition.png) - -### Find All References - -See all the source code locations where a certain variable/function is being used. - -### CodeFormat - -usage: - -- Right-click the popup menu and click "Format document". -- Press `Shift+Alt+F`. -- Supports formatting code blocks when typing '}', formatting lines and indenting lines when typing '\n'. (`editor.formatOnType` needs to be enabled) -- Supports the use of formatting instructions `;@format array_style: collapse, object_style: expand` to change the object style of different blocks - -![codeFormat](./pic/codeFormat.gif) - -### Custom folding - -Fold the part between `;@region tag` and `;@endregion`, `;{` and `;}` - -```ini -;#region tag -code -;#endregion -``` - -### Declaration document - -The declaration file is a file with the suffix of `.d.ahk` as the file name, which is used to describe the implemented functions or classes, etc., does not contain the implementation part of the code, and is referenced by the ahk file with the same name by default, and the syntax refers to `ahk2.d.ahk` provided by the extension. The declaration file can extend or rewrite the declaration of ahk built-in functions or classes, and the annotation document can be separated from the source code to provide a multilingual version of intellisense. - -``` -; array.d.ahk -; #ClsName represents the ahk built-in class -/** @extends {#Array} */ -class Array { - /** jsdoc-default */ - Filter(FilterFunc) => Array -} - -; array.zh-cn.d.ahk -; #ClsName 表示ahk内置类 -/** @extends {#Array} */ -class Array { - /** jsdoc-zh */ - Filter(FilterFunc) => Array -} - -; array.ahk -; %A_Locale% is VSCode's Display Language -;@reference array.%A_Locale%.d.ahk -Array.Prototype.DefineProp('Filter', { call: Array_Filter_impl }) -``` - -## Context Menu - -### Quick Help - -Open the help file and navigate to the keyword at the current cursor. - -### Run Script - -Run the currently open script. - -### Run Selected Script - -Run the code snippet at the cursor selection. - -### Compile Script - -Compile the script to generate executable EXE files. - -### Debug Script - -No additional configuration is required to start the installed Debug extensions, and support debugging with parameters. - -### Generate Comment - -Generate JSDOC-style comments for a function or method. - -## Use in other editors - -1. Install [Node.js](https://nodejs.org/en/download/). -2. Download vscode-autohotkey2-lsp server using command line, or download and unpack through [vscode marketplace](https://marketplace.visualstudio.com/items?itemName=thqby.vscode-autohotkey2-lsp). - -```shell -mkdir vscode-autohotkey2-lsp -cd vscode-autohotkey2-lsp -curl.exe -L -o install.js https://raw.githubusercontent.com/thqby/vscode-autohotkey2-lsp/main/tools/install.js -node install.js -``` - -3. Set the LSP configuration of the editor that support [LSP(Language Server Protocol)](https://microsoft.github.io/language-server-protocol/), such as Sublime Text4, Vim, Neovim, Emacs, [etc](https://microsoft.github.io/language-server-protocol/implementors/tools/). - -### Sublime Text4 - -- `Package Control: Install Package`, and install [Sublime LSP](https://github.com/sublimelsp/LSP) plug-in. -- `Preferences: LSP Settings`, add lsp configuration, language selector, and syntax highlighting. This is a simple example [syntax highlighting](https://github.com/thqby/vscode-autohotkey2-lsp/files/9843973/AutoHotkey2.sublime-syntax.zip), save the file in a similar path `C:\Users\\AppData\Roaming\Sublime Text\Packages\User\LSP-ahk2\AutoHotkey2.sublime-syntax`. - -```json -{ - "clients": { - "lsp-ahk2": { - "enabled": true, - "command": [ - "node", - "/server/dist/server.js", - "--stdio" - ], // Update the path of node.exe(maybe it's already in PATH, so you don't need to set it) and the folder of vscode-autohotkey2-lsp - "selector": "source.ahk2", // Same as scope in AutoHotkey2.sublime-syntax - "schemes": ["file", "buffer", "res"], - "initializationOptions": { - "locale": "en-us", // or "zh-cn" - "AutoLibInclude": "Disabled", // or "Local" or "User and Standard" or "All" - "CommentTags": "^;;\\s*(?.+)", - "CompleteFunctionParens": false, - "Diagnostics": { - "ClassStaticMemberCheck": true, - "ParamsCheck": true - }, - "ActionWhenV1IsDetected": "Continue", - "FormatOptions": { - "array_style": "none", // or "collapse" or "expand" - "break_chained_methods": false, - "ignore_comment": false, - "indent_string": "\t", - "max_preserve_newlines": 2, - "brace_style": "One True Brace", // or "Allman" or "One True Brace Variant" - "object_style": "none", // or "collapse" or "expand" - "preserve_newlines": true, - "space_after_double_colon": true, - "space_before_conditional": true, - "space_in_empty_paren": false, - "space_in_other": true, - "space_in_paren": false, - "wrap_line_length": 0 - }, - "InterpreterPath": "C:/Program Files/AutoHotkey/v2/AutoHotkey.exe", - "WorkingDirs": [], - "SymbolFoldingFromOpenBrace": false - } - } - }, - "semantic_highlighting": true -} -``` - -### Vim and Neovim - -#### COC - -- Download [coc.nvim plugin](https://github.com/neoclide/coc.nvim). - -```bat -cd $VIMRUNTIME\plugin -git clone --branch release https://github.com/neoclide/coc.nvim.git --depth=1 -``` - -- Open (n)vim and enter the command `:CocConfig` to enter the `coc.nvim` configuration file to add configuration information. - -```json -{ - "languageserver": { - "lsp-ahk2": { - "module": "/server/dist/server.js", - "filetypes": ["autohotkey"], - "args": ["--node-ipc"], - "initializationOptions": { - // Same as initializationOptions for Sublime Text4 - } - } - } -} -``` - -#### nvim-lspconfig - -- Download [nvim-lspconfig](https://github.com/neovim/nvim-lspconfig). -- Add the following to your NVIM configuration (init.lua e.g.). Ensure that `cmd` points to the path of your vscode-autohotkey2-lsp installation and `InterpreterPath` points to your AHK exe. - -```lua -local function custom_attach(client, bufnr) - require("lsp_signature").on_attach({ - bind = true, - use_lspsaga = false, - floating_window = true, - fix_pos = true, - hint_enable = true, - hi_parameter = "Search", - handler_opts = { "double" }, - }) -end - -local ahk2_configs = { - autostart = true, - cmd = { - "node", - vim.fn.expand("$HOME/vscode-autohotkey2-lsp/server/dist/server.js"), - "--stdio" - }, - filetypes = { "ahk", "autohotkey", "ah2" }, - init_options = { - locale = "en-us", - InterpreterPath = "C:/Program Files/AutoHotkey/v2/AutoHotkey.exe", - -- Same as initializationOptions for Sublime Text4, convert json literal to lua dictionary literal - }, - single_file_support = true, - flags = { debounce_text_changes = 500 }, - capabilities = capabilities, - on_attach = custom_attach, -} -local configs = require "lspconfig.configs" -configs["ahk2"] = { default_config = ahk2_configs } -local nvim_lsp = require("lspconfig") -nvim_lsp.ahk2.setup({}) -``` - -### Emacs - -#### Eglot - -- Add the following lines to your emacs config file - -```emacs-lisp -(add-to-list 'eglot-server-programs '(ahk-mode "node" "/server/dist/server.js" "--stdio")) - -``` - -## Use in Web Browser +This codebase is not meant for independent use, but rather as a submodule of [AHK++](https://github.com/mark-wiemer-org/ahkpp). -visit https://github.dev or https://vscode.dev in `Chrome/Edge`, and install `thqby.vscode-autohotkey2-lsp` +It provides AHK v2 language support via the [Language Server Protocol](https://microsoft.github.io/language-server-protocol). diff --git a/server/cli/cli.ts b/server/cli/cli.ts deleted file mode 100644 index 71a29d2a..00000000 --- a/server/cli/cli.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { openFile } from '../src/common'; -import { newFormatterConfig } from '../src/config'; -import { Lexer } from '../src/Lexer'; - -function main() { - const options: Record = {}; - process.argv.slice(2).forEach((s) => { - const arr = s.split('='); - options[arr[0]] = arr[1]; - }); - let path: string = options.path ?? ''; - path = path.replace(/^(['"])(.*)\1$/, '$2'); - if (!path) return; - try { - const td = openFile(path, false); - if (!td) return; - const sc = new Lexer(td).beautify(newFormatterConfig()); - console.log(sc); - } catch (e) { - console.error(e); - } -} - -main(); diff --git a/server/src/browserServerMain.ts b/server/src/browserServerMain.ts deleted file mode 100644 index c7c9bb29..00000000 --- a/server/src/browserServerMain.ts +++ /dev/null @@ -1,165 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ -import { TextDocument } from 'vscode-languageserver-textdocument'; -import { - createConnection, BrowserMessageReader, BrowserMessageWriter, DidChangeConfigurationNotification, - InitializeResult, TextDocuments, TextDocumentSyncKind -} from 'vscode-languageserver/browser'; -import { - chinese_punctuations, colorPresentation, colorProvider, commands, completionProvider, - defintionProvider, documentFormatting, enumNames, executeCommandProvider, exportSymbols, getVersionInfo, - hoverProvider, initahk2cache, Lexer, lexers, loadahk2, loadlocalize, prepareRename, rangeFormatting, - referenceProvider, renameProvider, SemanticTokenModifiers, semanticTokensOnFull, semanticTokensOnRange, - SemanticTokenTypes, set_ahk_h, set_Connection, set_dirname, set_locale, set_version, set_WorkspaceFolders, - signatureProvider, symbolProvider, typeFormatting, updateAhkppConfig, workspaceSymbolProvider -} from './common'; -import { AhkppConfig } from './config'; - -const languageServer = 'ahk2-language-server'; -const messageReader = new BrowserMessageReader(self); -const messageWriter = new BrowserMessageWriter(self); -const documents = new TextDocuments(TextDocument); -const workspaceFolders = new Set(); -const connection = set_Connection(createConnection(messageReader, messageWriter)); - -let hasConfigurationCapability = false, hasWorkspaceFolderCapability = false; -let uri_switch_to_ahk2 = ''; - -connection.onInitialize(params => { - const capabilities = params.capabilities; - hasConfigurationCapability = !!( - capabilities.workspace && !!capabilities.workspace.configuration - ); - hasWorkspaceFolderCapability = !!( - capabilities.workspace && !!capabilities.workspace.workspaceFolders - ); - - const result: InitializeResult = { - serverInfo: { - name: languageServer, - }, - capabilities: { - textDocumentSync: { - change: TextDocumentSyncKind.Incremental, - openClose: true - }, - completionProvider: { - resolveProvider: false, - triggerCharacters: ['.', '#', '*', '@'] - }, - signatureHelpProvider: { - triggerCharacters: ['(', ',', ' '] - }, - documentSymbolProvider: true, - definitionProvider: true, - documentFormattingProvider: true, - documentRangeFormattingProvider: true, - documentOnTypeFormattingProvider: { firstTriggerCharacter: '}', moreTriggerCharacter: ['\n', ...Object.keys(chinese_punctuations)] }, - executeCommandProvider: { commands: Object.keys(commands) }, - hoverProvider: true, - foldingRangeProvider: true, - colorProvider: true, - renameProvider: { prepareProvider: true }, - referencesProvider: { workDoneProgress: true }, - semanticTokensProvider: { - legend: { - tokenTypes: enumNames(SemanticTokenTypes), - tokenModifiers: enumNames(SemanticTokenModifiers) - }, - full: true, - range: true - }, - workspaceSymbolProvider: true - } - }; - if (hasWorkspaceFolderCapability) { - params.workspaceFolders?.forEach(it => workspaceFolders.add(it.uri.toLowerCase() + '/')); - result.capabilities.workspace = { workspaceFolders: { supported: true } }; - } - - const configs: AhkppConfig = params.initializationOptions; - set_ahk_h(true); - set_locale(params.locale); - set_dirname(configs.extensionUri!); - loadlocalize(); - updateAhkppConfig(configs); - set_WorkspaceFolders(workspaceFolders); - set_version('3.0.0'); - initahk2cache(); - loadahk2(); - loadahk2('ahk2_h'); - loadahk2('winapi', 4); - return result; -}); - -connection.onInitialized(() => { - if (hasConfigurationCapability) { - // Register for all configuration changes. - connection.client.register(DidChangeConfigurationNotification.type); - } - if (hasWorkspaceFolderCapability) { - connection.workspace.onDidChangeWorkspaceFolders(event => { - event.removed.forEach(it => workspaceFolders.delete(it.uri.toLowerCase() + '/')); - event.added.forEach(it => workspaceFolders.add(it.uri.toLowerCase() + '/')); - set_WorkspaceFolders(workspaceFolders); - }); - } -}); - -connection.onDidChangeConfiguration(async change => { - let newset: AhkppConfig | undefined = change?.settings; - if (hasConfigurationCapability && !newset) - newset = await connection.workspace.getConfiguration('AutoHotkey2'); - if (!newset) { - connection.window.showWarningMessage('Failed to obtain the configuration'); - return; - } - updateAhkppConfig(newset); - set_WorkspaceFolders(workspaceFolders); -}); - -documents.onDidOpen(e => { - const to_ahk2 = uri_switch_to_ahk2 === e.document.uri; - const uri = e.document.uri.toLowerCase(); - let doc = lexers[uri]; - if (doc) doc.document = e.document; - else lexers[uri] = doc = new Lexer(e.document); - doc.actived = true; - if (to_ahk2) - doc.actionWhenV1Detected = 'Continue'; -}); - -documents.onDidClose(e => lexers[e.document.uri.toLowerCase()]?.close()); -documents.onDidChangeContent(e => lexers[e.document.uri.toLowerCase()].update()); - -connection.onCompletion(completionProvider); -connection.onColorPresentation(colorPresentation); -connection.onDocumentColor(colorProvider); -connection.onDefinition(defintionProvider); -connection.onDocumentFormatting(documentFormatting); -connection.onDocumentRangeFormatting(rangeFormatting); -connection.onDocumentOnTypeFormatting(typeFormatting); -connection.onDocumentSymbol(symbolProvider); -connection.onFoldingRanges(params => lexers[params.textDocument.uri.toLowerCase()].foldingranges); -connection.onHover(hoverProvider); -connection.onPrepareRename(prepareRename); -connection.onReferences(referenceProvider); -connection.onRenameRequest(renameProvider); -connection.onSignatureHelp(signatureProvider); -connection.onExecuteCommand(executeCommandProvider); -connection.onWorkspaceSymbol(workspaceSymbolProvider); -connection.languages.semanticTokens.on(semanticTokensOnFull); -connection.languages.semanticTokens.onRange(semanticTokensOnRange); -connection.onRequest('ahk2.exportSymbols', exportSymbols); -connection.onRequest('ahk2.getContent', (uri: string) => lexers[uri.toLowerCase()]?.document.getText()); -connection.onRequest('ahk2.getVersionInfo', getVersionInfo); -connection.onNotification('onDidCloseTextDocument', - (params: { uri: string, id: string }) => { - if (params.id === 'ahk2') - lexers[params.uri.toLowerCase()]?.close(true); - else uri_switch_to_ahk2 = params.uri; - }); -documents.listen(connection); -connection.listen(); diff --git a/test-data/.gitignore b/test-data/.gitignore deleted file mode 100644 index ac456bfc..00000000 --- a/test-data/.gitignore +++ /dev/null @@ -1 +0,0 @@ -# this file is present so the test-data folder is present when others clone the repo \ No newline at end of file diff --git a/tmgrammar-test/0-v2-demo.ahk b/tmgrammar-test/0-v2-demo.ahk deleted file mode 100644 index 6dd66f59..00000000 --- a/tmgrammar-test/0-v2-demo.ahk +++ /dev/null @@ -1,3 +0,0 @@ -#HotIf WinActive("ahk_class Notepad") or WinActive(MyWindowTitle) -#Space::MsgBox "You pressed Win+Spacebar in Notepad or " MyWindowTitle -#HotIf diff --git a/tmgrammar-test/0-v2-demo.ahk.snap b/tmgrammar-test/0-v2-demo.ahk.snap deleted file mode 100644 index e9f040a5..00000000 --- a/tmgrammar-test/0-v2-demo.ahk.snap +++ /dev/null @@ -1,31 +0,0 @@ ->#HotIf WinActive("ahk_class Notepad") or WinActive(MyWindowTitle) -#^ source.ahk2 keyword.control.directive.ahk2 punctuation.definition.directive.ahk2 -# ^^^^^ source.ahk2 keyword.control.directive.ahk2 -# ^ source.ahk2 -# ^^^^^^^^^ source.ahk2 entity.name.function.ahk2 support.function.ahk2 -# ^ source.ahk2 meta.parens.ahk2 punctuation.section.parens.begin.bracket.round.ahk2 -# ^ source.ahk2 meta.parens.ahk2 string.quoted.ahk2 punctuation.definition.string.begin.ahk2 -# ^^^^^^^^^^^^^^^^^ source.ahk2 meta.parens.ahk2 string.quoted.ahk2 -# ^ source.ahk2 meta.parens.ahk2 string.quoted.ahk2 punctuation.definition.string.end.ahk2 -# ^ source.ahk2 meta.parens.ahk2 punctuation.section.parens.end.bracket.round.ahk2 -# ^ source.ahk2 -# ^^ source.ahk2 keyword.operator.expression.ahk2 -# ^ source.ahk2 -# ^^^^^^^^^ source.ahk2 entity.name.function.ahk2 support.function.ahk2 -# ^ source.ahk2 meta.parens.ahk2 punctuation.section.parens.begin.bracket.round.ahk2 -# ^^^^^^^^^^^^^ source.ahk2 meta.parens.ahk2 variable.other.ahk2 -# ^ source.ahk2 meta.parens.ahk2 punctuation.section.parens.end.bracket.round.ahk2 ->#Space::MsgBox "You pressed Win+Spacebar in Notepad or " MyWindowTitle -#^^^^^^ source.ahk2 hotkey.ahk2 keyword.keys.ahk2 -# ^^ source.ahk2 punctuation.definition.colon -# ^^^^^^ source.ahk2 variable.other.ahk2 support.function.ahk2 -# ^ source.ahk2 -# ^ source.ahk2 string.quoted.ahk2 punctuation.definition.string.begin.ahk2 -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.ahk2 string.quoted.ahk2 -# ^ source.ahk2 string.quoted.ahk2 punctuation.definition.string.end.ahk2 -# ^ source.ahk2 -# ^^^^^^^^^^^^^ source.ahk2 variable.other.ahk2 ->#HotIf -#^ source.ahk2 keyword.control.directive.ahk2 punctuation.definition.directive.ahk2 -# ^^^^^ source.ahk2 keyword.control.directive.ahk2 -> \ No newline at end of file diff --git a/tools/install.js b/tools/install.js deleted file mode 100644 index 197ebcc5..00000000 --- a/tools/install.js +++ /dev/null @@ -1,1325 +0,0 @@ -/** - * @license node-stream-zip | (c) 2020 Antelle | https://github.com/antelle/node-stream-zip/blob/master/LICENSE - * Portions copyright https://github.com/cthackers/adm-zip | https://raw.githubusercontent.com/cthackers/adm-zip/master/LICENSE - */ -/* eslint-disable */ -let fs = require('fs'); -const path = require('path'); -const events = require('events'); -const zlib = require('zlib'); -const stream = require('stream'); - -const consts = { - /* The local file header */ - LOCHDR: 30, // LOC header size - LOCSIG: 0x04034b50, // "PK\003\004" - LOCVER: 4, // version needed to extract - LOCFLG: 6, // general purpose bit flag - LOCHOW: 8, // compression method - LOCTIM: 10, // modification time (2 bytes time, 2 bytes date) - LOCCRC: 14, // uncompressed file crc-32 value - LOCSIZ: 18, // compressed size - LOCLEN: 22, // uncompressed size - LOCNAM: 26, // filename length - LOCEXT: 28, // extra field length - - /* The Data descriptor */ - EXTSIG: 0x08074b50, // "PK\007\008" - EXTHDR: 16, // EXT header size - EXTCRC: 4, // uncompressed file crc-32 value - EXTSIZ: 8, // compressed size - EXTLEN: 12, // uncompressed size - - /* The central directory file header */ - CENHDR: 46, // CEN header size - CENSIG: 0x02014b50, // "PK\001\002" - CENVEM: 4, // version made by - CENVER: 6, // version needed to extract - CENFLG: 8, // encrypt, decrypt flags - CENHOW: 10, // compression method - CENTIM: 12, // modification time (2 bytes time, 2 bytes date) - CENCRC: 16, // uncompressed file crc-32 value - CENSIZ: 20, // compressed size - CENLEN: 24, // uncompressed size - CENNAM: 28, // filename length - CENEXT: 30, // extra field length - CENCOM: 32, // file comment length - CENDSK: 34, // volume number start - CENATT: 36, // internal file attributes - CENATX: 38, // external file attributes (host system dependent) - CENOFF: 42, // LOC header offset - - /* The entries in the end of central directory */ - ENDHDR: 22, // END header size - ENDSIG: 0x06054b50, // "PK\005\006" - ENDSIGFIRST: 0x50, - ENDSUB: 8, // number of entries on this disk - ENDTOT: 10, // total number of entries - ENDSIZ: 12, // central directory size in bytes - ENDOFF: 16, // offset of first CEN header - ENDCOM: 20, // zip file comment length - MAXFILECOMMENT: 0xffff, - - /* The entries in the end of ZIP64 central directory locator */ - ENDL64HDR: 20, // ZIP64 end of central directory locator header size - ENDL64SIG: 0x07064b50, // ZIP64 end of central directory locator signature - ENDL64SIGFIRST: 0x50, - ENDL64OFS: 8, // ZIP64 end of central directory offset - - /* The entries in the end of ZIP64 central directory */ - END64HDR: 56, // ZIP64 end of central directory header size - END64SIG: 0x06064b50, // ZIP64 end of central directory signature - END64SIGFIRST: 0x50, - END64SUB: 24, // number of entries on this disk - END64TOT: 32, // total number of entries - END64SIZ: 40, - END64OFF: 48, - - /* Compression methods */ - STORED: 0, // no compression - SHRUNK: 1, // shrunk - REDUCED1: 2, // reduced with compression factor 1 - REDUCED2: 3, // reduced with compression factor 2 - REDUCED3: 4, // reduced with compression factor 3 - REDUCED4: 5, // reduced with compression factor 4 - IMPLODED: 6, // imploded - // 7 reserved - DEFLATED: 8, // deflated - ENHANCED_DEFLATED: 9, // deflate64 - PKWARE: 10, // PKWare DCL imploded - // 11 reserved - BZIP2: 12, // compressed using BZIP2 - // 13 reserved - LZMA: 14, // LZMA - // 15-17 reserved - IBM_TERSE: 18, // compressed using IBM TERSE - IBM_LZ77: 19, //IBM LZ77 z - - /* General purpose bit flag */ - FLG_ENC: 0, // encrypted file - FLG_COMP1: 1, // compression option - FLG_COMP2: 2, // compression option - FLG_DESC: 4, // data descriptor - FLG_ENH: 8, // enhanced deflation - FLG_STR: 16, // strong encryption - FLG_LNG: 1024, // language encoding - FLG_MSK: 4096, // mask header values - FLG_ENTRY_ENC: 1, - - /* 4.5 Extensible data fields */ - EF_ID: 0, - EF_SIZE: 2, - - /* Header IDs */ - ID_ZIP64: 0x0001, - ID_AVINFO: 0x0007, - ID_PFS: 0x0008, - ID_OS2: 0x0009, - ID_NTFS: 0x000a, - ID_OPENVMS: 0x000c, - ID_UNIX: 0x000d, - ID_FORK: 0x000e, - ID_PATCH: 0x000f, - ID_X509_PKCS7: 0x0014, - ID_X509_CERTID_F: 0x0015, - ID_X509_CERTID_C: 0x0016, - ID_STRONGENC: 0x0017, - ID_RECORD_MGT: 0x0018, - ID_X509_PKCS7_RL: 0x0019, - ID_IBM1: 0x0065, - ID_IBM2: 0x0066, - ID_POSZIP: 0x4690, - - EF_ZIP64_OR_32: 0xffffffff, - EF_ZIP64_OR_16: 0xffff, -}; - -class StreamZip extends events.EventEmitter { - constructor(config) { - super(); - let fd, fileSize, chunkSize, op, centralDirectory, closed; - const ready = false, - that = this, - entries = config.storeEntries !== false ? {} : null, - textDecoder = config.nameEncoding - ? new TextDecoder(config.nameEncoding) - : null; - - fd = config.buffer; - fileSize = fd.byteLength; - chunkSize = config.chunkSize || Math.round(fileSize / 1000); - chunkSize = Math.max( - Math.min(chunkSize, Math.min(128 * 1024, fileSize)), - Math.min(1024, fileSize), - ); - setImmediate(readCentralDirectory); - - function readUntilFoundCallback(err, bytesRead) { - if (err || !bytesRead) { - return that.emit( - 'error', - err || new Error('Archive read error'), - ); - } - let pos = op.lastPos; - let bufferPosition = pos - op.win.position; - const buffer = op.win.buffer; - const minPos = op.minPos; - while (--pos >= minPos && --bufferPosition >= 0) { - if ( - buffer.length - bufferPosition >= 4 && - buffer[bufferPosition] === op.firstByte - ) { - // quick check first signature byte - if (buffer.readUInt32LE(bufferPosition) === op.sig) { - op.lastBufferPosition = bufferPosition; - op.lastBytesRead = bytesRead; - op.complete(); - return; - } - } - } - if (pos === minPos) { - return that.emit('error', new Error('Bad archive')); - } - op.lastPos = pos + 1; - op.chunkSize *= 2; - if (pos <= minPos) { - return that.emit('error', new Error('Bad archive')); - } - const expandLength = Math.min(op.chunkSize, pos - minPos); - op.win.expandLeft(expandLength, readUntilFoundCallback); - } - - function readCentralDirectory() { - const totalReadLength = Math.min( - consts.ENDHDR + consts.MAXFILECOMMENT, - fileSize, - ); - op = { - win: new FileWindowBuffer(fd), - totalReadLength, - minPos: fileSize - totalReadLength, - lastPos: fileSize, - chunkSize: Math.min(1024, chunkSize), - firstByte: consts.ENDSIGFIRST, - sig: consts.ENDSIG, - complete: readCentralDirectoryComplete, - }; - op.win.read( - fileSize - op.chunkSize, - op.chunkSize, - readUntilFoundCallback, - ); - } - - function readCentralDirectoryComplete() { - const buffer = op.win.buffer; - const pos = op.lastBufferPosition; - try { - centralDirectory = new CentralDirectoryHeader(); - centralDirectory.read(buffer.slice(pos, pos + consts.ENDHDR)); - centralDirectory.headerOffset = op.win.position + pos; - if (centralDirectory.commentLength) { - that.comment = buffer - .slice( - pos + consts.ENDHDR, - pos + - consts.ENDHDR + - centralDirectory.commentLength, - ) - .toString(); - } else { - that.comment = null; - } - that.entriesCount = centralDirectory.volumeEntries; - that.centralDirectory = centralDirectory; - if ( - (centralDirectory.volumeEntries === consts.EF_ZIP64_OR_16 && - centralDirectory.totalEntries === - consts.EF_ZIP64_OR_16) || - centralDirectory.size === consts.EF_ZIP64_OR_32 || - centralDirectory.offset === consts.EF_ZIP64_OR_32 - ) { - readZip64CentralDirectoryLocator(); - } else { - op = {}; - readEntries(); - } - } catch (err) { - that.emit('error', err); - } - } - - function readZip64CentralDirectoryLocator() { - const length = consts.ENDL64HDR; - if (op.lastBufferPosition > length) { - op.lastBufferPosition -= length; - readZip64CentralDirectoryLocatorComplete(); - } else { - op = { - win: op.win, - totalReadLength: length, - minPos: op.win.position - length, - lastPos: op.win.position, - chunkSize: op.chunkSize, - firstByte: consts.ENDL64SIGFIRST, - sig: consts.ENDL64SIG, - complete: readZip64CentralDirectoryLocatorComplete, - }; - op.win.read( - op.lastPos - op.chunkSize, - op.chunkSize, - readUntilFoundCallback, - ); - } - } - - function readZip64CentralDirectoryLocatorComplete() { - const buffer = op.win.buffer; - const locHeader = new CentralDirectoryLoc64Header(); - locHeader.read( - buffer.slice( - op.lastBufferPosition, - op.lastBufferPosition + consts.ENDL64HDR, - ), - ); - const readLength = fileSize - locHeader.headerOffset; - op = { - win: op.win, - totalReadLength: readLength, - minPos: locHeader.headerOffset, - lastPos: op.lastPos, - chunkSize: op.chunkSize, - firstByte: consts.END64SIGFIRST, - sig: consts.END64SIG, - complete: readZip64CentralDirectoryComplete, - }; - op.win.read( - fileSize - op.chunkSize, - op.chunkSize, - readUntilFoundCallback, - ); - } - - function readZip64CentralDirectoryComplete() { - const buffer = op.win.buffer; - const zip64cd = new CentralDirectoryZip64Header(); - zip64cd.read( - buffer.slice( - op.lastBufferPosition, - op.lastBufferPosition + consts.END64HDR, - ), - ); - that.centralDirectory.volumeEntries = zip64cd.volumeEntries; - that.centralDirectory.totalEntries = zip64cd.totalEntries; - that.centralDirectory.size = zip64cd.size; - that.centralDirectory.offset = zip64cd.offset; - that.entriesCount = zip64cd.volumeEntries; - op = {}; - readEntries(); - } - - function readEntries() { - op = { - win: new FileWindowBuffer(fd), - pos: centralDirectory.offset, - chunkSize, - entriesLeft: centralDirectory.volumeEntries, - }; - op.win.read( - op.pos, - Math.min(chunkSize, fileSize - op.pos), - readEntriesCallback, - ); - } - - function readEntriesCallback(err, bytesRead) { - if (err || !bytesRead) { - return that.emit( - 'error', - err || new Error('Entries read error'), - ); - } - let bufferPos = op.pos - op.win.position; - let entry = op.entry; - const buffer = op.win.buffer; - const bufferLength = buffer.length; - try { - while (op.entriesLeft > 0) { - if (!entry) { - entry = new ZipEntry(); - entry.readHeader(buffer, bufferPos); - entry.headerOffset = op.win.position + bufferPos; - op.entry = entry; - op.pos += consts.CENHDR; - bufferPos += consts.CENHDR; - } - const entryHeaderSize = - entry.fnameLen + entry.extraLen + entry.comLen; - const advanceBytes = - entryHeaderSize + - (op.entriesLeft > 1 ? consts.CENHDR : 0); - if (bufferLength - bufferPos < advanceBytes) { - op.win.moveRight( - chunkSize, - readEntriesCallback, - bufferPos, - ); - op.move = true; - return; - } - entry.read(buffer, bufferPos, textDecoder); - if (!config.skipEntryNameValidation) { - entry.validateName(); - } - if (entries) { - entries[entry.name] = entry; - } - that.emit('entry', entry); - op.entry = entry = null; - op.entriesLeft--; - op.pos += entryHeaderSize; - bufferPos += entryHeaderSize; - } - that.emit('ready'); - } catch (err) { - that.emit('error', err); - } - } - - function checkEntriesExist() { - if (!entries) { - throw new Error('storeEntries disabled'); - } - } - - Object.defineProperty(this, 'ready', { - get() { - return ready; - }, - }); - - this.entry = function (name) { - checkEntriesExist(); - return entries[name]; - }; - - this.entries = function () { - checkEntriesExist(); - return entries; - }; - - this.stream = function (entry, callback) { - return this.openEntry( - entry, - (err, entry) => { - if (err) { - return callback(err); - } - const offset = dataOffset(entry); - let entryStream = new EntryDataReaderStream( - fd, - offset, - entry.compressedSize, - ); - if (entry.method === consts.STORED) { - // nothing to do - } else if (entry.method === consts.DEFLATED) { - entryStream = entryStream.pipe(zlib.createInflateRaw()); - } else { - return callback( - new Error( - 'Unknown compression method: ' + entry.method, - ), - ); - } - if (canVerifyCrc(entry)) { - entryStream = entryStream.pipe( - new EntryVerifyStream( - entryStream, - entry.crc, - entry.size, - ), - ); - } - callback(null, entryStream); - }, - false, - ); - }; - - this.entryDataSync = function (entry) { - let err = null; - this.openEntry( - entry, - (e, en) => { - err = e; - entry = en; - }, - true, - ); - if (err) { - throw err; - } - let data = Buffer.alloc(entry.compressedSize); - new BufRead( - fd, - data, - 0, - entry.compressedSize, - dataOffset(entry), - (e) => { - err = e; - }, - ).read(true); - if (err) { - throw err; - } - if (entry.method === consts.STORED) { - // nothing to do - } else if ( - entry.method === consts.DEFLATED || - entry.method === consts.ENHANCED_DEFLATED - ) { - data = zlib.inflateRawSync(data); - } else { - throw new Error('Unknown compression method: ' + entry.method); - } - if (data.length !== entry.size) { - throw new Error('Invalid size'); - } - if (canVerifyCrc(entry)) { - const verify = new CrcVerify(entry.crc, entry.size); - verify.data(data); - } - return data; - }; - - this.openEntry = function (entry, callback, sync) { - if (typeof entry === 'string') { - checkEntriesExist(); - entry = entries[entry]; - if (!entry) { - return callback(new Error('Entry not found')); - } - } - if (!entry.isFile) { - return callback(new Error('Entry is not file')); - } - if (!fd) { - return callback(new Error('Archive closed')); - } - const buffer = Buffer.alloc(consts.LOCHDR); - new BufRead(fd, buffer, 0, buffer.length, entry.offset, (err) => { - if (err) { - return callback(err); - } - let readEx; - try { - entry.readDataHeader(buffer); - if (entry.encrypted) { - readEx = new Error('Entry encrypted'); - } - } catch (ex) { - readEx = ex; - } - callback(readEx, entry); - }).read(sync); - }; - - function dataOffset(entry) { - return ( - entry.offset + consts.LOCHDR + entry.fnameLen + entry.extraLen - ); - } - - function canVerifyCrc(entry) { - // if bit 3 (0x08) of the general-purpose flags field is set, then the CRC-32 and file sizes are not known when the header is written - return (entry.flags & 0x8) !== 0x8; - } - - function extract(entry, outPath, callback) { - that.stream(entry, (err, stm) => { - if (err) { - callback(err); - } else { - let fsStm, errThrown; - stm.on('error', (err) => { - errThrown = err; - if (fsStm) { - stm.unpipe(fsStm); - fsStm.close(() => { - callback(err); - }); - } - }); - fs.open(outPath, 'w', (err, fdFile) => { - if (err) { - return callback(err); - } - if (errThrown) { - fs.close(fd, () => { - callback(errThrown); - }); - return; - } - fsStm = fs.createWriteStream(outPath, { fd: fdFile }); - fsStm.on('finish', () => { - that.emit('extract', entry, outPath); - if (!errThrown) { - callback(); - } - }); - stm.pipe(fsStm); - }); - } - }); - } - - function createDirectories(baseDir, dirs, callback) { - if (!dirs.length) { - return callback(); - } - let dir = dirs.shift(); - dir = path.join(baseDir, path.join(...dir)); - fs.mkdir(dir, { recursive: true }, (err) => { - if (err && err.code !== 'EEXIST') { - return callback(err); - } - createDirectories(baseDir, dirs, callback); - }); - } - - function extractFiles( - baseDir, - baseRelPath, - files, - callback, - extractedCount, - ) { - if (!files.length) { - return callback(null, extractedCount); - } - const file = files.shift(); - const targetPath = path.join( - baseDir, - file.name.replace(baseRelPath, ''), - ); - extract(file, targetPath, (err) => { - if (err) { - return callback(err, extractedCount); - } - extractFiles( - baseDir, - baseRelPath, - files, - callback, - extractedCount + 1, - ); - }); - } - - this.extract = function (entry, outPath, callback, filter) { - let entryName = entry || ''; - if (typeof entry === 'string') { - entry = this.entry(entry); - if (entry) { - entryName = entry.name; - } else { - if ( - entryName.length && - entryName[entryName.length - 1] !== '/' - ) { - entryName += '/'; - } - } - } - if (!entry || entry.isDirectory) { - const files = [], - dirs = [], - allDirs = {}; - for (const e in entries) { - if ( - Object.prototype.hasOwnProperty.call(entries, e) && - e.lastIndexOf(entryName, 0) === 0 - ) { - let relPath = e.replace(entryName, ''); - const childEntry = entries[e]; - if (filter && !filter(childEntry)) continue; - if (childEntry.isFile) { - files.push(childEntry); - relPath = path.dirname(relPath); - } - if (relPath && !allDirs[relPath] && relPath !== '.') { - allDirs[relPath] = true; - let parts = relPath.split('/').filter((f) => { - return f; - }); - if (parts.length) { - dirs.push(parts); - } - while (parts.length > 1) { - parts = parts.slice(0, parts.length - 1); - const partsPath = parts.join('/'); - if (allDirs[partsPath] || partsPath === '.') { - break; - } - allDirs[partsPath] = true; - dirs.push(parts); - } - } - } - } - dirs.sort((x, y) => { - return x.length - y.length; - }); - if (dirs.length) { - createDirectories(outPath, dirs, (err) => { - if (err) { - callback(err); - } else { - extractFiles( - outPath, - entryName, - files, - callback, - 0, - ); - } - }); - } else { - extractFiles(outPath, entryName, files, callback, 0); - } - } else { - fs.stat(outPath, (err, stat) => { - if (stat && stat.isDirectory()) { - extract( - entry, - path.join(outPath, path.basename(entry.name)), - callback, - ); - } else { - extract(entry, outPath, callback); - } - }); - } - }; - - this.close = function (callback) { - if (closed || !fd || (BufRead === BufRead && !(fd = null))) { - closed = true; - if (callback) { - callback(); - } - } else { - closed = true; - fs.close(fd, (err) => { - fd = null; - if (callback) { - callback(err); - } - }); - } - }; - - const originalEmit = events.EventEmitter.prototype.emit; - this.emit = function (...args) { - if (!closed) { - return originalEmit.call(this, ...args); - } - }; - } -} - -class CentralDirectoryHeader { - read(data) { - if ( - data.length !== consts.ENDHDR || - data.readUInt32LE(0) !== consts.ENDSIG - ) { - throw new Error('Invalid central directory'); - } - // number of entries on this volume - this.volumeEntries = data.readUInt16LE(consts.ENDSUB); - // total number of entries - this.totalEntries = data.readUInt16LE(consts.ENDTOT); - // central directory size in bytes - this.size = data.readUInt32LE(consts.ENDSIZ); - // offset of first CEN header - this.offset = data.readUInt32LE(consts.ENDOFF); - // zip file comment length - this.commentLength = data.readUInt16LE(consts.ENDCOM); - } -} - -class CentralDirectoryLoc64Header { - read(data) { - if ( - data.length !== consts.ENDL64HDR || - data.readUInt32LE(0) !== consts.ENDL64SIG - ) { - throw new Error('Invalid zip64 central directory locator'); - } - // ZIP64 EOCD header offset - this.headerOffset = readUInt64LE(data, consts.ENDSUB); - } -} - -class CentralDirectoryZip64Header { - read(data) { - if ( - data.length !== consts.END64HDR || - data.readUInt32LE(0) !== consts.END64SIG - ) { - throw new Error('Invalid central directory'); - } - // number of entries on this volume - this.volumeEntries = readUInt64LE(data, consts.END64SUB); - // total number of entries - this.totalEntries = readUInt64LE(data, consts.END64TOT); - // central directory size in bytes - this.size = readUInt64LE(data, consts.END64SIZ); - // offset of first CEN header - this.offset = readUInt64LE(data, consts.END64OFF); - } -} - -class ZipEntry { - readHeader(data, offset) { - // data should be 46 bytes and start with "PK 01 02" - if ( - data.length < offset + consts.CENHDR || - data.readUInt32LE(offset) !== consts.CENSIG - ) { - throw new Error('Invalid entry header'); - } - // version made by - this.verMade = data.readUInt16LE(offset + consts.CENVEM); - // version needed to extract - this.version = data.readUInt16LE(offset + consts.CENVER); - // encrypt, decrypt flags - this.flags = data.readUInt16LE(offset + consts.CENFLG); - // compression method - this.method = data.readUInt16LE(offset + consts.CENHOW); - // modification time (2 bytes time, 2 bytes date) - const timebytes = data.readUInt16LE(offset + consts.CENTIM); - const datebytes = data.readUInt16LE(offset + consts.CENTIM + 2); - this.time = parseZipTime(timebytes, datebytes); - - // uncompressed file crc-32 value - this.crc = data.readUInt32LE(offset + consts.CENCRC); - // compressed size - this.compressedSize = data.readUInt32LE(offset + consts.CENSIZ); - // uncompressed size - this.size = data.readUInt32LE(offset + consts.CENLEN); - // filename length - this.fnameLen = data.readUInt16LE(offset + consts.CENNAM); - // extra field length - this.extraLen = data.readUInt16LE(offset + consts.CENEXT); - // file comment length - this.comLen = data.readUInt16LE(offset + consts.CENCOM); - // volume number start - this.diskStart = data.readUInt16LE(offset + consts.CENDSK); - // internal file attributes - this.inattr = data.readUInt16LE(offset + consts.CENATT); - // external file attributes - this.attr = data.readUInt32LE(offset + consts.CENATX); - // LOC header offset - this.offset = data.readUInt32LE(offset + consts.CENOFF); - } - - readDataHeader(data) { - // 30 bytes and should start with "PK\003\004" - if (data.readUInt32LE(0) !== consts.LOCSIG) { - throw new Error('Invalid local header'); - } - // version needed to extract - this.version = data.readUInt16LE(consts.LOCVER); - // general purpose bit flag - this.flags = data.readUInt16LE(consts.LOCFLG); - // compression method - this.method = data.readUInt16LE(consts.LOCHOW); - // modification time (2 bytes time ; 2 bytes date) - const timebytes = data.readUInt16LE(consts.LOCTIM); - const datebytes = data.readUInt16LE(consts.LOCTIM + 2); - this.time = parseZipTime(timebytes, datebytes); - - // uncompressed file crc-32 value - this.crc = data.readUInt32LE(consts.LOCCRC) || this.crc; - // compressed size - const compressedSize = data.readUInt32LE(consts.LOCSIZ); - if (compressedSize && compressedSize !== consts.EF_ZIP64_OR_32) { - this.compressedSize = compressedSize; - } - // uncompressed size - const size = data.readUInt32LE(consts.LOCLEN); - if (size && size !== consts.EF_ZIP64_OR_32) { - this.size = size; - } - // filename length - this.fnameLen = data.readUInt16LE(consts.LOCNAM); - // extra field length - this.extraLen = data.readUInt16LE(consts.LOCEXT); - } - - read(data, offset, textDecoder) { - const nameData = data.slice(offset, (offset += this.fnameLen)); - this.name = textDecoder - ? textDecoder.decode(new Uint8Array(nameData)) - : nameData.toString('utf8'); - const lastChar = data[offset - 1]; - this.isDirectory = lastChar === 47 || lastChar === 92; - - if (this.extraLen) { - this.readExtra(data, offset); - offset += this.extraLen; - } - this.comment = this.comLen - ? data.slice(offset, offset + this.comLen).toString() - : null; - } - - validateName() { - if (/\\|^\w+:|^\/|(^|\/)\.\.(\/|$)/.test(this.name)) { - throw new Error('Malicious entry: ' + this.name); - } - } - - readExtra(data, offset) { - let signature, size; - const maxPos = offset + this.extraLen; - while (offset < maxPos) { - signature = data.readUInt16LE(offset); - offset += 2; - size = data.readUInt16LE(offset); - offset += 2; - if (consts.ID_ZIP64 === signature) { - this.parseZip64Extra(data, offset, size); - } - offset += size; - } - } - - parseZip64Extra(data, offset, length) { - if (length >= 8 && this.size === consts.EF_ZIP64_OR_32) { - this.size = readUInt64LE(data, offset); - offset += 8; - length -= 8; - } - if (length >= 8 && this.compressedSize === consts.EF_ZIP64_OR_32) { - this.compressedSize = readUInt64LE(data, offset); - offset += 8; - length -= 8; - } - if (length >= 8 && this.offset === consts.EF_ZIP64_OR_32) { - this.offset = readUInt64LE(data, offset); - offset += 8; - length -= 8; - } - if (length >= 4 && this.diskStart === consts.EF_ZIP64_OR_16) { - this.diskStart = data.readUInt32LE(offset); - // offset += 4; length -= 4; - } - } - - get encrypted() { - return (this.flags & consts.FLG_ENTRY_ENC) === consts.FLG_ENTRY_ENC; - } - - get isFile() { - return !this.isDirectory; - } -} - -class BufRead { - constructor(fd, buffer, offset, length, position, callback) { - /** @type Buffer */ - this.fd = fd; - this.buffer = buffer; - this.offset = offset; - this.length = length; - this.position = position; - this.callback = callback; - this.bytesRead = 0; - this.waiting = false; - } - - read(sync) { - this.waiting = true; - let err; - let bytesRead = this.fd.copy( - this.buffer, - this.offset + this.bytesRead, - this.position + this.bytesRead, - ); - this.readCallback(sync, err, !sync || err ? bytesRead : null); - } - - readCallback(sync, err, bytesRead) { - if (typeof bytesRead === 'number') { - this.bytesRead += bytesRead; - } - if (err || !bytesRead || this.bytesRead === this.length) { - this.waiting = false; - return this.callback(err, this.bytesRead); - } else { - this.read(sync); - } - } -} - -class FileWindowBuffer { - constructor(fd) { - this.position = 0; - this.buffer = Buffer.alloc(0); - this.fd = fd; - this.fsOp = null; - } - - checkOp() { - if (this.fsOp && this.fsOp.waiting) { - throw new Error('Operation in progress'); - } - } - - read(pos, length, callback) { - this.checkOp(); - if (this.buffer.length < length) { - this.buffer = Buffer.alloc(length); - } - this.position = pos; - this.fsOp = new BufRead( - this.fd, - this.buffer, - 0, - length, - this.position, - callback, - ).read(); - } - - expandLeft(length, callback) { - this.checkOp(); - this.buffer = Buffer.concat([Buffer.alloc(length), this.buffer]); - this.position -= length; - if (this.position < 0) { - this.position = 0; - } - this.fsOp = new BufRead( - this.fd, - this.buffer, - 0, - length, - this.position, - callback, - ).read(); - } - - expandRight(length, callback) { - this.checkOp(); - const offset = this.buffer.length; - this.buffer = Buffer.concat([this.buffer, Buffer.alloc(length)]); - this.fsOp = new BufRead( - this.fd, - this.buffer, - offset, - length, - this.position + offset, - callback, - ).read(); - } - - moveRight(length, callback, shift) { - this.checkOp(); - if (shift) { - this.buffer.copy(this.buffer, 0, shift); - } else { - shift = 0; - } - this.position += shift; - this.fsOp = new BufRead( - this.fd, - this.buffer, - this.buffer.length - shift, - shift, - this.position + this.buffer.length - shift, - callback, - ).read(); - } -} - -class EntryDataReaderStream extends stream.Readable { - constructor(fd, offset, length) { - super(); - this.fd = fd; - this.offset = offset; - this.length = length; - this.pos = 0; - } - - _read(n) { - const buffer = Buffer.alloc(Math.min(n, this.length - this.pos)); - if (buffer.length) { - this.readCallback( - undefined, - this.fd.copy(buffer, 0, this.offset + this.pos), - buffer, - ); - } else { - this.push(null); - } - } - - readCallback(err, bytesRead, buffer) { - this.pos += bytesRead; - if (err) { - this.emit('error', err); - this.push(null); - } else if (!bytesRead) { - this.push(null); - } else { - if (bytesRead !== buffer.length) { - buffer = buffer.slice(0, bytesRead); - } - this.push(buffer); - } - } -} - -class EntryVerifyStream extends stream.Transform { - constructor(baseStm, crc, size) { - super(); - this.verify = new CrcVerify(crc, size); - baseStm.on('error', (e) => { - this.emit('error', e); - }); - } - - _transform(data, encoding, callback) { - let err; - try { - this.verify.data(data); - } catch (e) { - err = e; - } - callback(err, data); - } -} - -class CrcVerify { - constructor(crc, size) { - this.crc = crc; - this.size = size; - this.state = { - crc: ~0, - size: 0, - }; - } - - data(data) { - const crcTable = CrcVerify.getCrcTable(); - let crc = this.state.crc; - let off = 0; - let len = data.length; - while (--len >= 0) { - crc = crcTable[(crc ^ data[off++]) & 0xff] ^ (crc >>> 8); - } - this.state.crc = crc; - this.state.size += data.length; - if (this.state.size >= this.size) { - const buf = Buffer.alloc(4); - buf.writeInt32LE(~this.state.crc & 0xffffffff, 0); - crc = buf.readUInt32LE(0); - if (crc !== this.crc) { - throw new Error('Invalid CRC'); - } - if (this.state.size !== this.size) { - throw new Error('Invalid size'); - } - } - } - - static getCrcTable() { - let crcTable = CrcVerify.crcTable; - if (!crcTable) { - CrcVerify.crcTable = crcTable = []; - const b = Buffer.alloc(4); - for (let n = 0; n < 256; n++) { - let c = n; - for (let k = 8; --k >= 0; ) { - if ((c & 1) !== 0) { - c = 0xedb88320 ^ (c >>> 1); - } else { - c = c >>> 1; - } - } - if (c < 0) { - b.writeInt32LE(c, 0); - c = b.readUInt32LE(0); - } - crcTable[n] = c; - } - } - return crcTable; - } -} - -function parseZipTime(timebytes, datebytes) { - const timebits = toBits(timebytes, 16); - const datebits = toBits(datebytes, 16); - - const mt = { - h: parseInt(timebits.slice(0, 5).join(''), 2), - m: parseInt(timebits.slice(5, 11).join(''), 2), - s: parseInt(timebits.slice(11, 16).join(''), 2) * 2, - Y: parseInt(datebits.slice(0, 7).join(''), 2) + 1980, - M: parseInt(datebits.slice(7, 11).join(''), 2), - D: parseInt(datebits.slice(11, 16).join(''), 2), - }; - const dt_str = - [mt.Y, mt.M, mt.D].join('-') + - ' ' + - [mt.h, mt.m, mt.s].join(':') + - ' GMT+0'; - return new Date(dt_str).getTime(); -} - -function toBits(dec, size) { - let b = (dec >>> 0).toString(2); - while (b.length < size) { - b = '0' + b; - } - return b.split(''); -} - -function readUInt64LE(buffer, offset) { - return ( - buffer.readUInt32LE(offset + 4) * 0x0000000100000000 + - buffer.readUInt32LE(offset) - ); -} - -const https = require('https'); -function https_request(url, data, headers) { - return new Promise((resolve, reject) => { - let req = https.request( - url, - { method: data ? 'POST' : 'GET', headers }, - (msg) => { - let body = Buffer.alloc(0); - let isgzip = msg.headers['content-encoding'] === 'gzip'; - msg.on( - 'data', - (chunk) => (body = Buffer.concat([body, chunk])), - ); - msg.on('end', () => { - if (isgzip) - zlib.gunzip(body, (err, buf) => - resolve(err ? body : buf), - ); - else resolve(body); - }); - }, - ); - data && req.write(data); - req.end(); - req.on('error', (err) => reject(err)); - req.on('timeout', () => reject('timeout')); - }); -} - -function get_latest_ahk2lsp() { - https_request( - 'https://marketplace.visualstudio.com/_apis/public/gallery/extensionquery', - '{"assetTypes":null,"filters":[{"criteria":[{"filterType":7,"value":"thqby.vscode-autohotkey2-lsp"}],"direction":2,"pageSize":100,"pageNumber":1,"sortBy":0,"sortOrder":0,"pagingToken":null}],"flags":2151}', - { - 'content-type': 'application/json', - accept: 'application/json;api-version=7.1-preview.1;excludeUrls=true', - }, - ) - .catch((err) => console.error(err)) - .then((info) => { - let ext = JSON.parse(info).results[0].extensions[0].versions[0]; - let version = ext.version; - fs.readFile('./package.json', (err, buf) => { - let update = !buf; - if (buf) { - try { - let curver = JSON.parse(buf).version.split('.'), - ver = version.split('.'); - for (let n in curver) { - if (parseInt(curver[n]) < parseInt(ver[n])) { - update = true; - break; - } - } - } catch (e) { - update = true; - } - } - if (update) download_ahk2lsp(); - else - console.log( - `thqby.vscode-autohotkey2-lsp v${version} is the latest version.`, - ); - - function download_ahk2lsp(url) { - https_request( - url ?? - `https://marketplace.visualstudio.com/_apis/public/gallery/publishers/thqby/vsextensions/vscode-autohotkey2-lsp/${version}/vspackage`, - ) - .then((buffer) => { - if (buffer[0] === 123) { - if (!url) { - for (let f of ext.files) - if ( - f.assetType.endsWith('.VSIXPackage') - ) - return download_ahk2lsp(f.source); - } - return console.error(buffer.toString()); - } - let zip = new StreamZip({ buffer }); - let extract_count = 0, - has_extract_count = 0; - zip.on('ready', () => - zip.extract( - 'extension/', - './', - (err) => err && console.error(err), - (entry) => { - let name = entry.name.toLowerCase(); - if ( - name.includes('/client/') || - name.includes('/browser') - ) - return false; - if ( - name.endsWith( - '/ahk2.configuration.json', - ) || - name.endsWith('.png') || - name.endsWith('.tmlanguage.json') - ) - return false; - extract_count++; - return true; - }, - ), - ); - zip.on('error', (err) => console.error(err)); - zip.on('extract', (entry, outPath) => { - if (++has_extract_count === extract_count) - console.log( - `thqby.vscode-autohotkey2-lsp v${version} has been installed.`, - ); - }); - }) - .catch((err) => console.error(err)); - } - }); - }); -} - -get_latest_ahk2lsp();