From 2499f05aeb746f81f48b0b21e6677c471bda2f8f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 30 Jun 2025 14:31:40 +0000 Subject: [PATCH 0001/2080] Initial plan From d880b77fe0ba55f78402e632b2db0f499c71515b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 30 Jun 2025 14:49:08 +0000 Subject: [PATCH 0002/2080] Add shellIntegrationNonce support to VS Code API and terminal creation flow Co-authored-by: Tyriar <2193314+Tyriar@users.noreply.github.com> --- src/vs/platform/terminal/common/terminal.ts | 6 ++++++ src/vs/platform/terminal/node/terminalProcess.ts | 6 ++++++ .../api/browser/mainThreadTerminalService.ts | 3 ++- src/vs/workbench/api/common/extHost.protocol.ts | 1 + .../workbench/api/common/extHostTerminalService.ts | 8 +++++--- .../contrib/terminal/browser/terminalInstance.ts | 2 +- src/vscode-dts/vscode.d.ts | 14 ++++++++++++++ 7 files changed, 35 insertions(+), 5 deletions(-) diff --git a/src/vs/platform/terminal/common/terminal.ts b/src/vs/platform/terminal/common/terminal.ts index a0c7cf0efca24..b9462d84f3883 100644 --- a/src/vs/platform/terminal/common/terminal.ts +++ b/src/vs/platform/terminal/common/terminal.ts @@ -650,6 +650,12 @@ export interface IShellLaunchConfig { * Report terminal's shell environment variables to VS Code and extensions */ shellIntegrationEnvironmentReporting?: boolean; + + /** + * A custom nonce to use for shell integration when provided by an extension. + * This allows extensions to control shell integration for terminals they create. + */ + shellIntegrationNonce?: string; } export interface ITerminalTabAction { diff --git a/src/vs/platform/terminal/node/terminalProcess.ts b/src/vs/platform/terminal/node/terminalProcess.ts index 1227cb058af6b..e785696f5b19e 100644 --- a/src/vs/platform/terminal/node/terminalProcess.ts +++ b/src/vs/platform/terminal/node/terminalProcess.ts @@ -234,6 +234,12 @@ export class TerminalProcess extends Disposable implements ITerminalChildProcess } else { this._onDidChangeProperty.fire({ type: ProcessPropertyType.FailedShellIntegrationActivation, value: true }); this._onDidChangeProperty.fire({ type: ProcessPropertyType.ShellIntegrationInjectionFailureReason, value: injection.reason }); + // Even if shell integration injection failed, still set the nonce if one was provided + // This allows extensions to use shell integration with custom shells + if (this._options.shellIntegration.nonce) { + this._ptyOptions.env ||= {}; + this._ptyOptions.env['VSCODE_NONCE'] = this._options.shellIntegration.nonce; + } } try { diff --git a/src/vs/workbench/api/browser/mainThreadTerminalService.ts b/src/vs/workbench/api/browser/mainThreadTerminalService.ts index 0c40ed932717c..8f7b0792dc24e 100644 --- a/src/vs/workbench/api/browser/mainThreadTerminalService.ts +++ b/src/vs/workbench/api/browser/mainThreadTerminalService.ts @@ -164,7 +164,8 @@ export class MainThreadTerminalService implements MainThreadTerminalServiceShape isFeatureTerminal: launchConfig.isFeatureTerminal, isExtensionOwnedTerminal: launchConfig.isExtensionOwnedTerminal, useShellEnvironment: launchConfig.useShellEnvironment, - isTransient: launchConfig.isTransient + isTransient: launchConfig.isTransient, + shellIntegrationNonce: launchConfig.shellIntegrationNonce }; const terminal = Promises.withAsyncBody(async r => { const terminal = await this._terminalService.createTerminal({ diff --git a/src/vs/workbench/api/common/extHost.protocol.ts b/src/vs/workbench/api/common/extHost.protocol.ts index 222038fdb1891..588fa322d839a 100644 --- a/src/vs/workbench/api/common/extHost.protocol.ts +++ b/src/vs/workbench/api/common/extHost.protocol.ts @@ -560,6 +560,7 @@ export interface TerminalLaunchConfig { useShellEnvironment?: boolean; location?: TerminalLocation | { viewColumn: number; preserveFocus?: boolean } | { parentTerminal: ExtHostTerminalIdentifier } | { splitActiveTerminal: boolean }; isTransient?: boolean; + shellIntegrationNonce?: string; } diff --git a/src/vs/workbench/api/common/extHostTerminalService.ts b/src/vs/workbench/api/common/extHostTerminalService.ts index 7f218f1e16229..f3970bccb8986 100644 --- a/src/vs/workbench/api/common/extHostTerminalService.ts +++ b/src/vs/workbench/api/common/extHostTerminalService.ts @@ -191,11 +191,12 @@ export class ExtHostTerminal extends Disposable { useShellEnvironment: internalOptions?.useShellEnvironment ?? undefined, location: internalOptions?.location || this._serializeParentTerminal(options.location, internalOptions?.resolvedExtHostIdentifier), isTransient: options.isTransient ?? undefined, + shellIntegrationNonce: options.shellIntegrationNonce ?? undefined, }); } - public async createExtensionTerminal(location?: TerminalLocation | vscode.TerminalEditorLocationOptions | vscode.TerminalSplitLocationOptions, internalOptions?: ITerminalInternalOptions, parentTerminal?: ExtHostTerminalIdentifier, iconPath?: TerminalIcon, color?: ThemeColor): Promise { + public async createExtensionTerminal(location?: TerminalLocation | vscode.TerminalEditorLocationOptions | vscode.TerminalSplitLocationOptions, internalOptions?: ITerminalInternalOptions, parentTerminal?: ExtHostTerminalIdentifier, iconPath?: TerminalIcon, color?: ThemeColor, shellIntegrationNonce?: string): Promise { if (typeof this._id !== 'string') { throw new Error('Terminal has already been created'); } @@ -205,7 +206,8 @@ export class ExtHostTerminal extends Disposable { icon: iconPath, color: ThemeColor.isThemeColor(color) ? color.id : undefined, location: internalOptions?.location || this._serializeParentTerminal(location, parentTerminal), - isTransient: true + isTransient: true, + shellIntegrationNonce: shellIntegrationNonce ?? undefined, }); // At this point, the id has been set via `$acceptTerminalOpened` if (typeof this._id === 'string') { @@ -511,7 +513,7 @@ export abstract class BaseExtHostTerminalService extends Disposable implements I public createExtensionTerminal(options: vscode.ExtensionTerminalOptions, internalOptions?: ITerminalInternalOptions): vscode.Terminal { const terminal = new ExtHostTerminal(this._proxy, generateUuid(), options, options.name); const p = new ExtHostPseudoterminal(options.pty); - terminal.createExtensionTerminal(options.location, internalOptions, this._serializeParentTerminal(options, internalOptions).resolvedExtHostIdentifier, asTerminalIcon(options.iconPath), asTerminalColor(options.color)).then(id => { + terminal.createExtensionTerminal(options.location, internalOptions, this._serializeParentTerminal(options, internalOptions).resolvedExtHostIdentifier, asTerminalIcon(options.iconPath), asTerminalColor(options.color), options.shellIntegrationNonce).then(id => { const disposable = this._setupExtHostProcessListeners(id, p); this._terminalProcessDisposables[id] = disposable; }); diff --git a/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts b/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts index 7fb424f6eab4b..249e47fcb8f09 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts @@ -1403,7 +1403,7 @@ export class TerminalInstance extends Disposable implements ITerminalInstance { this._instanceId, this.shellLaunchConfig?.cwd, deserializedCollections, - this.shellLaunchConfig.attachPersistentProcess?.shellIntegrationNonce + this.shellLaunchConfig.shellIntegrationNonce ?? this.shellLaunchConfig.attachPersistentProcess?.shellIntegrationNonce ); this.capabilities.add(processManager.capabilities); this._register(processManager.onProcessReady(async (e) => { diff --git a/src/vscode-dts/vscode.d.ts b/src/vscode-dts/vscode.d.ts index 16cb98ca7c946..2cb3a6a41b02d 100644 --- a/src/vscode-dts/vscode.d.ts +++ b/src/vscode-dts/vscode.d.ts @@ -12464,6 +12464,13 @@ declare module 'vscode' { * This will only take effect when `terminal.integrated.enablePersistentSessions` is enabled. */ isTransient?: boolean; + + /** + * The nonce to use to verify shell integration sequences are coming from a trusted source. + * If your terminal implements [custom shell integration support](https://code.visualstudio.com/docs/terminal/shell-integration#_supported-escape-sequences) + * this should be set to a random GUID and then passed along in the relevant sequences. + */ + shellIntegrationNonce?: string; } /** @@ -12503,6 +12510,13 @@ declare module 'vscode' { * This will only take effect when `terminal.integrated.enablePersistentSessions` is enabled. */ isTransient?: boolean; + + /** + * The nonce to use to verify shell integration sequences are coming from a trusted source. + * If your terminal implements [custom shell integration support](https://code.visualstudio.com/docs/terminal/shell-integration#_supported-escape-sequences) + * this should be set to a random GUID and then passed along in the relevant sequences. + */ + shellIntegrationNonce?: string; } /** From 9df3b00d584ce331371138b13f31685d2acaae21 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 30 Jun 2025 14:52:34 +0000 Subject: [PATCH 0003/2080] Add test for shell integration nonce with unsupported shells Co-authored-by: Tyriar <2193314+Tyriar@users.noreply.github.com> --- .../test/node/terminalEnvironment.test.ts | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/vs/platform/terminal/test/node/terminalEnvironment.test.ts b/src/vs/platform/terminal/test/node/terminalEnvironment.test.ts index be0148333441e..344fc2ed01ac8 100644 --- a/src/vs/platform/terminal/test/node/terminalEnvironment.test.ts +++ b/src/vs/platform/terminal/test/node/terminalEnvironment.test.ts @@ -232,5 +232,33 @@ suite('platform - terminalEnvironment', async () => { }); }); } + + suite('custom shell integration nonce', async () => { + test('should fail for unsupported shell but nonce should still be available', async () => { + const customProcessOptions: ITerminalProcessOptions = { + shellIntegration: { enabled: true, suggestEnabled: false, nonce: 'custom-nonce-12345' }, + windowsEnableConpty: true, + windowsUseConptyDll: false, + environmentVariableCollections: undefined, + workspaceFolder: undefined + }; + + // Test with an unsupported shell (julia) + const result = await getShellIntegrationInjection( + { executable: 'julia', args: ['-i'] }, + customProcessOptions, + defaultEnvironment, + logService, + productService, + true + ); + + // Should fail due to unsupported shell + strictEqual(result.type, 'failure'); + + // But the nonce should be available in the process options for the terminal process to use + strictEqual(customProcessOptions.shellIntegration.nonce, 'custom-nonce-12345'); + }); + }); }); }); From d227b1623d72c46894c1926ea988943bf509b3cb Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Mon, 7 Jul 2025 05:51:23 -0700 Subject: [PATCH 0004/2080] Format document --- .../test/node/terminalEnvironment.test.ts | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/vs/platform/terminal/test/node/terminalEnvironment.test.ts b/src/vs/platform/terminal/test/node/terminalEnvironment.test.ts index 344fc2ed01ac8..c54dbe2b584cc 100644 --- a/src/vs/platform/terminal/test/node/terminalEnvironment.test.ts +++ b/src/vs/platform/terminal/test/node/terminalEnvironment.test.ts @@ -235,27 +235,27 @@ suite('platform - terminalEnvironment', async () => { suite('custom shell integration nonce', async () => { test('should fail for unsupported shell but nonce should still be available', async () => { - const customProcessOptions: ITerminalProcessOptions = { - shellIntegration: { enabled: true, suggestEnabled: false, nonce: 'custom-nonce-12345' }, - windowsEnableConpty: true, - windowsUseConptyDll: false, - environmentVariableCollections: undefined, - workspaceFolder: undefined + const customProcessOptions: ITerminalProcessOptions = { + shellIntegration: { enabled: true, suggestEnabled: false, nonce: 'custom-nonce-12345' }, + windowsEnableConpty: true, + windowsUseConptyDll: false, + environmentVariableCollections: undefined, + workspaceFolder: undefined }; - + // Test with an unsupported shell (julia) const result = await getShellIntegrationInjection( - { executable: 'julia', args: ['-i'] }, - customProcessOptions, - defaultEnvironment, - logService, - productService, + { executable: 'julia', args: ['-i'] }, + customProcessOptions, + defaultEnvironment, + logService, + productService, true ); - + // Should fail due to unsupported shell strictEqual(result.type, 'failure'); - + // But the nonce should be available in the process options for the terminal process to use strictEqual(customProcessOptions.shellIntegration.nonce, 'custom-nonce-12345'); }); From d18906705c80a2c169b2b52dc5f5401fb5586760 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Mon, 7 Jul 2025 19:36:38 -0700 Subject: [PATCH 0005/2080] Adding optional TS native compile check stage Adding a optional compile check for making sure our code works with the ts native preview --- build/azure-pipelines/product-compile.yml | 5 + package-lock.json | 142 ++++++++++++++++++++++ package.json | 2 + 3 files changed, 149 insertions(+) diff --git a/build/azure-pipelines/product-compile.yml b/build/azure-pipelines/product-compile.yml index a69942b9d0ccd..f1ab590c7d98e 100644 --- a/build/azure-pipelines/product-compile.yml +++ b/build/azure-pipelines/product-compile.yml @@ -108,6 +108,11 @@ steps: env: GITHUB_TOKEN: "$(github-distro-mixin-password)" displayName: Compile & Hygiene (OSS) + + - script: npm run compile-check-ts-native + displayName: Compile TS Native (OSS) + continueOnError: true + - ${{ else }}: - script: npm exec -- npm-run-all -lp core-ci extensions-ci hygiene eslint valid-layers-check define-class-fields-check vscode-dts-compile-check tsec-compile-check env: diff --git a/package-lock.json b/package-lock.json index c72c61053d4fd..c18840b81e8f7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -78,6 +78,7 @@ "@types/yauzl": "^2.10.0", "@types/yazl": "^2.4.2", "@typescript-eslint/utils": "^8.8.0", + "@typescript/native-preview": "^7.0.0-dev.20250707.2", "@vscode/gulp-electron": "^1.37.1", "@vscode/l10n-dev": "0.0.35", "@vscode/telemetry-extractor": "^1.10.2", @@ -2569,6 +2570,147 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typescript/native-preview": { + "version": "7.0.0-dev.20250707.2", + "resolved": "https://registry.npmjs.org/@typescript/native-preview/-/native-preview-7.0.0-dev.20250707.2.tgz", + "integrity": "sha512-Mnnx358B0o0+91GEjB6eqYqOj65ZYA8YWvTmI0BMuH/pZ6ZXnOFQXp1bwwG9h+41bjK/bGM1KcfRuTh3BWBaxQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsgo": "bin/tsgo.js" + }, + "engines": { + "node": ">=20.6.0" + }, + "optionalDependencies": { + "@typescript/native-preview-darwin-arm64": "7.0.0-dev.20250707.2", + "@typescript/native-preview-darwin-x64": "7.0.0-dev.20250707.2", + "@typescript/native-preview-linux-arm": "7.0.0-dev.20250707.2", + "@typescript/native-preview-linux-arm64": "7.0.0-dev.20250707.2", + "@typescript/native-preview-linux-x64": "7.0.0-dev.20250707.2", + "@typescript/native-preview-win32-arm64": "7.0.0-dev.20250707.2", + "@typescript/native-preview-win32-x64": "7.0.0-dev.20250707.2" + } + }, + "node_modules/@typescript/native-preview-darwin-arm64": { + "version": "7.0.0-dev.20250707.2", + "resolved": "https://registry.npmjs.org/@typescript/native-preview-darwin-arm64/-/native-preview-darwin-arm64-7.0.0-dev.20250707.2.tgz", + "integrity": "sha512-AuGkRTCDzwXIgHHlfgqsdOXh6Ezjwep2DQLJL3fiP5MGfENEkfjHt621d3HQBP1PWRerQnwhyhTc1/txEpXW7w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=20.6.0" + } + }, + "node_modules/@typescript/native-preview-darwin-x64": { + "version": "7.0.0-dev.20250707.2", + "resolved": "https://registry.npmjs.org/@typescript/native-preview-darwin-x64/-/native-preview-darwin-x64-7.0.0-dev.20250707.2.tgz", + "integrity": "sha512-0Lmo5PLmZ2+BScWLBKgjnnLNxaDlsYGcPqmdhtfURI7YUmyagrMahaG1pUqd1Dk3zcp4lWCZy6kxbb2wsBzanw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=20.6.0" + } + }, + "node_modules/@typescript/native-preview-linux-arm": { + "version": "7.0.0-dev.20250707.2", + "resolved": "https://registry.npmjs.org/@typescript/native-preview-linux-arm/-/native-preview-linux-arm-7.0.0-dev.20250707.2.tgz", + "integrity": "sha512-I45IsrG2BydATsI2pn3kW3SV7toRmFFn6QbJaHH6TTkQhjGfWnEQ5jUcLVkrko58FANNiJI5xwlcOARUe2tDWA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.6.0" + } + }, + "node_modules/@typescript/native-preview-linux-arm64": { + "version": "7.0.0-dev.20250707.2", + "resolved": "https://registry.npmjs.org/@typescript/native-preview-linux-arm64/-/native-preview-linux-arm64-7.0.0-dev.20250707.2.tgz", + "integrity": "sha512-VUmb+rB+6k5IzUreluPETpxuQb7ysSOWh6XofRw0rwzVpGQf44n6vRMkkYoeJ7inc5orkYqNOlNTwpuD6Pj/eg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.6.0" + } + }, + "node_modules/@typescript/native-preview-linux-x64": { + "version": "7.0.0-dev.20250707.2", + "resolved": "https://registry.npmjs.org/@typescript/native-preview-linux-x64/-/native-preview-linux-x64-7.0.0-dev.20250707.2.tgz", + "integrity": "sha512-cFJdlIYSbrfx79CP8rzUDPxENG7+OEy/b3jjFxXEEgTEj/WZ4EarmJh1gLgqFXWQzm/53f3TzHJ9MzTVs1sLVA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.6.0" + } + }, + "node_modules/@typescript/native-preview-win32-arm64": { + "version": "7.0.0-dev.20250707.2", + "resolved": "https://registry.npmjs.org/@typescript/native-preview-win32-arm64/-/native-preview-win32-arm64-7.0.0-dev.20250707.2.tgz", + "integrity": "sha512-izwEJW49UQWlLw5mvt+X3b7SjHr9/gAGiuIyBU7gzATsjVNnUB4Z31n0mavQgsudfnt4tE56Ifb8hbvhukhxDA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=20.6.0" + } + }, + "node_modules/@typescript/native-preview-win32-x64": { + "version": "7.0.0-dev.20250707.2", + "resolved": "https://registry.npmjs.org/@typescript/native-preview-win32-x64/-/native-preview-win32-x64-7.0.0-dev.20250707.2.tgz", + "integrity": "sha512-gRyJrVGx44kBt3C79DY9/72ESYBTDxOeJ/o/G3nUS++XRFPGrfzz5GyYZKJNEimjjpLkM7oGeGm7EhT+BPJO8Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=20.6.0" + } + }, "node_modules/@vscode/deviceid": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@vscode/deviceid/-/deviceid-0.1.1.tgz", diff --git a/package.json b/package.json index 0da56483be3a9..baba273e24b04 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "preinstall": "node build/npm/preinstall.js", "postinstall": "node build/npm/postinstall.js", "compile": "node ./node_modules/gulp/bin/gulp.js compile", + "compile-check-ts-native": "tsgo --project ./src/tsconfig.json --noEmit --skipLibCheck", "watch": "npm-run-all -lp watch-client watch-extensions", "watchd": "deemon npm run watch", "watch-webd": "deemon npm run watch-web", @@ -137,6 +138,7 @@ "@types/yauzl": "^2.10.0", "@types/yazl": "^2.4.2", "@typescript-eslint/utils": "^8.8.0", + "@typescript/native-preview": "^7.0.0-dev.20250707.2", "@vscode/gulp-electron": "^1.37.1", "@vscode/l10n-dev": "0.0.35", "@vscode/telemetry-extractor": "^1.10.2", From b1b49eb1f18bbfc1bc426f2c6904e6010f9863bd Mon Sep 17 00:00:00 2001 From: jiangziwei Date: Thu, 17 Jul 2025 16:41:51 +0800 Subject: [PATCH 0006/2080] feat: support prompt file select custom chat mode --- .../promptHeaderAutocompletion.ts | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.ts b/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.ts index 8492d5b2d86d4..8d3507e939244 100644 --- a/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.ts +++ b/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.ts @@ -13,6 +13,7 @@ import { ITextModel } from '../../../../../../editor/common/model.js'; import { ILanguageFeaturesService } from '../../../../../../editor/common/services/languageFeatures.js'; import { ILanguageModelChatMetadata, ILanguageModelsService } from '../../languageModels.js'; import { ILanguageModelToolsService } from '../../languageModelToolsService.js'; +import { IChatModeService } from '../../chatModes.js'; import { InstructionsHeader } from '../parsers/promptHeader/instructionsHeader.js'; import { PromptToolsMetadata } from '../parsers/promptHeader/metadata/tools.js'; import { ModeHeader } from '../parsers/promptHeader/modeHeader.js'; @@ -36,6 +37,7 @@ export class PromptHeaderAutocompletion extends Disposable implements Completion @ILanguageFeaturesService private readonly languageService: ILanguageFeaturesService, @ILanguageModelsService private readonly languageModelsService: ILanguageModelsService, @ILanguageModelToolsService private readonly languageModelToolsService: ILanguageModelToolsService, + @IChatModeService private readonly chatModeService: IChatModeService, ) { super(); @@ -211,7 +213,19 @@ export class PromptHeaderAutocompletion extends Disposable implements Completion return ['**', '**/*.ts, **/*.js', '**/*.php', '**/*.py']; } if (promptType === PromptsType.prompt && property === 'mode') { - return ['agent', 'edit', 'ask']; + // Get all available modes (builtin + custom) + const modes = this.chatModeService.getModes(); + const suggestions: string[] = []; + + // Add builtin mode kinds + suggestions.push(...modes.builtin.map(mode => mode.kind)); + + // Add custom mode IDs + if (modes.custom && modes.custom.length > 0) { + suggestions.push(...modes.custom.map(mode => mode.id)); + } + + return suggestions; } if (property === 'tools' && (promptType === PromptsType.prompt || promptType === PromptsType.mode)) { return ['[]', `['codebase', 'editFiles', 'fetch']`]; From 72be6d52089faa1f7ce032350c6a4d86fb1a76ab Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 17 Jul 2025 21:21:38 +0000 Subject: [PATCH 0007/2080] Bump on-headers and morgan Bumps [on-headers](https://github.com/jshttp/on-headers) and [morgan](https://github.com/expressjs/morgan). These dependencies needed to be updated together. Updates `on-headers` from 1.0.2 to 1.1.0 - [Release notes](https://github.com/jshttp/on-headers/releases) - [Changelog](https://github.com/jshttp/on-headers/blob/master/HISTORY.md) - [Commits](https://github.com/jshttp/on-headers/compare/v1.0.2...v1.1.0) Updates `morgan` from 1.10.0 to 1.10.1 - [Release notes](https://github.com/expressjs/morgan/releases) - [Changelog](https://github.com/expressjs/morgan/blob/master/HISTORY.md) - [Commits](https://github.com/expressjs/morgan/compare/1.10.0...1.10.1) --- updated-dependencies: - dependency-name: on-headers dependency-version: 1.1.0 dependency-type: indirect - dependency-name: morgan dependency-version: 1.10.1 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 46c969f1acf5b..7a1fd1fb57d2b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12709,16 +12709,17 @@ } }, "node_modules/morgan": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", - "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.1.tgz", + "integrity": "sha512-223dMRJtI/l25dJKWpgij2cMtywuG/WiUKXdvwfbhGKBhy1puASqXwFzmWZ7+K73vUPoR7SS2Qz2cI/g9MKw0A==", "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" + "on-headers": "~1.1.0" }, "engines": { "node": ">= 0.8.0" @@ -13468,10 +13469,11 @@ } }, "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } From 8e438d59ed474be0982bcfb094fc700e0135b842 Mon Sep 17 00:00:00 2001 From: jiangziwei Date: Fri, 18 Jul 2025 10:35:37 +0800 Subject: [PATCH 0008/2080] feat: support prompt file edit suggestions --- .../contrib/chat/browser/chatInputPart.ts | 1 + .../contrib/chat/browser/chatWidget.ts | 10 +- .../promptSyntax/newPromptFileActions.ts | 2 +- .../promptHeaderAutocompletion.ts | 4 +- .../promptHeaderDiagnosticsProvider.ts | 40 +- .../languageProviders/promptHeaderHovers.ts | 30 +- .../promptSyntax/parsers/basePromptParser.ts | 3 +- .../parsers/promptHeader/metadata/mode.ts | 7 +- .../parsers/textModelPromptParser.test.ts | 374 +++++++++++++++++- 9 files changed, 450 insertions(+), 21 deletions(-) diff --git a/src/vs/workbench/contrib/chat/browser/chatInputPart.ts b/src/vs/workbench/contrib/chat/browser/chatInputPart.ts index a8e762fda7185..3388cfeb3e7fd 100644 --- a/src/vs/workbench/contrib/chat/browser/chatInputPart.ts +++ b/src/vs/workbench/contrib/chat/browser/chatInputPart.ts @@ -566,6 +566,7 @@ export class ChatInputPart extends Disposable implements IHistoryNavigationWidge } const mode2 = this.chatModeService.findModeById(mode) ?? + this.chatModeService.findModeByName(mode) ?? this.chatModeService.findModeById(ChatModeKind.Agent) ?? ChatMode.Ask; this.setChatMode2(mode2, storeSelection); diff --git a/src/vs/workbench/contrib/chat/browser/chatWidget.ts b/src/vs/workbench/contrib/chat/browser/chatWidget.ts index 6026999b00880..f963c90bd9b19 100644 --- a/src/vs/workbench/contrib/chat/browser/chatWidget.ts +++ b/src/vs/workbench/contrib/chat/browser/chatWidget.ts @@ -51,6 +51,7 @@ import { ChatViewModel, IChatRequestViewModel, IChatResponseViewModel, isRequest import { IChatInputState } from '../common/chatWidgetHistoryService.js'; import { CodeBlockModelCollection } from '../common/codeBlockModelCollection.js'; import { ChatAgentLocation, ChatConfiguration, ChatModeKind } from '../common/constants.js'; +import { IChatModeService } from '../common/chatModes.js'; import { ILanguageModelToolsService, ToolSet } from '../common/languageModelToolsService.js'; import { type TPromptMetadata } from '../common/promptSyntax/parsers/promptHeader/promptHeader.js'; import { IPromptParserResult, IPromptsService } from '../common/promptSyntax/service/promptsService.js'; @@ -292,7 +293,8 @@ export class ChatWidget extends Disposable implements IChatWidget { @ITelemetryService private readonly telemetryService: ITelemetryService, @IPromptsService private readonly promptsService: IPromptsService, @ILanguageModelToolsService private readonly toolsService: ILanguageModelToolsService, - @IWorkspaceContextService private readonly contextService: IWorkspaceContextService + @IWorkspaceContextService private readonly contextService: IWorkspaceContextService, + @IChatModeService private readonly chatModeService: IChatModeService ) { super(); @@ -1971,7 +1973,11 @@ export class ChatWidget extends Disposable implements IChatWidget { // switch to appropriate chat mode if needed if (mode && mode !== this.input.currentModeKind) { - const chatModeCheck = await this.instantiationService.invokeFunction(handleModeSwitch, this.input.currentModeKind, mode, this.viewModel?.model.getRequests().length ?? 0, this.viewModel?.model.editingSession); + // Find the mode object to get its kind (try by id first, then by name) + const modeObject = this.chatModeService.findModeById(mode) || this.chatModeService.findModeByName(mode); + const modeKind = modeObject?.kind ?? ChatModeKind.Agent; // Default to Agent for custom modes + + const chatModeCheck = await this.instantiationService.invokeFunction(handleModeSwitch, this.input.currentModeKind, modeKind, this.viewModel?.model.getRequests().length ?? 0, this.viewModel?.model.editingSession); if (!chatModeCheck) { return undefined; } else if (chatModeCheck.needToClearSession) { diff --git a/src/vs/workbench/contrib/chat/browser/promptSyntax/newPromptFileActions.ts b/src/vs/workbench/contrib/chat/browser/promptSyntax/newPromptFileActions.ts index e3ce0b0b8d1fa..8df01e2f474c2 100644 --- a/src/vs/workbench/contrib/chat/browser/promptSyntax/newPromptFileActions.ts +++ b/src/vs/workbench/contrib/chat/browser/promptSyntax/newPromptFileActions.ts @@ -144,7 +144,7 @@ function getDefaultContentSnippet(promptType: PromptsType): string { case PromptsType.prompt: return [ `---`, - `mode: \${1|ask,edit,agent|}`, + `mode: \${1|ask,edit,agent|} # Built-in modes; custom modes also supported`, `---`, `\${2:Define the task to achieve, including specific requirements, constraints, and success criteria.}`, ].join('\n'); diff --git a/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.ts b/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.ts index 8d3507e939244..82466e3eb58c4 100644 --- a/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.ts +++ b/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.ts @@ -220,9 +220,9 @@ export class PromptHeaderAutocompletion extends Disposable implements Completion // Add builtin mode kinds suggestions.push(...modes.builtin.map(mode => mode.kind)); - // Add custom mode IDs + // Add custom mode names (friendly names instead of full paths) if (modes.custom && modes.custom.length > 0) { - suggestions.push(...modes.custom.map(mode => mode.id)); + suggestions.push(...modes.custom.map(mode => mode.name)); } return suggestions; diff --git a/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderDiagnosticsProvider.ts b/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderDiagnosticsProvider.ts index 8b599cdfa2bb9..40766ee208dc4 100644 --- a/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderDiagnosticsProvider.ts +++ b/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderDiagnosticsProvider.ts @@ -19,6 +19,8 @@ import { ILanguageModelChatMetadata, ILanguageModelsService } from '../../langua import { ILanguageModelToolsService } from '../../languageModelToolsService.js'; import { localize } from '../../../../../../nls.js'; import { ChatModeKind } from '../../constants.js'; +import { IChatModeService } from '../../chatModes.js'; +import { PromptModeMetadata } from '../parsers/promptHeader/metadata/mode.js'; /** * Unique ID of the markers provider class. @@ -36,6 +38,7 @@ class PromptHeaderDiagnosticsProvider extends ProviderInstanceBase { @IMarkerService private readonly markerService: IMarkerService, @ILanguageModelsService private readonly languageModelsService: ILanguageModelsService, @ILanguageModelToolsService private readonly languageModelToolsService: ILanguageModelToolsService, + @IChatModeService private readonly chatModeService: IChatModeService, ) { super(model, promptsService); this._register(languageModelsService.onDidChangeLanguageModels(() => { @@ -44,6 +47,9 @@ class PromptHeaderDiagnosticsProvider extends ProviderInstanceBase { this._register(languageModelToolsService.onDidChangeTools(() => { this.onPromptSettled(undefined, CancellationToken.None); })); + this._register(chatModeService.onDidChangeChatModes(() => { + this.onPromptSettled(undefined, CancellationToken.None); + })); } /** @@ -73,6 +79,7 @@ class PromptHeaderDiagnosticsProvider extends ProviderInstanceBase { } if (header instanceof PromptHeader) { + this.validateMode(header.metadataUtility.mode, markers); this.validateTools(header.metadataUtility.tools, header.metadata.mode, markers); this.validateModel(header.metadataUtility.model, header.metadata.mode, markers); } else if (header instanceof ModeHeader) { @@ -93,7 +100,7 @@ class PromptHeaderDiagnosticsProvider extends ProviderInstanceBase { ); return; } - validateModel(modelNode: PromptModelMetadata | undefined, modeKind: ChatModeKind | undefined, markers: IMarkerData[]) { + validateModel(modelNode: PromptModelMetadata | undefined, modeKind: string | ChatModeKind | undefined, markers: IMarkerData[]) { if (!modelNode || modelNode.value === undefined) { return; } @@ -128,7 +135,7 @@ class PromptHeaderDiagnosticsProvider extends ProviderInstanceBase { return undefined; } - validateTools(tools: PromptToolsMetadata | undefined, modeKind: ChatModeKind | undefined, markers: IMarkerData[]) { + validateTools(tools: PromptToolsMetadata | undefined, modeKind: string | ChatModeKind | undefined, markers: IMarkerData[]) { if (!tools || tools.value === undefined || modeKind === ChatModeKind.Ask || modeKind === ChatModeKind.Edit) { return; } @@ -155,6 +162,35 @@ class PromptHeaderDiagnosticsProvider extends ProviderInstanceBase { } } + validateMode(modeNode: PromptModeMetadata | undefined, markers: IMarkerData[]) { + if (!modeNode || modeNode.value === undefined) { + return; + } + + const modeValue = modeNode.value; + const modes = this.chatModeService.getModes(); + + // Check if mode exists in builtin modes (by id or kind) + const isBuiltinMode = modes.builtin.some(mode => mode.id === modeValue || mode.kind === modeValue); + + // Check if mode exists in custom modes (by id or name) + const isCustomMode = modes.custom.some(mode => mode.id === modeValue || mode.name === modeValue); + + if (!isBuiltinMode && !isCustomMode) { + // Use friendly names for display + const availableModes = [ + ...modes.builtin.map(mode => mode.id), + ...modes.custom.map(mode => mode.name) // Use name instead of id for custom modes + ]; + + markers.push({ + message: localize('promptHeaderDiagnosticsProvider.modeNotFound', "Unknown mode '{0}'. Available modes: {1}", modeValue, availableModes.join(', ')), + severity: MarkerSeverity.Warning, + ...modeNode.range, + }); + } + } + /** * Returns a string representation of this object. */ diff --git a/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderHovers.ts b/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderHovers.ts index a8505faeb8e61..cc921f26df0b5 100644 --- a/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderHovers.ts +++ b/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderHovers.ts @@ -14,6 +14,7 @@ import { ILanguageFeaturesService } from '../../../../../../editor/common/servic import { localize } from '../../../../../../nls.js'; import { ILanguageModelChatMetadata, ILanguageModelsService } from '../../languageModels.js'; import { ILanguageModelToolsService, ToolSet } from '../../languageModelToolsService.js'; +import { IChatModeService } from '../../chatModes.js'; import { InstructionsHeader } from '../parsers/promptHeader/instructionsHeader.js'; import { PromptModelMetadata } from '../parsers/promptHeader/metadata/model.js'; import { PromptToolsMetadata } from '../parsers/promptHeader/metadata/tools.js'; @@ -32,6 +33,7 @@ export class PromptHeaderHoverProvider extends Disposable implements HoverProvid @ILanguageFeaturesService private readonly languageService: ILanguageFeaturesService, @ILanguageModelToolsService private readonly languageModelToolsService: ILanguageModelToolsService, @ILanguageModelsService private readonly languageModelsService: ILanguageModelsService, + @IChatModeService private readonly chatModeService: IChatModeService, ) { super(); @@ -113,7 +115,7 @@ export class PromptHeaderHoverProvider extends Disposable implements HoverProvid } const modeRange = header.metadataUtility.mode?.range; if (modeRange?.containsPosition(position)) { - return this.createHover(localize('promptHeader.prompt.mode', 'The mode (ask, edit or agent) to use when running this prompt.'), modeRange); + return this.getModeHover(modeRange); } } return undefined; @@ -172,4 +174,30 @@ export class PromptHeaderHoverProvider extends Disposable implements HoverProvid return this.createHover(baseMessage, range); } + private getModeHover(range: Range): Hover { + const modes = this.chatModeService.getModes(); + + const lines: string[] = []; + lines.push(localize('promptHeader.prompt.mode.description', 'The chat mode to use when running this prompt.')); + lines.push(''); + + // Built-in modes + lines.push(localize('promptHeader.prompt.mode.builtin', '**Built-in modes:**')); + for (const mode of modes.builtin) { + lines.push(`- \`${mode.id}\`: ${mode.description.get() || mode.name}`); + } + + // Custom modes + if (modes.custom.length > 0) { + lines.push(''); + lines.push(localize('promptHeader.prompt.mode.custom', '**Custom modes:**')); + for (const mode of modes.custom) { + const description = mode.description.get(); + lines.push(`- \`${mode.name}\`: ${description || localize('promptHeader.prompt.mode.customNoDesc', 'Custom chat mode')}`); + } + } + + return this.createHover(lines.join('\n'), range); + } + } diff --git a/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/basePromptParser.ts b/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/basePromptParser.ts index 156859802ef22..e564b80129bbc 100644 --- a/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/basePromptParser.ts +++ b/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/basePromptParser.ts @@ -505,7 +505,8 @@ export class BasePromptParser if (tools !== undefined && mode !== ChatModeKind.Ask && mode !== ChatModeKind.Edit) { result.tools = tools; - result.mode = ChatModeKind.Agent; + // Preserve custom mode if specified, otherwise default to Agent + result.mode = mode || ChatModeKind.Agent; } else if (mode !== undefined) { result.mode = mode; } diff --git a/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/metadata/mode.ts b/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/metadata/mode.ts index cca37bc5e3845..b12728f7e7546 100644 --- a/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/metadata/mode.ts +++ b/src/vs/workbench/contrib/chat/common/promptSyntax/parsers/promptHeader/metadata/mode.ts @@ -3,8 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ChatModeKind } from '../../../../constants.js'; -import { PromptEnumMetadata } from './base/enum.js'; +import { PromptStringMetadata } from './base/string.js'; import { FrontMatterRecord, FrontMatterToken } from '../../../codecs/base/frontMatterCodec/tokens/index.js'; /** @@ -14,14 +13,14 @@ const RECORD_NAME = 'mode'; /** * Prompt `mode` metadata record inside the prompt header. + * Now supports both built-in modes (ask, edit, agent) and custom mode IDs. */ -export class PromptModeMetadata extends PromptEnumMetadata { +export class PromptModeMetadata extends PromptStringMetadata { constructor( recordToken: FrontMatterRecord, languageId: string, ) { super( - [ChatModeKind.Ask, ChatModeKind.Edit, ChatModeKind.Agent], RECORD_NAME, recordToken, languageId, diff --git a/src/vs/workbench/contrib/chat/test/common/promptSyntax/parsers/textModelPromptParser.test.ts b/src/vs/workbench/contrib/chat/test/common/promptSyntax/parsers/textModelPromptParser.test.ts index 35f77dfd78e7f..16d96501500ff 100644 --- a/src/vs/workbench/contrib/chat/test/common/promptSyntax/parsers/textModelPromptParser.test.ts +++ b/src/vs/workbench/contrib/chat/test/common/promptSyntax/parsers/textModelPromptParser.test.ts @@ -1308,17 +1308,152 @@ suite('TextModelPromptParser', () => { await test.validateHeaderDiagnostics([]); }); - test('invalid mode', async () => { - const value = (randomBoolean()) - ? 'unknown mode ' - : 'unknown'; + test('custom mode with tools', async () => { + const customModeId = 'myCustomMode'; + + const test = createTest( + URI.file('/absolute/folder/and/a/filename.txt'), + [ + /* 01 */"---", + /* 02 */"tools: [ 'tool_name3', \"tool_name4\" ] \t\t ", + /* 03 */`mode: ${customModeId}`, + /* 04 */"---", + /* 05 */"The cactus on my desk has a thriving Instagram account.", + ], + PROMPT_LANGUAGE_ID, + ); + + await test.allSettled(); + + const { header, metadata } = test.parser; + assertDefined( + header, + 'Prompt header must be defined.', + ); + + assert( + metadata?.promptType === PromptsType.prompt, + `Must be a 'prompt' metadata, got '${JSON.stringify(metadata)}'.`, + ); + + const { tools, mode } = metadata; + assertDefined( + tools, + 'Tools metadata must be defined.', + ); + + assert.strictEqual( + mode, + customModeId, + 'Mode metadata must have the custom mode value.', + ); + + // Custom modes are now allowed, so no error expected + await test.validateHeaderDiagnostics([]); + }); + + test('custom mode with spaces in value', async () => { + const customModeId = 'my custom mode with spaces'; + + const test = createTest( + URI.file('/absolute/folder/and/a/filename.txt'), + [ + /* 01 */"---", + /* 02 */"tools: [ 'tool1', 'tool2' ]", + /* 03 */`mode: "${customModeId}"`, + /* 04 */"---", + /* 05 */"Test prompt with custom mode that has spaces.", + ], + PROMPT_LANGUAGE_ID, + ); + + await test.allSettled(); + + const { header, metadata } = test.parser; + assertDefined( + header, + 'Prompt header must be defined.', + ); + + assert( + metadata?.promptType === PromptsType.prompt, + `Must be a 'prompt' metadata, got '${JSON.stringify(metadata)}'.`, + ); + + const { tools, mode } = metadata; + assertDefined( + tools, + 'Tools metadata must be defined.', + ); + + assert.strictEqual( + mode, + customModeId, + 'Mode metadata must preserve custom mode with spaces.', + ); + + // Custom modes are now allowed, so no error expected + await test.validateHeaderDiagnostics([]); + }); + test('custom mode without tools', async () => { + const customModeId = 'debugHelperMode'; + + const test = createTest( + URI.file('/absolute/folder/and/a/filename.txt'), + [ + /* 01 */"---", + /* 02 */"description: \"Custom debugging mode\"", + /* 03 */`mode: ${customModeId}`, + /* 04 */"---", + /* 05 */"This is a custom mode without tools.", + ], + PROMPT_LANGUAGE_ID, + ); + + await test.allSettled(); + + const { header, metadata } = test.parser; + assertDefined( + header, + 'Prompt header must be defined.', + ); + + assert( + metadata?.promptType === PromptsType.prompt, + `Must be a 'prompt' metadata, got '${JSON.stringify(metadata)}'.`, + ); + + const { tools, mode, description } = metadata; + assert.strictEqual( + tools, + undefined, + 'Tools metadata must not be defined.', + ); + + assert.strictEqual( + mode, + customModeId, + 'Mode metadata must have the custom mode value.', + ); + + assert.strictEqual( + description, + 'Custom debugging mode', + 'Description metadata must be preserved.', + ); + + // Custom modes are now allowed, so no error expected + await test.validateHeaderDiagnostics([]); + }); + + test('invalid mode - empty string', async () => { const test = createTest( URI.file('/absolute/folder/and/a/filename.txt'), [ /* 01 */"---", /* 02 */"tools: [ 'tool_name3', \"tool_name4\" ] \t\t ", - /* 03 */`mode: \t\t${value}`, + /* 03 */"mode: \"\"", /* 04 */"---", /* 05 */"The cactus on my desk has a thriving Instagram account.", ], @@ -1347,16 +1482,239 @@ suite('TextModelPromptParser', () => { assert.strictEqual( mode, ChatModeKind.Agent, - 'Mode metadata must have correct value.', + 'Mode metadata must default to agent when mode is empty string.', ); + // Empty string mode should be handled gracefully (no error expected) + await test.validateHeaderDiagnostics([]); + }); + + test('invalid mode - boolean value', async () => { + const test = createTest( + URI.file('/absolute/folder/and/a/filename.txt'), + [ + /* 01 */"---", + /* 02 */"tools: [ 'tool_name3', \"tool_name4\" ] \t\t ", + /* 03 */"mode: true", + /* 04 */"---", + /* 05 */"The cactus on my desk has a thriving Instagram account.", + ], + PROMPT_LANGUAGE_ID, + ); + + await test.allSettled(); + + const { header, metadata } = test.parser; + assertDefined( + header, + 'Prompt header must be defined.', + ); + + assert( + metadata?.promptType === PromptsType.prompt, + `Must be a 'prompt' metadata, got '${JSON.stringify(metadata)}'.`, + ); + + const { tools, mode } = metadata; + assertDefined( + tools, + 'Tools metadata must be defined.', + ); + + assert.strictEqual( + mode, + ChatModeKind.Agent, + 'Mode metadata must default to agent when mode is boolean.', + ); + + // Boolean mode value should trigger validation error + await test.validateHeaderDiagnostics([ + new ExpectedDiagnosticError( + new Range(3, 7, 3, 11), + "The 'mode' metadata must be a 'string', got 'boolean'.", + ), + ]); + }); + + test('invalid mode - array value', async () => { + const test = createTest( + URI.file('/absolute/folder/and/a/filename.txt'), + [ + /* 01 */"---", + /* 02 */"tools: [ 'tool_name3', \"tool_name4\" ] \t\t ", + /* 03 */"mode: ['array', 'mode']", + /* 04 */"---", + /* 05 */"The cactus on my desk has a thriving Instagram account.", + ], + PROMPT_LANGUAGE_ID, + ); + + await test.allSettled(); + + const { header, metadata } = test.parser; + assertDefined( + header, + 'Prompt header must be defined.', + ); + + assert( + metadata?.promptType === PromptsType.prompt, + `Must be a 'prompt' metadata, got '${JSON.stringify(metadata)}'.`, + ); + + const { tools, mode } = metadata; + assertDefined( + tools, + 'Tools metadata must be defined.', + ); + + assert.strictEqual( + mode, + ChatModeKind.Agent, + 'Mode metadata must default to agent when mode is array.', + ); + + // Array mode value should trigger validation error await test.validateHeaderDiagnostics([ new ExpectedDiagnosticError( - new Range(3, 10, 3, 10 + value.trim().length), - `The 'mode' metadata must be one of 'ask' | 'edit' | 'agent', got '${value.trim()}'.`, + new Range(3, 7, 3, 23), + "The 'mode' metadata must be a 'string', got 'array'.", ), ]); }); + + // Test builtin modes to ensure they still work correctly + test('builtin ask mode', async () => { + const test = createTest( + URI.file('/absolute/folder/and/a/filename.txt'), + [ + /* 01 */"---", + /* 02 */"description: \"Ask mode test\"", + /* 03 */"mode: ask", + /* 04 */"---", + /* 05 */"This is a builtin ask mode test.", + ], + PROMPT_LANGUAGE_ID, + ); + + await test.allSettled(); + + const { header, metadata } = test.parser; + assertDefined( + header, + 'Prompt header must be defined.', + ); + + assert( + metadata?.promptType === PromptsType.prompt, + `Must be a 'prompt' metadata, got '${JSON.stringify(metadata)}'.`, + ); + + const { mode, description } = metadata; + assert.strictEqual( + mode, + ChatModeKind.Ask, + 'Mode metadata must be ask.', + ); + + assert.strictEqual( + description, + 'Ask mode test', + 'Description metadata must be preserved.', + ); + + await test.validateHeaderDiagnostics([]); + }); + + test('builtin edit mode', async () => { + const test = createTest( + URI.file('/absolute/folder/and/a/filename.txt'), + [ + /* 01 */"---", + /* 02 */"description: \"Edit mode test\"", + /* 03 */"mode: edit", + /* 04 */"---", + /* 05 */"This is a builtin edit mode test.", + ], + PROMPT_LANGUAGE_ID, + ); + + await test.allSettled(); + + const { header, metadata } = test.parser; + assertDefined( + header, + 'Prompt header must be defined.', + ); + + assert( + metadata?.promptType === PromptsType.prompt, + `Must be a 'prompt' metadata, got '${JSON.stringify(metadata)}'.`, + ); + + const { mode, description } = metadata; + assert.strictEqual( + mode, + ChatModeKind.Edit, + 'Mode metadata must be edit.', + ); + + assert.strictEqual( + description, + 'Edit mode test', + 'Description metadata must be preserved.', + ); + + await test.validateHeaderDiagnostics([]); + }); + + test('builtin agent mode with tools', async () => { + const test = createTest( + URI.file('/absolute/folder/and/a/filename.txt'), + [ + /* 01 */"---", + /* 02 */"description: \"Agent mode test\"", + /* 03 */"mode: agent", + /* 04 */"tools: ['tool1', 'tool2']", + /* 05 */"---", + /* 06 */"This is a builtin agent mode test.", + ], + PROMPT_LANGUAGE_ID, + ); + + await test.allSettled(); + + const { header, metadata } = test.parser; + assertDefined( + header, + 'Prompt header must be defined.', + ); + + assert( + metadata?.promptType === PromptsType.prompt, + `Must be a 'prompt' metadata, got '${JSON.stringify(metadata)}'.`, + ); + + const { mode, tools, description } = metadata; + assert.strictEqual( + mode, + ChatModeKind.Agent, + 'Mode metadata must be agent.', + ); + + assertDefined( + tools, + 'Tools metadata must be defined for agent mode.', + ); + + assert.strictEqual( + description, + 'Agent mode test', + 'Description metadata must be preserved.', + ); + + await test.validateHeaderDiagnostics([]); + }); }); suite('tools is not set', () => { From 7d6c5d253077223abc978c129841bc48c46d78b0 Mon Sep 17 00:00:00 2001 From: jiangziwei Date: Fri, 18 Jul 2025 11:06:45 +0800 Subject: [PATCH 0009/2080] chore: use custom chat mode name instead of uri as id --- src/vs/workbench/contrib/chat/browser/chatInputPart.ts | 1 - src/vs/workbench/contrib/chat/browser/chatWidget.ts | 4 ++-- src/vs/workbench/contrib/chat/common/chatModes.ts | 2 +- .../languageProviders/promptHeaderAutocompletion.ts | 4 ++-- .../languageProviders/promptHeaderDiagnosticsProvider.ts | 8 ++++---- .../promptSyntax/languageProviders/promptHeaderHovers.ts | 2 +- 6 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/vs/workbench/contrib/chat/browser/chatInputPart.ts b/src/vs/workbench/contrib/chat/browser/chatInputPart.ts index 3388cfeb3e7fd..a8e762fda7185 100644 --- a/src/vs/workbench/contrib/chat/browser/chatInputPart.ts +++ b/src/vs/workbench/contrib/chat/browser/chatInputPart.ts @@ -566,7 +566,6 @@ export class ChatInputPart extends Disposable implements IHistoryNavigationWidge } const mode2 = this.chatModeService.findModeById(mode) ?? - this.chatModeService.findModeByName(mode) ?? this.chatModeService.findModeById(ChatModeKind.Agent) ?? ChatMode.Ask; this.setChatMode2(mode2, storeSelection); diff --git a/src/vs/workbench/contrib/chat/browser/chatWidget.ts b/src/vs/workbench/contrib/chat/browser/chatWidget.ts index 64ea10bd5c73f..fe956d108616a 100644 --- a/src/vs/workbench/contrib/chat/browser/chatWidget.ts +++ b/src/vs/workbench/contrib/chat/browser/chatWidget.ts @@ -1978,8 +1978,8 @@ export class ChatWidget extends Disposable implements IChatWidget { // switch to appropriate chat mode if needed if (mode && mode !== this.input.currentModeKind) { - // Find the mode object to get its kind (try by id first, then by name) - const modeObject = this.chatModeService.findModeById(mode) || this.chatModeService.findModeByName(mode); + // Find the mode object to get its kind + const modeObject = this.chatModeService.findModeById(mode); const modeKind = modeObject?.kind ?? ChatModeKind.Agent; // Default to Agent for custom modes const chatModeCheck = await this.instantiationService.invokeFunction(handleModeSwitch, this.input.currentModeKind, modeKind, this.viewModel?.model.getRequests().length ?? 0, this.viewModel?.model.editingSession); diff --git a/src/vs/workbench/contrib/chat/common/chatModes.ts b/src/vs/workbench/contrib/chat/common/chatModes.ts index a97f8cd298e7c..bfb6ca4ef4485 100644 --- a/src/vs/workbench/contrib/chat/common/chatModes.ts +++ b/src/vs/workbench/contrib/chat/common/chatModes.ts @@ -265,7 +265,7 @@ export class CustomChatMode implements IChatMode { constructor( customChatMode: ICustomChatMode ) { - this.id = customChatMode.uri.toString(); + this.id = customChatMode.name; this.name = customChatMode.name; this._descriptionObservable = observableValue('description', customChatMode.description); this._customToolsObservable = observableValue('customTools', customChatMode.tools); diff --git a/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.ts b/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.ts index 82466e3eb58c4..8d3507e939244 100644 --- a/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.ts +++ b/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.ts @@ -220,9 +220,9 @@ export class PromptHeaderAutocompletion extends Disposable implements Completion // Add builtin mode kinds suggestions.push(...modes.builtin.map(mode => mode.kind)); - // Add custom mode names (friendly names instead of full paths) + // Add custom mode IDs if (modes.custom && modes.custom.length > 0) { - suggestions.push(...modes.custom.map(mode => mode.name)); + suggestions.push(...modes.custom.map(mode => mode.id)); } return suggestions; diff --git a/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderDiagnosticsProvider.ts b/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderDiagnosticsProvider.ts index 40766ee208dc4..99c2492d639ba 100644 --- a/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderDiagnosticsProvider.ts +++ b/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderDiagnosticsProvider.ts @@ -173,14 +173,14 @@ class PromptHeaderDiagnosticsProvider extends ProviderInstanceBase { // Check if mode exists in builtin modes (by id or kind) const isBuiltinMode = modes.builtin.some(mode => mode.id === modeValue || mode.kind === modeValue); - // Check if mode exists in custom modes (by id or name) - const isCustomMode = modes.custom.some(mode => mode.id === modeValue || mode.name === modeValue); + // Check if mode exists in custom modes (by id) + const isCustomMode = modes.custom.some(mode => mode.id === modeValue); if (!isBuiltinMode && !isCustomMode) { - // Use friendly names for display + // Use mode IDs for display (for custom modes) const availableModes = [ ...modes.builtin.map(mode => mode.id), - ...modes.custom.map(mode => mode.name) // Use name instead of id for custom modes + ...modes.custom.map(mode => mode.id) ]; markers.push({ diff --git a/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderHovers.ts b/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderHovers.ts index cc921f26df0b5..308aa19954e9d 100644 --- a/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderHovers.ts +++ b/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderHovers.ts @@ -193,7 +193,7 @@ export class PromptHeaderHoverProvider extends Disposable implements HoverProvid lines.push(localize('promptHeader.prompt.mode.custom', '**Custom modes:**')); for (const mode of modes.custom) { const description = mode.description.get(); - lines.push(`- \`${mode.name}\`: ${description || localize('promptHeader.prompt.mode.customNoDesc', 'Custom chat mode')}`); + lines.push(`- \`${mode.id}\`: ${description || localize('promptHeader.prompt.mode.customNoDesc', 'Custom chat mode')}`); } } From 4968391095b415e016b094bf2056c77c68386854 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 31 Jul 2025 13:15:12 +0000 Subject: [PATCH 0010/2080] Initial plan From 490c5ada1f74ffc47bbef29ac73b7d544eb0a216 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 31 Jul 2025 13:32:09 +0000 Subject: [PATCH 0011/2080] Add UI entry point for terminal auto-approve dropdown Co-authored-by: Tyriar <2193314+Tyriar@users.noreply.github.com> --- .../chatToolConfirmationSubPart.ts | 65 +++++++++++++++-- .../chat/common/languageModelToolsService.ts | 7 ++ .../browser/runInTerminalTool.ts | 35 ++++++++- .../test/browser/runInTerminalTool.test.ts | 73 +++++++++++++++++++ 4 files changed, 173 insertions(+), 7 deletions(-) diff --git a/src/vs/workbench/contrib/chat/browser/chatContentParts/toolInvocationParts/chatToolConfirmationSubPart.ts b/src/vs/workbench/contrib/chat/browser/chatContentParts/toolInvocationParts/chatToolConfirmationSubPart.ts index e002e7999e669..34ebce0fb95d3 100644 --- a/src/vs/workbench/contrib/chat/browser/chatContentParts/toolInvocationParts/chatToolConfirmationSubPart.ts +++ b/src/vs/workbench/contrib/chat/browser/chatContentParts/toolInvocationParts/chatToolConfirmationSubPart.ts @@ -16,6 +16,7 @@ import { ILanguageService } from '../../../../../../editor/common/languages/lang import { IModelService } from '../../../../../../editor/common/services/model.js'; import { localize } from '../../../../../../nls.js'; import { ICommandService } from '../../../../../../platform/commands/common/commands.js'; +import { IConfigurationService } from '../../../../../../platform/configuration/common/configuration.js'; import { IContextKeyService } from '../../../../../../platform/contextkey/common/contextkey.js'; import { IInstantiationService } from '../../../../../../platform/instantiation/common/instantiation.js'; import { IKeybindingService } from '../../../../../../platform/keybinding/common/keybinding.js'; @@ -60,6 +61,7 @@ export class ToolConfirmationSubPart extends BaseChatToolInvocationSubPart { @IContextKeyService private readonly contextKeyService: IContextKeyService, @IChatWidgetService private readonly chatWidgetService: IChatWidgetService, @ICommandService private readonly commandService: ICommandService, + @IConfigurationService private readonly configurationService: IConfigurationService, @IMarkerService private readonly markerService: IMarkerService, @ILanguageModelToolsService private readonly languageModelToolsService: ILanguageModelToolsService, @IChatMarkdownAnchorService private readonly chatMarkdownAnchorService: IChatMarkdownAnchorService, @@ -69,7 +71,7 @@ export class ToolConfirmationSubPart extends BaseChatToolInvocationSubPart { if (!toolInvocation.confirmationMessages) { throw new Error('Confirmation messages are missing'); } - const { title, message, allowAutoConfirm, disclaimer } = toolInvocation.confirmationMessages; + const { title, message, allowAutoConfirm, disclaimer, customActions } = toolInvocation.confirmationMessages; const continueLabel = localize('continue', "Continue"); const continueKeybinding = keybindingService.lookupKeybinding(AcceptToolConfirmationActionId)?.getLabel(); const continueTooltip = continueKeybinding ? `${continueLabel} (${continueKeybinding})` : continueLabel; @@ -83,6 +85,25 @@ export class ToolConfirmationSubPart extends BaseChatToolInvocationSubPart { AllowWorkspace, AllowGlobally, AllowSession, + CustomAction, + } + + // Build moreActions based on customActions or default allowAutoConfirm behavior + let moreActions: IChatConfirmationButton[] | undefined; + if (customActions && customActions.length > 0) { + // Use custom actions for terminal commands + moreActions = customActions.map(action => ({ + label: action.label, + data: { outcome: ConfirmationOutcome.CustomAction, customData: action.data }, + tooltip: action.tooltip + })); + } else if (allowAutoConfirm) { + // Use default tool-level auto-confirmation options + moreActions = [ + { label: localize('allowSession', 'Allow in this Session'), data: ConfirmationOutcome.AllowSession, tooltip: localize('allowSesssionTooltip', 'Allow this tool to run in this session without confirmation.') }, + { label: localize('allowWorkspace', 'Allow in this Workspace'), data: ConfirmationOutcome.AllowWorkspace, tooltip: localize('allowWorkspaceTooltip', 'Allow this tool to run in this workspace without confirmation.') }, + { label: localize('allowGlobally', 'Always Allow'), data: ConfirmationOutcome.AllowGlobally, tooltip: localize('allowGloballTooltip', 'Always allow this tool to run without confirmation.') }, + ]; } const buttons: IChatConfirmationButton[] = [ @@ -90,11 +111,7 @@ export class ToolConfirmationSubPart extends BaseChatToolInvocationSubPart { label: continueLabel, data: ConfirmationOutcome.Allow, tooltip: continueTooltip, - moreActions: !allowAutoConfirm ? undefined : [ - { label: localize('allowSession', 'Allow in this Session'), data: ConfirmationOutcome.AllowSession, tooltip: localize('allowSesssionTooltip', 'Allow this tool to run in this session without confirmation.') }, - { label: localize('allowWorkspace', 'Allow in this Workspace'), data: ConfirmationOutcome.AllowWorkspace, tooltip: localize('allowWorkspaceTooltip', 'Allow this tool to run in this workspace without confirmation.') }, - { label: localize('allowGlobally', 'Always Allow'), data: ConfirmationOutcome.AllowGlobally, tooltip: localize('allowGloballTooltip', 'Always allow this tool to run without confirmation.') }, - ], + moreActions, }, { label: localize('cancel', "Cancel"), @@ -287,6 +304,15 @@ export class ToolConfirmationSubPart extends BaseChatToolInvocationSubPart { hasToolConfirmation.set(true); this._register(confirmWidget.onDidClick(button => { + // Handle custom actions (like terminal auto-approve options) + if (typeof button.data === 'object' && button.data.outcome === ConfirmationOutcome.CustomAction) { + this._handleCustomAction(button.data.customData); + toolInvocation.confirmed.complete(true); + this.chatWidgetService.getWidgetBySessionId(this.context.element.sessionId)?.focusInput(); + return; + } + + // Handle standard confirmation outcomes switch (button.data as ConfirmationOutcome) { case ConfirmationOutcome.AllowGlobally: this.languageModelToolsService.setToolAutoConfirmation(toolInvocation.toolId, 'profile', true); @@ -326,4 +352,31 @@ export class ToolConfirmationSubPart extends BaseChatToolInvocationSubPart { this._register(part.onDidChangeHeight(() => this._onDidChangeHeight.fire())); } + + private _handleCustomAction(customData: any): void { + if (!customData || typeof customData !== 'object') { + return; + } + + switch (customData.type) { + case 'exact': + // Add exact command to auto-approve list + this._addToAutoApproveConfig(customData.command, true); + break; + case 'prefix': + // Add command prefix to auto-approve list + this._addToAutoApproveConfig(customData.command, true); + break; + case 'configure': + // Open settings to terminal auto-approve configuration + this.commandService.executeCommand('workbench.action.openSettings', 'chat.tools.terminal.autoApprove'); + break; + } + } + + private _addToAutoApproveConfig(pattern: string, approve: boolean): void { + const currentConfig = this.configurationService.getValue('chat.tools.terminal.autoApprove') as Record || {}; + const newConfig = { ...currentConfig, [pattern]: approve }; + this.configurationService.updateValue('chat.tools.terminal.autoApprove', newConfig); + } } diff --git a/src/vs/workbench/contrib/chat/common/languageModelToolsService.ts b/src/vs/workbench/contrib/chat/common/languageModelToolsService.ts index 5d117fbfa1016..01591fbca379e 100644 --- a/src/vs/workbench/contrib/chat/common/languageModelToolsService.ts +++ b/src/vs/workbench/contrib/chat/common/languageModelToolsService.ts @@ -209,6 +209,13 @@ export interface IToolConfirmationMessages { message: string | IMarkdownString; disclaimer?: string | IMarkdownString; allowAutoConfirm?: boolean; + customActions?: IToolConfirmationAction[]; +} + +export interface IToolConfirmationAction { + label: string; + tooltip?: string; + data: any; } export interface IPreparedToolInvocation { diff --git a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalTool.ts b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalTool.ts index fc0a8ca4bc225..96f014b3e7fc3 100644 --- a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalTool.ts +++ b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalTool.ts @@ -23,7 +23,7 @@ import { IWorkspaceContextService } from '../../../../../platform/workspace/comm import { IRemoteAgentService } from '../../../../services/remote/common/remoteAgentService.js'; import { IChatService, type IChatTerminalToolInvocationData } from '../../../chat/common/chatService.js'; import { ILanguageModelsService } from '../../../chat/common/languageModels.js'; -import { CountTokensCallback, ILanguageModelToolsService, IPreparedToolInvocation, IToolData, IToolImpl, IToolInvocation, IToolInvocationPreparationContext, IToolResult, ToolDataSource, ToolProgress, type IToolConfirmationMessages } from '../../../chat/common/languageModelToolsService.js'; +import { CountTokensCallback, ILanguageModelToolsService, IPreparedToolInvocation, IToolData, IToolImpl, IToolInvocation, IToolInvocationPreparationContext, IToolResult, ToolDataSource, ToolProgress, type IToolConfirmationMessages, type IToolConfirmationAction } from '../../../chat/common/languageModelToolsService.js'; import { ITerminalService, type ITerminalInstance } from '../../../terminal/browser/terminal.js'; import type { XtermTerminal } from '../../../terminal/browser/xterm/xtermTerminal.js'; import { ITerminalProfileResolverService } from '../../../terminal/common/terminal.js'; @@ -230,6 +230,7 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { ? localize('runInTerminal.background', "Run command in background terminal") : localize('runInTerminal.foreground', "Run command in terminal"), message: new MarkdownString(args.explanation), + customActions: this._generateAutoApproveActions(args.command), }; } @@ -733,6 +734,38 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { inputUserSigint: state.inputUserSigint, }); } + + private _generateAutoApproveActions(command: string): IToolConfirmationAction[] { + const actions: IToolConfirmationAction[] = []; + + // Extract the base command (first word/executable) + const baseCommand = command.trim().split(/\s+/)[0]; + + // Add action for exact command match + actions.push({ + label: localize('autoApprove.exactCommand', 'Always allow `{0}`', command), + tooltip: localize('autoApprove.exactCommandTooltip', 'Always allow this exact command to run without confirmation'), + data: { type: 'exact', command } + }); + + // Add action for base command prefix match (only if different from exact and has arguments) + if (baseCommand && baseCommand !== command && command.trim().includes(' ')) { + actions.push({ + label: localize('autoApprove.baseCommand', 'Always allow `{0}` commands', baseCommand), + tooltip: localize('autoApprove.baseCommandTooltip', 'Always allow commands starting with `{0}` to run without confirmation', baseCommand), + data: { type: 'prefix', command: baseCommand } + }); + } + + // Add separator and configure option + actions.push({ + label: localize('autoApprove.configure', 'Configure auto approve...'), + tooltip: localize('autoApprove.configureTooltip', 'Open settings to configure terminal command auto approval'), + data: { type: 'configure' } + }); + + return actions; + } } class BackgroundTerminalExecution extends Disposable { diff --git a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/test/browser/runInTerminalTool.test.ts b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/test/browser/runInTerminalTool.test.ts index 26de304e311e1..b6fd8da2f42b7 100644 --- a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/test/browser/runInTerminalTool.test.ts +++ b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/test/browser/runInTerminalTool.test.ts @@ -271,6 +271,79 @@ suite('RunInTerminalTool', () => { }); }); + suite('prepareToolInvocation - custom actions for dropdown', () => { + + test('should generate custom actions for non-auto-approved commands', async () => { + // Set up a scenario where the command is not auto-approved + setAutoApprove({ + ls: true, // Only ls is approved, not npm + }); + + const result = await executeToolTest({ + command: 'npm run build', + explanation: 'Build the project' + }); + + assertConfirmationRequired(result, 'Run command in terminal'); + ok(result!.confirmationMessages!.customActions, 'Expected custom actions to be defined'); + + const customActions = result!.confirmationMessages!.customActions!; + strictEqual(customActions.length, 3, 'Expected 3 custom actions'); + + // First action should be exact command match + strictEqual(customActions[0].label, 'Always allow `npm run build`'); + strictEqual(customActions[0].data.type, 'exact'); + strictEqual(customActions[0].data.command, 'npm run build'); + + // Second action should be base command prefix match + strictEqual(customActions[1].label, 'Always allow `npm` commands'); + strictEqual(customActions[1].data.type, 'prefix'); + strictEqual(customActions[1].data.command, 'npm'); + + // Third action should be configure option + strictEqual(customActions[2].label, 'Configure auto approve...'); + strictEqual(customActions[2].data.type, 'configure'); + }); + + test('should generate custom actions for single word commands', async () => { + const result = await executeToolTest({ + command: 'git', + explanation: 'Run git command' + }); + + assertConfirmationRequired(result); + ok(result!.confirmationMessages!.customActions, 'Expected custom actions to be defined'); + + const customActions = result!.confirmationMessages!.customActions!; + + // For single word commands, exact and prefix should be the same, so we should only get 2 actions + strictEqual(customActions.length, 2, 'Expected 2 custom actions for single word command'); + + // First action should be exact command match + strictEqual(customActions[0].label, 'Always allow `git`'); + strictEqual(customActions[0].data.type, 'exact'); + strictEqual(customActions[0].data.command, 'git'); + + // Second action should be configure option (no separate prefix action since it's the same) + strictEqual(customActions[1].label, 'Configure auto approve...'); + strictEqual(customActions[1].data.type, 'configure'); + }); + + test('should not generate custom actions for auto-approved commands', async () => { + setAutoApprove({ + npm: true + }); + + const result = await executeToolTest({ + command: 'npm run build', + explanation: 'Build the project' + }); + + assertAutoApproved(result); + }); + + }); + suite('command re-writing', () => { function createRewriteParams(command: string, chatSessionId?: string): IRunInTerminalInputParams { return { From 791c6618fba7ad8c78feb061005ea97f7cc5d09f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 4 Aug 2025 21:25:06 +0000 Subject: [PATCH 0012/2080] Initial plan From 4fdbedd79fbdd1e6da514200a68d1ca09658d1cf Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 4 Aug 2025 21:43:02 +0000 Subject: [PATCH 0013/2080] Implement path-aware terminal auto approval Co-authored-by: Tyriar <2193314+Tyriar@users.noreply.github.com> --- .../browser/commandLineAutoApprover.ts | 21 +++- .../browser/commandLineAutoApprover.test.ts | 118 ++++++++++++++++++ 2 files changed, 138 insertions(+), 1 deletion(-) diff --git a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandLineAutoApprover.ts b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandLineAutoApprover.ts index 8bfb2911dc3b8..94e610a6f19c2 100644 --- a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandLineAutoApprover.ts +++ b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandLineAutoApprover.ts @@ -207,7 +207,26 @@ export class CommandLineAutoApprover extends Disposable { return neverMatchRegex; } - // Escape regex special characters + // Check if this looks like a path (contains path separators) + if (value.includes('/') || value.includes('\\')) { + // Handle path-like strings with flexible separator and optional ./ prefix matching + + // Replace path separators with placeholders first, before escaping + let pathPattern = value.replace(/[/\\]/g, '§PATH_SEP§'); + + // Now escape all regex special characters + pathPattern = pathPattern.replace(/[\\^$.*+?()[\]{}|]/g, '\\$&'); + + // Replace placeholders with character class that matches both / and \ + pathPattern = pathPattern.replace(/§PATH_SEP§/g, '[/\\\\]'); + + // Create pattern that optionally matches ./ or .\ at the start + const finalPattern = `^(?:\\.[/\\\\])?${pathPattern}\\b`; + + return new RegExp(finalPattern); + } + + // Escape regex special characters for non-path strings const sanitizedValue = value.replace(/[\\^$.*+?()[\]{}|]/g, '\\$&'); // Regular strings should match the start of the command line and be a word boundary diff --git a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/test/browser/commandLineAutoApprover.test.ts b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/test/browser/commandLineAutoApprover.test.ts index 1b7376875c6dc..3ae7874e53acb 100644 --- a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/test/browser/commandLineAutoApprover.test.ts +++ b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/test/browser/commandLineAutoApprover.test.ts @@ -379,6 +379,124 @@ suite('CommandLineAutoApprover', () => { }); }); + suite('path-aware auto approval', () => { + test('should handle path variations with forward slashes', () => { + setAutoApprove({ + "bin/foo": true + }); + + // Should approve the exact match + ok(isAutoApproved('bin/foo')); + ok(isAutoApproved('bin/foo --arg')); + + // Should approve with Windows backslashes + ok(isAutoApproved('bin\\foo')); + ok(isAutoApproved('bin\\foo --arg')); + + // Should approve with current directory prefixes + ok(isAutoApproved('./bin/foo')); + ok(isAutoApproved('.\\bin/foo')); + ok(isAutoApproved('./bin\\foo')); + ok(isAutoApproved('.\\bin\\foo')); + + // Should not approve partial matches + ok(!isAutoApproved('bin/foobar')); + ok(!isAutoApproved('notbin/foo')); + }); + + test('should handle path variations with backslashes', () => { + setAutoApprove({ + "bin\\script.bat": true + }); + + // Should approve the exact match + ok(isAutoApproved('bin\\script.bat')); + ok(isAutoApproved('bin\\script.bat --help')); + + // Should approve with forward slashes + ok(isAutoApproved('bin/script.bat')); + ok(isAutoApproved('bin/script.bat --help')); + + // Should approve with current directory prefixes + ok(isAutoApproved('./bin\\script.bat')); + ok(isAutoApproved('.\\bin\\script.bat')); + ok(isAutoApproved('./bin/script.bat')); + ok(isAutoApproved('.\\bin/script.bat')); + }); + + test('should handle deep paths', () => { + setAutoApprove({ + "src/utils/helper.js": true + }); + + ok(isAutoApproved('src/utils/helper.js')); + ok(isAutoApproved('src\\utils\\helper.js')); + ok(isAutoApproved('src/utils\\helper.js')); + ok(isAutoApproved('src\\utils/helper.js')); + ok(isAutoApproved('./src/utils/helper.js')); + ok(isAutoApproved('.\\src\\utils\\helper.js')); + }); + + test('should not treat non-paths as paths', () => { + setAutoApprove({ + "echo": true, // Not a path + "ls": true, // Not a path + "git": true // Not a path + }); + + // These should work as normal command matching, not path matching + ok(isAutoApproved('echo')); + ok(isAutoApproved('ls')); + ok(isAutoApproved('git')); + + // Should not be treated as paths, so these prefixes shouldn't work + ok(!isAutoApproved('./echo')); + ok(!isAutoApproved('.\\ls')); + }); + + test('should handle paths with mixed separators in config', () => { + setAutoApprove({ + "bin/foo\\bar": true // Mixed separators in config + }); + + ok(isAutoApproved('bin/foo\\bar')); + ok(isAutoApproved('bin\\foo/bar')); + ok(isAutoApproved('bin/foo/bar')); + ok(isAutoApproved('bin\\foo\\bar')); + ok(isAutoApproved('./bin/foo\\bar')); + ok(isAutoApproved('.\\bin\\foo\\bar')); + }); + + test('should work with command line auto approval for paths', () => { + setAutoApproveWithCommandLine({ + "bin/deploy": { approve: true, matchCommandLine: true } + }); + + ok(isCommandLineAutoApproved('bin/deploy --prod')); + ok(isCommandLineAutoApproved('bin\\deploy --prod')); + ok(isCommandLineAutoApproved('./bin/deploy --prod')); + ok(isCommandLineAutoApproved('.\\bin\\deploy --prod')); + }); + + test('should handle special characters in paths', () => { + setAutoApprove({ + "bin/my-script.sh": true, + "scripts/build_all.py": true, + "tools/run (debug).exe": true + }); + + ok(isAutoApproved('bin/my-script.sh')); + ok(isAutoApproved('bin\\my-script.sh')); + ok(isAutoApproved('./bin/my-script.sh')); + + ok(isAutoApproved('scripts/build_all.py')); + ok(isAutoApproved('scripts\\build_all.py')); + + ok(isAutoApproved('tools/run (debug).exe')); + ok(isAutoApproved('tools\\run (debug).exe')); + }); + }); + suite('PowerShell-specific commands', () => { setup(() => { shell = 'pwsh'; From 8cb3738ed7d1c5db08fca7616a65880ccdd82dc1 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Tue, 5 Aug 2025 04:08:40 -0700 Subject: [PATCH 0014/2080] Move tasks tools into same file as terminal Fixes #259018 --- .../contrib/terminal/terminal.all.ts | 1 - .../task.chatAgentTools.contribution.ts | 50 ------------------- .../terminal.chatAgentTools.contribution.ts | 37 ++++++++++++-- 3 files changed, 34 insertions(+), 54 deletions(-) delete mode 100644 src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task.chatAgentTools.contribution.ts diff --git a/src/vs/workbench/contrib/terminal/terminal.all.ts b/src/vs/workbench/contrib/terminal/terminal.all.ts index 9b74371677a88..9cbb67bd01977 100644 --- a/src/vs/workbench/contrib/terminal/terminal.all.ts +++ b/src/vs/workbench/contrib/terminal/terminal.all.ts @@ -16,7 +16,6 @@ import './browser/terminalView.js'; import '../terminalContrib/accessibility/browser/terminal.accessibility.contribution.js'; import '../terminalContrib/autoReplies/browser/terminal.autoReplies.contribution.js'; import '../terminalContrib/chatAgentTools/browser/terminal.chatAgentTools.contribution.js'; -import '../terminalContrib/chatAgentTools/browser/task.chatAgentTools.contribution.js'; import '../terminalContrib/developer/browser/terminal.developer.contribution.js'; import '../terminalContrib/environmentChanges/browser/terminal.environmentChanges.contribution.js'; import '../terminalContrib/find/browser/terminal.find.contribution.js'; diff --git a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task.chatAgentTools.contribution.ts b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task.chatAgentTools.contribution.ts deleted file mode 100644 index 67996f0037ffe..0000000000000 --- a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task.chatAgentTools.contribution.ts +++ /dev/null @@ -1,50 +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 { Disposable } from '../../../../../base/common/lifecycle.js'; -import { localize } from '../../../../../nls.js'; -import { IConfigurationService } from '../../../../../platform/configuration/common/configuration.js'; -import { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js'; -import { registerWorkbenchContribution2, WorkbenchPhase, type IWorkbenchContribution } from '../../../../common/contributions.js'; -import { ILanguageModelToolsService, ToolDataSource } from '../../../chat/common/languageModelToolsService.js'; -import { CreateAndRunTaskTool, CreateAndRunTaskToolData } from './task/createAndRunTaskTool.js'; -import { GetTaskOutputTool, GetTaskOutputToolData } from './task/getTaskOutputTool.js'; -import { RunTaskTool, RunTaskToolData } from './task/runTaskTool.js'; - -// #region Workbench contributions - -class ChatAgentToolsContribution extends Disposable implements IWorkbenchContribution { - - static readonly ID = 'task.chatAgentTools'; - - constructor( - @IConfigurationService configurationService: IConfigurationService, - @IInstantiationService instantiationService: IInstantiationService, - @ILanguageModelToolsService toolsService: ILanguageModelToolsService, - ) { - super(); - const runTaskTool = instantiationService.createInstance(RunTaskTool); - this._register(toolsService.registerToolData(RunTaskToolData)); - this._register(toolsService.registerToolImplementation(RunTaskToolData.id, runTaskTool)); - - const getTaskOutputTool = instantiationService.createInstance(GetTaskOutputTool); - this._register(toolsService.registerToolData(GetTaskOutputToolData)); - this._register(toolsService.registerToolImplementation(GetTaskOutputToolData.id, getTaskOutputTool)); - - const createAndRunTaskTool = instantiationService.createInstance(CreateAndRunTaskTool); - this._register(toolsService.registerToolData(CreateAndRunTaskToolData)); - this._register(toolsService.registerToolImplementation(CreateAndRunTaskToolData.id, createAndRunTaskTool)); - - const toolSet = this._register(toolsService.createToolSet(ToolDataSource.Internal, 'runTasks', 'runTasks', { - description: localize('toolset.runTasks', 'Runs tasks and gets their output for your workspace') - })); - toolSet.addTool(RunTaskToolData); - toolSet.addTool(GetTaskOutputToolData); - toolSet.addTool(CreateAndRunTaskToolData); - } -} -registerWorkbenchContribution2(ChatAgentToolsContribution.ID, ChatAgentToolsContribution, WorkbenchPhase.AfterRestored); - -// #endregion Contributions diff --git a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/terminal.chatAgentTools.contribution.ts b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/terminal.chatAgentTools.contribution.ts index cda385dde09dc..55b78a215531c 100644 --- a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/terminal.chatAgentTools.contribution.ts +++ b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/terminal.chatAgentTools.contribution.ts @@ -12,6 +12,9 @@ import { registerWorkbenchContribution2, WorkbenchPhase, type IWorkbenchContribu import { ILanguageModelToolsService, ToolDataSource } from '../../../chat/common/languageModelToolsService.js'; import { GetTerminalOutputTool, GetTerminalOutputToolData } from './getTerminalOutputTool.js'; import { RunInTerminalTool, RunInTerminalToolData } from './runInTerminalTool.js'; +import { CreateAndRunTaskTool, CreateAndRunTaskToolData } from './task/createAndRunTaskTool.js'; +import { GetTaskOutputTool, GetTaskOutputToolData } from './task/getTaskOutputTool.js'; +import { RunTaskTool, RunTaskToolData } from './task/runTaskTool.js'; // #region Workbench contributions @@ -24,6 +27,9 @@ class ChatAgentToolsContribution extends Disposable implements IWorkbenchContrib @ILanguageModelToolsService toolsService: ILanguageModelToolsService, ) { super(); + + // #region Terminal + const runInTerminalTool = instantiationService.createInstance(RunInTerminalTool); this._register(toolsService.registerToolData(RunInTerminalToolData)); this._register(toolsService.registerToolImplementation(RunInTerminalToolData.id, runInTerminalTool)); @@ -32,12 +38,37 @@ class ChatAgentToolsContribution extends Disposable implements IWorkbenchContrib this._register(toolsService.registerToolData(GetTerminalOutputToolData)); this._register(toolsService.registerToolImplementation(GetTerminalOutputToolData.id, getTerminalOutputTool)); - const toolSet = this._register(toolsService.createToolSet(ToolDataSource.Internal, 'runCommands', 'runCommands', { + const runCommandsToolSet = this._register(toolsService.createToolSet(ToolDataSource.Internal, 'runCommands', 'runCommands', { icon: ThemeIcon.fromId(Codicon.terminal.id), description: localize('toolset.runCommands', 'Runs commands in the terminal') })); - toolSet.addTool(RunInTerminalToolData); - toolSet.addTool(GetTerminalOutputToolData); + runCommandsToolSet.addTool(RunInTerminalToolData); + runCommandsToolSet.addTool(GetTerminalOutputToolData); + + // #endregion + + // #region Tasks + + const runTaskTool = instantiationService.createInstance(RunTaskTool); + this._register(toolsService.registerToolData(RunTaskToolData)); + this._register(toolsService.registerToolImplementation(RunTaskToolData.id, runTaskTool)); + + const getTaskOutputTool = instantiationService.createInstance(GetTaskOutputTool); + this._register(toolsService.registerToolData(GetTaskOutputToolData)); + this._register(toolsService.registerToolImplementation(GetTaskOutputToolData.id, getTaskOutputTool)); + + const createAndRunTaskTool = instantiationService.createInstance(CreateAndRunTaskTool); + this._register(toolsService.registerToolData(CreateAndRunTaskToolData)); + this._register(toolsService.registerToolImplementation(CreateAndRunTaskToolData.id, createAndRunTaskTool)); + + const runTasksToolSet = this._register(toolsService.createToolSet(ToolDataSource.Internal, 'runTasks', 'runTasks', { + description: localize('toolset.runTasks', 'Runs tasks and gets their output for your workspace') + })); + runTasksToolSet.addTool(RunTaskToolData); + runTasksToolSet.addTool(GetTaskOutputToolData); + runTasksToolSet.addTool(CreateAndRunTaskToolData); + + // #endregion } } registerWorkbenchContribution2(ChatAgentToolsContribution.ID, ChatAgentToolsContribution, WorkbenchPhase.AfterRestored); From 1aff0adbe8845a1666d4edb9ce1d425db8226c54 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Tue, 5 Aug 2025 04:11:07 -0700 Subject: [PATCH 0015/2080] Move tools into a tools/ folder --- .../browser/{task => }/taskHelpers.ts | 10 +-- .../terminal.chatAgentTools.contribution.ts | 10 +-- .../{ => tools}/getTerminalOutputTool.ts | 8 +-- .../browser/{ => tools}/runInTerminalTool.ts | 66 +++++++++---------- .../{ => tools}/task/createAndRunTaskTool.ts | 32 ++++----- .../{ => tools}/task/getTaskOutputTool.ts | 20 +++--- .../browser/{ => tools}/task/runTaskTool.ts | 28 ++++---- .../test/browser/runInTerminalTool.test.ts | 2 +- 8 files changed, 88 insertions(+), 88 deletions(-) rename src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/{task => }/taskHelpers.ts (91%) rename src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/{ => tools}/getTerminalOutputTool.ts (86%) rename src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/{ => tools}/runInTerminalTool.ts (92%) rename src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/{ => tools}/task/createAndRunTaskTool.ts (90%) rename src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/{ => tools}/task/getTaskOutputTool.ts (83%) rename src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/{ => tools}/task/runTaskTool.ts (87%) diff --git a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task/taskHelpers.ts b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/taskHelpers.ts similarity index 91% rename from src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task/taskHelpers.ts rename to src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/taskHelpers.ts index d82f32d8bfa0f..e50b672c29c2f 100644 --- a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task/taskHelpers.ts +++ b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/taskHelpers.ts @@ -3,11 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { IStringDictionary } from '../../../../../../base/common/collections.js'; -import { URI } from '../../../../../../base/common/uri.js'; -import { IConfigurationService } from '../../../../../../platform/configuration/common/configuration.js'; -import { ConfiguringTask, Task } from '../../../../tasks/common/tasks.js'; -import { ITaskService } from '../../../../tasks/common/taskService.js'; +import { IStringDictionary } from '../../../../../base/common/collections.js'; +import { URI } from '../../../../../base/common/uri.js'; +import { IConfigurationService } from '../../../../../platform/configuration/common/configuration.js'; +import { ConfiguringTask, Task } from '../../../tasks/common/tasks.js'; +import { ITaskService } from '../../../tasks/common/taskService.js'; export function getTaskDefinition(id: string) { const idx = id.indexOf(': '); diff --git a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/terminal.chatAgentTools.contribution.ts b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/terminal.chatAgentTools.contribution.ts index 55b78a215531c..50da379a60253 100644 --- a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/terminal.chatAgentTools.contribution.ts +++ b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/terminal.chatAgentTools.contribution.ts @@ -10,11 +10,11 @@ import { localize } from '../../../../../nls.js'; import { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js'; import { registerWorkbenchContribution2, WorkbenchPhase, type IWorkbenchContribution } from '../../../../common/contributions.js'; import { ILanguageModelToolsService, ToolDataSource } from '../../../chat/common/languageModelToolsService.js'; -import { GetTerminalOutputTool, GetTerminalOutputToolData } from './getTerminalOutputTool.js'; -import { RunInTerminalTool, RunInTerminalToolData } from './runInTerminalTool.js'; -import { CreateAndRunTaskTool, CreateAndRunTaskToolData } from './task/createAndRunTaskTool.js'; -import { GetTaskOutputTool, GetTaskOutputToolData } from './task/getTaskOutputTool.js'; -import { RunTaskTool, RunTaskToolData } from './task/runTaskTool.js'; +import { GetTerminalOutputTool, GetTerminalOutputToolData } from './tools/getTerminalOutputTool.js'; +import { RunInTerminalTool, RunInTerminalToolData } from './tools/runInTerminalTool.js'; +import { CreateAndRunTaskTool, CreateAndRunTaskToolData } from './tools/task/createAndRunTaskTool.js'; +import { GetTaskOutputTool, GetTaskOutputToolData } from './tools/task/getTaskOutputTool.js'; +import { RunTaskTool, RunTaskToolData } from './tools/task/runTaskTool.js'; // #region Workbench contributions diff --git a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/getTerminalOutputTool.ts b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalOutputTool.ts similarity index 86% rename from src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/getTerminalOutputTool.ts rename to src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalOutputTool.ts index 8236072ed12b6..ddc446dc690e5 100644 --- a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/getTerminalOutputTool.ts +++ b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/getTerminalOutputTool.ts @@ -3,10 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import type { CancellationToken } from '../../../../../base/common/cancellation.js'; -import { Disposable } from '../../../../../base/common/lifecycle.js'; -import { localize } from '../../../../../nls.js'; -import { ToolDataSource, type CountTokensCallback, type IPreparedToolInvocation, type IToolData, type IToolImpl, type IToolInvocation, type IToolInvocationPreparationContext, type IToolResult, type ToolProgress } from '../../../chat/common/languageModelToolsService.js'; +import type { CancellationToken } from '../../../../../../base/common/cancellation.js'; +import { Disposable } from '../../../../../../base/common/lifecycle.js'; +import { localize } from '../../../../../../nls.js'; +import { ToolDataSource, type CountTokensCallback, type IPreparedToolInvocation, type IToolData, type IToolImpl, type IToolInvocation, type IToolInvocationPreparationContext, type IToolResult, type ToolProgress } from '../../../../chat/common/languageModelToolsService.js'; import { RunInTerminalTool } from './runInTerminalTool.js'; export const GetTerminalOutputToolData: IToolData = { diff --git a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalTool.ts b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts similarity index 92% rename from src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalTool.ts rename to src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts index edb555f3d9cfb..73c3ab3225aa2 100644 --- a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalTool.ts +++ b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts @@ -4,39 +4,39 @@ *--------------------------------------------------------------------------------------------*/ import type { IMarker as IXtermMarker } from '@xterm/xterm'; -import { timeout } from '../../../../../base/common/async.js'; -import { CancellationToken } from '../../../../../base/common/cancellation.js'; -import { CancellationError } from '../../../../../base/common/errors.js'; -import { MarkdownString, type IMarkdownString } from '../../../../../base/common/htmlContent.js'; -import { Disposable, DisposableStore } from '../../../../../base/common/lifecycle.js'; -import { OperatingSystem, OS } from '../../../../../base/common/platform.js'; -import { count } from '../../../../../base/common/strings.js'; -import type { URI } from '../../../../../base/common/uri.js'; -import { generateUuid } from '../../../../../base/common/uuid.js'; -import { localize } from '../../../../../nls.js'; -import { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js'; -import { IStorageService, StorageScope, StorageTarget } from '../../../../../platform/storage/common/storage.js'; -import { ITelemetryService } from '../../../../../platform/telemetry/common/telemetry.js'; -import { TerminalCapability } from '../../../../../platform/terminal/common/capabilities/capabilities.js'; -import { ITerminalLogService } from '../../../../../platform/terminal/common/terminal.js'; -import { IWorkspaceContextService } from '../../../../../platform/workspace/common/workspace.js'; -import { IRemoteAgentService } from '../../../../services/remote/common/remoteAgentService.js'; -import { IChatService, type IChatTerminalToolInvocationData } from '../../../chat/common/chatService.js'; -import { ILanguageModelsService } from '../../../chat/common/languageModels.js'; -import { CountTokensCallback, ILanguageModelToolsService, IPreparedToolInvocation, IToolData, IToolImpl, IToolInvocation, IToolInvocationPreparationContext, IToolResult, ToolDataSource, ToolProgress, type IToolConfirmationMessages } from '../../../chat/common/languageModelToolsService.js'; -import { ITerminalService, type ITerminalInstance } from '../../../terminal/browser/terminal.js'; -import type { XtermTerminal } from '../../../terminal/browser/xterm/xtermTerminal.js'; -import { ITerminalProfileResolverService } from '../../../terminal/common/terminal.js'; -import { getRecommendedToolsOverRunInTerminal } from './alternativeRecommendation.js'; -import { getOutput, pollForOutputAndIdle, promptForMorePolling, racePollingOrPrompt } from './bufferOutputPolling.js'; -import { CommandLineAutoApprover } from './commandLineAutoApprover.js'; -import { BasicExecuteStrategy } from './executeStrategy/basicExecuteStrategy.js'; -import type { ITerminalExecuteStrategy } from './executeStrategy/executeStrategy.js'; -import { NoneExecuteStrategy } from './executeStrategy/noneExecuteStrategy.js'; -import { RichExecuteStrategy } from './executeStrategy/richExecuteStrategy.js'; -import { isPowerShell } from './runInTerminalHelpers.js'; -import { extractInlineSubCommands, splitCommandLineIntoSubCommands } from './subCommands.js'; -import { ShellIntegrationQuality, ToolTerminalCreator, type IToolTerminal } from './toolTerminalCreator.js'; +import { timeout } from '../../../../../../base/common/async.js'; +import { CancellationToken } from '../../../../../../base/common/cancellation.js'; +import { CancellationError } from '../../../../../../base/common/errors.js'; +import { MarkdownString, type IMarkdownString } from '../../../../../../base/common/htmlContent.js'; +import { Disposable, DisposableStore } from '../../../../../../base/common/lifecycle.js'; +import { OperatingSystem, OS } from '../../../../../../base/common/platform.js'; +import { count } from '../../../../../../base/common/strings.js'; +import type { URI } from '../../../../../../base/common/uri.js'; +import { generateUuid } from '../../../../../../base/common/uuid.js'; +import { localize } from '../../../../../../nls.js'; +import { IInstantiationService } from '../../../../../../platform/instantiation/common/instantiation.js'; +import { IStorageService, StorageScope, StorageTarget } from '../../../../../../platform/storage/common/storage.js'; +import { ITelemetryService } from '../../../../../../platform/telemetry/common/telemetry.js'; +import { TerminalCapability } from '../../../../../../platform/terminal/common/capabilities/capabilities.js'; +import { ITerminalLogService } from '../../../../../../platform/terminal/common/terminal.js'; +import { IWorkspaceContextService } from '../../../../../../platform/workspace/common/workspace.js'; +import { IRemoteAgentService } from '../../../../../services/remote/common/remoteAgentService.js'; +import { IChatService, type IChatTerminalToolInvocationData } from '../../../../chat/common/chatService.js'; +import { ILanguageModelsService } from '../../../../chat/common/languageModels.js'; +import { CountTokensCallback, ILanguageModelToolsService, IPreparedToolInvocation, IToolData, IToolImpl, IToolInvocation, IToolInvocationPreparationContext, IToolResult, ToolDataSource, ToolProgress, type IToolConfirmationMessages } from '../../../../chat/common/languageModelToolsService.js'; +import { ITerminalService, type ITerminalInstance } from '../../../../terminal/browser/terminal.js'; +import type { XtermTerminal } from '../../../../terminal/browser/xterm/xtermTerminal.js'; +import { ITerminalProfileResolverService } from '../../../../terminal/common/terminal.js'; +import { getRecommendedToolsOverRunInTerminal } from '../alternativeRecommendation.js'; +import { getOutput, pollForOutputAndIdle, promptForMorePolling, racePollingOrPrompt } from '../bufferOutputPolling.js'; +import { CommandLineAutoApprover } from '../commandLineAutoApprover.js'; +import { BasicExecuteStrategy } from '../executeStrategy/basicExecuteStrategy.js'; +import type { ITerminalExecuteStrategy } from '../executeStrategy/executeStrategy.js'; +import { NoneExecuteStrategy } from '../executeStrategy/noneExecuteStrategy.js'; +import { RichExecuteStrategy } from '../executeStrategy/richExecuteStrategy.js'; +import { isPowerShell } from '../runInTerminalHelpers.js'; +import { extractInlineSubCommands, splitCommandLineIntoSubCommands } from '../subCommands.js'; +import { ShellIntegrationQuality, ToolTerminalCreator, type IToolTerminal } from '../toolTerminalCreator.js'; const TERMINAL_SESSION_STORAGE_KEY = 'chat.terminalSessions'; diff --git a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task/createAndRunTaskTool.ts b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/createAndRunTaskTool.ts similarity index 90% rename from src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task/createAndRunTaskTool.ts rename to src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/createAndRunTaskTool.ts index 4683094bc9ca7..ca17b10ff7acb 100644 --- a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task/createAndRunTaskTool.ts +++ b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/createAndRunTaskTool.ts @@ -3,22 +3,22 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { timeout } from '../../../../../../base/common/async.js'; -import { CancellationToken } from '../../../../../../base/common/cancellation.js'; -import { localize } from '../../../../../../nls.js'; -import { ITelemetryService } from '../../../../../../platform/telemetry/common/telemetry.js'; -import { IChatService } from '../../../../chat/common/chatService.js'; -import { ILanguageModelsService } from '../../../../chat/common/languageModels.js'; -import { CountTokensCallback, IPreparedToolInvocation, IToolData, IToolImpl, IToolInvocation, IToolInvocationPreparationContext, IToolResult, ToolDataSource, ToolProgress } from '../../../../chat/common/languageModelToolsService.js'; -import { ITaskService, ITaskSummary, Task } from '../../../../tasks/common/taskService.js'; -import { ITerminalService } from '../../../../terminal/browser/terminal.js'; -import { pollForOutputAndIdle, promptForMorePolling, racePollingOrPrompt } from '../bufferOutputPolling.js'; -import { getOutput } from '../outputHelpers.js'; -import { IConfiguredTask } from './taskHelpers.js'; -import { MarkdownString } from '../../../../../../base/common/htmlContent.js'; -import { URI } from '../../../../../../base/common/uri.js'; -import { IFileService } from '../../../../../../platform/files/common/files.js'; -import { VSBuffer } from '../../../../../../base/common/buffer.js'; +import { timeout } from '../../../../../../../base/common/async.js'; +import { CancellationToken } from '../../../../../../../base/common/cancellation.js'; +import { localize } from '../../../../../../../nls.js'; +import { ITelemetryService } from '../../../../../../../platform/telemetry/common/telemetry.js'; +import { IChatService } from '../../../../../chat/common/chatService.js'; +import { ILanguageModelsService } from '../../../../../chat/common/languageModels.js'; +import { CountTokensCallback, IPreparedToolInvocation, IToolData, IToolImpl, IToolInvocation, IToolInvocationPreparationContext, IToolResult, ToolDataSource, ToolProgress } from '../../../../../chat/common/languageModelToolsService.js'; +import { ITaskService, ITaskSummary, Task } from '../../../../../tasks/common/taskService.js'; +import { ITerminalService } from '../../../../../terminal/browser/terminal.js'; +import { pollForOutputAndIdle, promptForMorePolling, racePollingOrPrompt } from '../../bufferOutputPolling.js'; +import { getOutput } from '../../outputHelpers.js'; +import { IConfiguredTask } from '../../taskHelpers.js'; +import { MarkdownString } from '../../../../../../../base/common/htmlContent.js'; +import { URI } from '../../../../../../../base/common/uri.js'; +import { IFileService } from '../../../../../../../platform/files/common/files.js'; +import { VSBuffer } from '../../../../../../../base/common/buffer.js'; type CreateAndRunTaskToolClassification = { taskLabel: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'The label of the task.' }; diff --git a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task/getTaskOutputTool.ts b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/getTaskOutputTool.ts similarity index 83% rename from src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task/getTaskOutputTool.ts rename to src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/getTaskOutputTool.ts index 3e4cc89bb12ee..15a97c6a9c84e 100644 --- a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task/getTaskOutputTool.ts +++ b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/getTaskOutputTool.ts @@ -3,16 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import type { CancellationToken } from '../../../../../../base/common/cancellation.js'; -import { MarkdownString } from '../../../../../../base/common/htmlContent.js'; -import { Disposable } from '../../../../../../base/common/lifecycle.js'; -import { localize } from '../../../../../../nls.js'; -import { IConfigurationService } from '../../../../../../platform/configuration/common/configuration.js'; -import { ToolDataSource, type CountTokensCallback, type IPreparedToolInvocation, type IToolData, type IToolImpl, type IToolInvocation, type IToolInvocationPreparationContext, type IToolResult, type ToolProgress } from '../../../../chat/common/languageModelToolsService.js'; -import { ITaskService } from '../../../../tasks/common/taskService.js'; -import { ITerminalService } from '../../../../terminal/browser/terminal.js'; -import { getOutput } from '../bufferOutputPolling.js'; -import { getTaskDefinition, getTaskForTool } from './taskHelpers.js'; +import type { CancellationToken } from '../../../../../../../base/common/cancellation.js'; +import { MarkdownString } from '../../../../../../../base/common/htmlContent.js'; +import { Disposable } from '../../../../../../../base/common/lifecycle.js'; +import { localize } from '../../../../../../../nls.js'; +import { IConfigurationService } from '../../../../../../../platform/configuration/common/configuration.js'; +import { ToolDataSource, type CountTokensCallback, type IPreparedToolInvocation, type IToolData, type IToolImpl, type IToolInvocation, type IToolInvocationPreparationContext, type IToolResult, type ToolProgress } from '../../../../../chat/common/languageModelToolsService.js'; +import { ITaskService } from '../../../../../tasks/common/taskService.js'; +import { ITerminalService } from '../../../../../terminal/browser/terminal.js'; +import { getOutput } from '../../bufferOutputPolling.js'; +import { getTaskDefinition, getTaskForTool } from '../../taskHelpers.js'; export const GetTaskOutputToolData: IToolData = { id: 'get_task_output', diff --git a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task/runTaskTool.ts b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/runTaskTool.ts similarity index 87% rename from src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task/runTaskTool.ts rename to src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/runTaskTool.ts index 1038915230ab5..24b489addc248 100644 --- a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/task/runTaskTool.ts +++ b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/task/runTaskTool.ts @@ -3,20 +3,20 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { timeout } from '../../../../../../base/common/async.js'; -import { CancellationToken } from '../../../../../../base/common/cancellation.js'; -import { localize } from '../../../../../../nls.js'; -import { ITelemetryService } from '../../../../../../platform/telemetry/common/telemetry.js'; -import { IChatService } from '../../../../chat/common/chatService.js'; -import { ILanguageModelsService } from '../../../../chat/common/languageModels.js'; -import { CountTokensCallback, IPreparedToolInvocation, IToolData, IToolImpl, IToolInvocation, IToolInvocationPreparationContext, IToolResult, ToolDataSource, ToolProgress } from '../../../../chat/common/languageModelToolsService.js'; -import { ITaskService, ITaskSummary, Task } from '../../../../tasks/common/taskService.js'; -import { ITerminalService } from '../../../../terminal/browser/terminal.js'; -import { pollForOutputAndIdle, promptForMorePolling, racePollingOrPrompt } from '../bufferOutputPolling.js'; -import { getOutput } from '../outputHelpers.js'; -import { getTaskDefinition, getTaskForTool } from './taskHelpers.js'; -import { MarkdownString } from '../../../../../../base/common/htmlContent.js'; -import { IConfigurationService } from '../../../../../../platform/configuration/common/configuration.js'; +import { timeout } from '../../../../../../../base/common/async.js'; +import { CancellationToken } from '../../../../../../../base/common/cancellation.js'; +import { localize } from '../../../../../../../nls.js'; +import { ITelemetryService } from '../../../../../../../platform/telemetry/common/telemetry.js'; +import { IChatService } from '../../../../../chat/common/chatService.js'; +import { ILanguageModelsService } from '../../../../../chat/common/languageModels.js'; +import { CountTokensCallback, IPreparedToolInvocation, IToolData, IToolImpl, IToolInvocation, IToolInvocationPreparationContext, IToolResult, ToolDataSource, ToolProgress } from '../../../../../chat/common/languageModelToolsService.js'; +import { ITaskService, ITaskSummary, Task } from '../../../../../tasks/common/taskService.js'; +import { ITerminalService } from '../../../../../terminal/browser/terminal.js'; +import { pollForOutputAndIdle, promptForMorePolling, racePollingOrPrompt } from '../../bufferOutputPolling.js'; +import { getOutput } from '../../outputHelpers.js'; +import { getTaskDefinition, getTaskForTool } from '../../taskHelpers.js'; +import { MarkdownString } from '../../../../../../../base/common/htmlContent.js'; +import { IConfigurationService } from '../../../../../../../platform/configuration/common/configuration.js'; type RunTaskToolClassification = { taskId: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'The ID of the task.' }; diff --git a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/test/browser/runInTerminalTool.test.ts b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/test/browser/runInTerminalTool.test.ts index 26de304e311e1..b775a46e5f5db 100644 --- a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/test/browser/runInTerminalTool.test.ts +++ b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/test/browser/runInTerminalTool.test.ts @@ -11,7 +11,7 @@ import { ConfigurationTarget } from '../../../../../../platform/configuration/co import { TestConfigurationService } from '../../../../../../platform/configuration/test/common/testConfigurationService.js'; import { workbenchInstantiationService } from '../../../../../test/browser/workbenchTestServices.js'; import { IToolInvocationPreparationContext, IPreparedToolInvocation, ILanguageModelToolsService } from '../../../../chat/common/languageModelToolsService.js'; -import { RunInTerminalTool, type IRunInTerminalInputParams } from '../../browser/runInTerminalTool.js'; +import { RunInTerminalTool, type IRunInTerminalInputParams } from '../../browser/tools/runInTerminalTool.js'; import { TerminalChatAgentToolsSettingId } from '../../common/terminalChatAgentToolsConfiguration.js'; import { IWorkspaceContextService } from '../../../../../../platform/workspace/common/workspace.js'; import { TestContextService } from '../../../../../test/common/workbenchTestServices.js'; From a67d3aa310bf963489ffc2db434965ad789567cf Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Tue, 5 Aug 2025 06:08:26 -0700 Subject: [PATCH 0016/2080] Move output monitoring for background terminals into separate class Part of #258480 --- .../chatAgentTools/browser/outputMonitor.ts | 199 ++++++++++++ .../browser/runInTerminalTool.ts | 25 +- .../test/browser/outputMonitor.test.ts | 297 ++++++++++++++++++ 3 files changed, 505 insertions(+), 16 deletions(-) create mode 100644 src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/outputMonitor.ts create mode 100644 src/vs/workbench/contrib/terminalContrib/chatAgentTools/test/browser/outputMonitor.test.ts diff --git a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/outputMonitor.ts b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/outputMonitor.ts new file mode 100644 index 0000000000000..be1e810e6c7dd --- /dev/null +++ b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/outputMonitor.ts @@ -0,0 +1,199 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { timeout } from '../../../../../base/common/async.js'; +import { CancellationToken } from '../../../../../base/common/cancellation.js'; +import { Emitter, Event } from '../../../../../base/common/event.js'; +import { Disposable } from '../../../../../base/common/lifecycle.js'; +import { ILanguageModelsService } from '../../../chat/common/languageModels.js'; +import { IChatService } from '../../../chat/common/chatService.js'; +import { assessOutputForErrors, PollingConsts, racePollingOrPrompt, promptForMorePolling } from './bufferOutputPolling.js'; + +export const enum OutputMonitorAction { + PollingStarted = 'polling_started', + OutputReceived = 'output_received', + IdleDetected = 'idle_detected', + TimeoutReached = 'timeout_reached', + CancellationRequested = 'cancellation_requested', + ExtendedPollingStarted = 'extended_polling_started', + AssessmentCompleted = 'assessment_completed' +} + +export interface IOutputMonitor extends Disposable { + // for constructing telemetry event + readonly actions: OutputMonitorAction[]; + + // for constructing tool result + readonly isIdle: boolean; + + // enable async listening to when the command is considered finished + readonly onDidFinishCommand: Event; + + // if we need this outside the class + readonly onDidIdle: Event; + + // timeout for showing elicitation + readonly onDidTimeout: Event; + + // Start monitoring output with automatic extended polling if needed + startMonitoring( + chatService: IChatService, + command: string, + invocationContext: any, + token: CancellationToken + ): Promise<{ terminalExecutionIdleBeforeTimeout: boolean; output: string; pollDurationMs?: number; modelOutputEvalResponse?: string }>; + + // Legacy method for testing + startMonitoringLegacy(extendedPolling: boolean, token: CancellationToken): Promise<{ terminalExecutionIdleBeforeTimeout: boolean; output: string; pollDurationMs?: number; modelOutputEvalResponse?: string }>; +} + +export class OutputMonitor extends Disposable implements IOutputMonitor { + private readonly _onDidFinishCommand = new Emitter(); + private readonly _onDidIdle = new Emitter(); + private readonly _onDidTimeout = new Emitter(); + + private readonly _actions: OutputMonitorAction[] = []; + private _isIdle = false; + + readonly onDidFinishCommand = this._onDidFinishCommand.event; + readonly onDidIdle = this._onDidIdle.event; + readonly onDidTimeout = this._onDidTimeout.event; + + get actions(): OutputMonitorAction[] { + return [...this._actions]; + } + + get isIdle(): boolean { + return this._isIdle; + } + + constructor( + private readonly _execution: { getOutput: () => string; isActive?: () => Promise }, + private readonly _languageModelsService: ILanguageModelsService + ) { + super(); + } + + async startMonitoring( + chatService: IChatService, + command: string, + invocationContext: any, + token: CancellationToken + ): Promise<{ terminalExecutionIdleBeforeTimeout: boolean; output: string; pollDurationMs?: number; modelOutputEvalResponse?: string }> { + // First, try initial polling + let result = await this._startMonitoringInternal(false, token); + + // If the initial polling didn't complete before timeout, try extended polling with user prompt + if (!result.terminalExecutionIdleBeforeTimeout) { + result = await racePollingOrPrompt( + () => this._startMonitoringInternal(true, token), + () => promptForMorePolling(command, token, invocationContext, chatService), + result, + token, + this._languageModelsService, + this._execution + ); + } + + return result; + } + + // Legacy method for testing + startMonitoringLegacy(extendedPolling: boolean, token: CancellationToken): Promise<{ terminalExecutionIdleBeforeTimeout: boolean; output: string; pollDurationMs?: number; modelOutputEvalResponse?: string }> { + return this._startMonitoringInternal(extendedPolling, token); + } + + private async _startMonitoringInternal(extendedPolling: boolean, token: CancellationToken): Promise<{ terminalExecutionIdleBeforeTimeout: boolean; output: string; pollDurationMs?: number; modelOutputEvalResponse?: string }> { + this._addAction(OutputMonitorAction.PollingStarted); + if (extendedPolling) { + this._addAction(OutputMonitorAction.ExtendedPollingStarted); + } + + const maxWaitMs = extendedPolling ? PollingConsts.ExtendedPollingMaxDuration : PollingConsts.FirstPollingMaxDuration; + const maxInterval = PollingConsts.MaxPollingIntervalDuration; + let currentInterval = PollingConsts.MinPollingDuration; + const pollStartTime = Date.now(); + + let lastBufferLength = 0; + let noNewDataCount = 0; + let buffer = ''; + let terminalExecutionIdleBeforeTimeout = false; + + while (true) { + if (token.isCancellationRequested) { + this._addAction(OutputMonitorAction.CancellationRequested); + break; + } + const now = Date.now(); + const elapsed = now - pollStartTime; + const timeLeft = maxWaitMs - elapsed; + + if (timeLeft <= 0) { + this._addAction(OutputMonitorAction.TimeoutReached); + this._onDidTimeout.fire(); + break; + } + + // Cap the wait so we never overshoot timeLeft + const waitTime = Math.min(currentInterval, timeLeft); + await timeout(waitTime); + + // Check again immediately after waking + if (Date.now() - pollStartTime >= maxWaitMs) { + this._addAction(OutputMonitorAction.TimeoutReached); + this._onDidTimeout.fire(); + break; + } + + currentInterval = Math.min(currentInterval * 2, maxInterval); + + buffer = this._execution.getOutput(); + const currentBufferLength = buffer.length; + + if (currentBufferLength !== lastBufferLength) { + this._addAction(OutputMonitorAction.OutputReceived); + } + + if (currentBufferLength === lastBufferLength) { + noNewDataCount++; + } else { + noNewDataCount = 0; + lastBufferLength = currentBufferLength; + } + + if (noNewDataCount >= PollingConsts.MinNoDataEvents) { + if (this._execution.isActive && ((await this._execution.isActive()) === true)) { + noNewDataCount = 0; + lastBufferLength = currentBufferLength; + continue; + } + this._addAction(OutputMonitorAction.IdleDetected); + this._isIdle = true; + this._onDidIdle.fire(); + terminalExecutionIdleBeforeTimeout = true; + + this._addAction(OutputMonitorAction.AssessmentCompleted); + const modelOutputEvalResponse = await assessOutputForErrors(buffer, token, this._languageModelsService); + + this._onDidFinishCommand.fire(); + return { modelOutputEvalResponse, terminalExecutionIdleBeforeTimeout, output: buffer, pollDurationMs: Date.now() - pollStartTime + (extendedPolling ? PollingConsts.FirstPollingMaxDuration : 0) }; + } + } + + this._onDidFinishCommand.fire(); + return { terminalExecutionIdleBeforeTimeout: false, output: buffer, pollDurationMs: Date.now() - pollStartTime + (extendedPolling ? PollingConsts.FirstPollingMaxDuration : 0) }; + } + + private _addAction(action: OutputMonitorAction): void { + this._actions.push(action); + } + + override dispose(): void { + this._onDidFinishCommand.dispose(); + this._onDidIdle.dispose(); + this._onDidTimeout.dispose(); + super.dispose(); + } +} diff --git a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalTool.ts b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalTool.ts index 1f57703f7cb9b..16105833be4d5 100644 --- a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalTool.ts +++ b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalTool.ts @@ -28,11 +28,12 @@ import { ITerminalService, type ITerminalInstance } from '../../../terminal/brow import type { XtermTerminal } from '../../../terminal/browser/xterm/xtermTerminal.js'; import { ITerminalProfileResolverService } from '../../../terminal/common/terminal.js'; import { getRecommendedToolsOverRunInTerminal } from './alternativeRecommendation.js'; -import { getOutput, pollForOutputAndIdle, promptForMorePolling, racePollingOrPrompt } from './bufferOutputPolling.js'; +import { getOutput } from './bufferOutputPolling.js'; import { CommandLineAutoApprover } from './commandLineAutoApprover.js'; import { BasicExecuteStrategy } from './executeStrategy/basicExecuteStrategy.js'; import type { ITerminalExecuteStrategy } from './executeStrategy/executeStrategy.js'; import { NoneExecuteStrategy } from './executeStrategy/noneExecuteStrategy.js'; +import { OutputMonitor, OutputMonitorAction } from './outputMonitor.js'; import { RichExecuteStrategy } from './executeStrategy/richExecuteStrategy.js'; import { isPowerShell } from './runInTerminalHelpers.js'; import { extractInlineSubCommands, splitCommandLineIntoSubCommands } from './subCommands.js'; @@ -318,31 +319,21 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { if (args.isBackground) { let outputAndIdle: { terminalExecutionIdleBeforeTimeout: boolean; output: string; pollDurationMs?: number; modelOutputEvalResponse?: string } | undefined = undefined; + let outputMonitor: OutputMonitor | undefined = undefined; try { this._logService.debug(`RunInTerminalTool: Starting background execution \`${command}\``); const execution = new BackgroundTerminalExecution(toolTerminal.instance, xterm, command); RunInTerminalTool._backgroundExecutions.set(termId, execution); - outputAndIdle = await pollForOutputAndIdle(execution, false, token, this._languageModelsService); + outputMonitor = new OutputMonitor(execution, this._languageModelsService); + store.add(outputMonitor); + + outputAndIdle = await outputMonitor.startMonitoring(this._chatService, command, invocation.context!, token); if (token.isCancellationRequested) { throw new CancellationError(); } - if (!outputAndIdle.terminalExecutionIdleBeforeTimeout) { - outputAndIdle = await racePollingOrPrompt( - () => pollForOutputAndIdle(execution, true, token, this._languageModelsService), - () => promptForMorePolling(command, token, invocation.context!, this._chatService), - outputAndIdle, - token, - this._languageModelsService, - execution - ); - if (token.isCancellationRequested) { - throw new CancellationError(); - } - } - let resultText = ( didUserEditCommand ? `Note: The user manually edited the command to \`${command}\`, and that command is now running in terminal with ID=${termId}` @@ -387,6 +378,7 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { pollDurationMs: outputAndIdle?.pollDurationMs, inputUserChars, inputUserSigint, + outputMonitorActions: outputMonitor?.actions, }); } } else { @@ -676,6 +668,7 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { exitCode: number | undefined; inputUserChars: number; inputUserSigint: boolean; + outputMonitorActions?: OutputMonitorAction[]; }) { type TelemetryEvent = { terminalSessionId: string; diff --git a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/test/browser/outputMonitor.test.ts b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/test/browser/outputMonitor.test.ts new file mode 100644 index 0000000000000..00d2ed5d87d9b --- /dev/null +++ b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/test/browser/outputMonitor.test.ts @@ -0,0 +1,297 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { strictEqual, deepStrictEqual } from 'assert'; +import { timeout } from '../../../../../../base/common/async.js'; +import { CancellationTokenSource } from '../../../../../../base/common/cancellation.js'; +import { DisposableStore } from '../../../../../../base/common/lifecycle.js'; +import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../../base/test/common/utils.js'; +import { ILanguageModelsService } from '../../../../chat/common/languageModels.js'; +import { OutputMonitor, OutputMonitorAction } from '../../browser/outputMonitor.js'; + +suite('OutputMonitor', () => { + let disposables: DisposableStore; + let mockLanguageModelsService: ILanguageModelsService; + + ensureNoDisposablesAreLeakedInTestSuite(); + + setup(() => { + disposables = new DisposableStore(); + mockLanguageModelsService = {} as ILanguageModelsService; + }); + + teardown(() => { + disposables.dispose(); + }); + + function createMockExecution(outputSequence: string[], isActiveSequence?: boolean[]): { getOutput: () => string; isActive?: () => Promise } { + let outputIndex = 0; + let isActiveIndex = 0; + + return { + getOutput: () => { + const output = outputSequence[outputIndex] || outputSequence[outputSequence.length - 1] || ''; + if (outputIndex < outputSequence.length - 1) { + outputIndex++; + } + return output; + }, + isActive: isActiveSequence ? async () => { + const isActive = isActiveSequence[isActiveIndex] !== undefined ? isActiveSequence[isActiveIndex] : false; + if (isActiveIndex < isActiveSequence.length - 1) { + isActiveIndex++; + } + return isActive; + } : undefined + }; + } + + test('should implement IOutputMonitor interface', () => { + const execution = createMockExecution(['']); + const monitor = new OutputMonitor(execution, mockLanguageModelsService); + disposables.add(monitor); + + // Verify interface implementation + strictEqual(typeof monitor.actions, 'object'); + strictEqual(Array.isArray(monitor.actions), true); + strictEqual(typeof monitor.isIdle, 'boolean'); + strictEqual(typeof monitor.onDidFinishCommand, 'object'); + strictEqual(typeof monitor.onDidIdle, 'object'); + strictEqual(typeof monitor.onDidTimeout, 'object'); + strictEqual(typeof monitor.startMonitoring, 'function'); + strictEqual(typeof monitor.dispose, 'function'); + }); + + test('should track actions correctly', async () => { + const execution = createMockExecution(['output1', 'output1', 'output1']); // No new output to trigger idle + const monitor = new OutputMonitor(execution, mockLanguageModelsService); + disposables.add(monitor); + + const tokenSource = new CancellationTokenSource(); + const result = monitor.startMonitoringLegacy(false, tokenSource.token); + + // Give it some time to start and detect idle + await timeout(100); + tokenSource.cancel(); + + await result.catch(() => { }); // Expect cancellation error + + const actions = monitor.actions; + strictEqual(actions.includes(OutputMonitorAction.PollingStarted), true); + strictEqual(actions.includes(OutputMonitorAction.CancellationRequested), true); + }); + + test('should detect idle state when no new output', async () => { + const execution = createMockExecution(['initial output', 'initial output', 'initial output']); // Same output to trigger idle + const monitor = new OutputMonitor(execution, mockLanguageModelsService); + disposables.add(monitor); + + let idleEventFired = false; + let finishEventFired = false; + + monitor.onDidIdle(() => { + idleEventFired = true; + }); + + monitor.onDidFinishCommand(() => { + finishEventFired = true; + }); + + const tokenSource = new CancellationTokenSource(); + + // Mock the assessment function to return quickly + const originalAssess = require('../../browser/bufferOutputPolling.js').assessOutputForErrors; + require('../../browser/bufferOutputPolling.js').assessOutputForErrors = async () => 'Mock assessment'; + + const result = await monitor.startMonitoringLegacy(false, tokenSource.token); // Restore original function + require('../../browser/bufferOutputPolling.js').assessOutputForErrors = originalAssess; + + strictEqual(result.terminalExecutionIdleBeforeTimeout, true); + strictEqual(typeof result.output, 'string'); + strictEqual(typeof result.pollDurationMs, 'number'); + strictEqual(result.modelOutputEvalResponse, 'Mock assessment'); + strictEqual(monitor.isIdle, true); + strictEqual(idleEventFired, true); + strictEqual(finishEventFired, true); + + const actions = monitor.actions; + strictEqual(actions.includes(OutputMonitorAction.PollingStarted), true); + strictEqual(actions.includes(OutputMonitorAction.IdleDetected), true); + strictEqual(actions.includes(OutputMonitorAction.AssessmentCompleted), true); + }); + + test('should handle timeout correctly', async () => { + const execution = createMockExecution(['changing output 1', 'changing output 2', 'changing output 3']); // Always changing output + const monitor = new OutputMonitor(execution, mockLanguageModelsService); + disposables.add(monitor); + + let timeoutEventFired = false; + monitor.onDidTimeout(() => { + timeoutEventFired = true; + }); + + const tokenSource = new CancellationTokenSource(); + + // Mock PollingConsts to use shorter durations for testing + const originalPollingConsts = require('../../browser/bufferOutputPolling.js').PollingConsts; + require('../../browser/bufferOutputPolling.js').PollingConsts = { + ...originalPollingConsts, + FirstPollingMaxDuration: 50, // 50ms timeout for testing + MinPollingDuration: 10 + }; + + const result = await monitor.startMonitoringLegacy(false, tokenSource.token); + + // Restore original constants + require('../../browser/bufferOutputPolling.js').PollingConsts = originalPollingConsts; + + strictEqual(result.terminalExecutionIdleBeforeTimeout, false); + strictEqual(timeoutEventFired, true); + + const actions = monitor.actions; + strictEqual(actions.includes(OutputMonitorAction.PollingStarted), true); + strictEqual(actions.includes(OutputMonitorAction.TimeoutReached), true); + }); + + test('should handle cancellation correctly', async () => { + const execution = createMockExecution(['output']); + const monitor = new OutputMonitor(execution, mockLanguageModelsService); + disposables.add(monitor); + + const tokenSource = new CancellationTokenSource(); + + // Cancel immediately + tokenSource.cancel(); + + try { + await monitor.startMonitoringLegacy(false, tokenSource.token); + strictEqual(true, false, 'Should have thrown cancellation error'); + } catch (error) { + // Expected cancellation + } + + const actions = monitor.actions; + strictEqual(actions.includes(OutputMonitorAction.PollingStarted), true); + strictEqual(actions.includes(OutputMonitorAction.CancellationRequested), true); + }); + + test('should track output received actions', async () => { + const execution = createMockExecution(['output1', 'output2', 'output2', 'output2']); // Output changes once then stays same + const monitor = new OutputMonitor(execution, mockLanguageModelsService); + disposables.add(monitor); + + const tokenSource = new CancellationTokenSource(); + + // Mock the assessment function to return quickly + const originalAssess = require('../../browser/bufferOutputPolling.js').assessOutputForErrors; + require('../../browser/bufferOutputPolling.js').assessOutputForErrors = async () => 'Mock assessment'; + + const result = await monitor.startMonitoringLegacy(false, tokenSource.token); + + // Restore original function + require('../../browser/bufferOutputPolling.js').assessOutputForErrors = originalAssess; + + strictEqual(result.terminalExecutionIdleBeforeTimeout, true); + + const actions = monitor.actions; + strictEqual(actions.includes(OutputMonitorAction.PollingStarted), true); + strictEqual(actions.includes(OutputMonitorAction.OutputReceived), true); + strictEqual(actions.includes(OutputMonitorAction.IdleDetected), true); + }); + + test('should handle extended polling correctly', async () => { + const execution = createMockExecution(['output', 'output', 'output']); // Same output to trigger idle quickly + const monitor = new OutputMonitor(execution, mockLanguageModelsService); + disposables.add(monitor); + + const tokenSource = new CancellationTokenSource(); + + // Mock the assessment function to return quickly + const originalAssess = require('../../browser/bufferOutputPolling.js').assessOutputForErrors; + require('../../browser/bufferOutputPolling.js').assessOutputForErrors = async () => 'Extended polling assessment'; + + const result = await monitor.startMonitoringLegacy(true, tokenSource.token); // Extended polling = true + + // Restore original function + require('../../browser/bufferOutputPolling.js').assessOutputForErrors = originalAssess; + + strictEqual(result.terminalExecutionIdleBeforeTimeout, true); + strictEqual(result.modelOutputEvalResponse, 'Extended polling assessment'); + + const actions = monitor.actions; + strictEqual(actions.includes(OutputMonitorAction.PollingStarted), true); + strictEqual(actions.includes(OutputMonitorAction.ExtendedPollingStarted), true); + strictEqual(actions.includes(OutputMonitorAction.IdleDetected), true); + strictEqual(actions.includes(OutputMonitorAction.AssessmentCompleted), true); + }); + + test('should handle isActive check correctly', async () => { + const execution = createMockExecution( + ['output', 'output', 'output', 'output'], // Same output to trigger no new data + [true, true, false] // Active, then active, then inactive (should trigger idle) + ); + const monitor = new OutputMonitor(execution, mockLanguageModelsService); + disposables.add(monitor); + + const tokenSource = new CancellationTokenSource(); + + // Mock the assessment function to return quickly + const originalAssess = require('../../browser/bufferOutputPolling.js').assessOutputForErrors; + require('../../browser/bufferOutputPolling.js').assessOutputForErrors = async () => 'isActive test assessment'; + + const result = await monitor.startMonitoringLegacy(false, tokenSource.token); + + // Restore original function + require('../../browser/bufferOutputPolling.js').assessOutputForErrors = originalAssess; + + strictEqual(result.terminalExecutionIdleBeforeTimeout, true); + strictEqual(monitor.isIdle, true); + + const actions = monitor.actions; + strictEqual(actions.includes(OutputMonitorAction.PollingStarted), true); + strictEqual(actions.includes(OutputMonitorAction.IdleDetected), true); + }); + + test('should return immutable copy of actions', () => { + const execution = createMockExecution(['']); + const monitor = new OutputMonitor(execution, mockLanguageModelsService); + disposables.add(monitor); + + const actions1 = monitor.actions; + const actions2 = monitor.actions; + + // Should be different array instances + strictEqual(actions1 !== actions2, true); + + // But should have same content + deepStrictEqual(actions1, actions2); + + // Modifying returned array should not affect internal state + actions1.push(OutputMonitorAction.TimeoutReached); + const actions3 = monitor.actions; + strictEqual(actions3.includes(OutputMonitorAction.TimeoutReached), false); + }); + + test('should dispose correctly', () => { + const execution = createMockExecution(['']); + const monitor = new OutputMonitor(execution, mockLanguageModelsService); + + let eventFired = false; + monitor.onDidFinishCommand(() => { + eventFired = true; + }); + + monitor.dispose(); + + // Events should be disposed and not fire + try { + (monitor as any)._onDidFinishCommand.fire(); + } catch { + // Expected - disposed emitter should throw or be no-op + } + + strictEqual(eventFired, false); + }); +}); From 8b7d36719b982b757b68ee5fae6ec8a27124cfad Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Tue, 5 Aug 2025 12:40:34 -0700 Subject: [PATCH 0017/2080] Add telemetry for run in terminal prepare Part of #259848 --- .../browser/runInTerminalTool.ts | 149 +++++++++++++++++- 1 file changed, 145 insertions(+), 4 deletions(-) diff --git a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalTool.ts b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalTool.ts index 15d78f85472b9..bcfd22b9cb5ee 100644 --- a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalTool.ts +++ b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/runInTerminalTool.ts @@ -29,7 +29,7 @@ import type { XtermTerminal } from '../../../terminal/browser/xterm/xtermTermina import { ITerminalProfileResolverService } from '../../../terminal/common/terminal.js'; import { getRecommendedToolsOverRunInTerminal } from './alternativeRecommendation.js'; import { getOutput, pollForOutputAndIdle, promptForMorePolling, racePollingOrPrompt } from './bufferOutputPolling.js'; -import { CommandLineAutoApprover } from './commandLineAutoApprover.js'; +import { CommandLineAutoApprover, type ICommandApprovalResult } from './commandLineAutoApprover.js'; import { BasicExecuteStrategy } from './executeStrategy/basicExecuteStrategy.js'; import type { ITerminalExecuteStrategy } from './executeStrategy/executeStrategy.js'; import { NoneExecuteStrategy } from './executeStrategy/noneExecuteStrategy.js'; @@ -240,6 +240,9 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { this._logService.info(`- ${reason}`); } + // Send telemetry about auto approval process + this._sendTelemetryPrepare(actualCommand, shell, os, subCommandResults, commandLineResult, subCommands, inlineSubCommands); + // Add a disclaimer warning about prompt injection for common commands that return // content from the web let disclaimer: IMarkdownString | undefined; @@ -396,7 +399,7 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { store.dispose(); this._logService.debug(`RunInTerminalTool: Finished polling \`${outputAndIdle?.output.length}\` lines of output in \`${outputAndIdle?.pollDurationMs}\``); const timingExecuteMs = Date.now() - timingStart; - this._sendTelemetry(toolTerminal.instance, { + this._sendTelemetryInvoke(toolTerminal.instance, { didUserEditCommand, didToolEditCommand, shellIntegrationQuality: toolTerminal.shellIntegrationQuality, @@ -464,7 +467,7 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { } finally { store.dispose(); const timingExecuteMs = Date.now() - timingStart; - this._sendTelemetry(toolTerminal.instance, { + this._sendTelemetryInvoke(toolTerminal.instance, { didUserEditCommand, didToolEditCommand, isBackground: false, @@ -685,7 +688,145 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { } } - private _sendTelemetry(instance: ITerminalInstance, state: { + private _sendTelemetryPrepare(commandLine: string, shell: string, os: OperatingSystem, subCommandResults: Array<{ result: ICommandApprovalResult; reason: string }>, commandLineResult: { result: ICommandApprovalResult; reason: string }, subCommands: string[], inlineSubCommands: string[]) { + // Count approval types for sub-commands + let subCommandsApproved = 0; + let subCommandsDenied = 0; + let subCommandsNoMatch = 0; + let subCommandsRegexApproved = 0; + let subCommandsDefaultApproved = 0; + + for (const result of subCommandResults) { + switch (result.result) { + case 'approved': + subCommandsApproved++; + if (result.reason.includes('allow list rule: /')) { + subCommandsRegexApproved++; + } else { + subCommandsDefaultApproved++; + } + break; + case 'denied': + subCommandsDenied++; + break; + case 'noMatch': + subCommandsNoMatch++; + break; + } + } + + // Determine command line approval type + let commandLineRegexApproved = false; + let commandLineDefaultApproved = false; + if (commandLineResult.result === 'approved') { + commandLineRegexApproved = commandLineResult.reason.includes('allow list rule: /'); + commandLineDefaultApproved = !commandLineRegexApproved; + } + + // Calculate command and argument metrics + const firstCommand = subCommands[0]?.trim().split(/\s+/)[0] || ''; + const argCount = commandLine.trim().split(/\s+/).length - 1; + + type TelemetryEvent = { + terminalSessionId: string; + + // Overall approval status + overallApproved: 0 | 1; + overallDenied: 0 | 1; + + // Sub-command breakdown + subCommandCount: number; + subCommandsApproved: number; + subCommandsDenied: number; + subCommandsNoMatch: number; + subCommandsRegexApproved: number; + subCommandsDefaultApproved: number; + + // Command line approval + commandLineApproved: 0 | 1; + commandLineDenied: 0 | 1; + commandLineRegexApproved: 0 | 1; + commandLineDefaultApproved: 0 | 1; + + // Inline sub-command count + inlineSubCommandCount: number; + + // Command characteristics + commandLength: number; + argCount: number; + firstCommand: string; + }; + type TelemetryClassification = { + owner: 'tyriar'; + comment: 'Understanding the auto approval behavior of the runInTerminal tool'; + + terminalSessionId: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'The session ID of the terminal instance.' }; + + overallApproved: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'Whether the overall command was auto-approved' }; + overallDenied: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'Whether the overall command was denied by deny list' }; + + subCommandCount: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'Number of sub-commands found in the command line' }; + subCommandsApproved: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'Number of sub-commands that were auto-approved' }; + subCommandsDenied: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'Number of sub-commands that were denied' }; + subCommandsNoMatch: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'Number of sub-commands that had no matching rules' }; + subCommandsRegexApproved: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'Number of sub-commands approved by regex rules' }; + subCommandsDefaultApproved: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'Number of sub-commands approved by default/string rules' }; + + commandLineApproved: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'Whether the full command line was auto-approved' }; + commandLineDenied: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'Whether the full command line was denied' }; + commandLineRegexApproved: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'Whether the command line was approved by a regex rule' }; + commandLineDefaultApproved: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'Whether the command line was approved by a default/string rule' }; + + inlineSubCommandCount: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'Number of inline sub-commands (command substitution) found' }; + + commandLength: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'Total length of the command line in characters' }; + argCount: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'Number of arguments in the command' }; + firstCommand: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'The first command in the command line' }; + }; + + // Determine overall approval status + let overallApproved = false; + let overallDenied = false; + + if (subCommandResults.some(e => e.result === 'denied')) { + overallDenied = true; + } else if (commandLineResult.result === 'denied') { + overallDenied = true; + } else { + if (subCommandResults.every(e => e.result === 'approved')) { + overallApproved = true; + } else if (commandLineResult.result === 'approved') { + overallApproved = true; + } + } + + this._telemetryService.publicLog2('toolUse.runInTerminal.prepare', { + terminalSessionId: 'prepare-phase', // No terminal session available yet during prepare + + overallApproved: overallApproved ? 1 : 0, + overallDenied: overallDenied ? 1 : 0, + + subCommandCount: subCommands.length, + subCommandsApproved, + subCommandsDenied, + subCommandsNoMatch, + subCommandsRegexApproved, + subCommandsDefaultApproved, + + commandLineApproved: commandLineResult.result === 'approved' ? 1 : 0, + commandLineDenied: commandLineResult.result === 'denied' ? 1 : 0, + commandLineRegexApproved: commandLineRegexApproved ? 1 : 0, + commandLineDefaultApproved: commandLineDefaultApproved ? 1 : 0, + + inlineSubCommandCount: inlineSubCommands.length, + + commandLength: commandLine.length, + argCount, + firstCommand, + }); + } + + private _sendTelemetryInvoke(instance: ITerminalInstance, state: { didUserEditCommand: boolean; didToolEditCommand: boolean; error: string | undefined; From d56fdd2279c9f9d47db7f57db7cbf0aae685867e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 5 Aug 2025 22:04:16 +0000 Subject: [PATCH 0018/2080] Initial plan From 790b11d056e7ae6b51cb28caee2c9c9aab1ad7cd Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 5 Aug 2025 22:16:12 +0000 Subject: [PATCH 0019/2080] Fix terminal-suggest completions showing up in Python REPLs Co-authored-by: Tyriar <2193314+Tyriar@users.noreply.github.com> --- .../src/terminalSuggestMain.ts | 6 ++--- .../src/test/terminalSuggestMain.test.ts | 22 ++++++++++++++++++- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/extensions/terminal-suggest/src/terminalSuggestMain.ts b/extensions/terminal-suggest/src/terminalSuggestMain.ts index 3c6481b3aa553..58abd474871ff 100644 --- a/extensions/terminal-suggest/src/terminalSuggestMain.ts +++ b/extensions/terminal-suggest/src/terminalSuggestMain.ts @@ -32,7 +32,6 @@ export const enum TerminalShellType { Fish = 'fish', Zsh = 'zsh', PowerShell = 'pwsh', - Python = 'python', GitBash = 'gitbash', } @@ -494,7 +493,7 @@ function getEnvAsRecord(shellIntegrationEnv: ITerminalEnvironment): Record { + test('getTerminalShellType should return appropriate shell types for supported shells', () => { + strictEqual(getTerminalShellType('bash'), TerminalShellType.Bash); + strictEqual(getTerminalShellType('zsh'), TerminalShellType.Zsh); + strictEqual(getTerminalShellType('fish'), TerminalShellType.Fish); + strictEqual(getTerminalShellType('pwsh'), TerminalShellType.PowerShell); + strictEqual(getTerminalShellType('gitbash'), TerminalShellType.GitBash); + }); + + test('getTerminalShellType should return undefined for Python REPLs', () => { + strictEqual(getTerminalShellType('python'), undefined, 'Python REPLs should not receive terminal-suggest completions'); + }); + + test('getTerminalShellType should return undefined for unsupported shells', () => { + strictEqual(getTerminalShellType('unsupported'), undefined); + strictEqual(getTerminalShellType(undefined), undefined); + strictEqual(getTerminalShellType(''), undefined); + }); +}); + From 7f9d2e222b213b7516af41ec7edfe113f1869d78 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 5 Aug 2025 22:17:59 +0000 Subject: [PATCH 0020/2080] Improve debug logging for rejected shell types Co-authored-by: Tyriar <2193314+Tyriar@users.noreply.github.com> --- extensions/terminal-suggest/src/terminalSuggestMain.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/terminal-suggest/src/terminalSuggestMain.ts b/extensions/terminal-suggest/src/terminalSuggestMain.ts index 58abd474871ff..4cd66d7abc9f0 100644 --- a/extensions/terminal-suggest/src/terminalSuggestMain.ts +++ b/extensions/terminal-suggest/src/terminalSuggestMain.ts @@ -249,7 +249,7 @@ export async function activate(context: vscode.ExtensionContext) { const shellType: string | undefined = 'shell' in terminal.state ? terminal.state.shell as string : undefined; const terminalShellType = getTerminalShellType(shellType); if (!terminalShellType) { - console.debug('#terminalCompletions No shell type found for terminal'); + console.debug('#terminalCompletions No shell type found for terminal, shell:', shellType); return; } From 43a9dc0df3bc5c145264e30e96acfd905520edde Mon Sep 17 00:00:00 2001 From: Justin Chen <54879025+justschen@users.noreply.github.com> Date: Wed, 6 Aug 2025 00:47:36 -0700 Subject: [PATCH 0021/2080] chain of thought API (#259939) * cot api and rendering * working progress streaminig * streaming working * collapsable thinking block * some better styling * fix merge conflict * some cleaned up styling, removing copilot css * label updates * some vibe coded timer work * fix anotha merge conflict * thinking part with timer better * render tools inside thinking container * render markdown in container * revert and remove majority ui changes * fix some merge conflicts * some cleanup * hygiene --- src/vs/base/common/marshallingIds.ts | 1 + .../common/extensionsApiProposals.ts | 4 + .../workbench/api/common/extHost.api.impl.ts | 2 + .../api/common/extHostChatAgents2.ts | 12 +++ .../api/common/extHostLanguageModels.ts | 7 +- .../api/common/extHostTypeConverters.ts | 22 ++++- src/vs/workbench/api/common/extHostTypes.ts | 33 +++++++ .../chatThinkingContentPart.ts | 90 +++++++++++++++++++ .../contrib/chat/browser/chatListRenderer.ts | 17 +++- .../contrib/chat/browser/media/chat.css | 18 ++++ .../contrib/chat/common/chatModel.ts | 25 +++++- .../contrib/chat/common/chatService.ts | 8 ++ .../contrib/chat/common/languageModels.ts | 11 ++- ...ode.proposed.chatParticipantAdditions.d.ts | 21 ++++- .../vscode.proposed.chatProvider.d.ts | 2 +- ...de.proposed.languageModelThinkingPart.d.ts | 49 ++++++++++ 16 files changed, 313 insertions(+), 9 deletions(-) create mode 100644 src/vs/workbench/contrib/chat/browser/chatContentParts/chatThinkingContentPart.ts create mode 100644 src/vscode-dts/vscode.proposed.languageModelThinkingPart.d.ts diff --git a/src/vs/base/common/marshallingIds.ts b/src/vs/base/common/marshallingIds.ts index aec37b76d1816..4400c6246f3df 100644 --- a/src/vs/base/common/marshallingIds.ts +++ b/src/vs/base/common/marshallingIds.ts @@ -25,6 +25,7 @@ export const enum MarshalledId { ChatViewContext, LanguageModelToolResult, LanguageModelTextPart, + LanguageModelThinkingPart, LanguageModelPromptTsxPart, LanguageModelDataPart, ChatSessionContext, diff --git a/src/vs/platform/extensions/common/extensionsApiProposals.ts b/src/vs/platform/extensions/common/extensionsApiProposals.ts index 388dd4c34ff64..6292b923b14bf 100644 --- a/src/vs/platform/extensions/common/extensionsApiProposals.ts +++ b/src/vs/platform/extensions/common/extensionsApiProposals.ts @@ -251,6 +251,10 @@ const _allApiProposals = { languageModelSystem: { proposal: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.languageModelSystem.d.ts', }, + languageModelThinkingPart: { + proposal: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.languageModelThinkingPart.d.ts', + version: 1 + }, languageModelToolResultAudience: { proposal: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.languageModelToolResultAudience.d.ts', }, diff --git a/src/vs/workbench/api/common/extHost.api.impl.ts b/src/vs/workbench/api/common/extHost.api.impl.ts index 38631237c1c26..3a97d98f1eb4e 100644 --- a/src/vs/workbench/api/common/extHost.api.impl.ts +++ b/src/vs/workbench/api/common/extHost.api.impl.ts @@ -1843,6 +1843,7 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I ChatResponseAnchorPart: extHostTypes.ChatResponseAnchorPart, ChatResponseProgressPart: extHostTypes.ChatResponseProgressPart, ChatResponseProgressPart2: extHostTypes.ChatResponseProgressPart2, + ChatResponseThinkingProgressPart: extHostTypes.ChatResponseThinkingProgressPart, ChatResponseReferencePart: extHostTypes.ChatResponseReferencePart, ChatResponseReferencePart2: extHostTypes.ChatResponseReferencePart, ChatResponseCodeCitationPart: extHostTypes.ChatResponseCodeCitationPart, @@ -1880,6 +1881,7 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I LanguageModelPartAudience: extHostTypes.LanguageModelPartAudience, ToolResultAudience: extHostTypes.LanguageModelPartAudience, // back compat LanguageModelToolCallPart: extHostTypes.LanguageModelToolCallPart, + LanguageModelThinkingPart: extHostTypes.LanguageModelThinkingPart, LanguageModelError: extHostTypes.LanguageModelError, LanguageModelToolResult: extHostTypes.LanguageModelToolResult, LanguageModelToolResult2: extHostTypes.LanguageModelToolResult2, diff --git a/src/vs/workbench/api/common/extHostChatAgents2.ts b/src/vs/workbench/api/common/extHostChatAgents2.ts index 25d74d124f33b..56fe0163e45b7 100644 --- a/src/vs/workbench/api/common/extHostChatAgents2.ts +++ b/src/vs/workbench/api/common/extHostChatAgents2.ts @@ -191,6 +191,14 @@ export class ChatAgentResponseStream { _report(dto, task); return this; }, + thinkingProgress(value, id?, metadata?) { + throwIfDone(this.thinkingProgress); + checkProposedApiEnabled(that._extension, 'chatParticipantAdditions'); + const part = new extHostTypes.ChatResponseThinkingProgressPart(value, id, metadata); + const dto = typeConvert.ChatResponseThinkingProgressPart.from(part); + _report(dto); + return this; + }, warning(value) { throwIfDone(this.progress); checkProposedApiEnabled(that._extension, 'chatParticipantAdditions'); @@ -296,6 +304,7 @@ export class ChatAgentResponseStream { part instanceof extHostTypes.ChatResponseCodeCitationPart || part instanceof extHostTypes.ChatResponseMovePart || part instanceof extHostTypes.ChatResponseExtensionsPart || + part instanceof extHostTypes.ChatResponseThinkingProgressPart || part instanceof extHostTypes.ChatResponsePullRequestPart || part instanceof extHostTypes.ChatResponseProgressPart2 ) { @@ -308,6 +317,9 @@ export class ChatAgentResponseStream { } else if (part instanceof extHostTypes.ChatResponseProgressPart2) { const dto = part.task ? typeConvert.ChatTask.from(part) : typeConvert.ChatResponseProgressPart.from(part); _report(dto, part.task); + } else if (part instanceof extHostTypes.ChatResponseThinkingProgressPart) { + const dto = typeConvert.ChatResponseThinkingProgressPart.from(part); + _report(dto); } else if (part instanceof extHostTypes.ChatResponseAnchorPart) { const dto = typeConvert.ChatResponseAnchorPart.from(part); diff --git a/src/vs/workbench/api/common/extHostLanguageModels.ts b/src/vs/workbench/api/common/extHostLanguageModels.ts index 4b8863a58d028..ef8fe86f010c3 100644 --- a/src/vs/workbench/api/common/extHostLanguageModels.ts +++ b/src/vs/workbench/api/common/extHostLanguageModels.ts @@ -38,7 +38,7 @@ type LanguageModelProviderData = { readonly provider: vscode.LanguageModelChatProvider2; }; -type LMResponsePart = vscode.LanguageModelTextPart | vscode.LanguageModelToolCallPart | vscode.LanguageModelDataPart; +type LMResponsePart = vscode.LanguageModelTextPart | vscode.LanguageModelToolCallPart | vscode.LanguageModelDataPart | vscode.LanguageModelThinkingPart; class LanguageModelResponseStream { @@ -102,6 +102,9 @@ class LanguageModelResponse { let out: LMResponsePart; if (fragment.part.type === 'text') { out = new extHostTypes.LanguageModelTextPart(fragment.part.value, fragment.part.audience); + } else if (fragment.part.type === 'thinking') { + out = new extHostTypes.LanguageModelThinkingPart(fragment.part.value, fragment.part.id, fragment.part.metadata); + } else if (fragment.part.type === 'data') { out = new extHostTypes.LanguageModelDataPart(fragment.part.data.buffer, fragment.part.mimeType, fragment.part.audience); } else { @@ -301,6 +304,8 @@ export class ExtHostLanguageModels implements ExtHostLanguageModelsShape { part = { type: 'text', value: fragment.part.value, audience: fragment.part.audience }; } else if (fragment.part instanceof extHostTypes.LanguageModelDataPart) { part = { type: 'data', mimeType: fragment.part.mimeType, data: VSBuffer.wrap(fragment.part.data), audience: fragment.part.audience }; + } else if (fragment.part instanceof extHostTypes.LanguageModelThinkingPart) { + part = { type: 'thinking', value: fragment.part.value, id: fragment.part.id, metadata: fragment.part.metadata }; } if (!part) { diff --git a/src/vs/workbench/api/common/extHostTypeConverters.ts b/src/vs/workbench/api/common/extHostTypeConverters.ts index ea38c9a83ad38..31af9b3b2dd5b 100644 --- a/src/vs/workbench/api/common/extHostTypeConverters.ts +++ b/src/vs/workbench/api/common/extHostTypeConverters.ts @@ -41,7 +41,7 @@ import { IViewBadge } from '../../common/views.js'; import { IChatAgentRequest, IChatAgentResult } from '../../contrib/chat/common/chatAgents.js'; import { IChatRequestDraft } from '../../contrib/chat/common/chatEditingService.js'; import { IChatRequestVariableEntry, isImageVariableEntry } from '../../contrib/chat/common/chatVariableEntries.js'; -import { IChatAgentMarkdownContentWithVulnerability, IChatCodeCitation, IChatCommandButton, IChatConfirmation, IChatContentInlineReference, IChatContentReference, IChatExtensionsContent, IChatFollowup, IChatMarkdownContent, IChatMoveMessage, IChatMultiDiffData, IChatPrepareToolInvocationPart, IChatProgressMessage, IChatPullRequestContent, IChatResponseCodeblockUriPart, IChatTaskDto, IChatTaskResult, IChatTextEdit, IChatTreeData, IChatUserActionEvent, IChatWarningMessage } from '../../contrib/chat/common/chatService.js'; +import { IChatAgentMarkdownContentWithVulnerability, IChatCodeCitation, IChatCommandButton, IChatConfirmation, IChatContentInlineReference, IChatContentReference, IChatExtensionsContent, IChatFollowup, IChatMarkdownContent, IChatMoveMessage, IChatMultiDiffData, IChatPrepareToolInvocationPart, IChatProgressMessage, IChatPullRequestContent, IChatResponseCodeblockUriPart, IChatTaskDto, IChatTaskResult, IChatTextEdit, IChatThinkingPart, IChatTreeData, IChatUserActionEvent, IChatWarningMessage } from '../../contrib/chat/common/chatService.js'; import { IToolResult, IToolResultInputOutputDetails, IToolResultOutputDetails, ToolDataSource } from '../../contrib/chat/common/languageModelToolsService.js'; import * as chatProvider from '../../contrib/chat/common/languageModels.js'; import { IChatMessageDataPart, IChatResponseDataPart, IChatResponsePromptTsxPart, IChatResponseTextPart } from '../../contrib/chat/common/languageModels.js'; @@ -2699,6 +2699,20 @@ export namespace ChatResponseProgressPart { } } +export namespace ChatResponseThinkingProgressPart { + export function from(part: vscode.ChatResponseThinkingProgressPart): Dto { + return { + kind: 'thinking', + value: part.value, + id: part.id, + metadata: part.metadata + }; + } + export function to(part: Dto): vscode.ChatResponseThinkingProgressPart { + return new types.ChatResponseThinkingProgressPart(part.value); + } +} + export namespace ChatResponseWarningPart { export function from(part: vscode.ChatResponseWarningPart): Dto { return { @@ -2999,6 +3013,8 @@ export namespace ChatResponsePart { return ChatResponseReferencePart.from(part); } else if (part instanceof types.ChatResponseProgressPart) { return ChatResponseProgressPart.from(part); + } else if (part instanceof types.ChatResponseThinkingProgressPart) { + return ChatResponseThinkingProgressPart.from(part); } else if (part instanceof types.ChatResponseFileTreePart) { return ChatResponseFilesPart.from(part); } else if (part instanceof types.ChatResponseMultiDiffPart) { @@ -3260,7 +3276,9 @@ export namespace ChatAgentResult { if (value.$mid === MarshalledId.LanguageModelToolResult) { return new types.LanguageModelToolResult(cloneAndChange(value.content, reviveMetadata)); } else if (value.$mid === MarshalledId.LanguageModelTextPart) { - return new types.LanguageModelTextPart(value.value, value.audience); + return new types.LanguageModelTextPart(value.value); + } else if (value.$mid === MarshalledId.LanguageModelThinkingPart) { + return new types.LanguageModelThinkingPart(value.value, value.id, value.metadata); } else if (value.$mid === MarshalledId.LanguageModelPromptTsxPart) { return new types.LanguageModelPromptTsxPart(value.value); } diff --git a/src/vs/workbench/api/common/extHostTypes.ts b/src/vs/workbench/api/common/extHostTypes.ts index c7fcd0f512875..328e184142a9f 100644 --- a/src/vs/workbench/api/common/extHostTypes.ts +++ b/src/vs/workbench/api/common/extHostTypes.ts @@ -4648,6 +4648,17 @@ export class ChatResponseProgressPart2 { } } +export class ChatResponseThinkingProgressPart { + value: string; + id?: string; + metadata?: string; + constructor(value: string, id?: string, metadata?: string) { + this.value = value; + this.id = id; + this.metadata = metadata; + } +} + export class ChatResponseWarningPart { value: vscode.MarkdownString; constructor(value: string | vscode.MarkdownString) { @@ -5096,6 +5107,28 @@ export enum ChatImageMimeType { BMP = 'image/bmp', } +export class LanguageModelThinkingPart implements vscode.LanguageModelThinkingPart { + value: string; + id?: string; + metadata?: string; + + constructor(value: string, id?: string, metadata?: string) { + this.value = value; + this.id = id; + this.metadata = metadata; + } + + toJSON() { + return { + $mid: MarshalledId.LanguageModelThinkingPart, + value: this.value, + id: this.id, + metadata: this.metadata, + }; + } +} + + export class LanguageModelPromptTsxPart { value: unknown; diff --git a/src/vs/workbench/contrib/chat/browser/chatContentParts/chatThinkingContentPart.ts b/src/vs/workbench/contrib/chat/browser/chatContentParts/chatThinkingContentPart.ts new file mode 100644 index 0000000000000..e856ff3976887 --- /dev/null +++ b/src/vs/workbench/contrib/chat/browser/chatContentParts/chatThinkingContentPart.ts @@ -0,0 +1,90 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { $, clearNode } from '../../../../../base/browser/dom.js'; +import { Emitter } from '../../../../../base/common/event.js'; +import { Disposable } from '../../../../../base/common/lifecycle.js'; +import { IChatThinkingPart } from '../../common/chatService.js'; +import { IChatContentPartRenderContext, IChatContentPart } from './chatContentParts.js'; +import { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js'; +import { MarkdownString } from '../../../../../base/common/htmlContent.js'; +import { MarkdownRenderer, IMarkdownRenderResult } from '../../../../../editor/browser/widget/markdownRenderer/browser/markdownRenderer.js'; + +export class ChatThinkingContentPart extends Disposable implements IChatContentPart { + readonly domNode: HTMLElement; + public readonly codeblocks: undefined; + public readonly codeblocksPartId: undefined; + + private readonly _onDidChangeHeight = this._register(new Emitter()); + readonly onDidChangeHeight = this._onDidChangeHeight.event; + + private currentThinkingValue: string; + private readonly renderer: MarkdownRenderer; + private textContainer!: HTMLElement; + private markdownResult: IMarkdownRenderResult | undefined; + + constructor( + content: IChatThinkingPart, + _context: IChatContentPartRenderContext, + @IInstantiationService instantiationService: IInstantiationService, + ) { + super(); + + this.renderer = instantiationService.createInstance(MarkdownRenderer, {}); + this.currentThinkingValue = this.parseContent(content.value || ''); + + this.domNode = $('.chat-thinking-box'); + this.domNode.tabIndex = 0; + this.renderContent(); + } + + private parseContent(content: string): string { + // Remove <|im_sep|>**** and similar markers + return content + .replace(/<\|im_sep\|>\*{4,}/g, '') + .replace(/<\|lim_sep\|>\*{4,}/g, '') + .trim(); + } + + private renderContent(): void { + this.textContainer = $('.chat-thinking-text.markdown-content'); + this.domNode.appendChild(this.textContainer); + + if (this.currentThinkingValue) { + this.renderMarkdown(this.currentThinkingValue); + } + } + + private renderMarkdown(content: string): void { + if (this.markdownResult) { + this.markdownResult.dispose(); + this.markdownResult = undefined; + } + + const cleanedContent = this.parseContent(content); + if (!cleanedContent) { + return; + } + + clearNode(this.textContainer); + this.markdownResult = this.renderer.render(new MarkdownString(cleanedContent)); + this.textContainer.appendChild(this.markdownResult.element); + } + + hasSameContent(other: any): boolean { + if (other.kind !== 'thinking') { + return false; + } + return true; + } + + override dispose(): void { + if (this.markdownResult) { + this.markdownResult.dispose(); + this.markdownResult = undefined; + } + super.dispose(); + } +} diff --git a/src/vs/workbench/contrib/chat/browser/chatListRenderer.ts b/src/vs/workbench/contrib/chat/browser/chatListRenderer.ts index 8e230a0d26e0e..a48e9c0e5e357 100644 --- a/src/vs/workbench/contrib/chat/browser/chatListRenderer.ts +++ b/src/vs/workbench/contrib/chat/browser/chatListRenderer.ts @@ -49,7 +49,7 @@ import { IChatAgentMetadata } from '../common/chatAgents.js'; import { ChatContextKeys } from '../common/chatContextKeys.js'; import { IChatTextEditGroup } from '../common/chatModel.js'; import { chatSubcommandLeader } from '../common/chatParserTypes.js'; -import { ChatAgentVoteDirection, ChatAgentVoteDownReason, ChatErrorLevel, IChatChangesSummary, IChatConfirmation, IChatContentReference, IChatElicitationRequest, IChatExtensionsContent, IChatFollowup, IChatMarkdownContent, IChatPullRequestContent, IChatMultiDiffData, IChatTask, IChatTaskSerialized, IChatToolInvocation, IChatToolInvocationSerialized, IChatTreeData, IChatUndoStop } from '../common/chatService.js'; +import { ChatAgentVoteDirection, ChatAgentVoteDownReason, ChatErrorLevel, IChatChangesSummary, IChatConfirmation, IChatContentReference, IChatElicitationRequest, IChatExtensionsContent, IChatFollowup, IChatMarkdownContent, IChatPullRequestContent, IChatMultiDiffData, IChatTask, IChatTaskSerialized, IChatToolInvocation, IChatToolInvocationSerialized, IChatTreeData, IChatUndoStop, IChatThinkingPart } from '../common/chatService.js'; import { IChatChangesSummaryPart, IChatCodeCitations, IChatErrorDetailsPart, IChatReferences, IChatRendererContent, IChatRequestViewModel, IChatResponseViewModel, IChatViewModel, IChatWorkingProgress, isRequestVM, isResponseVM } from '../common/chatViewModel.js'; import { getNWords } from '../common/chatWordCounter.js'; import { CodeBlockModelCollection } from '../common/codeBlockModelCollection.js'; @@ -86,6 +86,7 @@ import { alert } from '../../../../base/browser/ui/aria/aria.js'; import { CodiconActionViewItem } from '../../notebook/browser/view/cellParts/cellActionView.js'; import { ChatPullRequestContentPart } from './chatContentParts/chatPullRequestContentPart.js'; import { ChatCheckpointFileChangesSummaryContentPart } from './chatContentParts/chatChangesSummaryPart.js'; +import { ChatThinkingContentPart } from './chatContentParts/chatThinkingContentPart.js'; const $ = dom.$; @@ -1144,6 +1145,8 @@ export class ChatListItemRenderer extends Disposable implements ITreeRenderer { this.updateItemHeight(templateData); })); diff --git a/src/vs/workbench/contrib/chat/browser/media/chat.css b/src/vs/workbench/contrib/chat/browser/media/chat.css index 687d559d88e12..64de3b9de2c00 100644 --- a/src/vs/workbench/contrib/chat/browser/media/chat.css +++ b/src/vs/workbench/contrib/chat/browser/media/chat.css @@ -2466,3 +2466,21 @@ have to be updated for changes to the rules above, or to support more deeply nes color: var(--vscode-foreground); flex-grow: 1; } + + +.interactive-session .interactive-response .chat-thinking-box { + border: 1px solid var(--vscode-panel-border); + border-radius: 4px; + padding: 0px 8px; + margin: 4px 0; + background-color: var(--vscode-editor-background); + + .chat-thinking-text { + font-size: inherit; + line-height: inherit; + display: flex; + align-items: flex-start; + } +} + + diff --git a/src/vs/workbench/contrib/chat/common/chatModel.ts b/src/vs/workbench/contrib/chat/common/chatModel.ts index 4870d88544703..df82c1fb21d8d 100644 --- a/src/vs/workbench/contrib/chat/common/chatModel.ts +++ b/src/vs/workbench/contrib/chat/common/chatModel.ts @@ -26,7 +26,7 @@ import { CellUri, ICellEditOperation } from '../../notebook/common/notebookCommo import { IChatAgentCommand, IChatAgentData, IChatAgentResult, IChatAgentService, reviveSerializedAgent } from './chatAgents.js'; import { IChatEditingService, IChatEditingSession } from './chatEditingService.js'; import { ChatRequestTextPart, IParsedChatRequest, reviveParsedChatRequest } from './chatParserTypes.js'; -import { ChatAgentVoteDirection, ChatAgentVoteDownReason, IChatAgentMarkdownContentWithVulnerability, IChatCodeCitation, IChatClearToPreviousToolInvocation, IChatCommandButton, IChatConfirmation, IChatContentInlineReference, IChatContentReference, IChatEditingSessionAction, IChatElicitationRequest, IChatExtensionsContent, IChatFollowup, IChatLocationData, IChatMarkdownContent, IChatMultiDiffData, IChatNotebookEdit, IChatPrepareToolInvocationPart, IChatProgress, IChatProgressMessage, IChatPullRequestContent, IChatResponseCodeblockUriPart, IChatResponseProgressFileTreeData, IChatTask, IChatTaskSerialized, IChatTextEdit, IChatToolInvocation, IChatToolInvocationSerialized, IChatTreeData, IChatUndoStop, IChatUsedContext, IChatWarningMessage, isIUsedContext, ChatResponseClearToPreviousToolInvocationReason } from './chatService.js'; +import { ChatAgentVoteDirection, ChatAgentVoteDownReason, IChatAgentMarkdownContentWithVulnerability, IChatCodeCitation, IChatClearToPreviousToolInvocation, IChatCommandButton, IChatConfirmation, IChatContentInlineReference, IChatContentReference, IChatEditingSessionAction, IChatElicitationRequest, IChatExtensionsContent, IChatFollowup, IChatLocationData, IChatMarkdownContent, IChatMultiDiffData, IChatNotebookEdit, IChatPrepareToolInvocationPart, IChatProgress, IChatProgressMessage, IChatPullRequestContent, IChatResponseCodeblockUriPart, IChatResponseProgressFileTreeData, IChatTask, IChatTaskSerialized, IChatTextEdit, IChatThinkingPart, IChatToolInvocation, IChatToolInvocationSerialized, IChatTreeData, IChatUndoStop, IChatUsedContext, IChatWarningMessage, isIUsedContext, ChatResponseClearToPreviousToolInvocationReason } from './chatService.js'; import { IChatRequestVariableEntry } from './chatVariableEntries.js'; import { ChatAgentLocation, ChatModeKind } from './constants.js'; @@ -118,6 +118,7 @@ export type IChatProgressHistoryResponseContent = | IChatNotebookEditGroup | IChatConfirmation | IChatExtensionsContent + | IChatThinkingPart | IChatPullRequestContent; /** @@ -365,6 +366,7 @@ class AbstractResponse implements IResponse { case 'undoStop': case 'prepareToolInvocation': case 'elicitation': + case 'thinking': case 'multiDiffData': // Ignore continue; @@ -518,6 +520,20 @@ export class Response extends AbstractResponse implements IDisposable { this._responseParts[idx] = { ...lastResponsePart, content: appendMarkdownString(lastResponsePart.content, progress.content) }; } this._updateRepr(quiet); + } else if (progress.kind === 'thinking') { + + // TODO: @justschen merge thinking and markdown handling + const lastResponsePart = this._responseParts + .filter(p => p.kind !== 'textEditGroup') + .at(-1); + + if (!lastResponsePart || lastResponsePart.kind !== 'thinking' || !canMergeMarkdownStrings(new MarkdownString(lastResponsePart.value), new MarkdownString(progress.value))) { + this._responseParts.push(progress); + } else { + const idx = this._responseParts.indexOf(lastResponsePart); + this._responseParts[idx] = { ...lastResponsePart, value: appendMarkdownString(new MarkdownString(lastResponsePart.value), new MarkdownString(progress.value)).value }; + } + this._updateRepr(quiet); } else if (progress.kind === 'textEdit' || progress.kind === 'notebookEdit') { // If the progress.uri is a cell Uri, its possible its part of the inline chat. // Old approach of notebook inline chat would not start and end with notebook Uri, so we need to check for old approach. @@ -1736,6 +1752,13 @@ export class ChatModel extends Disposable implements IChatModel { return item.treeData; } else if (item.kind === 'markdownContent') { return item.content; + } else if (item.kind === 'thinking') { + return { + kind: 'thinking', + value: item.value, + id: item.id, + metadata: item.metadata + }; } else { return item as any; // TODO } diff --git a/src/vs/workbench/contrib/chat/common/chatService.ts b/src/vs/workbench/contrib/chat/common/chatService.ts index aa0562a4d7258..abb2bf72a6842 100644 --- a/src/vs/workbench/contrib/chat/common/chatService.ts +++ b/src/vs/workbench/contrib/chat/common/chatService.ts @@ -271,6 +271,13 @@ export interface IChatElicitationRequest { onDidRequestHide: Event; } +export interface IChatThinkingPart { + kind: 'thinking'; + value: string; + id?: string; + metadata?: string; +} + export interface IChatTerminalToolInvocationData { kind: 'terminal'; commandLine: { @@ -391,6 +398,7 @@ export type IChatProgress = | IChatPullRequestContent | IChatUndoStop | IChatPrepareToolInvocationPart + | IChatThinkingPart | IChatTaskSerialized | IChatElicitationRequest; diff --git a/src/vs/workbench/contrib/chat/common/languageModels.ts b/src/vs/workbench/contrib/chat/common/languageModels.ts index 9c6ba1ba5f0c3..d467831428462 100644 --- a/src/vs/workbench/contrib/chat/common/languageModels.ts +++ b/src/vs/workbench/contrib/chat/common/languageModels.ts @@ -123,6 +123,13 @@ export interface IChatResponseToolUsePart { parameters: any; } +export interface IChatResponseThinkingPart { + type: 'thinking'; + value: string; + id?: string; + metadata?: string; +} + export interface IChatResponsePullRequestPart { type: 'pullRequest'; uri: URI; @@ -132,9 +139,9 @@ export interface IChatResponsePullRequestPart { linkTag: string; } -export type IExtendedChatResponsePart = IChatResponsePullRequestPart; +export type IChatResponsePart = IChatResponseTextPart | IChatResponseToolUsePart | IChatResponseDataPart | IChatResponseThinkingPart; -export type IChatResponsePart = IChatResponseTextPart | IChatResponseToolUsePart | IChatResponseDataPart; +export type IExtendedChatResponsePart = IChatResponsePullRequestPart; export interface IChatResponseFragment { index: number; diff --git a/src/vscode-dts/vscode.proposed.chatParticipantAdditions.d.ts b/src/vscode-dts/vscode.proposed.chatParticipantAdditions.d.ts index 12495cc005944..9e16ed6c3460c 100644 --- a/src/vscode-dts/vscode.proposed.chatParticipantAdditions.d.ts +++ b/src/vscode-dts/vscode.proposed.chatParticipantAdditions.d.ts @@ -149,7 +149,7 @@ declare module 'vscode' { constructor(value: ChatResponseDiffEntry[], title: string); } - export type ExtendedChatResponsePart = ChatResponsePart | ChatResponseTextEditPart | ChatResponseNotebookEditPart | ChatResponseConfirmationPart | ChatResponseCodeCitationPart | ChatResponseReferencePart2 | ChatResponseMovePart | ChatResponseExtensionsPart | ChatResponsePullRequestPart | ChatPrepareToolInvocationPart | ChatToolInvocationPart | ChatResponseMultiDiffPart; + export type ExtendedChatResponsePart = ChatResponsePart | ChatResponseTextEditPart | ChatResponseNotebookEditPart | ChatResponseConfirmationPart | ChatResponseCodeCitationPart | ChatResponseReferencePart2 | ChatResponseMovePart | ChatResponseExtensionsPart | ChatResponsePullRequestPart | ChatPrepareToolInvocationPart | ChatToolInvocationPart | ChatResponseMultiDiffPart | ChatResponseThinkingProgressPart; export class ChatResponseWarningPart { value: MarkdownString; constructor(value: string | MarkdownString); @@ -161,6 +161,23 @@ declare module 'vscode' { constructor(value: string, task?: (progress: Progress) => Thenable); } + /** + * A specialized progress part for displaying thinking/reasoning steps. + */ + export class ChatResponseThinkingProgressPart extends ChatResponseProgressPart { + value: string; + id?: string; + metadata?: string; + task?: (progress: Progress) => Thenable; + + /** + * Creates a new thinking progress part. + * @param value An initial progress message + * @param task A task that will emit thinking parts during its execution + */ + constructor(value: string, id?: string, metadata?: string, task?: (progress: Progress) => Thenable); + } + export class ChatResponseReferencePart2 { /** * The reference target. @@ -256,6 +273,8 @@ declare module 'vscode' { */ progress(value: string, task?: (progress: Progress) => Thenable): void; + thinkingProgress(value: string, id?: string, metadata?: string): void; + textEdit(target: Uri, edits: TextEdit | TextEdit[]): void; textEdit(target: Uri, isDone: true): void; diff --git a/src/vscode-dts/vscode.proposed.chatProvider.d.ts b/src/vscode-dts/vscode.proposed.chatProvider.d.ts index c6a58e900e9a1..ac0d1b921435c 100644 --- a/src/vscode-dts/vscode.proposed.chatProvider.d.ts +++ b/src/vscode-dts/vscode.proposed.chatProvider.d.ts @@ -139,6 +139,6 @@ declare module 'vscode' { export interface ChatResponseFragment2 { index: number; - part: LanguageModelTextPart | LanguageModelToolCallPart | LanguageModelDataPart; + part: LanguageModelTextPart | LanguageModelToolCallPart | LanguageModelDataPart | LanguageModelThinkingPart; } } diff --git a/src/vscode-dts/vscode.proposed.languageModelThinkingPart.d.ts b/src/vscode-dts/vscode.proposed.languageModelThinkingPart.d.ts new file mode 100644 index 0000000000000..6abd7ec0ac801 --- /dev/null +++ b/src/vscode-dts/vscode.proposed.languageModelThinkingPart.d.ts @@ -0,0 +1,49 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +// version: 1 + +declare module 'vscode' { + + /** + * A language model response part containing thinking/reasoning content. + * Thinking tokens represent the model's internal reasoning process that + * typically streams before the final response. + */ + export class LanguageModelThinkingPart { + /** + * The thinking/reasoning text content. + */ + value: string; + + /** + * Optional unique identifier for this thinking sequence. + * This ID is typically provided at the end of the thinking stream + * and can be used for retrieval or reference purposes. + */ + id?: string; + + /** + * Optional metadata associated with this thinking sequence. + */ + metadata?: string; + + /** + * Construct a thinking part with the given content. + * @param value The thinking text content. + * @param id Optional unique identifier for this thinking sequence. + * @param metadata Optional metadata associated with this thinking sequence. + */ + constructor(value: string, id?: string, metadata?: string); + } + + export interface LanguageModelChatResponse { + /** + * An async iterable that is a stream of text, thinking, and tool-call parts forming the overall response. + * This includes {@link LanguageModelThinkingPart} which represents the model's internal reasoning process. + */ + stream: AsyncIterable; + } +} From f82c69148e45fb4b36f14ca079f0ca954bd68370 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Wed, 6 Aug 2025 01:11:12 -0700 Subject: [PATCH 0022/2080] Fix leak warning for `DynamicCssRules` --- src/vs/editor/browser/editorDom.ts | 15 ++++++++++----- .../contrib/colorPicker/browser/colorDetector.ts | 2 +- .../inlayHints/browser/inlayHintsController.ts | 2 +- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/vs/editor/browser/editorDom.ts b/src/vs/editor/browser/editorDom.ts index 5a3627d87913f..c2d7f868d6341 100644 --- a/src/vs/editor/browser/editorDom.ts +++ b/src/vs/editor/browser/editorDom.ts @@ -8,7 +8,7 @@ import * as domStylesheetsJs from '../../base/browser/domStylesheets.js'; import { GlobalPointerMoveMonitor } from '../../base/browser/globalPointerMoveMonitor.js'; import { StandardMouseEvent } from '../../base/browser/mouseEvent.js'; import { RunOnceScheduler } from '../../base/common/async.js'; -import { Disposable, DisposableStore, IDisposable } from '../../base/common/lifecycle.js'; +import { Disposable, DisposableMap, DisposableStore, IDisposable } from '../../base/common/lifecycle.js'; import { ICodeEditor } from './editorBrowser.js'; import { asCssVariable } from '../../platform/theme/common/colorRegistry.js'; import { ThemeColor } from '../../base/common/themables.js'; @@ -280,12 +280,18 @@ export class DynamicCssRules { private static _idPool = 0; private readonly _instanceId = ++DynamicCssRules._idPool; private _counter = 0; - private readonly _rules = new Map(); + private readonly _rules = new DisposableMap(); // We delay garbage collection so that hanging rules can be reused. private readonly _garbageCollectionScheduler = new RunOnceScheduler(() => this.garbageCollect(), 1000); - constructor(private readonly _editor: ICodeEditor) { + constructor( + private readonly _editor: ICodeEditor + ) { } + + dispose(): void { + this._rules.dispose(); + this._garbageCollectionScheduler.dispose(); } public createClassNameRef(options: CssProperties): ClassNameReference { @@ -324,8 +330,7 @@ export class DynamicCssRules { private garbageCollect() { for (const rule of this._rules.values()) { if (!rule.hasReferences()) { - this._rules.delete(rule.key); - rule.dispose(); + this._rules.deleteAndDispose(rule.key); } } } diff --git a/src/vs/editor/contrib/colorPicker/browser/colorDetector.ts b/src/vs/editor/contrib/colorPicker/browser/colorDetector.ts index b5a12f416cd6a..18b746a057891 100644 --- a/src/vs/editor/contrib/colorPicker/browser/colorDetector.ts +++ b/src/vs/editor/contrib/colorPicker/browser/colorDetector.ts @@ -57,7 +57,7 @@ export class ColorDetector extends Disposable implements IEditorContribution { ) { super(); this._colorDecoratorIds = this._editor.createDecorationsCollection(); - this._ruleFactory = new DynamicCssRules(this._editor); + this._ruleFactory = this._register(new DynamicCssRules(this._editor)); this._debounceInformation = languageFeatureDebounceService.for(_languageFeaturesService.colorProvider, 'Document Colors', { min: ColorDetector.RECOMPUTE_TIME }); this._register(_editor.onDidChangeModel(() => { this._isColorDecoratorsEnabled = this.isEnabled(); diff --git a/src/vs/editor/contrib/inlayHints/browser/inlayHintsController.ts b/src/vs/editor/contrib/inlayHints/browser/inlayHintsController.ts index 0bcc5b3fe677f..8970884331e50 100644 --- a/src/vs/editor/contrib/inlayHints/browser/inlayHintsController.ts +++ b/src/vs/editor/contrib/inlayHints/browser/inlayHintsController.ts @@ -126,7 +126,7 @@ export class InlayHintsController implements IEditorContribution { @INotificationService private readonly _notificationService: INotificationService, @IInstantiationService private readonly _instaService: IInstantiationService, ) { - this._ruleFactory = new DynamicCssRules(this._editor); + this._ruleFactory = this._disposables.add(new DynamicCssRules(this._editor)); this._debounceInfo = _featureDebounce.for(_languageFeaturesService.inlayHintsProvider, 'InlayHint', { min: 25 }); this._disposables.add(_languageFeaturesService.inlayHintsProvider.onDidChange(() => this._update())); this._disposables.add(_editor.onDidChangeModel(() => this._update())); From ea4e0a76a114454b113f8e31b0ffaa99f4d68ad8 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Wed, 6 Aug 2025 01:14:16 -0700 Subject: [PATCH 0023/2080] Fix invalidModel warning when resolving code lenses after cancellation --- src/vs/workbench/api/browser/mainThreadLanguageFeatures.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/vs/workbench/api/browser/mainThreadLanguageFeatures.ts b/src/vs/workbench/api/browser/mainThreadLanguageFeatures.ts index c9564509b2652..a3837f7222d40 100644 --- a/src/vs/workbench/api/browser/mainThreadLanguageFeatures.ts +++ b/src/vs/workbench/api/browser/mainThreadLanguageFeatures.ts @@ -190,9 +190,10 @@ export class MainThreadLanguageFeatures extends Disposable implements MainThread }, resolveCodeLens: async (model: ITextModel, codeLens: languages.CodeLens, token: CancellationToken): Promise => { const result = await this._proxy.$resolveCodeLens(handle, codeLens, token); - if (!result) { + if (!result || token.isCancellationRequested) { return undefined; } + return { ...result, range: model.validateRange(result.range), From 2d3592b0aaa5418e56b13c55573b1c32c559114b Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Wed, 6 Aug 2025 01:18:05 -0700 Subject: [PATCH 0024/2080] Adding some readonly in code lens While trying to figure out #226936, I found it's very useful to know that these arrays are not being modified unexpectedly --- src/vs/editor/common/languages.ts | 2 +- .../contrib/codelens/browser/codelens.ts | 4 +-- .../codelens/browser/codelensController.ts | 2 +- .../codelens/browser/codelensWidget.ts | 15 +++++----- src/vs/monaco.d.ts | 2 +- .../mcp/browser/mcpLanguageFeatures.ts | 29 ++++++++++--------- 6 files changed, 27 insertions(+), 27 deletions(-) diff --git a/src/vs/editor/common/languages.ts b/src/vs/editor/common/languages.ts index fbef3053f2994..8794e5e7b9714 100644 --- a/src/vs/editor/common/languages.ts +++ b/src/vs/editor/common/languages.ts @@ -2284,7 +2284,7 @@ export interface CodeLens { } export interface CodeLensList { - lenses: CodeLens[]; + readonly lenses: readonly CodeLens[]; dispose?(): void; } diff --git a/src/vs/editor/contrib/codelens/browser/codelens.ts b/src/vs/editor/contrib/codelens/browser/codelens.ts index 78aa18c690fc1..c91c30920439a 100644 --- a/src/vs/editor/contrib/codelens/browser/codelens.ts +++ b/src/vs/editor/contrib/codelens/browser/codelens.ts @@ -16,8 +16,8 @@ import { LanguageFeatureRegistry } from '../../../common/languageFeatureRegistry import { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js'; export interface CodeLensItem { - symbol: CodeLens; - provider: CodeLensProvider; + readonly symbol: CodeLens; + readonly provider: CodeLensProvider; } export class CodeLensModel { diff --git a/src/vs/editor/contrib/codelens/browser/codelensController.ts b/src/vs/editor/contrib/codelens/browser/codelensController.ts index bd54868ea99ff..e804bacfd403b 100644 --- a/src/vs/editor/contrib/codelens/browser/codelensController.ts +++ b/src/vs/editor/contrib/codelens/browser/codelensController.ts @@ -384,7 +384,7 @@ export class CodeLensContribution implements IEditorContribution { return; } - const toResolve: CodeLensItem[][] = []; + const toResolve: Array> = []; const lenses: CodeLensWidget[] = []; this._lenses.forEach((lens) => { const request = lens.computeIfNecessary(model); diff --git a/src/vs/editor/contrib/codelens/browser/codelensWidget.ts b/src/vs/editor/contrib/codelens/browser/codelensWidget.ts index 394c333b2e521..15de22bffde0b 100644 --- a/src/vs/editor/contrib/codelens/browser/codelensWidget.ts +++ b/src/vs/editor/contrib/codelens/browser/codelensWidget.ts @@ -83,7 +83,7 @@ class CodeLensContentWidget implements IContentWidget { this._domNode.className = `codelens-decoration`; } - withCommands(lenses: Array, animate: boolean): void { + withCommands(lenses: ReadonlyArray, animate: boolean): void { this._commands.clear(); const children: HTMLElement[] = []; @@ -196,11 +196,11 @@ export class CodeLensWidget { private _contentWidget?: CodeLensContentWidget; private _decorationIds: string[]; - private _data: CodeLensItem[]; + private _data: readonly CodeLensItem[]; private _isDisposed: boolean = false; constructor( - data: CodeLensItem[], + data: readonly CodeLensItem[], editor: IActiveCodeEditor, helper: CodeLensHelper, viewZoneChangeAccessor: IViewZoneChangeAccessor, @@ -276,7 +276,7 @@ export class CodeLensWidget { }); } - updateCodeLensSymbols(data: CodeLensItem[], helper: CodeLensHelper): void { + updateCodeLensSymbols(data: readonly CodeLensItem[], helper: CodeLensHelper): void { this._decorationIds.forEach(helper.removeDecoration, helper); this._decorationIds = []; this._data = data; @@ -296,7 +296,7 @@ export class CodeLensWidget { } } - computeIfNecessary(model: ITextModel): CodeLensItem[] | null { + computeIfNecessary(model: ITextModel): readonly CodeLensItem[] | null { if (!this._viewZone.isVisible()) { return null; } @@ -311,8 +311,7 @@ export class CodeLensWidget { return this._data; } - updateCommands(symbols: Array): void { - + updateCommands(symbols: ReadonlyArray): void { this._createContentWidgetIfNecessary(); this._contentWidget!.withCommands(symbols, true); @@ -352,7 +351,7 @@ export class CodeLensWidget { } } - getItems(): CodeLensItem[] { + getItems(): readonly CodeLensItem[] { return this._data; } } diff --git a/src/vs/monaco.d.ts b/src/vs/monaco.d.ts index 26d546c484f57..c11a47beda996 100644 --- a/src/vs/monaco.d.ts +++ b/src/vs/monaco.d.ts @@ -8385,7 +8385,7 @@ declare namespace monaco.languages { } export interface CodeLensList { - lenses: CodeLens[]; + readonly lenses: readonly CodeLens[]; dispose?(): void; } diff --git a/src/vs/workbench/contrib/mcp/browser/mcpLanguageFeatures.ts b/src/vs/workbench/contrib/mcp/browser/mcpLanguageFeatures.ts index dd1a64373bc2b..05b9eccfead7b 100644 --- a/src/vs/workbench/contrib/mcp/browser/mcpLanguageFeatures.ts +++ b/src/vs/workbench/contrib/mcp/browser/mcpLanguageFeatures.ts @@ -11,7 +11,7 @@ import { Disposable, DisposableStore, dispose, IDisposable, MutableDisposable } import { IObservable } from '../../../../base/common/observable.js'; import { isEqual } from '../../../../base/common/resources.js'; import { Range } from '../../../../editor/common/core/range.js'; -import { CodeLensList, CodeLensProvider, InlayHint, InlayHintList } from '../../../../editor/common/languages.js'; +import { CodeLens, CodeLensList, CodeLensProvider, InlayHint, InlayHintList } from '../../../../editor/common/languages.js'; import { ITextModel } from '../../../../editor/common/model.js'; import { ILanguageFeaturesService } from '../../../../editor/common/services/languageFeatures.js'; import { localize } from '../../../../nls.js'; @@ -151,7 +151,8 @@ export class McpLanguageFeatures extends Disposable implements IWorkbenchContrib } const store = new DisposableStore(); - const lenses: CodeLensList = { lenses: [], dispose: () => store.dispose() }; + const lenses: CodeLens[] = []; + const lensList: CodeLensList = { lenses, dispose: () => store.dispose() }; const read = (observable: IObservable): T => { store.add(Event.fromObservableLight(observable)(onDidChangeCodeLens)); return observable.get(); @@ -159,7 +160,7 @@ export class McpLanguageFeatures extends Disposable implements IWorkbenchContrib const collection = read(this._mcpRegistry.collections).find(c => isEqual(c.presentation?.origin, model.uri)); if (!collection) { - return lenses; + return lensList; } const mcpServers = read(this._mcpService.servers).filter(s => s.collection.id === collection.id); @@ -179,7 +180,7 @@ export class McpLanguageFeatures extends Disposable implements IWorkbenchContrib const state = read(server.connectionState).state; switch (state) { case McpConnectionState.Kind.Error: - lenses.lenses.push({ + lenses.push({ range, command: { id: McpCommandIds.ShowOutput, @@ -195,7 +196,7 @@ export class McpLanguageFeatures extends Disposable implements IWorkbenchContrib }, }); if (canDebug) { - lenses.lenses.push({ + lenses.push({ range, command: { id: McpCommandIds.RestartServer, @@ -206,7 +207,7 @@ export class McpLanguageFeatures extends Disposable implements IWorkbenchContrib } break; case McpConnectionState.Kind.Starting: - lenses.lenses.push({ + lenses.push({ range, command: { id: McpCommandIds.ShowOutput, @@ -223,7 +224,7 @@ export class McpLanguageFeatures extends Disposable implements IWorkbenchContrib }); break; case McpConnectionState.Kind.Running: - lenses.lenses.push({ + lenses.push({ range, command: { id: McpCommandIds.ShowOutput, @@ -246,7 +247,7 @@ export class McpLanguageFeatures extends Disposable implements IWorkbenchContrib }, }); if (canDebug) { - lenses.lenses.push({ + lenses.push({ range, command: { id: McpCommandIds.RestartServer, @@ -257,7 +258,7 @@ export class McpLanguageFeatures extends Disposable implements IWorkbenchContrib } break; case McpConnectionState.Kind.Stopped: - lenses.lenses.push({ + lenses.push({ range, command: { id: McpCommandIds.StartServer, @@ -266,7 +267,7 @@ export class McpLanguageFeatures extends Disposable implements IWorkbenchContrib }, }); if (canDebug) { - lenses.lenses.push({ + lenses.push({ range, command: { id: McpCommandIds.StartServer, @@ -281,7 +282,7 @@ export class McpLanguageFeatures extends Disposable implements IWorkbenchContrib if (state !== McpConnectionState.Kind.Error) { const toolCount = read(server.tools).length; if (toolCount) { - lenses.lenses.push({ + lenses.push({ range, command: { id: '', @@ -293,7 +294,7 @@ export class McpLanguageFeatures extends Disposable implements IWorkbenchContrib const promptCount = read(server.prompts).length; if (promptCount) { - lenses.lenses.push({ + lenses.push({ range, command: { id: McpCommandIds.StartPromptForServer, @@ -303,7 +304,7 @@ export class McpLanguageFeatures extends Disposable implements IWorkbenchContrib }); } - lenses.lenses.push({ + lenses.push({ range, command: { id: McpCommandIds.ServerOptions, @@ -314,7 +315,7 @@ export class McpLanguageFeatures extends Disposable implements IWorkbenchContrib } } - return lenses; + return lensList; } private async _provideInlayHints(model: ITextModel, range: Range): Promise { From 53fa43adfa8a0a12d36d21566f417ca26d4c3cd5 Mon Sep 17 00:00:00 2001 From: Robo Date: Wed, 6 Aug 2025 17:44:45 +0900 Subject: [PATCH 0025/2080] ci: fix build (#259996) --- build/azure-pipelines/win32/product-build-win32.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/build/azure-pipelines/win32/product-build-win32.yml b/build/azure-pipelines/win32/product-build-win32.yml index a74935a08af5e..5eeab9025cb85 100644 --- a/build/azure-pipelines/win32/product-build-win32.yml +++ b/build/azure-pipelines/win32/product-build-win32.yml @@ -276,12 +276,12 @@ steps: - powershell: | . build/azure-pipelines/win32/exec.ps1 $ErrorActionPreference = "Stop" - mkdir -Force .build/codesign-cpuprofile + mkdir -Force .build/node-cpuprofile exec { npx deemon --detach --wait -- -- npx zx build/azure-pipelines/win32/codesign.js } env: SYSTEM_ACCESSTOKEN: $(System.AccessToken) NODE_DEBUG: "net,child_process" - NODE_OPTIONS: "--report-filename=stdout --report-uncaught-exception --report-on-fatalerror --cpu-prof --cpu-prof-dir=.build/codesign-cpuprofile" + NODE_OPTIONS: "--report-filename=stdout --report-uncaught-exception --report-on-fatalerror --cpu-prof --cpu-prof-dir=.build/node-cpuprofile" displayName: ✍️ Codesign - ${{ if or(eq(parameters.VSCODE_RUN_ELECTRON_TESTS, true), eq(parameters.VSCODE_RUN_BROWSER_TESTS, true), eq(parameters.VSCODE_RUN_REMOTE_TESTS, true)) }}: @@ -306,7 +306,7 @@ steps: condition: succeededOrFailed() env: NODE_DEBUG: "net,child_process" - NODE_OPTIONS: "--report-filename=stdout --report-uncaught-exception --report-on-fatalerror --cpu-prof --cpu-prof-dir=.build/codesign-cpuprofile" + NODE_OPTIONS: "--report-filename=stdout --report-uncaught-exception --report-on-fatalerror --cpu-prof --cpu-prof-dir=.build/node-cpuprofile" displayName: "✍️ Post-job: Codesign" - powershell: | @@ -340,8 +340,8 @@ steps: - task: 1ES.PublishPipelineArtifact@1 inputs: - targetPath: .build/codesign-cpuprofile - artifactName: node-cpuprofile + targetPath: .build/node-cpuprofile + artifactName: node-cpuprofile-$(VSCODE_ARCH) sbomEnabled: false displayName: Publish Codesign cpu profile From 62fc056092096816390273ef65216077b24d9549 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Wed, 6 Aug 2025 08:45:41 +0000 Subject: [PATCH 0026/2080] Prevent labels in secondary sidebar when activity bar is at bottom position (#259989) * Initial plan * Implement core fix for secondary sidebar icon display Co-authored-by: bpasero <900690+bpasero@users.noreply.github.com> * Apply simpler fix to prevent labels when activity bar is at bottom Co-authored-by: bpasero <900690+bpasero@users.noreply.github.com> * :lipstick: --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: bpasero <900690+bpasero@users.noreply.github.com> Co-authored-by: Benjamin Pasero --- src/vs/workbench/browser/parts/auxiliarybar/auxiliaryBarPart.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vs/workbench/browser/parts/auxiliarybar/auxiliaryBarPart.ts b/src/vs/workbench/browser/parts/auxiliarybar/auxiliaryBarPart.ts index f62ba06d8b1ca..cca1343bed135 100644 --- a/src/vs/workbench/browser/parts/auxiliarybar/auxiliaryBarPart.ts +++ b/src/vs/workbench/browser/parts/auxiliarybar/auxiliaryBarPart.ts @@ -137,7 +137,7 @@ export class AuxiliaryBarPart extends AbstractPaneCompositePart { private resolveConfiguration(): IAuxiliaryBarPartConfiguration { const position = this.configurationService.getValue(LayoutSettings.ACTIVITY_BAR_LOCATION); - const canShowLabels = position !== ActivityBarPosition.TOP; // otherwise labels would repeat vertically + const canShowLabels = position !== ActivityBarPosition.TOP && position !== ActivityBarPosition.BOTTOM; // use same style as activity bar in this case const showLabels = canShowLabels && this.configurationService.getValue('workbench.secondarySideBar.showLabels') !== false; return { position, canShowLabels, showLabels }; From b439b9bbea2ccd0c85325d1d89150b4c900b3e01 Mon Sep 17 00:00:00 2001 From: Tyler James Leonhardt <2644648+TylerLeonhardt@users.noreply.github.com> Date: Wed, 6 Aug 2025 01:46:00 -0700 Subject: [PATCH 0027/2080] Add logging to NativeWebContentExtractorService (#259997) --- .../electron-main/webContentExtractorService.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/vs/platform/webContentExtractor/electron-main/webContentExtractorService.ts b/src/vs/platform/webContentExtractor/electron-main/webContentExtractorService.ts index af054374ee5a6..63147f551081e 100644 --- a/src/vs/platform/webContentExtractor/electron-main/webContentExtractorService.ts +++ b/src/vs/platform/webContentExtractor/electron-main/webContentExtractorService.ts @@ -9,6 +9,7 @@ import { URI } from '../../../base/common/uri.js'; import { AXNode, convertAXTreeToMarkdown } from './cdpAccessibilityDomain.js'; import { Limiter } from '../../../base/common/async.js'; import { ResourceMap } from '../../../base/common/map.js'; +import { ILogService } from '../../log/common/log.js'; interface CacheEntry { content: string; @@ -24,27 +25,34 @@ export class NativeWebContentExtractorService implements IWebContentExtractorSer private _webContentsCache = new ResourceMap(); private readonly _cacheDuration = 24 * 60 * 60 * 1000; // 1 day in milliseconds + constructor(@ILogService private readonly _logger: ILogService) { } + private isExpired(entry: CacheEntry): boolean { return Date.now() - entry.timestamp > this._cacheDuration; } extract(uris: URI[]): Promise { if (uris.length === 0) { + this._logger.info('[NativeWebContentExtractorService] No URIs provided for extraction'); return Promise.resolve([]); } + this._logger.info(`[NativeWebContentExtractorService] Extracting content from ${uris.length} URIs`); return Promise.all(uris.map((uri) => this._limiter.queue(() => this.doExtract(uri)))); } async doExtract(uri: URI): Promise { const cached = this._webContentsCache.get(uri); if (cached) { + this._logger.info(`[NativeWebContentExtractorService] Found cached content for ${uri}`); if (this.isExpired(cached)) { + this._logger.info(`[NativeWebContentExtractorService] Cache expired for ${uri}, removing entry...`); this._webContentsCache.delete(uri); } else { return cached.content; } } + this._logger.info(`[NativeWebContentExtractorService] Extracting content from ${uri}...`); const win = new BrowserWindow({ width: 800, height: 600, @@ -61,10 +69,12 @@ export class NativeWebContentExtractorService implements IWebContentExtractorSer win.webContents.debugger.attach('1.1'); const result: { nodes: AXNode[] } = await win.webContents.debugger.sendCommand('Accessibility.getFullAXTree'); const str = convertAXTreeToMarkdown(uri, result.nodes); + this._logger.info(`[NativeWebContentExtractorService] Content extracted from ${uri}`); + this._logger.trace(`[NativeWebContentExtractorService] Extracted content: ${str}`); this._webContentsCache.set(uri, { content: str, timestamp: Date.now() }); return str; } catch (err) { - console.log(err); + this._logger.error(`[NativeWebContentExtractorService] Error extracting content from ${uri}: ${err}`); } finally { win.destroy(); } From 4bd127c2f64fefd3a6b577ab553d2bd087fbc06a Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Wed, 6 Aug 2025 10:47:46 +0200 Subject: [PATCH 0028/2080] Cancel button clashes with dialog message (fix #258529) (#260002) * Cancel button clashes with dialog message (fix #258529) * :lipstick: --- .../contrib/chat/electron-browser/chat.contribution.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/vs/workbench/contrib/chat/electron-browser/chat.contribution.ts b/src/vs/workbench/contrib/chat/electron-browser/chat.contribution.ts index d445d8f1674b9..9579793a07d25 100644 --- a/src/vs/workbench/contrib/chat/electron-browser/chat.contribution.ts +++ b/src/vs/workbench/contrib/chat/electron-browser/chat.contribution.ts @@ -169,25 +169,27 @@ class ChatLifecycleHandler extends Disposable { showChatView(this.viewsService); let message: string; + let detail: string; switch (reason) { case ShutdownReason.CLOSE: message = localize('closeTheWindow.message', "A chat request is in progress. Are you sure you want to close the window?"); + detail = localize('closeTheWindow.detail', "The chat request will stop if you close the window."); break; case ShutdownReason.LOAD: message = localize('changeWorkspace.message', "A chat request is in progress. Are you sure you want to change the workspace?"); + detail = localize('changeWorkspace.detail', "The chat request will stop if you change the workspace."); break; case ShutdownReason.RELOAD: message = localize('reloadTheWindow.message', "A chat request is in progress. Are you sure you want to reload the window?"); + detail = localize('reloadTheWindow.detail', "The chat request will stop if you reload the window."); break; default: message = isMacintosh ? localize('quit.message', "A chat request is in progress. Are you sure you want to quit?") : localize('exit.message', "A chat request is in progress. Are you sure you want to exit?"); + detail = isMacintosh ? localize('quit.detail', "The chat request will stop if you quit.") : localize('exit.detail', "The chat request will stop if you exit."); break; } - const result = await this.dialogService.confirm({ - message, - detail: localize('quit.detail', "The chat request will be cancelled if you continue.") - }); + const result = await this.dialogService.confirm({ message, detail }); return !result.confirmed; } From 9dc842c750aa11144e68a29a34e72f0f7944acfc Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Wed, 6 Aug 2025 10:48:17 +0200 Subject: [PATCH 0029/2080] Extension host debug action follow up (fix #259819) (#260006) --- .../electron-main/nativeHostMainService.ts | 36 ++++++++----------- 1 file changed, 15 insertions(+), 21 deletions(-) diff --git a/src/vs/platform/native/electron-main/nativeHostMainService.ts b/src/vs/platform/native/electron-main/nativeHostMainService.ts index 339bd4701d54b..dd6c9a4618cf3 100644 --- a/src/vs/platform/native/electron-main/nativeHostMainService.ts +++ b/src/vs/platform/native/electron-main/nativeHostMainService.ts @@ -1007,13 +1007,21 @@ export class NativeHostMainService extends Disposable implements INativeHostMain if (!parentWindow) { return; } - const options = this.instantiationService.invokeFunction(defaultBrowserWindowOptions, defaultWindowState(), { forceNativeTitlebar: true, hideBecauseShadowWindow: false }); - options.backgroundColor = undefined; - const devToolsWindow = new BrowserWindow(options); - devToolsWindow.setMenuBarVisibility(false); - devToolsWindow.loadURL(url); - devToolsWindow.once('ready-to-show', () => devToolsWindow.show()); + this.openChildWindow(parentWindow.win, url); + } + + private openChildWindow(parentWindow: BrowserWindow | null, url: string): BrowserWindow { + const options = this.instantiationService.invokeFunction(defaultBrowserWindowOptions, defaultWindowState(), { forceNativeTitlebar: true }); + options.parent = parentWindow ?? undefined; + + const window = new BrowserWindow(options); + window.setMenuBarVisibility(false); + window.loadURL(url); + + window.once('ready-to-show', () => window.show()); + + return window; } async openGPUInfoWindow(windowId: number | undefined): Promise { @@ -1023,23 +1031,9 @@ export class NativeHostMainService extends Disposable implements INativeHostMain } if (typeof this.gpuInfoWindowId !== 'number') { - const options = this.instantiationService.invokeFunction(defaultBrowserWindowOptions, defaultWindowState(), { forceNativeTitlebar: true }); - options.backgroundColor = undefined; - - const gpuInfoWindow = new BrowserWindow(options); - gpuInfoWindow.setMenuBarVisibility(false); - gpuInfoWindow.loadURL('chrome://gpu'); - - gpuInfoWindow.once('ready-to-show', () => gpuInfoWindow.show()); + const gpuInfoWindow = this.openChildWindow(parentWindow.win, 'chrome://gpu'); gpuInfoWindow.once('close', () => this.gpuInfoWindowId = undefined); - parentWindow.win?.on('close', () => { - if (this.gpuInfoWindowId) { - BrowserWindow.fromId(this.gpuInfoWindowId)?.close(); - this.gpuInfoWindowId = undefined; - } - }); - this.gpuInfoWindowId = gpuInfoWindow.id; } From 0f1467e9f8d3e83587fa4432754072cffab3f39b Mon Sep 17 00:00:00 2001 From: Alexandru Dima Date: Wed, 6 Aug 2025 10:48:50 +0200 Subject: [PATCH 0030/2080] Add `languageId` to `editTelemetry.reportInlineEditArc` (#260009) --- src/vs/editor/common/textModelEditSource.ts | 6 ++++-- .../browser/model/inlineCompletionsModel.ts | 8 +++++--- .../editTelemetry/browser/telemetry/arcTelemetrySender.ts | 3 +++ 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/vs/editor/common/textModelEditSource.ts b/src/vs/editor/common/textModelEditSource.ts index bd7dc32f32e71..4393364d14603 100644 --- a/src/vs/editor/common/textModelEditSource.ts +++ b/src/vs/editor/common/textModelEditSource.ts @@ -104,22 +104,24 @@ export const EditSources = { chatUndoEdits: () => createEditSource({ source: 'Chat.undoEdits' } as const), chatReset: () => createEditSource({ source: 'Chat.reset' } as const), - inlineCompletionAccept(data: { nes: boolean; requestUuid: string; providerId?: ProviderId }) { + inlineCompletionAccept(data: { nes: boolean; requestUuid: string; languageId: string; providerId?: ProviderId }) { return createEditSource({ source: 'inlineCompletionAccept', $nes: data.nes, ...toProperties(data.providerId), $$requestUuid: data.requestUuid, + $$languageId: data.languageId, } as const); }, - inlineCompletionPartialAccept(data: { nes: boolean; requestUuid: string; providerId?: ProviderId; type: 'word' | 'line' }) { + inlineCompletionPartialAccept(data: { nes: boolean; requestUuid: string; languageId: string; providerId?: ProviderId; type: 'word' | 'line' }) { return createEditSource({ source: 'inlineCompletionPartialAccept', type: data.type, $nes: data.nes, ...toProperties(data.providerId), $$requestUuid: data.requestUuid, + $$languageId: data.languageId, } as const); }, diff --git a/src/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.ts b/src/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.ts index 71bc7b6dd6a6e..ed619efcb4a36 100644 --- a/src/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.ts +++ b/src/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.ts @@ -785,12 +785,13 @@ export class InlineCompletionsModel extends Disposable { public async previous(): Promise { await this._deltaSelectedInlineCompletionIndex(-1); } - private _getMetadata(completion: InlineSuggestionItem, type: 'word' | 'line' | undefined = undefined): TextModelEditSource { + private _getMetadata(completion: InlineSuggestionItem, languageId: string, type: 'word' | 'line' | undefined = undefined): TextModelEditSource { if (type) { return EditSources.inlineCompletionPartialAccept({ nes: completion.isInlineEdit, requestUuid: completion.requestUuid, providerId: completion.source.provider.providerId, + languageId, type, }); } else { @@ -798,6 +799,7 @@ export class InlineCompletionsModel extends Disposable { nes: completion.isInlineEdit, requestUuid: completion.requestUuid, providerId: completion.source.provider.providerId, + languageId }); } } @@ -830,7 +832,7 @@ export class InlineCompletionsModel extends Disposable { const mainEdit = TextReplacement.delete(completion.editRange); const additionalEdits = completion.additionalTextEdits.map(e => new TextReplacement(Range.lift(e.range), e.text ?? '')); const edit = TextEdit.fromParallelReplacementsUnsorted([mainEdit, ...additionalEdits]); - editor.edit(edit, this._getMetadata(completion)); + editor.edit(edit, this._getMetadata(completion, this.textModel.getLanguageId())); editor.setPosition(completion.snippetInfo.range.getStartPosition(), 'inlineCompletionAccept'); SnippetController2.get(editor)?.insert(completion.snippetInfo.snippet, { undoStopBefore: false }); @@ -849,7 +851,7 @@ export class InlineCompletionsModel extends Disposable { const additionalEdits = completion.additionalTextEdits.map(e => new TextReplacement(Range.lift(e.range), e.text ?? '')); const edit = TextEdit.fromParallelReplacementsUnsorted([...edits, ...additionalEdits]); - editor.edit(edit, this._getMetadata(completion)); + editor.edit(edit, this._getMetadata(completion, this.textModel.getLanguageId())); if (completion.displayLocation === undefined) { // do not move the cursor when the completion is displayed in a different location diff --git a/src/vs/workbench/contrib/editTelemetry/browser/telemetry/arcTelemetrySender.ts b/src/vs/workbench/contrib/editTelemetry/browser/telemetry/arcTelemetrySender.ts index b29ace895e0b9..9678b8ad50fda 100644 --- a/src/vs/workbench/contrib/editTelemetry/browser/telemetry/arcTelemetrySender.ts +++ b/src/vs/workbench/contrib/editTelemetry/browser/telemetry/arcTelemetrySender.ts @@ -47,6 +47,7 @@ export class InlineEditArcTelemetrySender extends Disposable { extensionId: string; extensionVersion: string; opportunityId: string; + languageId: string; didBranchChange: number; timeDelayMs: number; arc: number; @@ -62,6 +63,7 @@ export class InlineEditArcTelemetrySender extends Disposable { extensionId: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'The extension id (copilot or copilot-chat); which provided this inline completion.' }; extensionVersion: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'The version of the extension.' }; opportunityId: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'Unique identifier for an opportunity to show an inline completion or NES.' }; + languageId: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'The language id of the document.' }; didBranchChange: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'Indicates if the branch changed in the meantime. If the branch changed (value is 1); this event should probably be ignored.' }; timeDelayMs: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'The time delay between the user accepting the edit and measuring the survival rate.' }; @@ -75,6 +77,7 @@ export class InlineEditArcTelemetrySender extends Disposable { extensionId: data.$extensionId ?? '', extensionVersion: data.$extensionVersion ?? '', opportunityId: data.$$requestUuid ?? 'unknown', + languageId: data.$$languageId, didBranchChange: res.didBranchChange ? 1 : 0, timeDelayMs: res.timeDelayMs, arc: res.arc, From de6719ddf7766f82948c08d0627c6433fc11b53d Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Wed, 6 Aug 2025 10:51:24 +0200 Subject: [PATCH 0031/2080] editor - offer a button to show logs in case of error (#256687) (#260016) --- .../workbench/browser/parts/editor/editorPlaceholder.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/vs/workbench/browser/parts/editor/editorPlaceholder.ts b/src/vs/workbench/browser/parts/editor/editorPlaceholder.ts index 06c253a9186b2..154222be28d88 100644 --- a/src/vs/workbench/browser/parts/editor/editorPlaceholder.ts +++ b/src/vs/workbench/browser/parts/editor/editorPlaceholder.ts @@ -30,6 +30,7 @@ import { FileChangeType, FileOperationError, FileOperationResult, IFileService } import { toErrorMessage } from '../../../../base/common/errorMessage.js'; import { IDialogService } from '../../../../platform/dialogs/common/dialogs.js'; import { IEditorGroup } from '../../../services/editor/common/editorGroupsService.js'; +import { showWindowLogActionId } from '../../../services/log/common/logConstants.js'; export interface IEditorPlaceholderContents { icon: string; @@ -231,7 +232,8 @@ export class ErrorPlaceholderEditor extends EditorPlaceholder { @IThemeService themeService: IThemeService, @IStorageService storageService: IStorageService, @IFileService private readonly fileService: IFileService, - @IDialogService private readonly dialogService: IDialogService + @IDialogService private readonly dialogService: IDialogService, + @ICommandService private readonly commandService: ICommandService ) { super(ErrorPlaceholderEditor.ID, group, telemetryService, themeService, storageService); } @@ -282,6 +284,10 @@ export class ErrorPlaceholderEditor extends EditorPlaceholder { { label: localize('retry', "Try Again"), run: () => this.group.openEditor(input, { ...options, source: EditorOpenSource.USER /* explicit user gesture */ }) + }, + { + label: localize('showLogs', "Show Logs"), + run: () => this.commandService.executeCommand(showWindowLogActionId) } ]; } From 39da5aa99884f39331c8eae9f66805d01c20a0b9 Mon Sep 17 00:00:00 2001 From: Benjamin Christopher Simmonds <44439583+benibenj@users.noreply.github.com> Date: Wed, 6 Aug 2025 12:00:14 +0200 Subject: [PATCH 0032/2080] Add recent completion ID for snooze (#260019) add recent completion id for snooze --- .../services/inlineCompletionsService.ts | 31 +++++++++++++++++-- .../browser/model/inlineCompletionsModel.ts | 6 ++++ 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/src/vs/editor/browser/services/inlineCompletionsService.ts b/src/vs/editor/browser/services/inlineCompletionsService.ts index 33bb81c2e516f..a7416fcb73b31 100644 --- a/src/vs/editor/browser/services/inlineCompletionsService.ts +++ b/src/vs/editor/browser/services/inlineCompletionsService.ts @@ -41,13 +41,18 @@ export interface IInlineCompletionsService { /** * Check if inline completions are currently snoozed. - */ + */ isSnoozing(): boolean; /** * Cancel the current snooze. - */ + */ cancelSnooze(): void; + + /** + * Report an inline completion. + */ + reportNewCompletion(requestUuid: string): void; } const InlineCompletionsSnoozing = new RawContextKey('inlineCompletions.snoozed', false, localize('inlineCompletions.snoozed', "Whether inline completions are currently snoozed")); @@ -131,6 +136,17 @@ export class InlineCompletionsService extends Disposable implements IInlineCompl } } + private _lastCompletionId: string | undefined; + private _recentCompletionIds: string[] = []; + reportNewCompletion(requestUuid: string): void { + this._lastCompletionId = requestUuid; + + this._recentCompletionIds.unshift(requestUuid); + if (this._recentCompletionIds.length > 5) { + this._recentCompletionIds.pop(); + } + } + private _reportSnooze(deltaMs: number, totalMs: number): void { const deltaSeconds = Math.round(deltaMs / 1000); const totalSeconds = Math.round(totalMs / 1000); @@ -139,12 +155,21 @@ export class InlineCompletionsService extends Disposable implements IInlineCompl comment: 'Snooze duration for inline completions'; deltaSeconds: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'The duration by which the snooze has changed, in seconds.' }; totalSeconds: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'The total duration for which inline completions are snoozed, in seconds.' }; + lastCompletionId: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'The ID of the last completion.' }; + recentCompletionIds: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'The IDs of the recent completions.' }; }; type WorkspaceStatsEvent = { deltaSeconds: number; totalSeconds: number; + lastCompletionId: string | undefined; + recentCompletionIds: string[]; }; - this._telemetryService.publicLog2('inlineCompletions.snooze', { deltaSeconds, totalSeconds }); + this._telemetryService.publicLog2('inlineCompletions.snooze', { + deltaSeconds, + totalSeconds, + lastCompletionId: this._lastCompletionId, + recentCompletionIds: this._recentCompletionIds, + }); } } diff --git a/src/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.ts b/src/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.ts index ed619efcb4a36..3d36021d09a40 100644 --- a/src/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.ts +++ b/src/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.ts @@ -146,6 +146,12 @@ export class InlineCompletionsModel extends Disposable { : InlineCompletionEditorType.TextEditor; } + this._register(recomputeInitiallyAndOnChange(this.state, (s) => { + if (s && s.inlineCompletion) { + this._inlineCompletionsService.reportNewCompletion(s.inlineCompletion.requestUuid); + } + })); + this._register(recomputeInitiallyAndOnChange(this._fetchInlineCompletionsPromise)); this._register(autorun(reader => { From 731203bcde39d5f9788b66df093d6c9b24a2710e Mon Sep 17 00:00:00 2001 From: Alex Ross <38270282+alexr00@users.noreply.github.com> Date: Wed, 6 Aug 2025 12:03:11 +0200 Subject: [PATCH 0033/2080] Update grammars (#260022) --- extensions/docker/package.json | 1 - extensions/fsharp/cgmanifest.json | 2 +- .../fsharp/syntaxes/fsharp.tmLanguage.json | 27 +++++----- extensions/latex/cgmanifest.json | 2 +- .../latex/syntaxes/LaTeX.tmLanguage.json | 4 +- extensions/swift/cgmanifest.json | 2 +- .../swift/syntaxes/swift.tmLanguage.json | 52 ++++++++++++++++--- 7 files changed, 63 insertions(+), 27 deletions(-) diff --git a/extensions/docker/package.json b/extensions/docker/package.json index 9309bd51f9f8f..a9a3dfdd9bf3f 100644 --- a/extensions/docker/package.json +++ b/extensions/docker/package.json @@ -9,7 +9,6 @@ "vscode": "*" }, "scripts": { - "update-grammar": "node ../node_modules/vscode-grammar-updater/bin moby/moby contrib/syntax/textmate/Docker.tmbundle/Syntaxes/Dockerfile.tmLanguage ./syntaxes/docker.tmLanguage.json" }, "categories": ["Programming Languages"], "contributes": { diff --git a/extensions/fsharp/cgmanifest.json b/extensions/fsharp/cgmanifest.json index 75e24896d8e8c..c36d14e1d884b 100644 --- a/extensions/fsharp/cgmanifest.json +++ b/extensions/fsharp/cgmanifest.json @@ -6,7 +6,7 @@ "git": { "name": "ionide/ionide-fsgrammar", "repositoryUrl": "https://github.com/ionide/ionide-fsgrammar", - "commitHash": "c62c78404d0b2c14816aae61ac0688663a5990a3" + "commitHash": "be3c51d2c28d3aaacd89ecd067e766bebe387f89" } }, "license": "MIT", diff --git a/extensions/fsharp/syntaxes/fsharp.tmLanguage.json b/extensions/fsharp/syntaxes/fsharp.tmLanguage.json index 8ba555b77727a..97f607a6b2235 100644 --- a/extensions/fsharp/syntaxes/fsharp.tmLanguage.json +++ b/extensions/fsharp/syntaxes/fsharp.tmLanguage.json @@ -4,7 +4,7 @@ "If you want to provide a fix or improvement, please create a pull request against the original repository.", "Once accepted there, we are happy to receive an update request." ], - "version": "https://github.com/ionide/ionide-fsgrammar/commit/c62c78404d0b2c14816aae61ac0688663a5990a3", + "version": "https://github.com/ionide/ionide-fsgrammar/commit/be3c51d2c28d3aaacd89ecd067e766bebe387f89", "name": "fsharp", "scopeName": "source.fsharp", "patterns": [ @@ -525,15 +525,6 @@ }, "comments": { "patterns": [ - { - "name": "comment.literate.command.fsharp", - "match": "(\\(\\*{3}.*\\*{3}\\))", - "beginCaptures": { - "1": { - "name": "comment.block.fsharp" - } - } - }, { "name": "comment.block.markdown.fsharp", "begin": "^\\s*(\\(\\*\\*(?!\\)))((?!\\*\\)).)*$", @@ -543,7 +534,7 @@ "name": "comment.block.fsharp" } }, - "endCaptures": { + "whileCaptures": { "1": { "name": "comment.block.fsharp" } @@ -807,13 +798,16 @@ ] }, { - "match": "(:)\\s*([?[:alpha:]0-9'`^._ ]+)", + "match": "(:)\\s*([?[:alpha:]0-9'`^._ ]+)(\\|\\s*(null))?", "captures": { "1": { "name": "keyword.symbol.fsharp" }, "2": { "name": "entity.name.type.fsharp" + }, + "4": { + "name": "entity.name.type.fsharp" } } }, @@ -936,8 +930,8 @@ "patterns": [ { "name": "binding.fsharp", - "begin": "\\b(let mutable|static let mutable|static let|let inline|let|and|member val|member inline|static member inline|static member val|static member|default|member|override|let!)(\\s+rec|mutable)?(\\s+\\[\\<.*\\>\\])?\\s*(private|internal|public)?\\s+(\\[[^-=]*\\]|[_[:alpha:]]([_[:alpha:]0-9\\._]+)*|``[_[:alpha:]]([_[:alpha:]0-9\\._`\\s]+|(?<=,)\\s)*)?", - "end": "\\s*((with\\b)|(=|\\n+=|(?<=\\=)))", + "begin": "\\b(let mutable|static let mutable|static let|let inline|let|and inline|and|member val|member inline|static member inline|static member val|static member|default|member|override|let!)(\\s+rec|mutable)?(\\s+\\[\\<.*\\>\\])?\\s*(private|internal|public)?\\s+(\\[[^-=]*\\]|[_[:alpha:]]([_[:alpha:]0-9\\._]+)*|``[_[:alpha:]]([_[:alpha:]0-9\\._`\\s]+|(?<=,)\\s)*)?", + "end": "\\s*((with inline|with)\\b|(=|\\n+=|(?<=\\=)))", "beginCaptures": { "1": { "name": "keyword.fsharp" @@ -1522,7 +1516,7 @@ "match": "(\\(|\\))" }, { - "match": "(\\?{0,1})([[:alpha:]0-9'`^._]+|``[[:alpha:]0-9'`^:,._ ]+``)\\s*(:{0,1})(\\s*([?[:alpha:]0-9'`<>._ ]+)){0,1}", + "match": "(\\?{0,1})([[:alpha:]0-9'`^._]+|``[[:alpha:]0-9'`^:,._ ]+``)\\s*(:{0,1})(\\s*([?[:alpha:]0-9'`<>._ ]+)){0,1}(\\|\\s*(null))?", "captures": { "1": { "name": "keyword.symbol.fsharp" @@ -1535,6 +1529,9 @@ }, "4": { "name": "entity.name.type.fsharp" + }, + "7": { + "name": "entity.name.type.fsharp" } } }, diff --git a/extensions/latex/cgmanifest.json b/extensions/latex/cgmanifest.json index 1e0ee670a79e8..89ba7c1b8b508 100644 --- a/extensions/latex/cgmanifest.json +++ b/extensions/latex/cgmanifest.json @@ -6,7 +6,7 @@ "git": { "name": "jlelong/vscode-latex-basics", "repositoryUrl": "https://github.com/jlelong/vscode-latex-basics", - "commitHash": "6bd99800f7b2cbd0e36cecb56fe1936da5affadb" + "commitHash": "e5d3d4b46731ed37119a5296c12eee7669284eeb" } }, "license": "MIT", diff --git a/extensions/latex/syntaxes/LaTeX.tmLanguage.json b/extensions/latex/syntaxes/LaTeX.tmLanguage.json index 97cd292c65f90..42780b6505662 100644 --- a/extensions/latex/syntaxes/LaTeX.tmLanguage.json +++ b/extensions/latex/syntaxes/LaTeX.tmLanguage.json @@ -4,7 +4,7 @@ "If you want to provide a fix or improvement, please create a pull request against the original repository.", "Once accepted there, we are happy to receive an update request." ], - "version": "https://github.com/jlelong/vscode-latex-basics/commit/eb0d146b16839076a61c3fdec85d6f80d9a94c8c", + "version": "https://github.com/jlelong/vscode-latex-basics/commit/e5d3d4b46731ed37119a5296c12eee7669284eeb", "name": "LaTeX", "scopeName": "text.tex.latex", "patterns": [ @@ -2891,7 +2891,7 @@ "name": "meta.function.end-document.latex" }, { - "begin": "(?:\\s*)((\\\\)begin)(\\{)((?:\\+?array|equation|(?:IEEE)?eqnarray|multline|align|aligned|alignat|alignedat|flalign|flaligned|flalignat|split|gather|gathered|\\+?cases|(?:display)?math|\\+?[a-zA-Z]*matrix|[pbBvV]?NiceMatrix|[pbBvV]?NiceArray|(?:(?:arg)?(?:mini|maxi)))(?:\\*|!)?)(\\})(\\s*\\n)?", + "begin": "(?:\\s*)((\\\\)begin)(\\{)((?:\\+?array|equation|(?:IEEE|sub)?eqnarray|multline|align|aligned|alignat|alignedat|flalign|flaligned|flalignat|split|gather|gathered|\\+?cases|(?:display)?math|\\+?[a-zA-Z]*matrix|[pbBvV]?NiceMatrix|[pbBvV]?NiceArray|(?:(?:arg)?(?:mini|maxi)))(?:\\*|!)?)(\\})(\\s*\\n)?", "captures": { "1": { "name": "support.function.be.latex" diff --git a/extensions/swift/cgmanifest.json b/extensions/swift/cgmanifest.json index d40d7c7e6e5e9..a9cdafc3b0327 100644 --- a/extensions/swift/cgmanifest.json +++ b/extensions/swift/cgmanifest.json @@ -6,7 +6,7 @@ "git": { "name": "jtbandes/swift-tmlanguage", "repositoryUrl": "https://github.com/jtbandes/swift-tmlanguage", - "commitHash": "b8d2889b4af1d8bad41578317a6adade642555a3" + "commitHash": "0897d8939a82ddcf6533e9f318e5942b1265416b" } }, "license": "MIT" diff --git a/extensions/swift/syntaxes/swift.tmLanguage.json b/extensions/swift/syntaxes/swift.tmLanguage.json index 7d6694cbead32..1d6b18c44edcd 100644 --- a/extensions/swift/syntaxes/swift.tmLanguage.json +++ b/extensions/swift/syntaxes/swift.tmLanguage.json @@ -4,7 +4,7 @@ "If you want to provide a fix or improvement, please create a pull request against the original repository.", "Once accepted there, we are happy to receive an update request." ], - "version": "https://github.com/jtbandes/swift-tmlanguage/commit/b8d2889b4af1d8bad41578317a6adade642555a3", + "version": "https://github.com/jtbandes/swift-tmlanguage/commit/0897d8939a82ddcf6533e9f318e5942b1265416b", "name": "Swift", "scopeName": "source.swift", "comment": "See swift.tmbundle/grammar-test.swift for test cases.", @@ -1158,6 +1158,10 @@ } }, "patterns": [ + { + "match": "\\bsending\\b", + "name": "storage.modifier.swift" + }, { "include": "#declarations-available-types" } @@ -1228,6 +1232,9 @@ } }, "patterns": [ + { + "include": "#literals-numeric" + }, { "include": "#declarations-available-types" } @@ -1255,6 +1262,10 @@ "comment": "Swift 2: constraints inside the generic param list", "include": "#declarations-generic-where-clause" }, + { + "name": "keyword.other.declaration-specifier.swift", + "match": "\\blet\\b" + }, { "name": "keyword.control.loop.swift", "match": "\\beach\\b" @@ -1469,6 +1480,9 @@ "begin": "\\G", "end": "(?!\\G)$|(?=[={}]|(?!\\G)\\bwhere\\b)", "patterns": [ + { + "include": "#attributes" + }, { "include": "#comments" }, @@ -1500,6 +1514,9 @@ "begin": ",\\s*", "end": "(?!\\G)(?!//|/\\*)|(?=[,={}]|(?!\\G)\\bwhere\\b)", "patterns": [ + { + "include": "#attributes" + }, { "include": "#comments" }, @@ -1736,6 +1753,10 @@ "begin": ":\\s*(?!\\s)", "end": "(?=[,)])", "patterns": [ + { + "match": "\\bsending\\b", + "name": "storage.modifier.swift" + }, { "include": "#declarations-available-types" }, @@ -2807,7 +2828,7 @@ }, { "name": "keyword.control.transfer.swift", - "match": "(?\n (?> # no backtracking, avoids issues with negative lookbehind at end\n (?:\n \\\\Q\n (?:(?!\\\\E)(?!/\\2).)*+\n (?:\\\\E\n # A quoted sequence may not have a closing E, in which case it extends to the end of the regex\n | (?(3)|(?(\\{(?:\\g<-1>|(?!{).*?)\\}))\n (?:\\[(?!\\d)\\w+\\])?\n [X<>]?\n \\)\n | (?\\[ (?:\\\\. | [^\\[\\]] | \\g)+ \\])\n | \\(\\g?+\\)\n | (?:(?!/\\2)[^()\\[\\\\])+ # any character (until end)\n )+\n )\n)?+\n# may end with a space only if it is an extended literal or contains only a single escaped space\n(?(3)|(?(5)(?\n (?> # no backtracking, avoids issues with negative lookbehind at end\n (?:\n \\\\Q\n (?:(?!\\\\E)(?!/).)*+\n # A quoted sequence may not have a closing E, in which case it extends to the end of the regex\n (?:\\\\E | (?=/))\n | \\\\.\n | \\(\\?\\#[^)]*\\)\n | \\(\\?\n # InterpolatedCallout\n (?>\n {[^{].*?}\n | {{[^{].*?}}\n | {{{[^{].*?}}}\n | {{{{[^{].*?}}}}\n | {{{{{[^{].*?}}}}}\n | {{{{{{.+?}}}}}}\n )\n (?:\\[(?!\\d)\\w+\\])?\n [X<>]?\n \\)\n # Allow nested character classes to a limited depth\n | \\[(?:\n \\\\. |\n [^\\[\\]\\\\] |\n \\[(?:\n \\\\. |\n [^\\[\\]\\\\] |\n \\[(?:\n \\\\. |\n [^\\[\\]\\\\] |\n \\[(?:\n \\\\. |\n [^\\[\\]\\\\]\n )+\\]\n )+\\]\n )+\\]\n )+\\]\n | \\(\\g?+\\)\n | (?:(?!/)[^()\\[\\\\])+ # any character (until end)\n )+\n )\n )?+\n (?\n (?> # no backtracking, avoids issues with negative lookbehind at end\n (?:\n \\\\Q\n (?:(?!\\\\E)(?!/\\2).)*+\n # A quoted sequence may not have a closing E, in which case it extends to the end of the regex\n (?:\\\\E | (?=/\\2))\n | \\\\.\n | \\(\\?\\#[^)]*\\)\n | \\(\\?\n # InterpolatedCallout\n (?>\n {[^{].*?}\n | {{[^{].*?}}\n | {{{[^{].*?}}}\n | {{{{[^{].*?}}}}\n | {{{{{[^{].*?}}}}}\n | {{{{{{.+?}}}}}}\n )\n (?:\\[(?!\\d)\\w+\\])?\n [X<>]?\n \\)\n # Allow nested character classes to a limited depth\n | \\[(?:\n \\\\. |\n [^\\[\\]\\\\] |\n \\[(?:\n \\\\. |\n [^\\[\\]\\\\] |\n \\[(?:\n \\\\. |\n [^\\[\\]\\\\] |\n \\[(?:\n \\\\. |\n [^\\[\\]\\\\]\n )+\\]\n )+\\]\n )+\\]\n )+\\]\n | \\(\\g?+\\)\n | (?:(?!/\\2)[^()\\[\\\\])+ # any character (until end)\n )+\n )\n)?+\n(/\\2) # (4)\n| \\#+/.+(\\n)", + "captures": { + "0": { + "patterns": [ + { + "include": "#literals-regular-expression-literal-regex-guts" + } + ] }, - "9": { + "1": { + "name": "punctuation.definition.string.begin.regexp.swift" + }, + "4": { + "name": "punctuation.definition.string.end.regexp.swift" + }, + "5": { "name": "invalid.illegal.returns-not-allowed.regexp" } } From 29a1041bcee0e42195daf1017683775865a8c8f9 Mon Sep 17 00:00:00 2001 From: Alex Ross <38270282+alexr00@users.noreply.github.com> Date: Wed, 6 Aug 2025 12:58:59 +0200 Subject: [PATCH 0034/2080] Switch to auto for tree sitter exp settings (#260024) Part of #257059 --- .../editor/common/config/editorConfigurationSchema.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/vs/editor/common/config/editorConfigurationSchema.ts b/src/vs/editor/common/config/editorConfigurationSchema.ts index 0c512f0414217..2382202a61eb4 100644 --- a/src/vs/editor/common/config/editorConfigurationSchema.ts +++ b/src/vs/editor/common/config/editorConfigurationSchema.ts @@ -117,7 +117,7 @@ const editorConfiguration: IConfigurationNode = { markdownDescription: nls.localize('editor.experimental.treeSitterTelemetry', "Controls whether tree sitter parsing should be turned on and telemetry collected. Setting `editor.experimental.preferTreeSitter` for specific languages will take precedence."), tags: ['experimental'], experiment: { - mode: 'startup' + mode: 'auto' } }, 'editor.experimental.preferTreeSitter.css': { @@ -126,7 +126,7 @@ const editorConfiguration: IConfigurationNode = { markdownDescription: nls.localize('editor.experimental.preferTreeSitter.css', "Controls whether tree sitter parsing should be turned on for css. This will take precedence over `editor.experimental.treeSitterTelemetry` for css."), tags: ['experimental'], experiment: { - mode: 'startup' + mode: 'auto' } }, 'editor.experimental.preferTreeSitter.typescript': { @@ -135,7 +135,7 @@ const editorConfiguration: IConfigurationNode = { markdownDescription: nls.localize('editor.experimental.preferTreeSitter.typescript', "Controls whether tree sitter parsing should be turned on for typescript. This will take precedence over `editor.experimental.treeSitterTelemetry` for typescript."), tags: ['experimental'], experiment: { - mode: 'startup' + mode: 'auto' } }, 'editor.experimental.preferTreeSitter.ini': { @@ -144,7 +144,7 @@ const editorConfiguration: IConfigurationNode = { markdownDescription: nls.localize('editor.experimental.preferTreeSitter.ini', "Controls whether tree sitter parsing should be turned on for ini. This will take precedence over `editor.experimental.treeSitterTelemetry` for ini."), tags: ['experimental'], experiment: { - mode: 'startup' + mode: 'auto' } }, 'editor.experimental.preferTreeSitter.regex': { @@ -153,7 +153,7 @@ const editorConfiguration: IConfigurationNode = { markdownDescription: nls.localize('editor.experimental.preferTreeSitter.regex', "Controls whether tree sitter parsing should be turned on for regex. This will take precedence over `editor.experimental.treeSitterTelemetry` for regex."), tags: ['experimental'], experiment: { - mode: 'startup' + mode: 'auto' } }, 'editor.language.brackets': { From 946f961c6be0657a38a70bf6a4f5e64457a2528d Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Wed, 6 Aug 2025 13:02:32 +0200 Subject: [PATCH 0035/2080] Revert "fix https://github.com/microsoft/vscode-copilot/issues/18978" (#259999) Revert "fix https://github.com/microsoft/vscode-copilot/issues/18978 (#252567)" This reverts commit 9e65768dfbff0c48276f3e8607c1cdaad3d30808. --- src/vs/workbench/contrib/chat/browser/media/chat.css | 1 - 1 file changed, 1 deletion(-) diff --git a/src/vs/workbench/contrib/chat/browser/media/chat.css b/src/vs/workbench/contrib/chat/browser/media/chat.css index 64de3b9de2c00..072c90b40ed5f 100644 --- a/src/vs/workbench/contrib/chat/browser/media/chat.css +++ b/src/vs/workbench/contrib/chat/browser/media/chat.css @@ -1075,7 +1075,6 @@ have to be updated for changes to the rules above, or to support more deeply nes .interactive-session .chat-input-toolbars .monaco-action-bar .actions-container { display: flex; gap: 4px; - overflow: hidden; } .interactive-session .chat-input-toolbars .codicon-debug-stop { From cee559ce6d0644300259571a079b083f5f008f37 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Wed, 6 Aug 2025 04:48:52 -0700 Subject: [PATCH 0036/2080] Copilot quota bar uses incorrect theme colors (fix #256443) (#259965) * Initial plan * Fix gauge color definitions and CSS usage to match semantic meaning Co-authored-by: bpasero <900690+bpasero@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: bpasero <900690+bpasero@users.noreply.github.com> --- .../contrib/chat/browser/chatStatus.ts | 36 +++++++++---------- .../contrib/chat/browser/media/chatStatus.css | 12 +++---- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/src/vs/workbench/contrib/chat/browser/chatStatus.ts b/src/vs/workbench/contrib/chat/browser/chatStatus.ts index b6c34cf3b7774..c0b06147ce9ef 100644 --- a/src/vs/workbench/contrib/chat/browser/chatStatus.ts +++ b/src/vs/workbench/contrib/chat/browser/chatStatus.ts @@ -44,19 +44,19 @@ import { Codicon } from '../../../../base/common/codicons.js'; import { URI } from '../../../../base/common/uri.js'; import { IInlineCompletionsService } from '../../../../editor/browser/services/inlineCompletionsService.js'; -const gaugeBackground = registerColor('gauge.background', { +const gaugeForeground = registerColor('gauge.foreground', { dark: inputValidationInfoBorder, light: inputValidationInfoBorder, hcDark: contrastBorder, hcLight: contrastBorder -}, localize('gaugeBackground', "Gauge background color.")); +}, localize('gaugeForeground', "Gauge foreground color.")); -registerColor('gauge.foreground', { - dark: transparent(gaugeBackground, 0.3), - light: transparent(gaugeBackground, 0.3), +registerColor('gauge.background', { + dark: transparent(gaugeForeground, 0.3), + light: transparent(gaugeForeground, 0.3), hcDark: Color.white, hcLight: Color.white -}, localize('gaugeForeground', "Gauge foreground color.")); +}, localize('gaugeBackground', "Gauge background color.")); registerColor('gauge.border', { dark: null, @@ -65,33 +65,33 @@ registerColor('gauge.border', { hcLight: contrastBorder }, localize('gaugeBorder', "Gauge border color.")); -const gaugeWarningBackground = registerColor('gauge.warningBackground', { +const gaugeWarningForeground = registerColor('gauge.warningForeground', { dark: inputValidationWarningBorder, light: inputValidationWarningBorder, hcDark: contrastBorder, hcLight: contrastBorder -}, localize('gaugeWarningBackground', "Gauge warning background color.")); +}, localize('gaugeWarningForeground', "Gauge warning foreground color.")); -registerColor('gauge.warningForeground', { - dark: transparent(gaugeWarningBackground, 0.3), - light: transparent(gaugeWarningBackground, 0.3), +registerColor('gauge.warningBackground', { + dark: transparent(gaugeWarningForeground, 0.3), + light: transparent(gaugeWarningForeground, 0.3), hcDark: Color.white, hcLight: Color.white -}, localize('gaugeWarningForeground', "Gauge warning foreground color.")); +}, localize('gaugeWarningBackground', "Gauge warning background color.")); -const gaugeErrorBackground = registerColor('gauge.errorBackground', { +const gaugeErrorForeground = registerColor('gauge.errorForeground', { dark: inputValidationErrorBorder, light: inputValidationErrorBorder, hcDark: contrastBorder, hcLight: contrastBorder -}, localize('gaugeErrorBackground', "Gauge error background color.")); +}, localize('gaugeErrorForeground', "Gauge error foreground color.")); -registerColor('gauge.errorForeground', { - dark: transparent(gaugeErrorBackground, 0.3), - light: transparent(gaugeErrorBackground, 0.3), +registerColor('gauge.errorBackground', { + dark: transparent(gaugeErrorForeground, 0.3), + light: transparent(gaugeErrorForeground, 0.3), hcDark: Color.white, hcLight: Color.white -}, localize('gaugeErrorForeground', "Gauge error foreground color.")); +}, localize('gaugeErrorBackground', "Gauge error background color.")); //#endregion diff --git a/src/vs/workbench/contrib/chat/browser/media/chatStatus.css b/src/vs/workbench/contrib/chat/browser/media/chatStatus.css index d47c9b79565c7..05d5035fa47d6 100644 --- a/src/vs/workbench/contrib/chat/browser/media/chatStatus.css +++ b/src/vs/workbench/contrib/chat/browser/media/chatStatus.css @@ -66,7 +66,7 @@ .chat-status-bar-entry-tooltip .quota-indicator .quota-bar { width: 100%; height: 4px; - background-color: var(--vscode-gauge-foreground); + background-color: var(--vscode-gauge-background); border-radius: 4px; border: 1px solid var(--vscode-gauge-border); margin: 4px 0; @@ -74,24 +74,24 @@ .chat-status-bar-entry-tooltip .quota-indicator .quota-bar .quota-bit { height: 100%; - background-color: var(--vscode-gauge-background); + background-color: var(--vscode-gauge-foreground); border-radius: 4px; } .chat-status-bar-entry-tooltip .quota-indicator.warning .quota-bar { - background-color: var(--vscode-gauge-warningForeground); + background-color: var(--vscode-gauge-warningBackground); } .chat-status-bar-entry-tooltip .quota-indicator.warning .quota-bar .quota-bit { - background-color: var(--vscode-gauge-warningBackground); + background-color: var(--vscode-gauge-warningForeground); } .chat-status-bar-entry-tooltip .quota-indicator.error .quota-bar { - background-color: var(--vscode-gauge-errorForeground); + background-color: var(--vscode-gauge-errorBackground); } .chat-status-bar-entry-tooltip .quota-indicator.error .quota-bar .quota-bit { - background-color: var(--vscode-gauge-errorBackground); + background-color: var(--vscode-gauge-errorForeground); } /* Settings */ From 934593aeb1bcc2f5e55ecf8148891f8358b91b87 Mon Sep 17 00:00:00 2001 From: Aman Karmani Date: Wed, 6 Aug 2025 04:49:35 -0700 Subject: [PATCH 0037/2080] fix some typos (#259747) --- extensions/shared.webpack.config.js | 4 ++-- test/unit/electron/renderer.html | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/extensions/shared.webpack.config.js b/extensions/shared.webpack.config.js index ad9d70c249087..097234e24b281 100644 --- a/extensions/shared.webpack.config.js +++ b/extensions/shared.webpack.config.js @@ -59,7 +59,7 @@ function withNodeDefaults(/**@type WebpackConfig & { context: string }*/extConfi 'electron': 'commonjs electron', // ignored to avoid bundling from node_modules 'vscode': 'commonjs vscode', // ignored because it doesn't exist, 'applicationinsights-native-metrics': 'commonjs applicationinsights-native-metrics', // ignored because we don't ship native module - '@azure/functions-core': 'commonjs azure/functions-core', // optioinal dependency of appinsights that we don't use + '@azure/functions-core': 'commonjs azure/functions-core', // optional dependency of appinsights that we don't use '@opentelemetry/tracing': 'commonjs @opentelemetry/tracing', // ignored because we don't ship this module '@opentelemetry/instrumentation': 'commonjs @opentelemetry/instrumentation', // ignored because we don't ship this module '@azure/opentelemetry-instrumentation-azure-sdk': 'commonjs @azure/opentelemetry-instrumentation-azure-sdk', // ignored because we don't ship this module @@ -150,7 +150,7 @@ function withBrowserDefaults(/**@type WebpackConfig & { context: string }*/extCo externals: { 'vscode': 'commonjs vscode', // ignored because it doesn't exist, 'applicationinsights-native-metrics': 'commonjs applicationinsights-native-metrics', // ignored because we don't ship native module - '@azure/functions-core': 'commonjs azure/functions-core', // optioinal dependency of appinsights that we don't use + '@azure/functions-core': 'commonjs azure/functions-core', // optional dependency of appinsights that we don't use '@opentelemetry/tracing': 'commonjs @opentelemetry/tracing', // ignored because we don't ship this module '@opentelemetry/instrumentation': 'commonjs @opentelemetry/instrumentation', // ignored because we don't ship this module '@azure/opentelemetry-instrumentation-azure-sdk': 'commonjs @azure/opentelemetry-instrumentation-azure-sdk', // ignored because we don't ship this module diff --git a/test/unit/electron/renderer.html b/test/unit/electron/renderer.html index 54c93d27529d6..3af99562e153d 100644 --- a/test/unit/electron/renderer.html +++ b/test/unit/electron/renderer.html @@ -42,7 +42,7 @@ const basePath = require('path').join(__dirname, `../../../${outdir}/`); const baseUrl = require('url').pathToFileURL(basePath); - // Tests run in a renderer that IS node-enabled. Wo we will encounter imports for node-modules which isn't + // Tests run in a renderer that IS node-enabled. So we will encounter imports for node-modules which isn't // supported by blink/chromium. To work around this, we generate an import map that maps all node modules // to a blob that exports all properties of the module as named exports and the module itself as default. From 27c10fba460fd9053793bbeeb2247310d1e37997 Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Wed, 6 Aug 2025 13:54:24 +0200 Subject: [PATCH 0038/2080] [chore] bump @types/mocha to match mocha (#260034) --- build/package-lock.json | 7 ------- build/package.json | 1 - package-lock.json | 17 ++++++----------- package.json | 2 +- test/smoke/package-lock.json | 7 ------- test/smoke/package.json | 1 - 6 files changed, 7 insertions(+), 28 deletions(-) diff --git a/build/package-lock.json b/build/package-lock.json index c4f99c2fefc21..8316900804e11 100644 --- a/build/package-lock.json +++ b/build/package-lock.json @@ -34,7 +34,6 @@ "@types/mime": "0.0.29", "@types/minimatch": "^3.0.3", "@types/minimist": "^1.2.1", - "@types/mocha": "^9.1.1", "@types/node": "22.x", "@types/pump": "^1.0.1", "@types/rimraf": "^2.0.4", @@ -1238,12 +1237,6 @@ "integrity": "sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg==", "dev": true }, - "node_modules/@types/mocha": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz", - "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==", - "dev": true - }, "node_modules/@types/ms": { "version": "0.7.32", "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.32.tgz", diff --git a/build/package.json b/build/package.json index 987beb0baf015..ba53cb453d67f 100644 --- a/build/package.json +++ b/build/package.json @@ -28,7 +28,6 @@ "@types/mime": "0.0.29", "@types/minimatch": "^3.0.3", "@types/minimist": "^1.2.1", - "@types/mocha": "^9.1.1", "@types/node": "22.x", "@types/pump": "^1.0.1", "@types/rimraf": "^2.0.4", diff --git a/package-lock.json b/package-lock.json index 70a5ccad0bdd7..75c56ceb21c41 100644 --- a/package-lock.json +++ b/package-lock.json @@ -66,7 +66,7 @@ "@types/http-proxy-agent": "^2.0.1", "@types/kerberos": "^1.1.2", "@types/minimist": "^1.2.1", - "@types/mocha": "^9.1.1", + "@types/mocha": "^10.0.10", "@types/node": "22.x", "@types/sinon": "^10.0.2", "@types/sinon-test": "^2.4.2", @@ -2321,10 +2321,11 @@ "dev": true }, "node_modules/@types/mocha": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz", - "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==", - "dev": true + "version": "10.0.10", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz", + "integrity": "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==", + "dev": true, + "license": "MIT" }, "node_modules/@types/ms": { "version": "0.7.32", @@ -3255,12 +3256,6 @@ "vscode-test": "out/bin.mjs" } }, - "node_modules/@vscode/test-cli/node_modules/@types/mocha": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.2.tgz", - "integrity": "sha512-NaHL0+0lLNhX6d9rs+NSt97WH/gIlRHmszXbQ/8/MV/eVcFNdeJ/GYhrFuUc8K7WuPhRhTSdMkCp8VMzhUq85w==", - "dev": true - }, "node_modules/@vscode/test-cli/node_modules/brace-expansion": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", diff --git a/package.json b/package.json index 9a633afa6961d..0cdca091de8d9 100644 --- a/package.json +++ b/package.json @@ -125,7 +125,7 @@ "@types/http-proxy-agent": "^2.0.1", "@types/kerberos": "^1.1.2", "@types/minimist": "^1.2.1", - "@types/mocha": "^9.1.1", + "@types/mocha": "^10.0.10", "@types/node": "22.x", "@types/sinon": "^10.0.2", "@types/sinon-test": "^2.4.2", diff --git a/test/smoke/package-lock.json b/test/smoke/package-lock.json index e29624e031df4..230c2d46bea7d 100644 --- a/test/smoke/package-lock.json +++ b/test/smoke/package-lock.json @@ -14,7 +14,6 @@ "rimraf": "3.0.2" }, "devDependencies": { - "@types/mocha": "^9.1.1", "@types/ncp": "2.0.1", "@types/node": "22.x", "@types/node-fetch": "^2.5.10", @@ -45,12 +44,6 @@ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", "dev": true }, - "node_modules/@types/mocha": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz", - "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==", - "dev": true - }, "node_modules/@types/ncp": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/ncp/-/ncp-2.0.1.tgz", diff --git a/test/smoke/package.json b/test/smoke/package.json index 2c20954c0d961..37050f5b668c0 100644 --- a/test/smoke/package.json +++ b/test/smoke/package.json @@ -16,7 +16,6 @@ "rimraf": "3.0.2" }, "devDependencies": { - "@types/mocha": "^9.1.1", "@types/ncp": "2.0.1", "@types/node": "22.x", "@types/node-fetch": "^2.5.10", From 8b140715dec5762ddc4bda78e39e845ba9c31882 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Wed, 6 Aug 2025 05:18:07 -0700 Subject: [PATCH 0039/2080] Update terminal assignments Updated terminal assignments --- .github/classifier.json | 39 +++++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/.github/classifier.json b/.github/classifier.json index be82395f59872..f7eb5c9703d02 100644 --- a/.github/classifier.json +++ b/.github/classifier.json @@ -16,6 +16,7 @@ "bracket-pair-guides": {"assign": ["hediet"]}, "breadcrumbs": {"assign": ["jrieken"]}, "callhierarchy": {"assign": ["jrieken"]}, + "chat-terminal": {"assign": ["Tyriar"]} "chrome-devtools": {"assign": ["deepak1556"]}, "cloud-changes": {"assign": ["joyceerhl"]}, "code-cli": {"assign": ["connor4312"]}, @@ -208,7 +209,7 @@ "settings-editor": {"assign": ["rzhao271"]}, "settings-search": {"assign": ["rzhao271"]}, "settings-sync": {"assign": ["sandy081"]}, - "settings-sync-server": {"assign": ["Tyriar", "lszomoru"]}, + "settings-sync-server": {"assign": ["rzhao271"]}, "shared-process": {"assign": []}, "simple-file-dialog": {"assign": ["alexr00"]}, "smart-select": {"assign": ["jrieken"]}, @@ -220,27 +221,33 @@ "tasks": {"assign": ["meganrogge"], "accuracy": 0.85}, "telemetry": {"assign": ["lramos15"]}, "terminal": {"assign": ["meganrogge"]}, + "terminal-accessibility": {"assign": ["meganrogge"]}, "terminal-conpty": {"assign": ["meganrogge"]}, "terminal-editors": {"assign": ["Tyriar", "meganrogge"]}, - "terminal-external": {"assign": ["meganrogge"]}, - "terminal-find": {"assign": ["Tyriar", "meganrogge"]}, + "terminal-external": {"assign": ["anthonykim1"]}, + "terminal-find": {"assign": ["anthonykim1"]}, + "terminal-inline-chat": {"assign": ["Tyriar", "meganrogge"]}, "terminal-input": {"assign": ["Tyriar", "meganrogge"]}, - "terminal-layout": {"assign": ["Tyriar", "meganrogge"]}, - "terminal-links": {"assign": ["Tyriar"]}, - "terminal-local-echo": {"assign": ["Tyriar", "meganrogge"]}, + "terminal-layout": {"assign": ["anthonykim1"]}, + "terminal-ligatures": {"assign": ["Tyriar"]}, + "terminal-links": {"assign": ["anthonykim1"]}, + "terminal-local-echo": {"assign": ["anthonykim1"]}, + "terminal-parser": {"assign": ["Tyriar"]}, "terminal-persistence": {"assign": ["Tyriar", "meganrogge"]}, "terminal-process": {"assign": ["Tyriar", "meganrogge"]}, - "terminal-profiles": {"assign": ["Tyriar", "meganrogge"]}, - "terminal-quick-fix": {"assign": ["Tyriar", "meganrogge"]}, - "terminal-rendering": {"assign": ["Tyriar", "meganrogge"]}, + "terminal-profiles": {"assign": ["meganrogge"]}, + "terminal-quick-fix": {"assign": ["meganrogge"]}, + "terminal-rendering": {"assign": ["Tyriar"]}, "terminal-search": {"assign": ["Tyriar", "meganrogge"]}, - "terminal-shell-bash": {"assign": ["Tyriar", "meganrogge"]}, - "terminal-shell-cmd": {"assign": ["Tyriar", "meganrogge"]}, - "terminal-shell-fish": {"assign": ["Tyriar", "meganrogge"]}, - "terminal-shell-git-bash": {"assign": ["Tyriar", "meganrogge"]}, - "terminal-shell-integration": {"assign": ["Tyriar", "meganrogge"]}, - "terminal-shell-pwsh": {"assign": ["Tyriar", "meganrogge"]}, - "terminal-shell-zsh": {"assign": ["Tyriar", "meganrogge"]}, + "terminal-shell-bash": {"assign": ["anthonykim1"]}, + "terminal-shell-cmd": {"assign": ["anthonykim1"]}, + "terminal-shell-fish": {"assign": ["anthonykim1"]}, + "terminal-shell-git-bash": {"assign": ["anthonykim1"]}, + "terminal-shell-integration": {"assign": ["anthonykim1"]}, + "terminal-shell-sh": {"assign": ["anthonykim1"]}, + "terminal-shell-pwsh": {"assign": ["anthonykim1"]}, + "terminal-shell-zsh": {"assign": ["anthonykim1"]}, + "terminal-sticky-scroll": {"assign": ["anthonykim1"]}, "terminal-tabs": {"assign": ["meganrogge"]}, "terminal-winpty": {"assign": ["Tyriar", "meganrogge"]}, "testing": {"assign": ["connor4312"]}, From 35c2992c797c9f1ee3f5359d8da794aca3fdf6a2 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Wed, 6 Aug 2025 06:00:00 -0700 Subject: [PATCH 0040/2080] Deny find -exec commands Fixes #259926 --- .../common/terminalChatAgentToolsConfiguration.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalChatAgentToolsConfiguration.ts b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalChatAgentToolsConfiguration.ts index 3e3253c2fe2c9..65bcf6d15b97a 100644 --- a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalChatAgentToolsConfiguration.ts +++ b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalChatAgentToolsConfiguration.ts @@ -141,6 +141,9 @@ export const terminalChatAgentToolsConfiguration: IStringDictionary Date: Wed, 6 Aug 2025 06:01:36 -0700 Subject: [PATCH 0041/2080] Update classifier.json --- .github/classifier.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/classifier.json b/.github/classifier.json index f7eb5c9703d02..0e95e0ed13a19 100644 --- a/.github/classifier.json +++ b/.github/classifier.json @@ -16,7 +16,7 @@ "bracket-pair-guides": {"assign": ["hediet"]}, "breadcrumbs": {"assign": ["jrieken"]}, "callhierarchy": {"assign": ["jrieken"]}, - "chat-terminal": {"assign": ["Tyriar"]} + "chat-terminal": {"assign": ["Tyriar"]}, "chrome-devtools": {"assign": ["deepak1556"]}, "cloud-changes": {"assign": ["joyceerhl"]}, "code-cli": {"assign": ["connor4312"]}, From d9bb6db34192d312063e6780c5f8f022aa5dacd0 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Wed, 6 Aug 2025 06:05:05 -0700 Subject: [PATCH 0042/2080] Clean up --- .../src/terminalSuggestMain.ts | 7 ++---- .../src/test/terminalSuggestMain.test.ts | 23 +------------------ 2 files changed, 3 insertions(+), 27 deletions(-) diff --git a/extensions/terminal-suggest/src/terminalSuggestMain.ts b/extensions/terminal-suggest/src/terminalSuggestMain.ts index 4cd66d7abc9f0..2839ee4992663 100644 --- a/extensions/terminal-suggest/src/terminalSuggestMain.ts +++ b/extensions/terminal-suggest/src/terminalSuggestMain.ts @@ -249,7 +249,7 @@ export async function activate(context: vscode.ExtensionContext) { const shellType: string | undefined = 'shell' in terminal.state ? terminal.state.shell as string : undefined; const terminalShellType = getTerminalShellType(shellType); if (!terminalShellType) { - console.debug('#terminalCompletions No shell type found for terminal, shell:', shellType); + console.debug(`#terminalCompletions Shell type ${shellType} not supported`); return; } @@ -493,7 +493,7 @@ function getEnvAsRecord(shellIntegrationEnv: ITerminalEnvironment): Record { - test('getTerminalShellType should return appropriate shell types for supported shells', () => { - strictEqual(getTerminalShellType('bash'), TerminalShellType.Bash); - strictEqual(getTerminalShellType('zsh'), TerminalShellType.Zsh); - strictEqual(getTerminalShellType('fish'), TerminalShellType.Fish); - strictEqual(getTerminalShellType('pwsh'), TerminalShellType.PowerShell); - strictEqual(getTerminalShellType('gitbash'), TerminalShellType.GitBash); - }); - - test('getTerminalShellType should return undefined for Python REPLs', () => { - strictEqual(getTerminalShellType('python'), undefined, 'Python REPLs should not receive terminal-suggest completions'); - }); - - test('getTerminalShellType should return undefined for unsupported shells', () => { - strictEqual(getTerminalShellType('unsupported'), undefined); - strictEqual(getTerminalShellType(undefined), undefined); - strictEqual(getTerminalShellType(''), undefined); - }); -}); - From c17bc6b0d3f1c017411e994b54afc85270636f81 Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Wed, 6 Aug 2025 15:27:00 +0200 Subject: [PATCH 0043/2080] Ctrl + Tab stops working after moving terminal to new window and back (fix #257058) (#260050) --- .../browser/parts/editor/editorParts.ts | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/vs/workbench/browser/parts/editor/editorParts.ts b/src/vs/workbench/browser/parts/editor/editorParts.ts index 84072b48141f3..5b29a7020bcbc 100644 --- a/src/vs/workbench/browser/parts/editor/editorParts.ts +++ b/src/vs/workbench/browser/parts/editor/editorParts.ts @@ -26,6 +26,7 @@ import { ServiceCollection } from '../../../../platform/instantiation/common/ser import { IEditorService } from '../../../services/editor/common/editorService.js'; import { DeepPartial } from '../../../../base/common/types.js'; import { IStatusbarService } from '../../../services/statusbar/browser/statusbar.js'; +import { mainWindow } from '../../../../base/browser/window.js'; interface IEditorPartsUIState { readonly auxiliary: IAuxiliaryEditorPartState[]; @@ -163,10 +164,22 @@ export class EditorParts extends MultiWindowParts implements IEditor this.doUpdateMostRecentActive(part, true); if (this._parts.size > 1) { - this._onDidActiveGroupChange.fire(this.activeGroup); // this can only happen when we have more than 1 editor part + // Either main or auxiliary editor part got focus + // which we have to treat as a group change event. + this._onDidActiveGroupChange.fire(this.activeGroup); + } + })); + disposables.add(toDisposable(() => { + this.doUpdateMostRecentActive(part); + + if (part.windowId !== mainWindow.vscodeWindowId) { + // An auxiliary editor part is closing which we have + // to treat as group change event for the next editor + // part that becomes active. + // Refs: https://github.com/microsoft/vscode/issues/257058 + this._onDidActiveGroupChange.fire(this.activeGroup); } })); - disposables.add(toDisposable(() => this.doUpdateMostRecentActive(part))); disposables.add(part.onDidChangeActiveGroup(group => this._onDidActiveGroupChange.fire(group))); disposables.add(part.onDidAddGroup(group => this._onDidAddGroup.fire(group))); From 1197402466c1f4e3d7d4a5133dd0a5eca6eb2bab Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Wed, 6 Aug 2025 16:43:02 +0200 Subject: [PATCH 0044/2080] Investigate issues with `subst` workaround (fix #259872) (#260104) --- src/vs/base/node/pfs.ts | 5 ++-- src/vs/base/test/node/pfs/pfs.test.ts | 34 ++++++++++++--------------- 2 files changed, 18 insertions(+), 21 deletions(-) diff --git a/src/vs/base/node/pfs.ts b/src/vs/base/node/pfs.ts index 8c03f47817088..3a0839940f86e 100644 --- a/src/vs/base/node/pfs.ts +++ b/src/vs/base/node/pfs.ts @@ -108,10 +108,11 @@ async function readdir(path: string, options?: { withFileTypes: true }): Promise return await doReaddir(path, options); } catch (error) { // TODO@bpasero workaround for #252361 that should be removed - // once the upstream issue in node.js is resolved + // once the upstream issue in node.js is resolved. Adds a trailing + // dot to a root drive letter path (G:\ => G:\.) as a workaround. if (error.code === 'ENOENT' && isWindows && isRootOrDriveLetter(path)) { try { - return await doReaddir(path.slice(0, -1), options); + return await doReaddir(`${path}.`, options); } catch (e) { // ignore } diff --git a/src/vs/base/test/node/pfs/pfs.test.ts b/src/vs/base/test/node/pfs/pfs.test.ts index 3574bef988d0a..9eb724d0e9265 100644 --- a/src/vs/base/test/node/pfs/pfs.test.ts +++ b/src/vs/base/test/node/pfs/pfs.test.ts @@ -353,36 +353,32 @@ flakySuite('PFS', function () { }); test('readdir', async () => { - if (typeof process.versions['electron'] !== 'undefined' /* needs electron */) { - const parent = randomPath(join(testDir, 'pfs')); - const newDir = join(parent, 'öäü'); + const parent = randomPath(join(testDir, 'pfs')); + const newDir = join(parent, 'öäü'); - await fs.promises.mkdir(newDir, { recursive: true }); + await fs.promises.mkdir(newDir, { recursive: true }); - assert.ok(fs.existsSync(newDir)); + assert.ok(fs.existsSync(newDir)); - const children = await Promises.readdir(parent); - assert.strictEqual(children.some(n => n === 'öäü'), true); // Mac always converts to NFD, so - } + const children = await Promises.readdir(parent); + assert.strictEqual(children.some(n => n === 'öäü'), true); // Mac always converts to NFD, so }); test('readdir (with file types)', async () => { - if (typeof process.versions['electron'] !== 'undefined' /* needs electron */) { - const newDir = join(testDir, 'öäü'); - await fs.promises.mkdir(newDir, { recursive: true }); + const newDir = join(testDir, 'öäü'); + await fs.promises.mkdir(newDir, { recursive: true }); - await Promises.writeFile(join(testDir, 'somefile.txt'), 'contents'); + await Promises.writeFile(join(testDir, 'somefile.txt'), 'contents'); - assert.ok(fs.existsSync(newDir)); + assert.ok(fs.existsSync(newDir)); - const children = await Promises.readdir(testDir, { withFileTypes: true }); + const children = await Promises.readdir(testDir, { withFileTypes: true }); - assert.strictEqual(children.some(n => n.name === 'öäü'), true); // Mac always converts to NFD, so - assert.strictEqual(children.some(n => n.isDirectory()), true); + assert.strictEqual(children.some(n => n.name === 'öäü'), true); // Mac always converts to NFD, so + assert.strictEqual(children.some(n => n.isDirectory()), true); - assert.strictEqual(children.some(n => n.name === 'somefile.txt'), true); - assert.strictEqual(children.some(n => n.isFile()), true); - } + assert.strictEqual(children.some(n => n.name === 'somefile.txt'), true); + assert.strictEqual(children.some(n => n.isFile()), true); }); test('writeFile (string)', async () => { From 5a03ce4006bf67abbf84c235bc888e87c9508f2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Mangeonjean?= Date: Wed, 6 Aug 2025 16:46:11 +0200 Subject: [PATCH 0045/2080] Fix theme not being synchronized with external windows on firefox (#259839) Theme not properly updated in external windows on Firefox (fix #259835) Co-authored-by: Benjamin Pasero --- src/vs/base/browser/domStylesheets.ts | 11 +++++++- .../themes/browser/workbenchThemeService.ts | 25 +++++++++++++------ 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/src/vs/base/browser/domStylesheets.ts b/src/vs/base/browser/domStylesheets.ts index 76a71c5402dd0..feb3aeba8d7cd 100644 --- a/src/vs/base/browser/domStylesheets.ts +++ b/src/vs/base/browser/domStylesheets.ts @@ -5,6 +5,7 @@ import { DisposableStore, toDisposable, IDisposable } from '../common/lifecycle.js'; import { autorun, IObservable } from '../common/observable.js'; +import { isFirefox } from './browser.js'; import { getWindows, sharedMutationObserver } from './dom.js'; import { mainWindow } from './window.js'; @@ -97,7 +98,15 @@ function cloneGlobalStyleSheet(globalStylesheet: HTMLStyleElement, globalStylesh clone.sheet?.insertRule(rule.cssText, clone.sheet?.cssRules.length); } - disposables.add(sharedMutationObserver.observe(globalStylesheet, disposables, { childList: true })(() => { + let observeInit: MutationObserverInit = { childList: true }; + if (isFirefox) { + // Firefox doesn't support observing style tag contents + // As a workaround, also observe the data-version attribute + // that is updated when the content is updated + observeInit = { ...observeInit, attributes: true, attributeFilter: ['data-version'] }; + } + + disposables.add(sharedMutationObserver.observe(globalStylesheet, disposables, observeInit)(() => { clone.textContent = globalStylesheet.textContent; })); diff --git a/src/vs/workbench/services/themes/browser/workbenchThemeService.ts b/src/vs/workbench/services/themes/browser/workbenchThemeService.ts index d85b23015f45c..972e265195504 100644 --- a/src/vs/workbench/services/themes/browser/workbenchThemeService.ts +++ b/src/vs/workbench/services/themes/browser/workbenchThemeService.ts @@ -33,7 +33,7 @@ import { updateColorThemeConfigurationSchemas, updateFileIconThemeConfigurationS import { ProductIconThemeData, DEFAULT_PRODUCT_ICON_THEME_ID } from './productIconThemeData.js'; import { registerProductIconThemeSchemas } from '../common/productIconThemeSchema.js'; import { ILogService } from '../../../../platform/log/common/log.js'; -import { isWeb } from '../../../../base/common/platform.js'; +import { isFirefox, isWeb } from '../../../../base/common/platform.js'; import { ColorScheme, ThemeTypeSelector } from '../../../../platform/theme/common/theme.js'; import { IHostColorSchemeService } from '../common/hostColorSchemeService.js'; import { RunOnceScheduler, Sequencer } from '../../../../base/common/async.js'; @@ -42,6 +42,7 @@ import { getIconsStyleSheet } from '../../../../platform/theme/browser/iconsStyl import { asCssVariableName, getColorRegistry } from '../../../../platform/theme/common/colorRegistry.js'; import { ILanguageService } from '../../../../editor/common/languages/language.js'; import { mainWindow } from '../../../../base/browser/window.js'; +import { generateUuid } from '../../../../base/common/uuid.js'; // implementation @@ -793,13 +794,21 @@ class ThemeFileWatcher { } function _applyRules(styleSheetContent: string, rulesClassName: string) { - const themeStyles = mainWindow.document.head.getElementsByClassName(rulesClassName); - if (themeStyles.length === 0) { - const elStyle = createStyleSheet(); - elStyle.className = rulesClassName; - elStyle.textContent = styleSheetContent; - } else { - (themeStyles[0]).textContent = styleSheetContent; + let themeStyle = mainWindow.document.head.getElementsByClassName(rulesClassName).item(0); + if (!themeStyle) { + themeStyle = createStyleSheet(); + themeStyle.className = rulesClassName; + } + + if (themeStyle.textContent !== styleSheetContent) { + themeStyle.textContent = styleSheetContent; + + if (isFirefox) { + // Firefox doesn't support observing style tag contents + // As a workaround, also update the data-version attribute + // when it changes so it can be observed + themeStyle.setAttribute('data-version', generateUuid()); + } } } From b855470cf475a77a65b229bd1e87914da1367a0f Mon Sep 17 00:00:00 2001 From: Alex Ross <38270282+alexr00@users.noreply.github.com> Date: Wed, 6 Aug 2025 17:03:50 +0200 Subject: [PATCH 0046/2080] Issues after selecting `Go to Review` from comment (#260109) Fixes #255323 --- .../workbench/contrib/comments/browser/commentReply.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/vs/workbench/contrib/comments/browser/commentReply.ts b/src/vs/workbench/contrib/comments/browser/commentReply.ts index b181a9cb5c131..0a426cc7a1415 100644 --- a/src/vs/workbench/contrib/comments/browser/commentReply.ts +++ b/src/vs/workbench/contrib/comments/browser/commentReply.ts @@ -128,8 +128,8 @@ export class CommentReply extends Disposable { this.expandReplyArea(); } else if (hasExistingComments) { this.createReplyButton(this.commentEditor, this._form); - } else if (focus && (this._commentThread.comments && this._commentThread.comments.length === 0)) { - this.expandReplyArea(); + } else if (this._commentThread.comments && this._commentThread.comments.length === 0) { + this.expandReplyArea(focus); } this._error = dom.append(this._container, dom.$('.validation-error.hidden')); const formActions = dom.append(this._container, dom.$('.form-actions')); @@ -339,10 +339,12 @@ export class CommentReply extends Disposable { return this._container.classList.contains('expand'); } - private expandReplyArea() { + private expandReplyArea(focus: boolean = true) { if (!this.isReplyExpanded) { this._container.classList.add('expand'); - this.commentEditor.focus(); + if (focus) { + this.commentEditor.focus(); + } this.commentEditor.layout(); } } From ce668e26123d8e74702cc8462288a515b4a9459c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 6 Aug 2025 08:52:51 -0700 Subject: [PATCH 0047/2080] Bump form-data from 3.0.0 to 3.0.4 in /extensions/microsoft-authentication (#257162) Bump form-data in /extensions/microsoft-authentication Bumps [form-data](https://github.com/form-data/form-data) from 3.0.0 to 3.0.4. - [Release notes](https://github.com/form-data/form-data/releases) - [Changelog](https://github.com/form-data/form-data/blob/v3.0.4/CHANGELOG.md) - [Commits](https://github.com/form-data/form-data/compare/v3.0.0...v3.0.4) --- updated-dependencies: - dependency-name: form-data dependency-version: 3.0.4 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .../package-lock.json | 219 +++++++++++++++++- 1 file changed, 208 insertions(+), 11 deletions(-) diff --git a/extensions/microsoft-authentication/package-lock.json b/extensions/microsoft-authentication/package-lock.json index 43600731960ec..cc0a2538470f8 100644 --- a/extensions/microsoft-authentication/package-lock.json +++ b/extensions/microsoft-authentication/package-lock.json @@ -270,6 +270,20 @@ "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -291,6 +305,21 @@ "node": ">=0.4.0" } }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", @@ -299,20 +328,176 @@ "safe-buffer": "^5.0.1" } }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/form-data": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz", - "integrity": "sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.4.tgz", + "integrity": "sha512-f0cRzm6dkyVYV3nPoooP8XlccPQukegwhAnpoLcXy+X+A8KfpGOoXwDr9FLZd3wzgLaBGQBE3lY93Zm/i1JvIQ==", "dev": true, + "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.35" }, "engines": { "node": ">= 6" } }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "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.npmjs.org/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.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/jsonwebtoken": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", @@ -392,22 +577,34 @@ "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, + "license": "MIT", "dependencies": { - "mime-db": "1.44.0" + "mime-db": "1.52.0" }, "engines": { "node": ">= 0.6" From 6a9c821b13f6efe3793b4830bf035d648a53dba6 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Wed, 6 Aug 2025 15:53:30 +0000 Subject: [PATCH 0048/2080] Fix backspacing terminal REPL suggestions not updating for trigger characters (#258847) * Initial plan * Fix backspacing terminal REPL suggestions by handling all trigger characters Co-authored-by: anthonykim1 <62267334+anthonykim1@users.noreply.github.com> * Make code cleaner * Simplify if statement, defer copilot tests * leave extra comment --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: anthonykim1 <62267334+anthonykim1@users.noreply.github.com> Co-authored-by: Anthony Kim --- .../suggest/browser/terminalSuggestAddon.ts | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/vs/workbench/contrib/terminalContrib/suggest/browser/terminalSuggestAddon.ts b/src/vs/workbench/contrib/terminalContrib/suggest/browser/terminalSuggestAddon.ts index cd94e10a30e09..75b094a05b12f 100644 --- a/src/vs/workbench/contrib/terminalContrib/suggest/browser/terminalSuggestAddon.ts +++ b/src/vs/workbench/contrib/terminalContrib/suggest/browser/terminalSuggestAddon.ts @@ -451,6 +451,20 @@ export class SuggestAddon extends Disposable implements ITerminalAddon, ISuggest return false; } + private _checkProviderTriggerCharacters(char: string): boolean { + for (const provider of this._terminalCompletionService.providers) { + if (!provider.triggerCharacters) { + continue; + } + for (const triggerChar of provider.triggerCharacters) { + if (char === triggerChar) { + return true; + } + } + } + return false; + } + private _wasLastInputRightArrowKey(): boolean { return !!this._lastUserData?.match(/^\x1b[\[O]?C$/); } @@ -537,7 +551,9 @@ export class SuggestAddon extends Disposable implements ITerminalAddon, ISuggest if ( // Only trigger on `\` and `/` if it's a directory. Not doing so causes problems // with git branches in particular - this._isFilteringDirectories && char.match(/[\\\/]$/) + this._isFilteringDirectories && char.match(/[\\\/]$/) || + // Check if the character is a trigger character from providers + this._checkProviderTriggerCharacters(char) ) { sent = this._requestTriggerCharQuickSuggestCompletions(); } From 96f6a0fa4ef9a52f1e91ea296b33ab34d5940de8 Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Wed, 6 Aug 2025 17:54:23 +0200 Subject: [PATCH 0049/2080] Saving untitled editor with encoding drops that encoding (fix #260117) (#260118) --- .../textfile/browser/textFileService.ts | 28 +++++++++++++------ .../common/untitledTextEditorModel.ts | 14 ++++++++++ 2 files changed, 34 insertions(+), 8 deletions(-) diff --git a/src/vs/workbench/services/textfile/browser/textFileService.ts b/src/vs/workbench/services/textfile/browser/textFileService.ts index a0bdb7c5b743d..ed422d88e8877 100644 --- a/src/vs/workbench/services/textfile/browser/textFileService.ts +++ b/src/vs/workbench/services/textfile/browser/textFileService.ts @@ -5,7 +5,7 @@ import { localize } from '../../../../nls.js'; import { URI } from '../../../../base/common/uri.js'; -import { IEncodingSupport, ITextFileService, ITextFileStreamContent, ITextFileContent, IResourceEncodings, IReadTextFileOptions, IWriteTextFileOptions, toBufferOrReadable, TextFileOperationError, TextFileOperationResult, ITextFileSaveOptions, ITextFileEditorModelManager, IResourceEncoding, stringToSnapshot, ITextFileSaveAsOptions, IReadTextFileEncodingOptions, TextFileEditorModelState } from '../common/textfiles.js'; +import { IEncodingSupport, ITextFileService, ITextFileStreamContent, ITextFileContent, IResourceEncodings, IReadTextFileOptions, IWriteTextFileOptions, toBufferOrReadable, TextFileOperationError, TextFileOperationResult, ITextFileSaveOptions, ITextFileEditorModelManager, IResourceEncoding, stringToSnapshot, ITextFileSaveAsOptions, IReadTextFileEncodingOptions, TextFileEditorModelState, IResolvedTextFileEditorModel } from '../common/textfiles.js'; import { IRevertOptions, SaveSourceRegistry } from '../../../common/editor.js'; import { ILifecycleService } from '../../lifecycle/common/lifecycle.js'; import { IFileService, FileOperationError, FileOperationResult, IFileStatWithMetadata, ICreateFileOptions, IFileStreamContent } from '../../../../platform/files/common/files.js'; @@ -13,7 +13,7 @@ import { Disposable } from '../../../../base/common/lifecycle.js'; import { extname as pathExtname } from '../../../../base/common/path.js'; import { IWorkbenchEnvironmentService } from '../../environment/common/environmentService.js'; import { IUntitledTextEditorService, IUntitledTextEditorModelManager } from '../../untitled/common/untitledTextEditorService.js'; -import { UntitledTextEditorModel } from '../../untitled/common/untitledTextEditorModel.js'; +import { IResolvedUntitledTextEditorModel, UntitledTextEditorModel } from '../../untitled/common/untitledTextEditorModel.js'; import { TextFileEditorModelManager } from '../common/textFileEditorModelManager.js'; import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; import { Schemas } from '../../../../base/common/network.js'; @@ -436,11 +436,23 @@ export abstract class AbstractTextFileService extends Disposable implements ITex private async doSaveAs(source: URI, target: URI, options?: ITextFileSaveOptions): Promise { let success = false; - // If the source is an existing text file model, we can directly - // use that model to copy the contents to the target destination - const textFileModel = this.files.get(source); - if (textFileModel?.isResolved()) { - success = await this.doSaveAsTextFile(textFileModel, source, target, options); + let resolvedTextModel: IResolvedTextFileEditorModel | IResolvedUntitledTextEditorModel | undefined; + if (source.scheme !== Schemas.untitled) { + const textFileModel = this.files.get(source); + if (textFileModel?.isResolved()) { + resolvedTextModel = textFileModel; + } + } else { + const untitledTextModel = this.untitled.get(source); + if (untitledTextModel?.isResolved()) { + resolvedTextModel = untitledTextModel; + } + } + + // If the source is an existing resolved file or untitled text model, we can + // directly use that model to copy the contents to the target destination + if (resolvedTextModel) { + success = await this.doSaveAsTextFile(resolvedTextModel, source, target, options); } // Otherwise if the source can be handled by the file service @@ -485,7 +497,7 @@ export abstract class AbstractTextFileService extends Disposable implements ITex return target; } - private async doSaveAsTextFile(sourceModel: IResolvedTextEditorModel | ITextModel, source: URI, target: URI, options?: ITextFileSaveOptions): Promise { + private async doSaveAsTextFile(sourceModel: IResolvedTextEditorModel | IResolvedUntitledTextEditorModel | ITextModel, source: URI, target: URI, options?: ITextFileSaveOptions): Promise { // Find source encoding if any let sourceModelEncoding: string | undefined = undefined; diff --git a/src/vs/workbench/services/untitled/common/untitledTextEditorModel.ts b/src/vs/workbench/services/untitled/common/untitledTextEditorModel.ts index c0526af39e8ae..d167c5dc4bd36 100644 --- a/src/vs/workbench/services/untitled/common/untitledTextEditorModel.ts +++ b/src/vs/workbench/services/untitled/common/untitledTextEditorModel.ts @@ -65,6 +65,16 @@ export interface IUntitledTextEditorModel extends ITextEditorModel, ILanguageSup * Resolves the untitled model. */ resolve(): Promise; + + /** + * Whether this model is resolved or not. + */ + isResolved(): this is IResolvedUntitledTextEditorModel; +} + +export interface IResolvedUntitledTextEditorModel extends IUntitledTextEditorModel { + + readonly textEditorModel: ITextModel; } export class UntitledTextEditorModel extends BaseTextEditorModel implements IUntitledTextEditorModel { @@ -374,6 +384,10 @@ export class UntitledTextEditorModel extends BaseTextEditorModel implements IUnt return super.resolve(); } + override isResolved(): this is IResolvedUntitledTextEditorModel { + return !!this.textEditorModelHandle; + } + protected override installModelListeners(model: ITextModel): void { this._register(model.onDidChangeContent(e => this.onModelContentChanged(model, e))); this._register(model.onDidChangeLanguage(() => this.onConfigurationChange(undefined, true))); // language change can have impact on config From 55377133de296d7662f876ecffc70de170eb3216 Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Wed, 6 Aug 2025 18:00:13 +0200 Subject: [PATCH 0050/2080] Smoke-test failure: directory not empty (fix #260110) (#260121) --- test/smoke/package-lock.json | 121 ++--------------------------------- test/smoke/package.json | 4 +- test/smoke/src/main.ts | 11 ++-- 3 files changed, 13 insertions(+), 123 deletions(-) diff --git a/test/smoke/package-lock.json b/test/smoke/package-lock.json index 230c2d46bea7d..f9d09bbed5e39 100644 --- a/test/smoke/package-lock.json +++ b/test/smoke/package-lock.json @@ -10,40 +10,15 @@ "license": "MIT", "dependencies": { "ncp": "^2.0.0", - "node-fetch": "^2.6.7", - "rimraf": "3.0.2" + "node-fetch": "^2.6.7" }, "devDependencies": { "@types/ncp": "2.0.1", "@types/node": "22.x", "@types/node-fetch": "^2.5.10", - "@types/rimraf": "3.0.2", "npm-run-all": "^4.1.5" } }, - "node_modules/@types/events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", - "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", - "dev": true - }, - "node_modules/@types/glob": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", - "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", - "dev": true, - "dependencies": { - "@types/events": "*", - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "node_modules/@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", - "dev": true - }, "node_modules/@types/ncp": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@types/ncp/-/ncp-2.0.1.tgz", @@ -73,16 +48,6 @@ "form-data": "^3.0.0" } }, - "node_modules/@types/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-F3OznnSLAUxFrCEu/L5PY8+ny8DtcFRjx7fZZ9bycvXRi3KPTRS9HOitGZwvPg0juRhXFWIeKX58cnX5YqLohQ==", - "dev": true, - "dependencies": { - "@types/glob": "*", - "@types/node": "*" - } - }, "node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -104,12 +69,14 @@ "node_modules/balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c= sha512-9Y0g0Q8rmSt+H33DfKv7FOc3v+iRI+o1lbzt8jGcIosYW37IIW/2XVYq5NPdmaD5NQ59Nk26Kl/vZbwW9Fr8vg==" + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c= sha512-9Y0g0Q8rmSt+H33DfKv7FOc3v+iRI+o1lbzt8jGcIosYW37IIW/2XVYq5NPdmaD5NQ59Nk26Kl/vZbwW9Fr8vg==", + "dev": true }, "node_modules/brace-expansion": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -173,7 +140,8 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true }, "node_modules/cross-spawn": { "version": "6.0.5", @@ -287,11 +255,6 @@ "node": ">= 6" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8= sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -312,26 +275,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/graceful-fs": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", @@ -377,21 +320,6 @@ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -537,6 +465,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -650,14 +579,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E= sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, "node_modules/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", @@ -671,14 +592,6 @@ "node": ">=4" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18= sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", @@ -754,21 +667,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/semver": { "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", @@ -948,11 +846,6 @@ "bin": { "which": "bin/which" } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" } } } diff --git a/test/smoke/package.json b/test/smoke/package.json index 37050f5b668c0..1396399222843 100644 --- a/test/smoke/package.json +++ b/test/smoke/package.json @@ -12,14 +12,12 @@ }, "dependencies": { "ncp": "^2.0.0", - "node-fetch": "^2.6.7", - "rimraf": "3.0.2" + "node-fetch": "^2.6.7" }, "devDependencies": { "@types/ncp": "2.0.1", "@types/node": "22.x", "@types/node-fetch": "^2.5.10", - "@types/rimraf": "3.0.2", "npm-run-all": "^4.1.5" } } diff --git a/test/smoke/src/main.ts b/test/smoke/src/main.ts index 45bf283ce0489..9c5c7eb7c968d 100644 --- a/test/smoke/src/main.ts +++ b/test/smoke/src/main.ts @@ -9,7 +9,6 @@ import * as cp from 'child_process'; import * as path from 'path'; import * as os from 'os'; import * as minimist from 'minimist'; -import * as rimraf from 'rimraf'; import * as vscodetest from '@vscode/test-electron'; import fetch from 'node-fetch'; import { Quality, MultiLogger, Logger, ConsoleLogger, FileLogger, measureAndLog, getDevElectronPath, getBuildElectronPath, getBuildVersion } from '../../automation'; @@ -120,12 +119,12 @@ try { const testDataPath = path.join(os.tmpdir(), 'vscsmoke'); if (fs.existsSync(testDataPath)) { - rimraf.sync(testDataPath); + fs.rmSync(testDataPath, { recursive: true, force: true, maxRetries: 10 }); } fs.mkdirSync(testDataPath, { recursive: true }); process.once('exit', () => { try { - rimraf.sync(testDataPath); + fs.rmSync(testDataPath, { recursive: true, force: true, maxRetries: 10 }); } catch { // noop } @@ -236,7 +235,7 @@ const userDataDir = path.join(testDataPath, 'd'); async function setupRepository(): Promise { if (opts['test-repo']) { logger.log('Copying test project repository:', opts['test-repo']); - rimraf.sync(workspacePath); + fs.rmSync(workspacePath, { recursive: true, force: true, maxRetries: 10 }); // not platform friendly if (process.platform === 'win32') { cp.execSync(`xcopy /E "${opts['test-repo']}" "${workspacePath}"\\*`); @@ -306,7 +305,7 @@ async function ensureStableCode(): Promise { error: error => logger.log(`download stable code error: ${error}`) } }), 'download stable code', logger), 1000, 3, () => new Promise((resolve, reject) => { - rimraf(stableCodeDestination, { maxBusyTries: 10 }, error => { + fs.rm(stableCodeDestination, { recursive: true, force: true, maxRetries: 10 }, error => { if (error) { reject(error); } else { @@ -379,7 +378,7 @@ after(async function () { try { let deleted = false; await measureAndLog(() => Promise.race([ - new Promise((resolve, reject) => rimraf(testDataPath, { maxBusyTries: 10 }, error => { + new Promise((resolve, reject) => fs.rm(testDataPath, { recursive: true, force: true, maxRetries: 10 }, error => { if (error) { reject(error); } else { From 274d71002ec805c8b4f61ade3f058dd3cac1aceb Mon Sep 17 00:00:00 2001 From: Druzhkov Sergei Date: Wed, 6 Aug 2025 19:19:51 +0300 Subject: [PATCH 0051/2080] Fix memory reference handling in Watch window (#259753) --- src/vs/workbench/contrib/debug/common/debugModel.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/vs/workbench/contrib/debug/common/debugModel.ts b/src/vs/workbench/contrib/debug/common/debugModel.ts index 6a6012f768751..b9f3442157dbb 100644 --- a/src/vs/workbench/contrib/debug/common/debugModel.ts +++ b/src/vs/workbench/contrib/debug/common/debugModel.ts @@ -234,6 +234,7 @@ export class ExpressionContainer implements IExpressionContainer { } catch (e) { this.value = e.message || ''; this.reference = 0; + this.memoryReference = undefined; return false; } } From 0b6793b9844b5110804e779ff9547c4ba8f78208 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Wed, 6 Aug 2025 17:05:12 +0000 Subject: [PATCH 0052/2080] Fix testing.toggleInlineCoverage action appearing when it shouldn't be available (#259918) * Initial plan * Fix testing.toggleInlineCoverage action appearing when it shouldn't - Add new context key `hasInlineCoverageDetails` to track when per-line coverage is available - Update `testing.toggleInlineCoverage` menu condition to use new context key - This ensures the action only appears when inline coverage can actually function - Other coverage actions (toolbar, filter) continue to use `hasCoverageInFile` as appropriate Co-authored-by: connor4312 <2230985+connor4312@users.noreply.github.com> * Add test for hasInlineCoverageDetails context key logic - Test verifies that CoverageDetailsModel with ranges indicates inline coverage is available - Test verifies that empty coverage details indicates no inline coverage Co-authored-by: connor4312 <2230985+connor4312@users.noreply.github.com> * format doc --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: connor4312 <2230985+connor4312@users.noreply.github.com> Co-authored-by: Connor Peet --- .../browser/codeCoverageDecorations.ts | 16 ++++++++++++++-- .../testing/common/testingContextKeys.ts | 1 + .../browser/codeCoverageDecorations.test.ts | 19 +++++++++++++++++++ 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/src/vs/workbench/contrib/testing/browser/codeCoverageDecorations.ts b/src/vs/workbench/contrib/testing/browser/codeCoverageDecorations.ts index e9469a4b852b5..2fc89c04e4479 100644 --- a/src/vs/workbench/contrib/testing/browser/codeCoverageDecorations.ts +++ b/src/vs/workbench/contrib/testing/browser/codeCoverageDecorations.ts @@ -16,7 +16,7 @@ import { IMarkdownString, MarkdownString } from '../../../../base/common/htmlCon import { KeyChord, KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; import { Lazy } from '../../../../base/common/lazy.js'; import { Disposable, DisposableStore, MutableDisposable, toDisposable } from '../../../../base/common/lifecycle.js'; -import { autorun, derived, observableFromEvent } from '../../../../base/common/observable.js'; +import { autorun, derived, observableFromEvent, observableValue } from '../../../../base/common/observable.js'; import { ThemeIcon } from '../../../../base/common/themables.js'; import { isUriComponents, URI } from '../../../../base/common/uri.js'; import { ICodeEditor, IOverlayWidget, IOverlayWidgetPosition, isCodeEditor, MouseTargetType, OverlayWidgetPositionPreference } from '../../../../editor/browser/editorBrowser.js'; @@ -71,6 +71,7 @@ export class CodeCoverageDecorations extends Disposable implements IEditorContri }>(); private hoveredSubject?: unknown; private details?: CoverageDetailsModel; + private readonly hasInlineCoverageDetails = observableValue('hasInlineCoverageDetails', false); constructor( private readonly editor: ICodeEditor, @@ -119,6 +120,12 @@ export class CodeCoverageDecorations extends Disposable implements IEditorContri reader => !!fileCoverage.read(reader)?.file, )); + this._register(bindContextKey( + TestingContextKeys.hasInlineCoverageDetails, + contextKeyService, + reader => this.hasInlineCoverageDetails.read(reader), + )); + this._register(autorun(reader => { const c = fileCoverage.read(reader); if (c) { @@ -245,9 +252,13 @@ export class CodeCoverageDecorations extends Disposable implements IEditorContri private async apply(model: ITextModel, coverage: FileCoverage, testId: TestId | undefined, showInlineByDefault: boolean) { const details = this.details = await this.loadDetails(coverage, testId, model); if (!details) { + this.hasInlineCoverageDetails.set(false, undefined); return this.clear(); } + // Update context key to indicate inline coverage details are available + this.hasInlineCoverageDetails.set(details.ranges.length > 0, undefined); + this.displayedStore.clear(); model.changeDecorations(e => { @@ -326,6 +337,7 @@ export class CodeCoverageDecorations extends Disposable implements IEditorContri this.loadingCancellation = undefined; this.displayedStore.clear(); this.hoveredStore.clear(); + this.hasInlineCoverageDetails.set(false, undefined); } private async loadDetails(coverage: FileCoverage, testId: TestId | undefined, textModel: ITextModel) { @@ -724,7 +736,7 @@ registerAction2(class ToggleInlineCoverage extends Action2 { icon: testingCoverageReport, menu: [ { id: MenuId.CommandPalette, when: TestingContextKeys.isTestCoverageOpen }, - { id: MenuId.EditorTitle, when: ContextKeyExpr.and(TestingContextKeys.hasCoverageInFile, TestingContextKeys.coverageToolbarEnabled.notEqualsTo(true)), group: 'navigation' }, + { id: MenuId.EditorTitle, when: ContextKeyExpr.and(TestingContextKeys.hasInlineCoverageDetails, TestingContextKeys.coverageToolbarEnabled.notEqualsTo(true)), group: 'navigation' }, ] }); } diff --git a/src/vs/workbench/contrib/testing/common/testingContextKeys.ts b/src/vs/workbench/contrib/testing/common/testingContextKeys.ts index 54c4b311b80e6..f005eced802a0 100644 --- a/src/vs/workbench/contrib/testing/common/testingContextKeys.ts +++ b/src/vs/workbench/contrib/testing/common/testingContextKeys.ts @@ -25,6 +25,7 @@ export namespace TestingContextKeys { export const isTestCoverageOpen = new RawContextKey('testing.isTestCoverageOpen', false, { type: 'boolean', description: localize('testing.isTestCoverageOpen', 'Indicates whether a test coverage report is open') }); export const hasCoverageInFile = new RawContextKey('testing.hasCoverageInFile', false, { type: 'boolean', description: localize('testing.hasCoverageInFile', 'Indicates coverage has been reported in the curent editor.') }); export const hasPerTestCoverage = new RawContextKey('testing.hasPerTestCoverage', false, { type: 'boolean', description: localize('testing.hasPerTestCoverage', 'Indicates whether per-test coverage is available') }); + export const hasInlineCoverageDetails = new RawContextKey('testing.hasInlineCoverageDetails', false, { type: 'boolean', description: localize('testing.hasInlineCoverageDetails', 'Indicates whether detailed per-line coverage is available for inline display') }); export const isCoverageFilteredToTest = new RawContextKey('testing.isCoverageFilteredToTest', false, { type: 'boolean', description: localize('testing.isCoverageFilteredToTest', 'Indicates whether coverage has been filterd to a single test') }); export const coverageToolbarEnabled = new RawContextKey('testing.coverageToolbarEnabled', true, { type: 'boolean', description: localize('testing.coverageToolbarEnabled', 'Indicates whether the coverage toolbar is enabled') }); export const inlineCoverageEnabled = new RawContextKey('testing.inlineCoverageEnabled', false, { type: 'boolean', description: localize('testing.inlineCoverageEnabled', 'Indicates whether inline coverage is shown') }); diff --git a/src/vs/workbench/contrib/testing/test/browser/codeCoverageDecorations.test.ts b/src/vs/workbench/contrib/testing/test/browser/codeCoverageDecorations.test.ts index 102ce198d80ab..1e970fe2b408e 100644 --- a/src/vs/workbench/contrib/testing/test/browser/codeCoverageDecorations.test.ts +++ b/src/vs/workbench/contrib/testing/test/browser/codeCoverageDecorations.test.ts @@ -9,6 +9,7 @@ import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../base/tes import { Position } from '../../../../../editor/common/core/position.js'; import { Range } from '../../../../../editor/common/core/range.js'; import { ITextModel } from '../../../../../editor/common/model.js'; +import * as assert from 'assert'; import { CoverageDetailsModel } from '../../browser/codeCoverageDecorations.js'; import { CoverageDetails, DetailType } from '../../common/testTypes.js'; @@ -81,4 +82,22 @@ suite('Code Coverage Decorations', () => { // Verify that the ranges are generated correctly await assertRanges(model); }); + + test('hasInlineCoverageDetails context key', () => { + // Test that CoverageDetailsModel with ranges indicates inline coverage is available + const detailsWithRanges: CoverageDetails[] = [ + { location: new Range(1, 0, 2, 0), type: DetailType.Statement, count: 1 }, + ]; + const modelWithRanges = new CoverageDetailsModel(detailsWithRanges, textModel); + + // Should have ranges available for inline display + assert.strictEqual(modelWithRanges.ranges.length > 0, true, 'Model with coverage details should have ranges'); + + // Test that empty coverage details indicates no inline coverage + const emptyDetails: CoverageDetails[] = []; + const emptyModel = new CoverageDetailsModel(emptyDetails, textModel); + + // Should have no ranges available for inline display + assert.strictEqual(emptyModel.ranges.length === 0, true, 'Model with no coverage details should have no ranges'); + }); }); From a4bb4185849cb367b5ba69e2f7480d827c5a5076 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Wed, 6 Aug 2025 10:09:45 -0700 Subject: [PATCH 0053/2080] Fix possible race when updating code blocks Fixes #260080 --- .../workbench/contrib/chat/browser/codeBlockPart.ts | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/vs/workbench/contrib/chat/browser/codeBlockPart.ts b/src/vs/workbench/contrib/chat/browser/codeBlockPart.ts index 4b8fe8eb954ce..9f672c4d1b294 100644 --- a/src/vs/workbench/contrib/chat/browser/codeBlockPart.ts +++ b/src/vs/workbench/contrib/chat/browser/codeBlockPart.ts @@ -413,8 +413,8 @@ export class CodeBlockPart extends Disposable { this.layout(width); } - await this.updateEditor(data); - if (this.isDisposed) { + const didUpdate = await this.updateEditor(data); + if (!didUpdate || this.isDisposed || this.currentCodeBlockData !== data) { return; } @@ -448,6 +448,7 @@ export class CodeBlockPart extends Disposable { reset() { this.clearWidgets(); + this.currentCodeBlockData = undefined; } private clearWidgets() { @@ -455,8 +456,12 @@ export class CodeBlockPart extends Disposable { GlyphHoverController.get(this.editor)?.hideGlyphHover(); } - private async updateEditor(data: ICodeBlockData): Promise { + private async updateEditor(data: ICodeBlockData): Promise { const textModel = await data.textModel; + if (this.isDisposed || this.currentCodeBlockData !== data || textModel.isDisposed()) { + return false; + } + this.editor.setModel(textModel); if (data.range) { this.editor.setSelection(data.range); @@ -464,6 +469,8 @@ export class CodeBlockPart extends Disposable { } this.updateContexts(data); + + return true; } private getVulnerabilitiesLabel(): string { From 98e8ccdfcf06de0634af8a76daac7f4f9e887877 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Wed, 6 Aug 2025 10:22:23 -0700 Subject: [PATCH 0054/2080] Move some of our checks to use tsgo Also removing for CI everything for now --- .vscode/settings.json | 16 ++-------------- build/azure-pipelines/product-compile.yml | 4 ---- package.json | 4 ++-- .../markdown/browser/markedKatexSupport.ts | 2 +- 4 files changed, 5 insertions(+), 21 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 1208702206c50..7f9aa7c66d156 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,7 +1,6 @@ { // --- Chat --- // "inlineChat.enableV2": true, - // --- Editor --- "editor.insertSpaces": false, "editor.experimental.asyncTokenization": true, @@ -10,7 +9,6 @@ // "editor.experimental.preferTreeSitter.typescript": true, // "editor.experimental.preferTreeSitter.regex": true, // "editor.experimental.preferTreeSitter.css": true, - // --- Language Specific --- "[plaintext]": { "files.insertFinalNewline": false @@ -30,7 +28,6 @@ "[github-issues]": { "editor.wordWrap": "on" }, - // --- Files --- "files.trimTrailingWhitespace": true, "files.insertFinalNewline": true, @@ -73,7 +70,6 @@ "build/npm/*.js": true, "build/*.js": true }, - // --- Search --- "search.exclude": { "**/node_modules": true, @@ -95,7 +91,6 @@ "src/vs/editor/test/node/diffing/fixtures/**": true, "build/loader.min": true }, - // --- TypeScript --- "typescript.tsdk": "node_modules/typescript/lib", "typescript.preferences.importModuleSpecifier": "relative", @@ -108,7 +103,6 @@ "vscode-notebook-renderer", "src/vs/workbench/workbench.web.main.internal.ts" ], - // --- Languages --- "json.schemas": [ { @@ -125,7 +119,6 @@ } ], "css.format.spaceAroundSelectorSeparator": true, - // --- Git --- "git.ignoreLimitWarning": true, "git.branchProtection": [ @@ -143,7 +136,6 @@ "ts": "warning", "eslint": "warning" }, - // --- GitHub --- "githubPullRequests.experimental.createView": true, "githubPullRequests.assignCreated": "${user}", @@ -153,7 +145,6 @@ ], "githubPullRequests.codingAgent.enabled": true, "githubPullRequests.codingAgent.uiIntegration": true, - // --- Testing & Debugging --- "testing.autoRun.mode": "rerun", "debug.javascript.terminalOptions": { @@ -167,7 +158,6 @@ "${workspaceFolder}/extensions/*/out/**/*.js", ] }, - // --- Coverage --- "lcov.path": [ "./.build/coverage/lcov.info", @@ -182,7 +172,6 @@ } } ], - // --- Tools --- "npm.exclude": "**/extensions/**", "eslint.useFlatConfig": true, @@ -201,14 +190,13 @@ "git", "sash" ], - // --- Workbench --- "remote.extensionKind": { "msjsdiag.debugger-for-chrome": "workspace" }, "terminal.integrated.suggest.enabled": true, "application.experimental.rendererProfiling": true, - "editor.aiStats.enabled": true, // Team selfhosting on ai stats - "chat.checkpoints.showFileChanges": true + "chat.checkpoints.showFileChanges": true, + "typescript.experimental.useTsgo": true } diff --git a/build/azure-pipelines/product-compile.yml b/build/azure-pipelines/product-compile.yml index f1ab590c7d98e..bf2cf85a07c80 100644 --- a/build/azure-pipelines/product-compile.yml +++ b/build/azure-pipelines/product-compile.yml @@ -109,10 +109,6 @@ steps: GITHUB_TOKEN: "$(github-distro-mixin-password)" displayName: Compile & Hygiene (OSS) - - script: npm run compile-check-ts-native - displayName: Compile TS Native (OSS) - continueOnError: true - - ${{ else }}: - script: npm exec -- npm-run-all -lp core-ci extensions-ci hygiene eslint valid-layers-check define-class-fields-check vscode-dts-compile-check tsec-compile-check env: diff --git a/package.json b/package.json index 53f8ecd1d88b5..6e334c08c4fee 100644 --- a/package.json +++ b/package.json @@ -44,8 +44,8 @@ "download-builtin-extensions-cg": "node build/lib/builtInExtensionsCG.js", "monaco-compile-check": "tsc -p src/tsconfig.monaco.json --noEmit", "tsec-compile-check": "node node_modules/tsec/bin/tsec -p src/tsconfig.tsec.json", - "vscode-dts-compile-check": "tsc -p src/tsconfig.vscode-dts.json && tsc -p src/tsconfig.vscode-proposed-dts.json", - "valid-layers-check": "node build/checker/layersChecker.js && tsc -p build/checker/tsconfig.browser.json && tsc -p build/checker/tsconfig.worker.json && tsc -p build/checker/tsconfig.node.json && tsc -p build/checker/tsconfig.electron-browser.json && tsc -p build/checker/tsconfig.electron-main.json && tsc -p build/checker/tsconfig.electron-utility.json", + "vscode-dts-compile-check": "tsgo --project src/tsconfig.vscode-dts.json && tsgo --project src/tsconfig.vscode-proposed-dts.json", + "valid-layers-check": "node build/checker/layersChecker.js && tsgo --project build/checker/tsconfig.browser.json && tsgo --project build/checker/tsconfig.worker.json && tsgo --project build/checker/tsconfig.node.json && tsgo --project build/checker/tsconfig.electron-browser.json && tsgo --project build/checker/tsconfig.electron-main.json && tsgo --project build/checker/tsconfig.electron-utility.json", "define-class-fields-check": "node build/lib/propertyInitOrderChecker.js && tsc -p src/tsconfig.defineClassFields.json", "update-distro": "node build/npm/update-distro.mjs", "web": "echo 'npm run web' is replaced by './scripts/code-server' or './scripts/code-web'", diff --git a/src/vs/workbench/contrib/markdown/browser/markedKatexSupport.ts b/src/vs/workbench/contrib/markdown/browser/markedKatexSupport.ts index ff0e35419333f..c4ed228e3a0c9 100644 --- a/src/vs/workbench/contrib/markdown/browser/markedKatexSupport.ts +++ b/src/vs/workbench/contrib/markdown/browser/markedKatexSupport.ts @@ -113,7 +113,7 @@ export class MarkedKatexSupport { private static _katex?: typeof import('katex').default; private static _katexPromise = new Lazy(async () => { - this._katex = await importAMDNodeModule('katex', 'dist/katex.min.js'); + this._katex = await importAMDNodeModule('katex', 'dist/katex.min.js'); return this._katex; }); From 4dc82f4021bc2b2b3bf795cfa96f1c1d21844393 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Wed, 6 Aug 2025 10:24:40 -0700 Subject: [PATCH 0055/2080] reset settings --- .vscode/settings.json | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 7f9aa7c66d156..1208702206c50 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,6 +1,7 @@ { // --- Chat --- // "inlineChat.enableV2": true, + // --- Editor --- "editor.insertSpaces": false, "editor.experimental.asyncTokenization": true, @@ -9,6 +10,7 @@ // "editor.experimental.preferTreeSitter.typescript": true, // "editor.experimental.preferTreeSitter.regex": true, // "editor.experimental.preferTreeSitter.css": true, + // --- Language Specific --- "[plaintext]": { "files.insertFinalNewline": false @@ -28,6 +30,7 @@ "[github-issues]": { "editor.wordWrap": "on" }, + // --- Files --- "files.trimTrailingWhitespace": true, "files.insertFinalNewline": true, @@ -70,6 +73,7 @@ "build/npm/*.js": true, "build/*.js": true }, + // --- Search --- "search.exclude": { "**/node_modules": true, @@ -91,6 +95,7 @@ "src/vs/editor/test/node/diffing/fixtures/**": true, "build/loader.min": true }, + // --- TypeScript --- "typescript.tsdk": "node_modules/typescript/lib", "typescript.preferences.importModuleSpecifier": "relative", @@ -103,6 +108,7 @@ "vscode-notebook-renderer", "src/vs/workbench/workbench.web.main.internal.ts" ], + // --- Languages --- "json.schemas": [ { @@ -119,6 +125,7 @@ } ], "css.format.spaceAroundSelectorSeparator": true, + // --- Git --- "git.ignoreLimitWarning": true, "git.branchProtection": [ @@ -136,6 +143,7 @@ "ts": "warning", "eslint": "warning" }, + // --- GitHub --- "githubPullRequests.experimental.createView": true, "githubPullRequests.assignCreated": "${user}", @@ -145,6 +153,7 @@ ], "githubPullRequests.codingAgent.enabled": true, "githubPullRequests.codingAgent.uiIntegration": true, + // --- Testing & Debugging --- "testing.autoRun.mode": "rerun", "debug.javascript.terminalOptions": { @@ -158,6 +167,7 @@ "${workspaceFolder}/extensions/*/out/**/*.js", ] }, + // --- Coverage --- "lcov.path": [ "./.build/coverage/lcov.info", @@ -172,6 +182,7 @@ } } ], + // --- Tools --- "npm.exclude": "**/extensions/**", "eslint.useFlatConfig": true, @@ -190,13 +201,14 @@ "git", "sash" ], + // --- Workbench --- "remote.extensionKind": { "msjsdiag.debugger-for-chrome": "workspace" }, "terminal.integrated.suggest.enabled": true, "application.experimental.rendererProfiling": true, + "editor.aiStats.enabled": true, // Team selfhosting on ai stats - "chat.checkpoints.showFileChanges": true, - "typescript.experimental.useTsgo": true + "chat.checkpoints.showFileChanges": true } From 2839e2ac1ed4b840f93f3e64fc1c93ac4eca5914 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Wed, 6 Aug 2025 10:25:21 -0700 Subject: [PATCH 0056/2080] Reset extra space --- build/azure-pipelines/product-compile.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/build/azure-pipelines/product-compile.yml b/build/azure-pipelines/product-compile.yml index bf2cf85a07c80..a69942b9d0ccd 100644 --- a/build/azure-pipelines/product-compile.yml +++ b/build/azure-pipelines/product-compile.yml @@ -108,7 +108,6 @@ steps: env: GITHUB_TOKEN: "$(github-distro-mixin-password)" displayName: Compile & Hygiene (OSS) - - ${{ else }}: - script: npm exec -- npm-run-all -lp core-ci extensions-ci hygiene eslint valid-layers-check define-class-fields-check vscode-dts-compile-check tsec-compile-check env: From 7db0d1db7c4b1eaae81feafc159a0cfcf74f4f30 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Wed, 6 Aug 2025 10:27:07 -0700 Subject: [PATCH 0057/2080] Bumping ts versions in script --- package-lock.json | 6 ++++-- package.json | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2093843444679..6cb9bb3633213 100644 --- a/package-lock.json +++ b/package-lock.json @@ -151,7 +151,7 @@ "ts-node": "^10.9.1", "tsec": "0.2.7", "tslib": "^2.6.3", - "typescript": "^5.9.0-dev.20250728", + "typescript": "^6.0.0-dev.20250806", "typescript-eslint": "^8.39.0", "util": "^0.12.4", "webpack": "^5.94.0", @@ -15514,7 +15514,9 @@ "license": "MIT" }, "node_modules/typescript": { - "version": "5.9.0-dev.20250728", + "version": "6.0.0-dev.20250806", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.0-dev.20250806.tgz", + "integrity": "sha512-inDvi8ujsZXA/dSgj8QiSjHSi7fYDnkRck9vvnd400VBY5RSzNl6G3zZXjFZTawwYfETOakld5vQ6a36JuNOBQ==", "dev": true, "license": "Apache-2.0", "bin": { diff --git a/package.json b/package.json index 6e334c08c4fee..0f4ddc202e4e3 100644 --- a/package.json +++ b/package.json @@ -67,7 +67,7 @@ "extensions-ci": "node ./node_modules/gulp/bin/gulp.js extensions-ci", "extensions-ci-pr": "node ./node_modules/gulp/bin/gulp.js extensions-ci-pr", "perf": "node scripts/code-perf.js", - "update-build-ts-version": "npm install typescript@next && tsc -p ./build/tsconfig.build.json" + "update-build-ts-version": "npm install -D typescript@next && npm install -D @typescript/native-preview && tsc -p ./build/tsconfig.build.json" }, "dependencies": { "@microsoft/1ds-core-js": "^3.2.13", @@ -211,7 +211,7 @@ "ts-node": "^10.9.1", "tsec": "0.2.7", "tslib": "^2.6.3", - "typescript": "^5.9.0-dev.20250728", + "typescript": "^6.0.0-dev.20250806", "typescript-eslint": "^8.39.0", "util": "^0.12.4", "webpack": "^5.94.0", From 02ea848986527ba785f8ff261fb107a98ab8e375 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Wed, 6 Aug 2025 10:30:32 -0700 Subject: [PATCH 0058/2080] reset package.json --- package-lock.json | 5137 +++++++++++++++++++++++++++++++-------------- 1 file changed, 3613 insertions(+), 1524 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6cb9bb3633213..663b815916160 100644 --- a/package-lock.json +++ b/package-lock.json @@ -167,8 +167,9 @@ }, "node_modules/@ampproject/remapping": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@jridgewell/gen-mapping": "^0.1.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -179,8 +180,9 @@ }, "node_modules/@azure-rest/ai-translation-text": { "version": "1.0.0-beta.1", + "resolved": "https://registry.npmjs.org/@azure-rest/ai-translation-text/-/ai-translation-text-1.0.0-beta.1.tgz", + "integrity": "sha512-h1xDrmVRbk6eAAqTHxy9Npv543cWteqgop15sVXBQhadOwzHoREn+UqMCzNfvL6/AjiInUlwNSaNQK1ANgobLA==", "dev": true, - "license": "MIT", "dependencies": { "@azure-rest/core-client": "^1.1.0", "@azure/core-auth": "^1.3.0", @@ -194,8 +196,9 @@ }, "node_modules/@azure-rest/core-client": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@azure-rest/core-client/-/core-client-1.4.0.tgz", + "integrity": "sha512-ozTDPBVUDR5eOnMIwhggbnVmOrka4fXCs8n8mvUo4WLLc38kki6bAOByDoVZZPz/pZy2jMt2kwfpvy/UjALj6w==", "dev": true, - "license": "MIT", "dependencies": { "@azure/abort-controller": "^2.0.0", "@azure/core-auth": "^1.3.0", @@ -210,8 +213,9 @@ }, "node_modules/@azure/abort-controller": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", "dev": true, - "license": "MIT", "dependencies": { "tslib": "^2.6.2" }, @@ -221,13 +225,15 @@ }, "node_modules/@azure/core-asynciterator-polyfill": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@azure/core-asynciterator-polyfill/-/core-asynciterator-polyfill-1.0.0.tgz", + "integrity": "sha512-kmv8CGrPfN9SwMwrkiBK9VTQYxdFQEGe0BmQk+M8io56P9KNzpAxcWE/1fxJj7uouwN4kXF0BHW8DNlgx+wtCg==", + "dev": true }, "node_modules/@azure/core-auth": { "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.7.2.tgz", + "integrity": "sha512-Igm/S3fDYmnMq1uKS38Ae1/m37B3zigdlZw+kocwEhh5GjyKjPrXKO2J6rzpC1wAxrNil/jX9BJRqBshyjnF3g==", "dev": true, - "license": "MIT", "dependencies": { "@azure/abort-controller": "^2.0.0", "@azure/core-util": "^1.1.0", @@ -239,6 +245,9 @@ }, "node_modules/@azure/core-http": { "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@azure/core-http/-/core-http-2.3.2.tgz", + "integrity": "sha512-Z4dfbglV9kNZO177CNx4bo5ekFuYwwsvjLiKdZI4r84bYGv3irrbQz7JC3/rUfFH2l4T/W6OFleJaa2X0IaQqw==", + "deprecated": "This package is no longer supported. Please migrate to use @azure/core-rest-pipeline", "dev": true, "license": "MIT", "dependencies": { @@ -264,8 +273,9 @@ }, "node_modules/@azure/core-http/node_modules/@azure/abort-controller": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.0.4.tgz", + "integrity": "sha512-lNUmDRVGpanCsiUN3NWxFTdwmdFI53xwhkTFfHDGTYk46ca7Ind3nanJc+U6Zj9Tv+9nTCWRBscWEW1DyKOpTw==", "dev": true, - "license": "MIT", "dependencies": { "tslib": "^2.0.0" }, @@ -275,8 +285,9 @@ }, "node_modules/@azure/core-http/node_modules/@azure/core-tracing": { "version": "1.0.0-preview.13", + "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.0-preview.13.tgz", + "integrity": "sha512-KxDlhXyMlh2Jhj2ykX6vNEU0Vou4nHr025KoSEiz7cS3BNiHNaZcdECk/DmLkEB0as5T7b/TpRcehJ5yV6NeXQ==", "dev": true, - "license": "MIT", "dependencies": { "@opentelemetry/api": "^1.0.1", "tslib": "^2.2.0" @@ -287,16 +298,18 @@ }, "node_modules/@azure/core-http/node_modules/uuid": { "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true, - "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/@azure/core-lro": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@azure/core-lro/-/core-lro-2.2.1.tgz", + "integrity": "sha512-HE6PBl+mlKa0eBsLwusHqAqjLc5n9ByxeDo3Hz4kF3B1hqHvRkBr4oMgoT6tX7Hc3q97KfDctDUon7EhvoeHPA==", "dev": true, - "license": "MIT", "dependencies": { "@azure/abort-controller": "^1.0.0", "@azure/core-tracing": "1.0.0-preview.13", @@ -309,8 +322,9 @@ }, "node_modules/@azure/core-lro/node_modules/@azure/abort-controller": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.0.4.tgz", + "integrity": "sha512-lNUmDRVGpanCsiUN3NWxFTdwmdFI53xwhkTFfHDGTYk46ca7Ind3nanJc+U6Zj9Tv+9nTCWRBscWEW1DyKOpTw==", "dev": true, - "license": "MIT", "dependencies": { "tslib": "^2.0.0" }, @@ -320,8 +334,9 @@ }, "node_modules/@azure/core-lro/node_modules/@azure/core-tracing": { "version": "1.0.0-preview.13", + "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.0-preview.13.tgz", + "integrity": "sha512-KxDlhXyMlh2Jhj2ykX6vNEU0Vou4nHr025KoSEiz7cS3BNiHNaZcdECk/DmLkEB0as5T7b/TpRcehJ5yV6NeXQ==", "dev": true, - "license": "MIT", "dependencies": { "@opentelemetry/api": "^1.0.1", "tslib": "^2.2.0" @@ -332,8 +347,9 @@ }, "node_modules/@azure/core-paging": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@azure/core-paging/-/core-paging-1.2.0.tgz", + "integrity": "sha512-ZX1bCjm/MjKPCN6kQD/9GJErYSoKA8YWp6YWoo5EIzcTWlSBLXu3gNaBTUl8usGl+UShiKo7b4Gdy1NSTIlpZg==", "dev": true, - "license": "MIT", "dependencies": { "@azure/core-asynciterator-polyfill": "^1.0.0", "tslib": "^2.2.0" @@ -344,8 +360,9 @@ }, "node_modules/@azure/core-rest-pipeline": { "version": "1.16.0", + "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.16.0.tgz", + "integrity": "sha512-CeuTvsXxCUmEuxH5g/aceuSl6w2EugvNHKAtKKVdiX915EjJJxAwfzNNWZreNnbxHZ2fi0zaM6wwS23x2JVqSQ==", "dev": true, - "license": "MIT", "dependencies": { "@azure/abort-controller": "^2.0.0", "@azure/core-auth": "^1.4.0", @@ -362,8 +379,9 @@ }, "node_modules/@azure/core-tracing": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.1.2.tgz", + "integrity": "sha512-dawW9ifvWAWmUm9/h+/UQ2jrdvjCJ7VJEuCJ6XVNudzcOwm53BFZH4Q845vjfgoUAM8ZxokvVNxNxAITc502YA==", "dev": true, - "license": "MIT", "dependencies": { "tslib": "^2.6.2" }, @@ -373,8 +391,9 @@ }, "node_modules/@azure/core-util": { "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.9.0.tgz", + "integrity": "sha512-AfalUQ1ZppaKuxPPMsFEUdX6GZPB3d9paR9d/TTL7Ow2De8cJaC7ibi7kWVlFAVPCYo31OcnGymc0R89DX8Oaw==", "dev": true, - "license": "MIT", "dependencies": { "@azure/abort-controller": "^2.0.0", "tslib": "^2.6.2" @@ -385,8 +404,9 @@ }, "node_modules/@azure/logger": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.0.3.tgz", + "integrity": "sha512-aK4s3Xxjrx3daZr3VylxejK3vG5ExXck5WOHDJ8in/k9AqlfIyFMMT1uG7u8mNjX+QRILTIn0/Xgschfh/dQ9g==", "dev": true, - "license": "MIT", "dependencies": { "tslib": "^2.2.0" }, @@ -396,8 +416,9 @@ }, "node_modules/@azure/storage-blob": { "version": "12.8.0", + "resolved": "https://registry.npmjs.org/@azure/storage-blob/-/storage-blob-12.8.0.tgz", + "integrity": "sha512-c8+Wz19xauW0bGkTCoqZH4dYfbtBniPiGiRQOn1ca6G5jsjr4azwaTk9gwjVY8r3vY2Taf95eivLzipfIfiS4A==", "dev": true, - "license": "MIT", "dependencies": { "@azure/abort-controller": "^1.0.0", "@azure/core-http": "^2.0.0", @@ -414,8 +435,9 @@ }, "node_modules/@azure/storage-blob/node_modules/@azure/abort-controller": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.0.4.tgz", + "integrity": "sha512-lNUmDRVGpanCsiUN3NWxFTdwmdFI53xwhkTFfHDGTYk46ca7Ind3nanJc+U6Zj9Tv+9nTCWRBscWEW1DyKOpTw==", "dev": true, - "license": "MIT", "dependencies": { "tslib": "^2.0.0" }, @@ -425,8 +447,9 @@ }, "node_modules/@azure/storage-blob/node_modules/@azure/core-tracing": { "version": "1.0.0-preview.13", + "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.0-preview.13.tgz", + "integrity": "sha512-KxDlhXyMlh2Jhj2ykX6vNEU0Vou4nHr025KoSEiz7cS3BNiHNaZcdECk/DmLkEB0as5T7b/TpRcehJ5yV6NeXQ==", "dev": true, - "license": "MIT", "dependencies": { "@opentelemetry/api": "^1.0.1", "tslib": "^2.2.0" @@ -437,6 +460,8 @@ }, "node_modules/@babel/code-frame": { "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "dev": true, "license": "MIT", "dependencies": { @@ -450,16 +475,18 @@ }, "node_modules/@babel/compat-data": { "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", + "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.10.tgz", + "integrity": "sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw==", "dev": true, - "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.18.6", @@ -487,16 +514,18 @@ }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/generator": { "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", "dev": true, - "license": "MIT", "dependencies": { "@babel/types": "^7.23.0", "@jridgewell/gen-mapping": "^0.3.2", @@ -509,8 +538,9 @@ }, "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", "dev": true, - "license": "MIT", "dependencies": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -522,8 +552,9 @@ }, "node_modules/@babel/helper-compilation-targets": { "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz", + "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==", "dev": true, - "license": "MIT", "dependencies": { "@babel/compat-data": "^7.18.8", "@babel/helper-validator-option": "^7.18.6", @@ -539,24 +570,27 @@ }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/helper-environment-visitor": { "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/template": "^7.22.15", "@babel/types": "^7.23.0" @@ -567,8 +601,9 @@ }, "node_modules/@babel/helper-hoist-variables": { "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/types": "^7.22.5" }, @@ -578,8 +613,9 @@ }, "node_modules/@babel/helper-module-imports": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", "dev": true, - "license": "MIT", "dependencies": { "@babel/types": "^7.18.6" }, @@ -589,8 +625,9 @@ }, "node_modules/@babel/helper-module-transforms": { "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz", + "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", @@ -607,8 +644,9 @@ }, "node_modules/@babel/helper-simple-access": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", + "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", "dev": true, - "license": "MIT", "dependencies": { "@babel/types": "^7.18.6" }, @@ -618,8 +656,9 @@ }, "node_modules/@babel/helper-split-export-declaration": { "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dev": true, - "license": "MIT", "dependencies": { "@babel/types": "^7.22.5" }, @@ -629,6 +668,8 @@ }, "node_modules/@babel/helper-string-parser": { "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", "dev": true, "license": "MIT", "engines": { @@ -637,6 +678,8 @@ }, "node_modules/@babel/helper-validator-identifier": { "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", "dev": true, "license": "MIT", "engines": { @@ -645,14 +688,17 @@ }, "node_modules/@babel/helper-validator-option": { "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.0.tgz", + "integrity": "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==", "dev": true, "license": "MIT", "dependencies": { @@ -665,6 +711,8 @@ }, "node_modules/@babel/parser": { "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", + "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", "dev": true, "license": "MIT", "dependencies": { @@ -679,6 +727,8 @@ }, "node_modules/@babel/template": { "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz", + "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", "dev": true, "license": "MIT", "dependencies": { @@ -692,8 +742,9 @@ }, "node_modules/@babel/traverse": { "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/code-frame": "^7.22.13", "@babel/generator": "^7.23.0", @@ -712,14 +763,17 @@ }, "node_modules/@babel/traverse/node_modules/globals": { "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/@babel/types": { "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", + "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", "dev": true, "license": "MIT", "dependencies": { @@ -732,13 +786,15 @@ }, "node_modules/@bcoe/v8-coverage": { "version": "0.2.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, - "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "0.3.9" }, @@ -748,8 +804,9 @@ }, "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, - "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -757,16 +814,18 @@ }, "node_modules/@discoveryjs/json-ext": { "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz", + "integrity": "sha512-Fxt+AfXgjMoin2maPIYzFZnQjAXjAL0PHscM5pRTtatFqB+vZxAM9tLp2Optnuw3QOQC40jTNeGYFOMvyf7v9g==", "dev": true, - "license": "MIT", "engines": { "node": ">=10.0.0" } }, "node_modules/@electron/get": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.2.tgz", + "integrity": "sha512-eFZVFoRXb3GFGd7Ak7W4+6jBl9wBtiZ4AaYOse97ej6mKj5tkyO0dUnUChs1IhJZtx1BENo4/p4WUTXpi6vT+g==", "dev": true, - "license": "MIT", "dependencies": { "debug": "^4.1.1", "env-paths": "^2.2.0", @@ -785,8 +844,9 @@ }, "node_modules/@electron/get/node_modules/fs-extra": { "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, - "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", @@ -798,40 +858,45 @@ }, "node_modules/@electron/get/node_modules/jsonfile": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, - "license": "MIT", "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "node_modules/@electron/get/node_modules/progress": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/@electron/get/node_modules/semver": { "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@electron/get/node_modules/universalify": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 4.0.0" } }, "node_modules/@es-joy/jsdoccomment": { "version": "0.48.0", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.48.0.tgz", + "integrity": "sha512-G6QUWIcC+KvSwXNsJyDTHvqUdNoAVJPPgkc3+Uk4WBKqZvoXhlvazOgm9aL0HwihJLQf0l+tOE2UFzXBqCqgDw==", "dev": true, - "license": "MIT", "dependencies": { "comment-parser": "1.4.1", "esquery": "^1.6.0", @@ -843,6 +908,8 @@ }, "node_modules/@eslint-community/eslint-utils": { "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", "dev": true, "license": "MIT", "dependencies": { @@ -860,16 +927,18 @@ }, "node_modules/@eslint-community/regexpp": { "version": "4.11.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.1.tgz", + "integrity": "sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==", "dev": true, - "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/config-array": { "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz", + "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@eslint/object-schema": "^2.1.4", "debug": "^4.3.1", @@ -881,16 +950,18 @@ }, "node_modules/@eslint/core": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.6.0.tgz", + "integrity": "sha512-8I2Q8ykA4J0x0o7cg67FPVnehcqWTBehu/lmY+bolPFHGjh49YzGBMXTvpqVgEbBdvNCSxj6iFgiIyHzf03lzg==", "dev": true, - "license": "Apache-2.0", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@eslint/eslintrc": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", + "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", "dev": true, - "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -911,22 +982,26 @@ }, "node_modules/@eslint/js": { "version": "9.11.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.11.1.tgz", + "integrity": "sha512-/qu+TWz8WwPWc7/HcIJKi+c+MOm46GdVaSlTTQcaqaL53+GsoA6MxWp5PtTx48qbSP7ylM1Kn7nhvkugfJvRSA==", "dev": true, - "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@eslint/object-schema": { "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", + "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", "dev": true, - "license": "Apache-2.0", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@eslint/plugin-kit": { "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.7.tgz", + "integrity": "sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -939,6 +1014,8 @@ }, "node_modules/@eslint/plugin-kit/node_modules/@eslint/core": { "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.12.0.tgz", + "integrity": "sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -950,8 +1027,9 @@ }, "node_modules/@gulp-sourcemaps/identity-map": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/identity-map/-/identity-map-2.0.1.tgz", + "integrity": "sha512-Tb+nSISZku+eQ4X1lAkevcQa+jknn/OVUgZ3XCxEKIsLsqYuPoJwJOPQeaOk75X3WPftb29GWY1eqE7GLsXb1Q==", "dev": true, - "license": "MIT", "dependencies": { "acorn": "^6.4.1", "normalize-path": "^3.0.0", @@ -965,8 +1043,9 @@ }, "node_modules/@gulp-sourcemaps/identity-map/node_modules/acorn": { "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", "dev": true, - "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -976,13 +1055,15 @@ }, "node_modules/@gulp-sourcemaps/identity-map/node_modules/picocolors": { "version": "0.2.1", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true }, "node_modules/@gulp-sourcemaps/identity-map/node_modules/postcss": { "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, - "license": "MIT", "dependencies": { "picocolors": "^0.2.1", "source-map": "^0.6.1" @@ -997,8 +1078,9 @@ }, "node_modules/@gulp-sourcemaps/map-sources": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/map-sources/-/map-sources-1.0.0.tgz", + "integrity": "sha1-iQrnxdjId/bThIYCFazp1+yUW9o= sha512-o/EatdaGt8+x2qpb0vFLC/2Gug/xYPRXb6a+ET1wGYKozKN3krDWC/zZFZAtrzxJHuDL12mwdfEFKcKMNvc55A==", "dev": true, - "license": "MIT", "dependencies": { "normalize-path": "^2.0.1", "through2": "^2.0.3" @@ -1009,8 +1091,9 @@ }, "node_modules/@gulp-sourcemaps/map-sources/node_modules/normalize-path": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", "dev": true, - "license": "MIT", "dependencies": { "remove-trailing-separator": "^1.0.1" }, @@ -1020,8 +1103,9 @@ }, "node_modules/@gulp-sourcemaps/map-sources/node_modules/readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, - "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -1034,8 +1118,9 @@ }, "node_modules/@gulp-sourcemaps/map-sources/node_modules/through2": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/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" @@ -1043,8 +1128,9 @@ }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=12.22" }, @@ -1055,8 +1141,9 @@ }, "node_modules/@humanwhocodes/retry": { "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.0.tgz", + "integrity": "sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=18.18" }, @@ -1067,8 +1154,9 @@ }, "node_modules/@isaacs/cliui": { "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@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", @@ -1083,8 +1171,9 @@ }, "node_modules/@isaacs/cliui/node_modules/ansi-regex": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -1094,8 +1183,9 @@ }, "node_modules/@isaacs/cliui/node_modules/ansi-styles": { "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -1105,13 +1195,15 @@ }, "node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/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", @@ -1126,8 +1218,9 @@ }, "node_modules/@isaacs/cliui/node_modules/strip-ansi": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -1140,8 +1233,9 @@ }, "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { "version": "8.1.0", + "resolved": "https://registry.npmjs.org/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", @@ -1156,16 +1250,18 @@ }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@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.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", "dev": true, - "license": "MIT", "dependencies": { "@jridgewell/set-array": "^1.0.0", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -1176,22 +1272,26 @@ }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/set-array": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/source-map": { "version": "0.3.10", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.10.tgz", + "integrity": "sha512-0pPkgz9dY+bijgistcTTJ5mR+ocqRXLuhXHYdzoMmmoJ2C9S46RCm2GMUbatPEUK9Yjy26IrAy8D/M00lLkv+Q==", "dev": true, "license": "MIT", "dependencies": { @@ -1201,6 +1301,8 @@ }, "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { "version": "0.3.12", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz", + "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==", "dev": true, "license": "MIT", "dependencies": { @@ -1210,13 +1312,16 @@ }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz", + "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==", "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, - "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -1224,8 +1329,9 @@ }, "node_modules/@koa/cors": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@koa/cors/-/cors-5.0.0.tgz", + "integrity": "sha512-x/iUDjcS90W69PryLDIMgFyV21YLTnG9zOpPXS7Bkt2b8AsY3zZsIpOLBkYr9fBcF3HbkKaER5hOBZLfpLgYNw==", "dev": true, - "license": "MIT", "dependencies": { "vary": "^1.1.2" }, @@ -1235,6 +1341,8 @@ }, "node_modules/@koa/router": { "version": "13.1.0", + "resolved": "https://registry.npmjs.org/@koa/router/-/router-13.1.0.tgz", + "integrity": "sha512-mNVu1nvkpSd8Q8gMebGbCkDWJ51ODetrFvLKYusej+V0ByD4btqHYnPIzTBLXnQMVUlm/oxVwqmWBY3zQfZilw==", "dev": true, "license": "MIT", "dependencies": { @@ -1248,6 +1356,8 @@ }, "node_modules/@malept/cross-spawn-promise": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz", + "integrity": "sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==", "dev": true, "funding": [ { @@ -1269,7 +1379,8 @@ }, "node_modules/@microsoft/1ds-core-js": { "version": "3.2.13", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@microsoft/1ds-core-js/-/1ds-core-js-3.2.13.tgz", + "integrity": "sha512-CluYTRWcEk0ObG5EWFNWhs87e2qchJUn0p2D21ZUa3PWojPZfPSBs4//WIE0MYV8Qg1Hdif2ZTwlM7TbYUjfAg==", "dependencies": { "@microsoft/applicationinsights-core-js": "2.8.15", "@microsoft/applicationinsights-shims": "^2.0.2", @@ -1278,7 +1389,8 @@ }, "node_modules/@microsoft/1ds-post-js": { "version": "3.2.13", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@microsoft/1ds-post-js/-/1ds-post-js-3.2.13.tgz", + "integrity": "sha512-HgS574fdD19Bo2vPguyznL4eDw7Pcm1cVNpvbvBLWiW3x4e1FCQ3VMXChWnAxCae8Hb0XqlA2sz332ZobBavTA==", "dependencies": { "@microsoft/1ds-core-js": "3.2.13", "@microsoft/applicationinsights-shims": "^2.0.2", @@ -1287,7 +1399,8 @@ }, "node_modules/@microsoft/applicationinsights-core-js": { "version": "2.8.15", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-core-js/-/applicationinsights-core-js-2.8.15.tgz", + "integrity": "sha512-yYAs9MyjGr2YijQdUSN9mVgT1ijI1FPMgcffpaPmYbHAVbQmF7bXudrBWHxmLzJlwl5rfep+Zgjli2e67lwUqQ==", "dependencies": { "@microsoft/applicationinsights-shims": "2.0.2", "@microsoft/dynamicproto-js": "^1.1.9" @@ -1298,16 +1411,19 @@ }, "node_modules/@microsoft/applicationinsights-shims": { "version": "2.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-shims/-/applicationinsights-shims-2.0.2.tgz", + "integrity": "sha512-PoHEgsnmcqruLNHZ/amACqdJ6YYQpED0KSRe6J7gIJTtpZC1FfFU9b1fmDKDKtFoUSrPzEh1qzO3kmRZP0betg==" }, "node_modules/@microsoft/dynamicproto-js": { "version": "1.1.9", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@microsoft/dynamicproto-js/-/dynamicproto-js-1.1.9.tgz", + "integrity": "sha512-n1VPsljTSkthsAFYdiWfC+DKzK2WwcRp83Y1YAqdX552BstvsDjft9YXppjUzp11BPsapDoO1LDgrDB0XVsfNQ==" }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, - "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -1318,16 +1434,18 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, - "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, - "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -1338,6 +1456,8 @@ }, "node_modules/@octokit/auth-token": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-6.0.0.tgz", + "integrity": "sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w==", "dev": true, "license": "MIT", "engines": { @@ -1346,6 +1466,8 @@ }, "node_modules/@octokit/core": { "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-7.0.3.tgz", + "integrity": "sha512-oNXsh2ywth5aowwIa7RKtawnkdH6LgU1ztfP9AIUCQCvzysB+WeU8o2kyyosDPwBZutPpjZDKPQGIzzrfTWweQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1363,6 +1485,8 @@ }, "node_modules/@octokit/endpoint": { "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-11.0.0.tgz", + "integrity": "sha512-hoYicJZaqISMAI3JfaDr1qMNi48OctWuOih1m80bkYow/ayPw6Jj52tqWJ6GEoFTk1gBqfanSoI1iY99Z5+ekQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1375,6 +1499,8 @@ }, "node_modules/@octokit/graphql": { "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-9.0.1.tgz", + "integrity": "sha512-j1nQNU1ZxNFx2ZtKmL4sMrs4egy5h65OMDmSbVyuCzjOcwsHq6EaYjOTGXPQxgfiN8dJ4CriYHk6zF050WEULg==", "dev": true, "license": "MIT", "dependencies": { @@ -1388,11 +1514,15 @@ }, "node_modules/@octokit/openapi-types": { "version": "25.1.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-25.1.0.tgz", + "integrity": "sha512-idsIggNXUKkk0+BExUn1dQ92sfysJrje03Q0bv0e+KPLrvyqZF8MnBpFz8UNfYDwB3Ie7Z0TByjWfzxt7vseaA==", "dev": true, "license": "MIT" }, "node_modules/@octokit/plugin-paginate-rest": { "version": "13.1.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-13.1.1.tgz", + "integrity": "sha512-q9iQGlZlxAVNRN2jDNskJW/Cafy7/XE52wjZ5TTvyhyOD904Cvx//DNyoO3J/MXJ0ve3rPoNWKEg5iZrisQSuw==", "dev": true, "license": "MIT", "dependencies": { @@ -1407,6 +1537,8 @@ }, "node_modules/@octokit/plugin-request-log": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-6.0.0.tgz", + "integrity": "sha512-UkOzeEN3W91/eBq9sPZNQ7sUBvYCqYbrrD8gTbBuGtHEuycE4/awMXcYvx6sVYo7LypPhmQwwpUe4Yyu4QZN5Q==", "dev": true, "license": "MIT", "engines": { @@ -1418,6 +1550,8 @@ }, "node_modules/@octokit/plugin-rest-endpoint-methods": { "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-16.0.0.tgz", + "integrity": "sha512-kJVUQk6/dx/gRNLWUnAWKFs1kVPn5O5CYZyssyEoNYaFedqZxsfYs7DwI3d67hGz4qOwaJ1dpm07hOAD1BXx6g==", "dev": true, "license": "MIT", "dependencies": { @@ -1432,6 +1566,8 @@ }, "node_modules/@octokit/request": { "version": "10.0.3", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-10.0.3.tgz", + "integrity": "sha512-V6jhKokg35vk098iBqp2FBKunk3kMTXlmq+PtbV9Gl3TfskWlebSofU9uunVKhUN7xl+0+i5vt0TGTG8/p/7HA==", "dev": true, "license": "MIT", "dependencies": { @@ -1447,6 +1583,8 @@ }, "node_modules/@octokit/request-error": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-7.0.0.tgz", + "integrity": "sha512-KRA7VTGdVyJlh0cP5Tf94hTiYVVqmt2f3I6mnimmaVz4UG3gQV/k4mDJlJv3X67iX6rmN7gSHCF8ssqeMnmhZg==", "dev": true, "license": "MIT", "dependencies": { @@ -1458,6 +1596,8 @@ }, "node_modules/@octokit/rest": { "version": "22.0.0", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-22.0.0.tgz", + "integrity": "sha512-z6tmTu9BTnw51jYGulxrlernpsQYXpui1RK21vmXn8yF5bp6iX16yfTtJYGK5Mh1qDkvDOmp2n8sRMcQmR8jiA==", "dev": true, "license": "MIT", "dependencies": { @@ -1472,6 +1612,8 @@ }, "node_modules/@octokit/types": { "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-14.1.0.tgz", + "integrity": "sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g==", "dev": true, "license": "MIT", "dependencies": { @@ -1480,14 +1622,17 @@ }, "node_modules/@opentelemetry/api": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.0.3.tgz", + "integrity": "sha512-puWxACExDe9nxbBB3lOymQFrLYml2dVOrd7USiVRnSbgXE+KwBu+HxFvxrzfqsiSda9IWsXJG1ef7C1O2/GmKQ==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=8.0.0" } }, "node_modules/@parcel/watcher": { "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", + "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -1519,8 +1664,270 @@ "@parcel/watcher-win32-x64": "2.5.1" } }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", + "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", + "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", + "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", + "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", + "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", + "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", + "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", + "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", + "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", + "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", + "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", + "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", + "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, "node_modules/@parcel/watcher/node_modules/detect-libc": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", "license": "Apache-2.0", "bin": { "detect-libc": "bin/detect-libc.js" @@ -1531,8 +1938,9 @@ }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, - "license": "MIT", "optional": true, "engines": { "node": ">=14" @@ -1540,8 +1948,9 @@ }, "node_modules/@pkgr/core": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", "dev": true, - "license": "MIT", "engines": { "node": "^12.20.0 || ^14.18.0 || >=16.0.0" }, @@ -1551,6 +1960,8 @@ }, "node_modules/@playwright/browser-chromium": { "version": "1.47.2", + "resolved": "https://registry.npmjs.org/@playwright/browser-chromium/-/browser-chromium-1.47.2.tgz", + "integrity": "sha512-tsk9bLcGzIu4k4xI2ixlwDrdJhMqCalUCsSj7TRI8VuvK7cLiJIa5SR0dprKbX+wkku/JMR4EN6g9DMHvfna+Q==", "dev": true, "hasInstallScript": true, "license": "Apache-2.0", @@ -1563,6 +1974,8 @@ }, "node_modules/@playwright/test": { "version": "1.53.2", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.53.2.tgz", + "integrity": "sha512-tEB2U5z74ebBeyfGNZ3Jfg29AnW+5HlWhvHtb/Mqco9pFdZU1ZLNdVb2UtB5CvmiilNr2ZfVH/qMmAROG/XTzw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1577,13 +1990,16 @@ }, "node_modules/@sec-ant/readable-stream": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", + "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", "dev": true, "license": "MIT" }, "node_modules/@sindresorhus/is": { "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -1593,24 +2009,27 @@ }, "node_modules/@sinonjs/commons": { "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "type-detect": "4.0.8" } }, "node_modules/@sinonjs/fake-timers": { "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz", + "integrity": "sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^1.7.0" } }, "node_modules/@sinonjs/samsam": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-6.0.2.tgz", + "integrity": "sha512-jxPRPp9n93ci7b8hMfJOFDPRLFYadN6FSpeROFTR4UNF4i5b+EK6m4QXPO46BDhFgRy1JuS87zAnFOzCUwMJcQ==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^1.6.0", "lodash.get": "^4.4.2", @@ -1619,13 +2038,15 @@ }, "node_modules/@sinonjs/text-encoding": { "version": "0.7.1", - "dev": true, - "license": "(Unlicense OR Apache-2.0)" + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz", + "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", + "dev": true }, "node_modules/@stylistic/eslint-plugin-ts": { "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-ts/-/eslint-plugin-ts-2.8.0.tgz", + "integrity": "sha512-VukJqkRlC2psLKoIHJ+4R3ZxLJfWeizGGX+X5ZxunjXo4MbxRNtwu5UvXuerABg4s2RV6Z3LFTdm0WvI4+RAMQ==", "dev": true, - "license": "MIT", "dependencies": { "@typescript-eslint/utils": "^8.4.0", "eslint-visitor-keys": "^4.0.0", @@ -1640,8 +2061,9 @@ }, "node_modules/@stylistic/eslint-plugin-ts/node_modules/eslint-visitor-keys": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.1.0.tgz", + "integrity": "sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==", "dev": true, - "license": "Apache-2.0", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -1651,8 +2073,9 @@ }, "node_modules/@szmarczak/http-timer": { "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", "dev": true, - "license": "MIT", "dependencies": { "defer-to-connect": "^2.0.0" }, @@ -1662,23 +2085,26 @@ }, "node_modules/@tootallnate/once": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-3.0.0.tgz", + "integrity": "sha512-OAdBVB7rlwvLD+DiecSAyVKzKVmSfXbouCyM5I6wHGi4MGXIyFqErg1IvyJ7PI1e+GYZuZh7cCHV/c4LA8SKMw==", "engines": { "node": ">= 10" } }, "node_modules/@trysound/sax": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", "dev": true, - "license": "ISC", "engines": { "node": ">=10.13.0" } }, "node_modules/@ts-morph/common": { "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.20.0.tgz", + "integrity": "sha512-7uKjByfbPpwuzkstL3L5MQyuXPSKdoNG93Fmi2JoDcTf3pEP731JdRFAduRVkOs8oqxPsXKA+ScrWkdQ8t/I+Q==", "dev": true, - "license": "MIT", "dependencies": { "fast-glob": "^3.2.12", "minimatch": "^7.4.3", @@ -1688,6 +2114,8 @@ }, "node_modules/@ts-morph/common/node_modules/brace-expansion": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1696,8 +2124,9 @@ }, "node_modules/@ts-morph/common/node_modules/minimatch": { "version": "7.4.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz", + "integrity": "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -1710,8 +2139,9 @@ }, "node_modules/@ts-morph/common/node_modules/mkdirp": { "version": "2.1.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.6.tgz", + "integrity": "sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==", "dev": true, - "license": "MIT", "bin": { "mkdirp": "dist/cjs/src/bin.js" }, @@ -1724,28 +2154,33 @@ }, "node_modules/@tsconfig/node10": { "version": "1.0.9", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true }, "node_modules/@tsconfig/node12": { "version": "1.0.11", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true }, "node_modules/@tsconfig/node14": { "version": "1.0.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true }, "node_modules/@tsconfig/node16": { "version": "1.0.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", + "dev": true }, "node_modules/@types/cacheable-request": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", "dev": true, - "license": "MIT", "dependencies": { "@types/http-cache-semantics": "*", "@types/keyv": "^3.1.4", @@ -1755,26 +2190,30 @@ }, "node_modules/@types/color-name": { "version": "1.1.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", + "dev": true }, "node_modules/@types/cookie": { "version": "0.3.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.3.3.tgz", + "integrity": "sha512-LKVP3cgXBT9RYj+t+9FDKwS5tdI+rPBXaNSkma7hvqy35lc7mAokC2zsqWJH0LaqIt3B962nuYI77hsJoT1gow==", + "dev": true }, "node_modules/@types/debug": { "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.9.tgz", + "integrity": "sha512-8Hz50m2eoS56ldRlepxSBa6PWEVCtzUo/92HgLc2qTMnotJNIm7xP+UZhyWoYsyOdd5dxZ+NZLb24rsKyFs2ow==", "dev": true, - "license": "MIT", "dependencies": { "@types/ms": "*" } }, "node_modules/@types/eslint": { "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", "dev": true, - "license": "MIT", "dependencies": { "@types/estree": "*", "@types/json-schema": "*" @@ -1782,6 +2221,8 @@ }, "node_modules/@types/eslint-scope": { "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "dev": true, "license": "MIT", "dependencies": { @@ -1791,18 +2232,22 @@ }, "node_modules/@types/estree": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", "dev": true, "license": "MIT" }, "node_modules/@types/expect": { "version": "1.20.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/expect/-/expect-1.20.4.tgz", + "integrity": "sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==", + "dev": true }, "node_modules/@types/glob": { "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", "dev": true, - "license": "MIT", "optional": true, "dependencies": { "@types/minimatch": "*", @@ -1811,8 +2256,9 @@ }, "node_modules/@types/gulp-svgmin": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/gulp-svgmin/-/gulp-svgmin-1.2.1.tgz", + "integrity": "sha512-qT/Y+C2uWJZoGw4oAjuJGZk+ImmTrx+QZbMGSzf8a1absW3wztrmMPvCF64pdogATDVUSPQDLzPWAFeIxylJTA==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*", "@types/svgo": "^1", @@ -1821,50 +2267,59 @@ }, "node_modules/@types/http-cache-semantics": { "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", "dev": true, "license": "MIT" }, "node_modules/@types/http-proxy-agent": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/http-proxy-agent/-/http-proxy-agent-2.0.1.tgz", + "integrity": "sha512-dgsgbsgI3t+ZkdzF9H19uBaLsurIZJJjJsVpj4mCLp8B6YghQ7jVwyqhaL0PcVtuC3nOi0ZBhAi2Dd9jCUwdFA==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true }, "node_modules/@types/json-schema": { "version": "7.0.15", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true }, "node_modules/@types/kerberos": { "version": "1.1.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/kerberos/-/kerberos-1.1.2.tgz", + "integrity": "sha512-cLixfcXjdj7qohLasmC1G4fh+en4e4g7mFZiG38D+K9rS9BRKFlq1JH5dGkQzICckbu4wM+RcwSa4VRHlBg7Rg==", + "dev": true }, "node_modules/@types/keyv": { "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/minimatch": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", "dev": true, - "license": "MIT", "optional": true }, "node_modules/@types/minimist": { "version": "1.2.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.1.tgz", + "integrity": "sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg==", + "dev": true }, "node_modules/@types/mocha": { "version": "10.0.10", @@ -1875,11 +2330,14 @@ }, "node_modules/@types/ms": { "version": "0.7.32", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.32.tgz", + "integrity": "sha512-xPSg0jm4mqgEkNhowKgZFBNtwoEwF6gJ4Dhww+GFpm3IgtNseHQZ5IqdNwnquZEoANxyDAKDRAdVo4Z72VvD/g==", + "dev": true }, "node_modules/@types/node": { "version": "22.13.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.10.tgz", + "integrity": "sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==", "dev": true, "license": "MIT", "dependencies": { @@ -1888,8 +2346,9 @@ }, "node_modules/@types/node-fetch": { "version": "2.5.12", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.12.tgz", + "integrity": "sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*", "form-data": "^3.0.0" @@ -1897,8 +2356,9 @@ }, "node_modules/@types/node-fetch/node_modules/form-data": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", "dev": true, - "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -1910,68 +2370,78 @@ }, "node_modules/@types/responselike": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", + "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/semver": { "version": "7.5.8", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==" }, "node_modules/@types/sinon": { "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.2.tgz", + "integrity": "sha512-BHn8Bpkapj8Wdfxvh2jWIUoaYB/9/XhsL0oOvBfRagJtKlSl9NWPcFOz2lRukI9szwGxFtYZCTejJSqsGDbdmw==", "dev": true, - "license": "MIT", "dependencies": { "@sinonjs/fake-timers": "^7.1.0" } }, "node_modules/@types/sinon-test": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@types/sinon-test/-/sinon-test-2.4.2.tgz", + "integrity": "sha512-3BX9mk5+o//Xzs5N4bFYxPT+QlPLrqbyNfDWkIGtk9pVIp2Nl8ctsIGXsY3F01DsCd1Zlin3FqAk6V5XqkCyJA==", "dev": true, - "license": "MIT", "dependencies": { "@types/sinon": "*" } }, "node_modules/@types/svgo": { "version": "1.3.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/svgo/-/svgo-1.3.6.tgz", + "integrity": "sha512-AZU7vQcy/4WFEuwnwsNsJnFwupIpbllH1++LXScN6uxT1Z4zPzdrWG97w4/I7eFKFTvfy/bHFStWjdBAg2Vjug==", + "dev": true }, "node_modules/@types/trusted-types": { "version": "1.0.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-1.0.6.tgz", + "integrity": "sha512-230RC8sFeHoT6sSUlRO6a8cAnclO06eeiq1QDfiv2FGCLWFvvERWgwIQD4FWqD9A69BN7Lzee4OXwoMVnnsWDw==", + "dev": true }, "node_modules/@types/tunnel": { "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@types/tunnel/-/tunnel-0.0.3.tgz", + "integrity": "sha512-sOUTGn6h1SfQ+gbgqC364jLFBw2lnFqkgF3q0WovEHRLMrVD1sd5aufqi/aJObLekJO+Aq5z646U4Oxy6shXMA==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/vinyl": { "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.12.tgz", + "integrity": "sha512-Sr2fYMBUVGYq8kj3UthXFAu5UN6ZW+rYr4NACjZQJvHvj+c8lYv0CahmZ2P/r7iUkN44gGUBwqxZkrKXYPb7cw==", "dev": true, - "license": "MIT", "dependencies": { "@types/expect": "^1.20.4", "@types/node": "*" } }, "node_modules/@types/vscode-notebook-renderer": { - "version": "1.72.0", - "dev": true, - "license": "MIT" + "version": "1.72.0", + "resolved": "https://registry.npmjs.org/@types/vscode-notebook-renderer/-/vscode-notebook-renderer-1.72.0.tgz", + "integrity": "sha512-5iTjb39DpLn03ULUwrDR3L2Dy59RV4blSUHy0oLdQuIY11PhgWO4mXIcoFS0VxY1GZQ4IcjSf3ooT2Jrrcahnw==", + "dev": true }, "node_modules/@types/webpack": { "version": "5.28.5", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-5.28.5.tgz", + "integrity": "sha512-wR87cgvxj3p6D0Crt1r5avwqffqPXUkNlnQ1mjU93G7gCuFjufZR4I6j8cz5g1F1tTYpfOOFvly+cmIQwL9wvw==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*", "tapable": "^2.2.0", @@ -1980,37 +2450,44 @@ }, "node_modules/@types/wicg-file-system-access": { "version": "2020.9.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/wicg-file-system-access/-/wicg-file-system-access-2020.9.6.tgz", + "integrity": "sha512-6hogE75Hl2Ov/jgp8ZhDaGmIF/q3J07GtXf8nCJCwKTHq7971po5+DId7grft09zG7plBwpF6ZU0yx9Du4/e1A==", + "dev": true }, "node_modules/@types/windows-foreground-love": { "version": "0.3.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/windows-foreground-love/-/windows-foreground-love-0.3.0.tgz", + "integrity": "sha512-tFUVA/fiofNqOh6lZlymvQiQYPY+cZXZPR9mn9wN6/KS8uwx0zgH4Ij/jmFyRYr+x+DGZWEIeknS2BMi7FZJAQ==", + "dev": true }, "node_modules/@types/winreg": { "version": "1.2.30", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/winreg/-/winreg-1.2.30.tgz", + "integrity": "sha1-kdZxDlNtNFucmwF8V0z2qNpkxRg= sha512-c4m/hnOI1j34i8hXlkZzelE6SXfOqaTWhBp0UgBuwmpiafh22OpsE261Rlg//agZtQHIY5cMgbkX8bnthUFrmA==", + "dev": true }, "node_modules/@types/yauzl": { "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/yazl": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@types/yazl/-/yazl-2.4.2.tgz", + "integrity": "sha512-T+9JH8O2guEjXNxqmybzQ92mJUh2oCwDDMSSimZSe1P+pceZiFROZLYmcbqkzV5EUwz6VwcKXCO2S2yUpra6XQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "8.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.39.0.tgz", + "integrity": "sha512-bhEz6OZeUR+O/6yx9Jk6ohX6H9JSFTaiY0v9/PuKT3oGK0rn0jNplLmyFUGV+a9gfYnVNwGDwS/UkLIuXNb2Rw==", "dev": true, "license": "MIT", "dependencies": { @@ -2039,6 +2516,8 @@ }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", "dev": true, "license": "MIT", "engines": { @@ -2047,6 +2526,8 @@ }, "node_modules/@typescript-eslint/parser": { "version": "8.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.39.0.tgz", + "integrity": "sha512-g3WpVQHngx0aLXn6kfIYCZxM6rRJlWzEkVpqEFLT3SgEDsp9cpCbxxgwnE504q4H+ruSDh/VGS6nqZIDynP+vg==", "dev": true, "license": "MIT", "dependencies": { @@ -2070,6 +2551,8 @@ }, "node_modules/@typescript-eslint/project-service": { "version": "8.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.39.0.tgz", + "integrity": "sha512-CTzJqaSq30V/Z2Og9jogzZt8lJRR5TKlAdXmWgdu4hgcC9Kww5flQ+xFvMxIBWVNdxJO7OifgdOK4PokMIWPew==", "dev": true, "license": "MIT", "dependencies": { @@ -2090,6 +2573,8 @@ }, "node_modules/@typescript-eslint/scope-manager": { "version": "8.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.39.0.tgz", + "integrity": "sha512-8QOzff9UKxOh6npZQ/4FQu4mjdOCGSdO3p44ww0hk8Vu+IGbg0tB/H1LcTARRDzGCC8pDGbh2rissBuuoPgH8A==", "dev": true, "license": "MIT", "dependencies": { @@ -2106,6 +2591,8 @@ }, "node_modules/@typescript-eslint/tsconfig-utils": { "version": "8.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.39.0.tgz", + "integrity": "sha512-Fd3/QjmFV2sKmvv3Mrj8r6N8CryYiCS8Wdb/6/rgOXAWGcFuc+VkQuG28uk/4kVNVZBQuuDHEDUpo/pQ32zsIQ==", "dev": true, "license": "MIT", "engines": { @@ -2121,6 +2608,8 @@ }, "node_modules/@typescript-eslint/type-utils": { "version": "8.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.39.0.tgz", + "integrity": "sha512-6B3z0c1DXVT2vYA9+z9axjtc09rqKUPRmijD5m9iv8iQpHBRYRMBcgxSiKTZKm6FwWw1/cI4v6em35OsKCiN5Q==", "dev": true, "license": "MIT", "dependencies": { @@ -2144,6 +2633,8 @@ }, "node_modules/@typescript-eslint/types": { "version": "8.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.39.0.tgz", + "integrity": "sha512-ArDdaOllnCj3yn/lzKn9s0pBQYmmyme/v1HbGIGB0GB/knFI3fWMHloC+oYTJW46tVbYnGKTMDK4ah1sC2v0Kg==", "dev": true, "license": "MIT", "engines": { @@ -2156,6 +2647,8 @@ }, "node_modules/@typescript-eslint/typescript-estree": { "version": "8.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.39.0.tgz", + "integrity": "sha512-ndWdiflRMvfIgQRpckQQLiB5qAKQ7w++V4LlCHwp62eym1HLB/kw7D9f2e8ytONls/jt89TEasgvb+VwnRprsw==", "dev": true, "license": "MIT", "dependencies": { @@ -2183,6 +2676,8 @@ }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2191,6 +2686,8 @@ }, "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { @@ -2205,6 +2702,8 @@ }, "node_modules/@typescript-eslint/utils": { "version": "8.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.39.0.tgz", + "integrity": "sha512-4GVSvNA0Vx1Ktwvf4sFE+exxJ3QGUorQG1/A5mRfRNZtkBT2xrA/BCO2H0eALx/PnvCS6/vmYwRdDA41EoffkQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2227,6 +2726,8 @@ }, "node_modules/@typescript-eslint/visitor-keys": { "version": "8.39.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.39.0.tgz", + "integrity": "sha512-ldgiJ+VAhQCfIjeOgu8Kj5nSxds0ktPOSO9p4+0VDH2R2pLvQraaM5Oen2d7NxzMCm+Sn/vJT+mv2H5u6b/3fA==", "dev": true, "license": "MIT", "dependencies": { @@ -2243,6 +2744,8 @@ }, "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -2395,7 +2898,9 @@ }, "node_modules/@vscode/deviceid": { "version": "0.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@vscode/deviceid/-/deviceid-0.1.1.tgz", + "integrity": "sha512-ErpoMeKKNYAkR1IT3zxB5RtiTqEECdh8fxggupWvzuxpTAX77hwOI2NdJ7um+vupnXRBZVx4ugo0+dVHJWUkag==", + "hasInstallScript": true, "dependencies": { "fs-extra": "^11.2.0", "uuid": "^9.0.1" @@ -2403,6 +2908,8 @@ }, "node_modules/@vscode/gulp-electron": { "version": "1.38.1", + "resolved": "https://registry.npmjs.org/@vscode/gulp-electron/-/gulp-electron-1.38.1.tgz", + "integrity": "sha512-GKkK/Mx2Zpe6zSsraumwDmAUNkVgUfkSsRla7nIA+BpgxxXXJijY1c8QOrbrv+piD7SL66t8ewDQZu8KvJKz1w==", "dev": true, "license": "MIT", "dependencies": { @@ -2430,6 +2937,8 @@ }, "node_modules/@vscode/gulp-electron/node_modules/@electron/get": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-4.0.1.tgz", + "integrity": "sha512-fTMFb/ZiK6xQace5YZlhT+vNR08ogat9SqpvwpaC9vD6hgx7ouz9cdcrSrFuNji4823Jmmy90/CDhJq0I4vRFA==", "dev": true, "license": "MIT", "dependencies": { @@ -2450,6 +2959,8 @@ }, "node_modules/@vscode/gulp-electron/node_modules/@electron/get/node_modules/progress": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true, "license": "MIT", "engines": { @@ -2458,6 +2969,8 @@ }, "node_modules/@vscode/gulp-electron/node_modules/@sindresorhus/is": { "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-7.0.2.tgz", + "integrity": "sha512-d9xRovfKNz1SKieM0qJdO+PQonjnnIfSNWfHYnBSJ9hkjm0ZPw6HlxscDXYstp3z+7V2GOFHc+J0CYrYTjqCJw==", "dev": true, "license": "MIT", "engines": { @@ -2469,6 +2982,8 @@ }, "node_modules/@vscode/gulp-electron/node_modules/@szmarczak/http-timer": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", + "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", "dev": true, "license": "MIT", "dependencies": { @@ -2480,6 +2995,8 @@ }, "node_modules/@vscode/gulp-electron/node_modules/cacheable-lookup": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", + "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", "dev": true, "license": "MIT", "engines": { @@ -2488,6 +3005,8 @@ }, "node_modules/@vscode/gulp-electron/node_modules/cacheable-request": { "version": "12.0.1", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-12.0.1.tgz", + "integrity": "sha512-Yo9wGIQUaAfIbk+qY0X4cDQgCosecfBe3V9NSyeY4qPC2SAkbCS4Xj79VP8WOzitpJUZKc/wsRCYF5ariDIwkg==", "dev": true, "license": "MIT", "dependencies": { @@ -2505,6 +3024,8 @@ }, "node_modules/@vscode/gulp-electron/node_modules/env-paths": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz", + "integrity": "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==", "dev": true, "license": "MIT", "engines": { @@ -2516,6 +3037,8 @@ }, "node_modules/@vscode/gulp-electron/node_modules/get-stream": { "version": "9.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", "dev": true, "license": "MIT", "dependencies": { @@ -2531,6 +3054,8 @@ }, "node_modules/@vscode/gulp-electron/node_modules/got": { "version": "14.4.7", + "resolved": "https://registry.npmjs.org/got/-/got-14.4.7.tgz", + "integrity": "sha512-DI8zV1231tqiGzOiOzQWDhsBmncFW7oQDH6Zgy6pDPrqJuVZMtoSgPLLsBZQj8Jg4JFfwoOsDA8NGtLQLnIx2g==", "dev": true, "license": "MIT", "dependencies": { @@ -2555,6 +3080,8 @@ }, "node_modules/@vscode/gulp-electron/node_modules/http2-wrapper": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", + "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2567,6 +3094,8 @@ }, "node_modules/@vscode/gulp-electron/node_modules/is-stream": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", "dev": true, "license": "MIT", "engines": { @@ -2578,6 +3107,8 @@ }, "node_modules/@vscode/gulp-electron/node_modules/lowercase-keys": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", + "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", "dev": true, "license": "MIT", "engines": { @@ -2589,6 +3120,8 @@ }, "node_modules/@vscode/gulp-electron/node_modules/mimic-response": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", + "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", "dev": true, "license": "MIT", "engines": { @@ -2600,8 +3133,9 @@ }, "node_modules/@vscode/gulp-electron/node_modules/mkdirp": { "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, - "license": "MIT", "dependencies": { "minimist": "^1.2.5" }, @@ -2611,6 +3145,8 @@ }, "node_modules/@vscode/gulp-electron/node_modules/normalize-url": { "version": "8.0.2", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.2.tgz", + "integrity": "sha512-Ee/R3SyN4BuynXcnTaekmaVdbDAEiNrHqjQIA37mHU8G9pf7aaAD4ZX3XjBLo6rsdcxA/gtkcNYZLt30ACgynw==", "dev": true, "license": "MIT", "engines": { @@ -2622,6 +3158,8 @@ }, "node_modules/@vscode/gulp-electron/node_modules/p-cancelable": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-4.0.1.tgz", + "integrity": "sha512-wBowNApzd45EIKdO1LaU+LrMBwAcjfPaYtVzV3lmfM3gf8Z4CHZsiIqlM8TZZ8okYvh5A1cP6gTfCRQtwUpaUg==", "dev": true, "license": "MIT", "engines": { @@ -2630,6 +3168,8 @@ }, "node_modules/@vscode/gulp-electron/node_modules/rcedit": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/rcedit/-/rcedit-4.0.1.tgz", + "integrity": "sha512-bZdaQi34krFWhrDn+O53ccBDw0MkAT2Vhu75SqhtvhQu4OPyFM4RoVheyYiVQYdjhUi6EJMVWQ0tR6bCIYVkUg==", "dev": true, "license": "MIT", "dependencies": { @@ -2641,6 +3181,8 @@ }, "node_modules/@vscode/gulp-electron/node_modules/responselike": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", + "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", "dev": true, "license": "MIT", "dependencies": { @@ -2655,12 +3197,14 @@ }, "node_modules/@vscode/iconv-lite-umd": { "version": "0.7.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@vscode/iconv-lite-umd/-/iconv-lite-umd-0.7.0.tgz", + "integrity": "sha512-bRRFxLfg5dtAyl5XyiVWz/ZBPahpOpPrNYnnHpOpUZvam4tKH35wdhP4Kj6PbM0+KdliOsPzbGWpkxcdpNB/sg==" }, "node_modules/@vscode/l10n-dev": { "version": "0.0.35", + "resolved": "https://registry.npmjs.org/@vscode/l10n-dev/-/l10n-dev-0.0.35.tgz", + "integrity": "sha512-s6uzBXsVDSL69Z85HSqpc5dfKswQkeucY8L00t1TWzGalw7wkLQUKMRwuzqTq+AMwQKrRd7Po14cMoTcd11iDw==", "dev": true, - "license": "MIT", "dependencies": { "@azure-rest/ai-translation-text": "^1.0.0-beta.1", "debug": "^4.3.4", @@ -2679,6 +3223,8 @@ }, "node_modules/@vscode/l10n-dev/node_modules/brace-expansion": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2687,8 +3233,9 @@ }, "node_modules/@vscode/l10n-dev/node_modules/glob": { "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", "dev": true, - "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^2.3.5", @@ -2708,8 +3255,9 @@ }, "node_modules/@vscode/l10n-dev/node_modules/minimatch": { "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -2722,6 +3270,9 @@ }, "node_modules/@vscode/policy-watcher": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@vscode/policy-watcher/-/policy-watcher-1.3.2.tgz", + "integrity": "sha512-fmNPYysU2ioH99uCaBPiRblEZSnir5cTmc7w91hAxAoYoGpHt2PZPxT5eIOn7FGmPOsjLdQcd6fduFJGYVD4Mw==", + "hasInstallScript": true, "license": "MIT", "dependencies": { "bindings": "^1.5.0", @@ -2730,6 +3281,8 @@ }, "node_modules/@vscode/policy-watcher/node_modules/node-addon-api": { "version": "8.2.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.2.0.tgz", + "integrity": "sha512-qnyuI2ROiCkye42n9Tj5aX1ns7rzj6n7zW1XReSnLSL9v/vbLeR6fJq6PU27YU/ICfYw6W7Ouk/N7cysWu/hlw==", "license": "MIT", "engines": { "node": "^18 || ^20 || >= 21" @@ -2737,6 +3290,8 @@ }, "node_modules/@vscode/proxy-agent": { "version": "0.32.0", + "resolved": "https://registry.npmjs.org/@vscode/proxy-agent/-/proxy-agent-0.32.0.tgz", + "integrity": "sha512-n6h2+WVMJ3ByfGUakDbBNpR25J2JpLQabofiTKHIcLpXfxhT5TQSEH4OcjesZZfqw1zDpd7oBgcgqToWIiaBrQ==", "license": "MIT", "dependencies": { "@tootallnate/once": "^3.0.0", @@ -2753,6 +3308,8 @@ }, "node_modules/@vscode/ripgrep": { "version": "1.15.14", + "resolved": "https://registry.npmjs.org/@vscode/ripgrep/-/ripgrep-1.15.14.tgz", + "integrity": "sha512-/G1UJPYlm+trBWQ6cMO3sv6b8D1+G16WaJH1/DSqw32JOVlzgZbLkDxRyzIpTpv30AcYGMkCf5tUqGlW6HbDWw==", "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -2763,7 +3320,8 @@ }, "node_modules/@vscode/ripgrep/node_modules/yauzl": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" @@ -2771,6 +3329,9 @@ }, "node_modules/@vscode/spdlog": { "version": "0.15.2", + "resolved": "https://registry.npmjs.org/@vscode/spdlog/-/spdlog-0.15.2.tgz", + "integrity": "sha512-8RQ7JEs81x5IFONYGtFhYtaF2a3IPtNtgMdp+MFLxTDokJQBAVittx0//EN38BYhlzeVqEPgusRsOA8Yulaysg==", + "hasInstallScript": true, "license": "MIT", "dependencies": { "bindings": "^1.5.0", @@ -2780,6 +3341,9 @@ }, "node_modules/@vscode/sqlite3": { "version": "5.1.8-vscode", + "resolved": "https://registry.npmjs.org/@vscode/sqlite3/-/sqlite3-5.1.8-vscode.tgz", + "integrity": "sha512-9Ku18yZej1kxS7mh6dhCWxkCof043HljcLIdq+RRJr65QdOeAqPOUJ2i6qXRL63l1Kd72uXV/zLA2SBwhfgiOw==", + "hasInstallScript": true, "license": "BSD-3-Clause", "dependencies": { "node-addon-api": "^8.2.0", @@ -2788,6 +3352,8 @@ }, "node_modules/@vscode/sqlite3/node_modules/node-addon-api": { "version": "8.2.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.2.0.tgz", + "integrity": "sha512-qnyuI2ROiCkye42n9Tj5aX1ns7rzj6n7zW1XReSnLSL9v/vbLeR6fJq6PU27YU/ICfYw6W7Ouk/N7cysWu/hlw==", "license": "MIT", "engines": { "node": "^18 || ^20 || >= 21" @@ -2795,12 +3361,14 @@ }, "node_modules/@vscode/sudo-prompt": { "version": "9.3.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@vscode/sudo-prompt/-/sudo-prompt-9.3.1.tgz", + "integrity": "sha512-9ORTwwS74VaTn38tNbQhsA5U44zkJfcb0BdTSyyG6frP4e8KMtHuTXYmwefe5dpL8XB1aGSIVTaLjD3BbWb5iA==" }, "node_modules/@vscode/telemetry-extractor": { "version": "1.10.2", + "resolved": "https://registry.npmjs.org/@vscode/telemetry-extractor/-/telemetry-extractor-1.10.2.tgz", + "integrity": "sha512-hn+KDSwIRj7LzDSFd9HALkc80UY1g16nQgWztHml+nxAZU3Hw/EoWEEDxOncvDYq9YcV+tX/cVHrVjbNL2Dg0g==", "dev": true, - "license": "MIT", "dependencies": { "@vscode/ripgrep": "^1.15.9", "command-line-args": "^5.2.1", @@ -2812,8 +3380,9 @@ }, "node_modules/@vscode/test-cli": { "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@vscode/test-cli/-/test-cli-0.0.6.tgz", + "integrity": "sha512-4i61OUv5PQr3GxhHOuUgHdgBDfIO/kXTPCsEyFiMaY4SOqQTgkTmyZLagHehjOgCfsXdcrJa3zgQ7zoc+Dh6hQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/mocha": "^10.0.2", "c8": "^9.1.0", @@ -2829,13 +3398,10 @@ "vscode-test": "out/bin.mjs" } }, - "node_modules/@vscode/test-cli/node_modules/@types/mocha": { - "version": "10.0.2", - "dev": true, - "license": "MIT" - }, "node_modules/@vscode/test-cli/node_modules/brace-expansion": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2844,8 +3410,9 @@ }, "node_modules/@vscode/test-cli/node_modules/glob": { "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", "dev": true, - "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^2.3.5", @@ -2865,8 +3432,9 @@ }, "node_modules/@vscode/test-cli/node_modules/minimatch": { "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -2879,8 +3447,9 @@ }, "node_modules/@vscode/test-electron": { "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.4.0.tgz", + "integrity": "sha512-yojuDFEjohx6Jb+x949JRNtSn6Wk2FAh4MldLE3ck9cfvCqzwxF32QsNy1T9Oe4oT+ZfFcg0uPUCajJzOmPlTA==", "dev": true, - "license": "MIT", "dependencies": { "http-proxy-agent": "^7.0.2", "https-proxy-agent": "^7.0.4", @@ -2894,6 +3463,8 @@ }, "node_modules/@vscode/test-web": { "version": "0.0.62", + "resolved": "https://registry.npmjs.org/@vscode/test-web/-/test-web-0.0.62.tgz", + "integrity": "sha512-Ypug5PvhPOPFbuHVilai7t23tm3Wm5geIpC2DB09Gy9o0jZCduramiSdPf+YN7yhkFy1usFYtN3Eaks1XoBrOQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2922,6 +3493,8 @@ }, "node_modules/@vscode/test-web/node_modules/brace-expansion": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2930,8 +3503,9 @@ }, "node_modules/@vscode/test-web/node_modules/glob": { "version": "11.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.0.tgz", + "integrity": "sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==", "dev": true, - "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^4.0.1", @@ -2952,8 +3526,9 @@ }, "node_modules/@vscode/test-web/node_modules/jackspeak": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.1.tgz", + "integrity": "sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==", "dev": true, - "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -2969,16 +3544,18 @@ }, "node_modules/@vscode/test-web/node_modules/lru-cache": { "version": "11.0.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.1.tgz", + "integrity": "sha512-CgeuL5uom6j/ZVrg7G/+1IXqRY8JXX4Hghfy5YE0EhoYQWvndP1kufu58cmZLNIDKnRhZrXfdS9urVWx98AipQ==", "dev": true, - "license": "ISC", "engines": { "node": "20 || >=22" } }, "node_modules/@vscode/test-web/node_modules/minimatch": { "version": "10.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", + "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -2991,16 +3568,18 @@ }, "node_modules/@vscode/test-web/node_modules/minipass": { "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, - "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } }, "node_modules/@vscode/test-web/node_modules/path-scurry": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", + "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", "dev": true, - "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" @@ -3014,24 +3593,29 @@ }, "node_modules/@vscode/tree-sitter-wasm": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@vscode/tree-sitter-wasm/-/tree-sitter-wasm-0.1.4.tgz", + "integrity": "sha512-kQVVg/CamCYDM+/XYCZuNTQyixjZd8ts/Gf84UzjEY0eRnbg6kiy5I9z2/2i3XdqwhI87iG07rkMR2KwhqcSbA==", "license": "MIT" }, "node_modules/@vscode/v8-heap-parser": { "version": "0.1.0", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@vscode/v8-heap-parser/-/v8-heap-parser-0.1.0.tgz", + "integrity": "sha512-3EvQak7EIOLyIGz+IP9qSwRmP08ZRWgTeoRgAXPVkkDXZ8riqJ7LDtkgx++uHBiJ3MUaSdlUYPZcLFFw7E6zGg==", + "dev": true }, "node_modules/@vscode/vscode-languagedetection": { "version": "1.0.21", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@vscode/vscode-languagedetection/-/vscode-languagedetection-1.0.21.tgz", + "integrity": "sha512-zSUH9HYCw5qsCtd7b31yqkpaCU6jhtkKLkvOOA8yTrIRfBSOFb8PPhgmMicD7B/m+t4PwOJXzU1XDtrM9Fd3/g==", "bin": { "vscode-languagedetection": "cli/index.js" } }, "node_modules/@vscode/vscode-perf": { "version": "0.0.19", + "resolved": "https://registry.npmjs.org/@vscode/vscode-perf/-/vscode-perf-0.0.19.tgz", + "integrity": "sha512-E/I0S+71K3Jo4kiMYbeKM8mUG3K8cHlj5MFVfPYVAvlp7KuIZTM914E7osp+jx8XgMLN6fChxnFmntm1GtVrKA==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^4.x", "commander": "^9.4.0", @@ -3047,9 +3631,35 @@ "node": ">= 16" } }, + "node_modules/@vscode/windows-ca-certs": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@vscode/windows-ca-certs/-/windows-ca-certs-0.3.3.tgz", + "integrity": "sha512-C0Iq5RcH+H31GUZ8bsMORsX3LySVkGAqe4kQfUSVcCqJ0QOhXkhgwUMU7oCiqYLXaQWyXFp6Fj6eMdt05uK7VA==", + "hasInstallScript": true, + "license": "BSD", + "optional": true, + "os": [ + "win32" + ], + "dependencies": { + "node-addon-api": "^8.2.0" + } + }, + "node_modules/@vscode/windows-ca-certs/node_modules/node-addon-api": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.2.0.tgz", + "integrity": "sha512-qnyuI2ROiCkye42n9Tj5aX1ns7rzj6n7zW1XReSnLSL9v/vbLeR6fJq6PU27YU/ICfYw6W7Ouk/N7cysWu/hlw==", + "license": "MIT", + "optional": true, + "engines": { + "node": "^18 || ^20 || >= 21" + } + }, "node_modules/@vscode/windows-mutex": { "version": "0.5.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@vscode/windows-mutex/-/windows-mutex-0.5.0.tgz", + "integrity": "sha512-iD29L9AUscpn07aAvhP2QuhrXzuKc1iQpPF6u7ybtvRbR+o+RotfbuKqqF1RDlDDrJZkL+3AZTy4D01U4nEe5A==", + "hasInstallScript": true, "dependencies": { "bindings": "^1.5.0", "node-addon-api": "7.1.0" @@ -3057,17 +3667,23 @@ }, "node_modules/@vscode/windows-process-tree": { "version": "0.6.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@vscode/windows-process-tree/-/windows-process-tree-0.6.0.tgz", + "integrity": "sha512-7/DjBKKUtlmKNiAet2GRbdvfjgMKmfBeWVClIgONv8aqxGnaKca5N85eIDxh6rLMy2hKvFqIIsqgxs1Q26TWwg==", + "hasInstallScript": true, "dependencies": { "node-addon-api": "7.1.0" } }, "node_modules/@vscode/windows-registry": { "version": "1.1.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@vscode/windows-registry/-/windows-registry-1.1.0.tgz", + "integrity": "sha512-5AZzuWJpGscyiMOed0IuyEwt6iKmV5Us7zuwCDCFYMIq7tsvooO9BUiciywsvuthGz6UG4LSpeDeCxvgMVhnIw==", + "hasInstallScript": true }, "node_modules/@webassemblyjs/ast": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3077,21 +3693,29 @@ }, "node_modules/@webassemblyjs/floating-point-hex-parser": { "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", "dev": true, "license": "MIT", "dependencies": { @@ -3102,11 +3726,15 @@ }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", "dev": true, "license": "MIT", "dependencies": { @@ -3118,6 +3746,8 @@ }, "node_modules/@webassemblyjs/ieee754": { "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", "dev": true, "license": "MIT", "dependencies": { @@ -3126,6 +3756,8 @@ }, "node_modules/@webassemblyjs/leb128": { "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3134,11 +3766,15 @@ }, "node_modules/@webassemblyjs/utf8": { "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3154,6 +3790,8 @@ }, "node_modules/@webassemblyjs/wasm-gen": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", "dev": true, "license": "MIT", "dependencies": { @@ -3166,6 +3804,8 @@ }, "node_modules/@webassemblyjs/wasm-opt": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", "dev": true, "license": "MIT", "dependencies": { @@ -3177,6 +3817,8 @@ }, "node_modules/@webassemblyjs/wasm-parser": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3190,6 +3832,8 @@ }, "node_modules/@webassemblyjs/wast-printer": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", "dev": true, "license": "MIT", "dependencies": { @@ -3199,13 +3843,15 @@ }, "node_modules/@webgpu/types": { "version": "0.1.44", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@webgpu/types/-/types-0.1.44.tgz", + "integrity": "sha512-JDpYJN5E/asw84LTYhKyvPpxGnD+bAKPtpW9Ilurf7cZpxaTbxkQcGwOd7jgB9BPBrTYQ+32ufo4HiuomTjHNQ==", + "dev": true }, "node_modules/@webpack-cli/configtest": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", + "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", "dev": true, - "license": "MIT", "engines": { "node": ">=14.15.0" }, @@ -3216,8 +3862,9 @@ }, "node_modules/@webpack-cli/info": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", + "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", "dev": true, - "license": "MIT", "engines": { "node": ">=14.15.0" }, @@ -3228,8 +3875,9 @@ }, "node_modules/@webpack-cli/serve": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", + "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=14.15.0" }, @@ -3245,6 +3893,8 @@ }, "node_modules/@xterm/addon-clipboard": { "version": "0.2.0-beta.95", + "resolved": "https://registry.npmjs.org/@xterm/addon-clipboard/-/addon-clipboard-0.2.0-beta.95.tgz", + "integrity": "sha512-9OknmXeK+AD6FxdTNDY6B2CpP6tNGF1e+vLds6AjTeRJMLjY0GIqn93XY3oMGJJwuakcsG+F0zTOJNQZSmE6JA==", "license": "MIT", "dependencies": { "js-base64": "^3.7.5" @@ -3255,6 +3905,8 @@ }, "node_modules/@xterm/addon-image": { "version": "0.9.0-beta.112", + "resolved": "https://registry.npmjs.org/@xterm/addon-image/-/addon-image-0.9.0-beta.112.tgz", + "integrity": "sha512-MzZ3bGTUNeDy5nf55Toz0UEXFS+rW7l35K/IQBZ4NggTa0cT1h2/mbbllvwyuy4a3jwB0Eyi2woOV8hATTQHwQ==", "license": "MIT", "peerDependencies": { "@xterm/xterm": "^5.6.0-beta.112" @@ -3262,6 +3914,8 @@ }, "node_modules/@xterm/addon-ligatures": { "version": "0.10.0-beta.112", + "resolved": "https://registry.npmjs.org/@xterm/addon-ligatures/-/addon-ligatures-0.10.0-beta.112.tgz", + "integrity": "sha512-cXrEiNrjqR4EmWRc3xV0kcvkpC830eX3JIygQJQ5cvLJopaxqrN9WBGuBvsVYznPuDLkT2wqgBwCRM/FetY8ag==", "license": "MIT", "dependencies": { "font-finder": "^1.1.0", @@ -3276,6 +3930,8 @@ }, "node_modules/@xterm/addon-progress": { "version": "0.2.0-beta.18", + "resolved": "https://registry.npmjs.org/@xterm/addon-progress/-/addon-progress-0.2.0-beta.18.tgz", + "integrity": "sha512-pOJlTVP9t38w7yBWzcwh97UC1dqKVWgpZ5yBZXVP/tkzzQlSqZ1iVdcCdOuPE08i+F2C3nU4cvwgSQYaRNIkow==", "license": "MIT", "peerDependencies": { "@xterm/xterm": "^5.6.0-beta.112" @@ -3283,6 +3939,8 @@ }, "node_modules/@xterm/addon-search": { "version": "0.16.0-beta.112", + "resolved": "https://registry.npmjs.org/@xterm/addon-search/-/addon-search-0.16.0-beta.112.tgz", + "integrity": "sha512-ZK+QC01H3+r4Kv4D7bPw8ARE8+Sgu0xbgtwofBIGXy1fgEymILt7xLCRv6b7P+W0xJ84/iSCGrs2aPNLixA7NA==", "license": "MIT", "peerDependencies": { "@xterm/xterm": "^5.6.0-beta.112" @@ -3290,6 +3948,8 @@ }, "node_modules/@xterm/addon-serialize": { "version": "0.14.0-beta.112", + "resolved": "https://registry.npmjs.org/@xterm/addon-serialize/-/addon-serialize-0.14.0-beta.112.tgz", + "integrity": "sha512-aeX31ie3PU04qrTWm8qpNa32DDCvuN+QVs3J3M7yX8qeYEFtVtAChthBuGroUc5bT06/nI1+TGv453HZHFhiaA==", "license": "MIT", "peerDependencies": { "@xterm/xterm": "^5.6.0-beta.112" @@ -3297,6 +3957,8 @@ }, "node_modules/@xterm/addon-unicode11": { "version": "0.9.0-beta.112", + "resolved": "https://registry.npmjs.org/@xterm/addon-unicode11/-/addon-unicode11-0.9.0-beta.112.tgz", + "integrity": "sha512-gPTEoWJsC7ReAuZ9Mv77QUw7gM2zJ7w1zy5LPGsCYpRdTB0R5SINqyvK0NRmGvHTxmZ0LP3bLl9yStBkU0KCgQ==", "license": "MIT", "peerDependencies": { "@xterm/xterm": "^5.6.0-beta.112" @@ -3304,6 +3966,8 @@ }, "node_modules/@xterm/addon-webgl": { "version": "0.19.0-beta.112", + "resolved": "https://registry.npmjs.org/@xterm/addon-webgl/-/addon-webgl-0.19.0-beta.112.tgz", + "integrity": "sha512-nxLXeI2nKal4zwpZrdRau3zdStDgn9PVD3f+y5NyWkCcSkPO8HyR5DuEQ964wgP2PFVEfYisLmnwD+GTvi9MXw==", "license": "MIT", "peerDependencies": { "@xterm/xterm": "^5.6.0-beta.112" @@ -3311,31 +3975,41 @@ }, "node_modules/@xterm/headless": { "version": "5.6.0-beta.112", + "resolved": "https://registry.npmjs.org/@xterm/headless/-/headless-5.6.0-beta.112.tgz", + "integrity": "sha512-Al0MnluYCTdMEGHK+VTuFt1pV4GEo43nspfewdJUyrL19d1BX9oxMjCRKwGG8zsjHOh0n9yFCH70MJTRazQBnA==", "license": "MIT" }, "node_modules/@xterm/xterm": { "version": "5.6.0-beta.112", + "resolved": "https://registry.npmjs.org/@xterm/xterm/-/xterm-5.6.0-beta.112.tgz", + "integrity": "sha512-cDbt8o5kkdPcij0a4dcvDUfIPcvkHKLJHW5M6yhIOMG/+ZNmyg0Ux+zinMh/Lcf1K+vbcdw+qcPP3p5CXI7XFg==", "license": "MIT" }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", "dev": true, "license": "BSD-3-Clause" }, "node_modules/@xtuc/long": { "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true, "license": "Apache-2.0" }, "node_modules/abbrev": { "version": "1.1.1", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true }, "node_modules/accepts": { "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", "dev": true, - "license": "MIT", "dependencies": { "mime-types": "~2.1.24", "negotiator": "0.6.2" @@ -3346,6 +4020,8 @@ }, "node_modules/acorn": { "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", "bin": { @@ -3357,6 +4033,8 @@ }, "node_modules/acorn-import-phases": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.3.tgz", + "integrity": "sha512-jtKLnfoOzm28PazuQ4dVBcE9Jeo6ha1GAJvq3N0LlNOszmTfx+wSycBehn+FN0RnyeR77IBxN/qVYMw0Rlj0Xw==", "dev": true, "license": "MIT", "engines": { @@ -3368,23 +4046,26 @@ }, "node_modules/acorn-jsx": { "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, - "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/acorn-walk": { "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/agent-base": { "version": "7.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", "dependencies": { "debug": "^4.3.4" }, @@ -3394,8 +4075,9 @@ }, "node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -3409,8 +4091,9 @@ }, "node_modules/ajv-formats": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, - "license": "MIT", "dependencies": { "ajv": "^8.0.0" }, @@ -3425,8 +4108,9 @@ }, "node_modules/ajv-formats/node_modules/ajv": { "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -3440,37 +4124,42 @@ }, "node_modules/ajv-formats/node_modules/json-schema-traverse": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true }, "node_modules/ajv-keywords": { "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true, - "license": "MIT", "peerDependencies": { "ajv": "^6.9.1" } }, "node_modules/amdefine": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", "dev": true, - "license": "BSD-3-Clause OR MIT", "engines": { "node": ">=0.4.2" } }, "node_modules/ansi-colors": { "version": "3.2.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", + "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/ansi-cyan": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz", + "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM= sha512-eCjan3AVo/SxZ0/MyIYRtkpxIu/H3xZN7URr1vXVrISxeyz8fUFz0FJziamK4sS8I+t35y4rHg1b2PklyBe/7A==", "dev": true, - "license": "MIT", "dependencies": { "ansi-wrap": "0.1.0" }, @@ -3480,8 +4169,9 @@ }, "node_modules/ansi-gray": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", + "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE= sha512-HrgGIZUl8h2EHuZaU9hTR/cU5nhKxpVE1V6kdGsQ8e4zirElJ5fvtfc8N7Q1oq1aatO275i8pUFUCpNWCAnVWw==", "dev": true, - "license": "MIT", "dependencies": { "ansi-wrap": "0.1.0" }, @@ -3491,8 +4181,9 @@ }, "node_modules/ansi-red": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", + "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw= sha512-ewaIr5y+9CUTGFwZfpECUbFlGcC0GCw1oqR9RI6h1gQCd9Aj2GxSckCnPsVJnmfMZbwFYE+leZGASgkWl06Jow==", "dev": true, - "license": "MIT", "dependencies": { "ansi-wrap": "0.1.0" }, @@ -3502,16 +4193,18 @@ }, "node_modules/ansi-regex": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/ansi-styles": { "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", "dev": true, - "license": "MIT", "dependencies": { "@types/color-name": "^1.1.1", "color-convert": "^2.0.1" @@ -3525,21 +4218,24 @@ }, "node_modules/ansi-wrap": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768= sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/any-promise": { "version": "1.3.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8= sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true }, "node_modules/anymatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, - "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -3550,8 +4246,9 @@ }, "node_modules/append-buffer": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", + "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE= sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA==", "dev": true, - "license": "MIT", "dependencies": { "buffer-equal": "^1.0.0" }, @@ -3561,39 +4258,45 @@ }, "node_modules/archy": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", + "dev": true }, "node_modules/are-docs-informative": { "version": "0.0.2", + "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", + "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==", "dev": true, - "license": "MIT", "engines": { "node": ">=14" } }, "node_modules/arg": { "version": "4.1.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true }, "node_modules/argparse": { "version": "2.0.1", - "dev": true, - "license": "Python-2.0" + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, "node_modules/arr-diff": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/arr-filter": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", + "integrity": "sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4= sha512-A2BETWCqhsecSvCkWAeVBFLH6sXEUGASuzkpjL3GR1SlL/PWL6M3J8EAAld2Uubmh39tvkJTqC9LeLHCUKmFXA==", "dev": true, - "license": "MIT", "dependencies": { "make-iterator": "^1.0.0" }, @@ -3603,16 +4306,18 @@ }, "node_modules/arr-flatten": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/arr-map": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", + "integrity": "sha1-Onc0X/wc814qkYJWAfnljy4kysQ= sha512-tVqVTHt+Q5Xb09qRkbu+DidW1yYzz5izWS2Xm2yFm7qJnmUfz4HPzNxbHkdRJbz2lrqI7S+z17xNYdFcBBO8Hw==", "dev": true, - "license": "MIT", "dependencies": { "make-iterator": "^1.0.0" }, @@ -3622,40 +4327,45 @@ }, "node_modules/arr-union": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/array-back": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/array-differ": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", + "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE= sha512-LeZY+DZDRnvP7eMuQ6LHfCzUGxAAIViUBliK24P3hWXL6y4SortgR6Nim6xrkfSLlmH0+k+9NYNwVC2s53ZrYQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/array-each": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8= sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/array-initial": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz", + "integrity": "sha1-L6dLJnOTccOUe9enrcc74zSz15U= sha512-BC4Yl89vneCYfpLrs5JU2aAu9/a+xWbeKhvISg9PT7eWFB9UlRvI+rKEtk6mgxWr3dSkk9gQ8hCrdqt06NXPdw==", "dev": true, - "license": "MIT", "dependencies": { "array-slice": "^1.0.0", "is-number": "^4.0.0" @@ -3666,16 +4376,18 @@ }, "node_modules/array-initial/node_modules/is-number": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/array-last": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz", + "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==", "dev": true, - "license": "MIT", "dependencies": { "is-number": "^4.0.0" }, @@ -3685,24 +4397,27 @@ }, "node_modules/array-last/node_modules/is-number": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/array-slice": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/array-sort": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz", + "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==", "dev": true, - "license": "MIT", "dependencies": { "default-compare": "^1.0.0", "get-value": "^2.0.6", @@ -3714,32 +4429,37 @@ }, "node_modules/array-uniq": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/array-unique": { "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/arrify": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/asar": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/asar/-/asar-3.0.3.tgz", + "integrity": "sha512-k7zd+KoR+n8pl71PvgElcoKHrVNiSXtw7odKbyNpmgKe7EGRF9Pnu3uLOukD37EvavKwVFxOUpqXTIZC5B5Pmw==", + "deprecated": "Please use @electron/asar moving forward. There is no API change, just a package name change", "dev": true, - "license": "MIT", "dependencies": { "chromium-pickle-js": "^0.2.0", "commander": "^5.0.0", @@ -3758,16 +4478,19 @@ }, "node_modules/asar/node_modules/commander": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 6" } }, "node_modules/asar/node_modules/glob": { "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -3785,16 +4508,18 @@ }, "node_modules/assign-symbols": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/async-done": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", + "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==", "dev": true, - "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.2", @@ -3807,13 +4532,15 @@ }, "node_modules/async-each": { "version": "1.0.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true }, "node_modules/async-settle": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", + "integrity": "sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs= sha512-VPXfB4Vk49z1LHHodrEQ6Xf7W4gg1w0dAPROHngx7qgDjqmIQ+fXmwgGXTW/ITLai0YLSvWepJOP9EVpMnEAcw==", "dev": true, - "license": "MIT", "dependencies": { "async-done": "^1.2.2" }, @@ -3823,13 +4550,15 @@ }, "node_modules/asynckit": { "version": "0.4.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k= sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true }, "node_modules/atob": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true, - "license": "(MIT OR Apache-2.0)", "bin": { "atob": "bin/atob.js" }, @@ -3839,8 +4568,9 @@ }, "node_modules/available-typed-arrays": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -3850,13 +4580,15 @@ }, "node_modules/b4a": { "version": "1.6.4", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz", + "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==", + "dev": true }, "node_modules/bach": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", + "integrity": "sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA= sha512-bZOOfCb3gXBXbTFXq3OZtGR88LwGeJvzu6szttaIzymOTS4ZttBNOWSv7aLZja2EMycKtRYV0Oa8SNKH/zkxvg==", "dev": true, - "license": "MIT", "dependencies": { "arr-filter": "^1.1.1", "arr-flatten": "^1.0.1", @@ -3874,17 +4606,22 @@ }, "node_modules/balanced-match": { "version": "1.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "node_modules/bare-events": { "version": "2.5.4", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.4.tgz", + "integrity": "sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==", "dev": true, "license": "Apache-2.0", "optional": true }, "node_modules/bare-fs": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.0.2.tgz", + "integrity": "sha512-S5mmkMesiduMqnz51Bfh0Et9EX0aTCJxhsI4bvzFFLs8Z1AV8RDHadfY5CyLwdoLHgXbNBEN1gQcbEtGwuvixw==", "dev": true, "license": "Apache-2.0", "optional": true, @@ -3907,6 +4644,8 @@ }, "node_modules/bare-os": { "version": "3.6.1", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.6.1.tgz", + "integrity": "sha512-uaIjxokhFidJP+bmmvKSgiMzj2sV5GPHaZVAIktcxcpCyBFFWO+YlikVAdhmUo2vYFvFhOXIAlldqV29L8126g==", "dev": true, "license": "Apache-2.0", "optional": true, @@ -3916,6 +4655,8 @@ }, "node_modules/bare-path": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz", + "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", "dev": true, "license": "Apache-2.0", "optional": true, @@ -3925,6 +4666,8 @@ }, "node_modules/bare-stream": { "version": "2.6.5", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.6.5.tgz", + "integrity": "sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA==", "dev": true, "license": "Apache-2.0", "optional": true, @@ -3946,8 +4689,9 @@ }, "node_modules/base": { "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, - "license": "MIT", "dependencies": { "cache-base": "^1.0.1", "class-utils": "^0.3.5", @@ -3963,8 +4707,9 @@ }, "node_modules/base/node_modules/define-property": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY= sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", "dev": true, - "license": "MIT", "dependencies": { "is-descriptor": "^1.0.0" }, @@ -3974,6 +4719,8 @@ }, "node_modules/base64-js": { "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "funding": [ { "type": "github", @@ -3987,13 +4734,13 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/basic-auth": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", "dev": true, - "license": "MIT", "dependencies": { "safe-buffer": "5.1.2" }, @@ -4003,40 +4750,47 @@ }, "node_modules/before-after-hook": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-4.0.0.tgz", + "integrity": "sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ==", "dev": true, "license": "Apache-2.0" }, "node_modules/big.js": { "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "dev": true, - "license": "MIT", "engines": { "node": "*" } }, "node_modules/binary-extensions": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/binaryextensions": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-1.0.1.tgz", + "integrity": "sha1-HmN0iLNbWL2l9HdL+WpSEqjJB1U= sha512-xnG0l4K3ghM62rFzDi2jcNEuICl6uQ4NgvGpqQsY7HgW8gPDeAWGOxHI/k+qZfXfMANytzrArGNPXidaCwtbmA==", + "dev": true }, "node_modules/bindings": { "version": "1.5.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", "dependencies": { "file-uri-to-path": "1.0.0" } }, "node_modules/bl": { "version": "4.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -4045,8 +4799,9 @@ }, "node_modules/block-stream": { "version": "0.0.9", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo= sha512-OorbnJVPII4DuUKbjARAe8u8EfqOmkEEaSFIyoQ7OjTHn6kafxWl0wLgoZ2rXaYd7MyLcDaU4TmhfxtwgcccMQ==", "dev": true, - "license": "ISC", "dependencies": { "inherits": "~2.0.0" }, @@ -4056,17 +4811,21 @@ }, "node_modules/boolbase": { "version": "1.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24= sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true }, "node_modules/boolean": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.0.2.tgz", + "integrity": "sha512-RwywHlpCRc3/Wh81MiCKun4ydaIFyW5Ea6JbL6sRCVx5q5irDw7pMXBUFYF/jArQ6YrG36q0kpovc9P/Kd3I4g==", "dev": true, - "license": "MIT", "optional": true }, "node_modules/brace-expansion": { "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { @@ -4076,7 +4835,8 @@ }, "node_modules/braces": { "version": "3.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dependencies": { "fill-range": "^7.1.1" }, @@ -4086,19 +4846,23 @@ }, "node_modules/browser-stdout": { "version": "1.3.1", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true }, "node_modules/browserify-zlib": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/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.24.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.5.tgz", + "integrity": "sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==", "dev": true, "funding": [ { @@ -4130,6 +4894,8 @@ }, "node_modules/buffer": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "funding": [ { "type": "github", @@ -4144,7 +4910,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -4152,26 +4917,31 @@ }, "node_modules/buffer-crc32": { "version": "0.2.13", - "license": "MIT", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "engines": { "node": "*" } }, "node_modules/buffer-equal": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", + "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74= sha512-tcBWO2Dl4e7Asr9hTGcpVrCe+F7DubpmqWCTbj4FHLmjqO2hIaC383acQubWtRJhdceqs5uBHs6Es+Sk//RKiQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/buffer-from": { "version": "1.1.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true }, "node_modules/bundle-name": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", "license": "MIT", "dependencies": { "run-applescript": "^7.0.0" @@ -4185,16 +4955,18 @@ }, "node_modules/bytes": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/c8": { "version": "9.1.0", + "resolved": "https://registry.npmjs.org/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", @@ -4217,8 +4989,9 @@ }, "node_modules/cache-base": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, - "license": "MIT", "dependencies": { "collection-visit": "^1.0.0", "component-emitter": "^1.2.1", @@ -4236,8 +5009,9 @@ }, "node_modules/cache-content-type": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/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" @@ -4248,16 +5022,18 @@ }, "node_modules/cacheable-lookup": { "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10.6.0" } }, "node_modules/cacheable-request": { "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", + "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", "dev": true, - "license": "MIT", "dependencies": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", @@ -4273,8 +5049,9 @@ }, "node_modules/call-bind": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, - "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -4291,16 +5068,18 @@ }, "node_modules/callsites": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/camelcase": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -4310,6 +5089,8 @@ }, "node_modules/caniuse-lite": { "version": "1.0.30001718", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001718.tgz", + "integrity": "sha512-AflseV1ahcSunK53NfEs9gFWgOEmzr0f+kaMFA4xiLZlr9Hzt7HxcSpIFcnNCUkz6R6dWKa54rUz3HUmI3nVcw==", "dev": true, "funding": [ { @@ -4329,8 +5110,9 @@ }, "node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -4344,16 +5126,18 @@ }, "node_modules/chalk/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/chalk/node_modules/supports-color": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -4363,14 +5147,17 @@ }, "node_modules/charenc": { "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": "*" } }, "node_modules/chokidar": { "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, "funding": [ { @@ -4378,7 +5165,6 @@ "url": "https://paulmillr.com/funding/" } ], - "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -4397,14 +5183,16 @@ }, "node_modules/chownr": { "version": "2.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "engines": { "node": ">=10" } }, "node_modules/chrome-remote-interface": { "version": "0.33.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chrome-remote-interface/-/chrome-remote-interface-0.33.0.tgz", + "integrity": "sha512-tv/SgeBfShXk43fwFpQ9wnS7mOCPzETnzDXTNxCb6TqKOiOeIfbrJz+2NAp8GmzwizpKa058wnU1Te7apONaYg==", "dependencies": { "commander": "2.11.x", "ws": "^7.2.0" @@ -4415,11 +5203,13 @@ }, "node_modules/chrome-remote-interface/node_modules/commander": { "version": "2.11.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==" }, "node_modules/chrome-remote-interface/node_modules/ws": { "version": "7.5.10", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "engines": { "node": ">=8.3.0" }, @@ -4438,8 +5228,9 @@ }, "node_modules/chrome-trace-event": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", "dev": true, - "license": "MIT", "dependencies": { "tslib": "^1.9.0" }, @@ -4449,23 +5240,27 @@ }, "node_modules/chrome-trace-event/node_modules/tslib": { "version": "1.14.1", - "dev": true, - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true }, "node_modules/chromium-pickle-js": { "version": "0.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", + "integrity": "sha1-BKEGZywYsIWrd02YPfo+oTjyIgU= sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==", + "dev": true }, "node_modules/ci-info": { "version": "1.6.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", + "dev": true }, "node_modules/class-utils": { "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, - "license": "MIT", "dependencies": { "arr-union": "^3.1.0", "define-property": "^0.2.5", @@ -4478,8 +5273,9 @@ }, "node_modules/class-utils/node_modules/define-property": { "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "dev": true, - "license": "MIT", "dependencies": { "is-descriptor": "^0.1.0" }, @@ -4489,8 +5285,10 @@ }, "node_modules/class-utils/node_modules/is-accessor-descriptor": { "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "deprecated": "Please upgrade to v0.1.7", "dev": true, - "license": "MIT", "dependencies": { "kind-of": "^3.0.2" }, @@ -4500,8 +5298,9 @@ }, "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, - "license": "MIT", "dependencies": { "is-buffer": "^1.1.5" }, @@ -4511,8 +5310,10 @@ }, "node_modules/class-utils/node_modules/is-data-descriptor": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "deprecated": "Please upgrade to v0.1.5", "dev": true, - "license": "MIT", "dependencies": { "kind-of": "^3.0.2" }, @@ -4522,8 +5323,9 @@ }, "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, - "license": "MIT", "dependencies": { "is-buffer": "^1.1.5" }, @@ -4533,8 +5335,9 @@ }, "node_modules/class-utils/node_modules/is-descriptor": { "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, - "license": "MIT", "dependencies": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", @@ -4546,8 +5349,9 @@ }, "node_modules/cli-cursor": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", "dev": true, - "license": "MIT", "dependencies": { "restore-cursor": "^4.0.0" }, @@ -4560,8 +5364,9 @@ }, "node_modules/cli-spinners": { "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" }, @@ -4571,8 +5376,9 @@ }, "node_modules/cliui": { "version": "8.0.1", + "resolved": "https://registry.npmjs.org/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", @@ -4584,13 +5390,15 @@ }, "node_modules/cliui/node_modules/emoji-regex": { "version": "8.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/cliui/node_modules/string-width": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/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", @@ -4602,24 +5410,27 @@ }, "node_modules/clone": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8" } }, "node_modules/clone-buffer": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg= sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.10" } }, "node_modules/clone-deep": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, - "license": "MIT", "dependencies": { "is-plain-object": "^2.0.4", "kind-of": "^6.0.2", @@ -4631,8 +5442,9 @@ }, "node_modules/clone-deep/node_modules/is-plain-object": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, - "license": "MIT", "dependencies": { "isobject": "^3.0.1" }, @@ -4642,29 +5454,33 @@ }, "node_modules/clone-deep/node_modules/kind-of": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/clone-response": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==", "dev": true, - "license": "MIT", "dependencies": { "mimic-response": "^1.0.0" } }, "node_modules/clone-stats": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA= sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==", + "dev": true }, "node_modules/cloneable-readable": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", + "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", "dev": true, - "license": "MIT", "dependencies": { "inherits": "^2.0.1", "process-nextick-args": "^2.0.0", @@ -4673,8 +5489,9 @@ }, "node_modules/cloneable-readable/node_modules/readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, - "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -4687,8 +5504,9 @@ }, "node_modules/co": { "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true, - "license": "MIT", "engines": { "iojs": ">= 1.0.0", "node": ">= 0.12.0" @@ -4696,21 +5514,24 @@ }, "node_modules/code-block-writer": { "version": "12.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-12.0.0.tgz", + "integrity": "sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w==", + "dev": true }, "node_modules/code-point-at": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/collection-map": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz", + "integrity": "sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw= sha512-5D2XXSpkOnleOI21TG7p3T0bGAsZ/XknZpKBmGYyluO8pw4zA3K8ZlrBIbC4FXg3m6z/RNFiUFfT2sQK01+UHA==", "dev": true, - "license": "MIT", "dependencies": { "arr-map": "^2.0.2", "for-own": "^1.0.0", @@ -4722,8 +5543,9 @@ }, "node_modules/collection-visit": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", "dev": true, - "license": "MIT", "dependencies": { "map-visit": "^1.0.0", "object-visit": "^1.0.0" @@ -4734,8 +5556,9 @@ }, "node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/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" }, @@ -4745,26 +5568,30 @@ }, "node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/color-support": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "dev": true, - "license": "ISC", "bin": { "color-support": "bin.js" } }, "node_modules/colorette": { "version": "2.0.19", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "dev": true }, "node_modules/combined-stream": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, - "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -4774,16 +5601,18 @@ }, "node_modules/combined-stream/node_modules/delayed-stream": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk= sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/command-line-args": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", + "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", "dev": true, - "license": "MIT", "dependencies": { "array-back": "^3.1.0", "find-replace": "^3.0.0", @@ -4796,37 +5625,42 @@ }, "node_modules/commander": { "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", "dev": true, - "license": "MIT", "engines": { "node": "^12.20.0 || >=14" } }, "node_modules/comment-parser": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz", + "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 12.0.0" } }, "node_modules/component-emitter": { "version": "1.3.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true }, "node_modules/concat-map": { "version": "0.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true }, "node_modules/concat-stream": { "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "engines": [ "node >= 0.8" ], - "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", @@ -4836,8 +5670,9 @@ }, "node_modules/concat-stream/node_modules/readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, - "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -4850,6 +5685,8 @@ }, "node_modules/config-chain": { "version": "1.1.12", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", + "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", "dev": true, "dependencies": { "ini": "^1.3.4", @@ -4858,8 +5695,9 @@ }, "node_modules/content-disposition": { "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, - "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" }, @@ -4869,6 +5707,8 @@ }, "node_modules/content-disposition/node_modules/safe-buffer": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, "funding": [ { @@ -4883,37 +5723,40 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/content-type": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/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": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", "dev": true, - "license": "MIT", "dependencies": { "safe-buffer": "~5.1.1" } }, "node_modules/cookie": { "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/cookies": { "version": "0.9.1", + "resolved": "https://registry.npmjs.org/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" @@ -4924,16 +5767,18 @@ }, "node_modules/copy-descriptor": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/copy-props": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.5.tgz", + "integrity": "sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw==", "dev": true, - "license": "MIT", "dependencies": { "each-props": "^1.3.2", "is-plain-object": "^5.0.0" @@ -4941,8 +5786,9 @@ }, "node_modules/copy-webpack-plugin": { "version": "11.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", + "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", "dev": true, - "license": "MIT", "dependencies": { "fast-glob": "^3.2.11", "glob-parent": "^6.0.1", @@ -4964,8 +5810,9 @@ }, "node_modules/copy-webpack-plugin/node_modules/glob-parent": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -4975,8 +5822,9 @@ }, "node_modules/copy-webpack-plugin/node_modules/globby": { "version": "13.1.3", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz", + "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==", "dev": true, - "license": "MIT", "dependencies": { "dir-glob": "^3.0.1", "fast-glob": "^3.2.11", @@ -4993,8 +5841,9 @@ }, "node_modules/copy-webpack-plugin/node_modules/slash": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -5004,18 +5853,21 @@ }, "node_modules/core-util-is": { "version": "1.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true }, "node_modules/create-require": { "version": "1.1.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true }, "node_modules/cross-spawn": { "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, - "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -5027,6 +5879,8 @@ }, "node_modules/cross-spawn-windows-exe": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/cross-spawn-windows-exe/-/cross-spawn-windows-exe-1.2.0.tgz", + "integrity": "sha512-mkLtJJcYbDCxEG7Js6eUnUNndWjyUZwJ3H7bErmmtOYU/Zb99DyUkpamuIZE0b3bhmJyZ7D90uS6f+CGxRRjOw==", "dev": true, "funding": [ { @@ -5050,6 +5904,8 @@ }, "node_modules/cross-spawn-windows-exe/node_modules/is-docker": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true, "license": "MIT", "bin": { @@ -5064,6 +5920,8 @@ }, "node_modules/cross-spawn-windows-exe/node_modules/is-wsl": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, "license": "MIT", "dependencies": { @@ -5075,16 +5933,18 @@ }, "node_modules/crypt": { "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": "*" } }, "node_modules/css": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", + "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", "dev": true, - "license": "MIT", "dependencies": { "inherits": "^2.0.4", "source-map": "^0.6.1", @@ -5093,8 +5953,9 @@ }, "node_modules/css-loader": { "version": "6.9.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.9.1.tgz", + "integrity": "sha512-OzABOh0+26JKFdMzlK6PY1u5Zx8+Ck7CVRlcGNZoY9qwJjdfu2VWFuprTIpPW+Av5TZTVViYWcFQaEEQURLknQ==", "dev": true, - "license": "MIT", "dependencies": { "icss-utils": "^5.1.0", "postcss": "^8.4.33", @@ -5118,8 +5979,9 @@ }, "node_modules/css-select": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", @@ -5133,8 +5995,9 @@ }, "node_modules/css-tree": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", "dev": true, - "license": "MIT", "dependencies": { "mdn-data": "2.0.14", "source-map": "^0.6.1" @@ -5145,8 +6008,9 @@ }, "node_modules/css-what": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">= 6" }, @@ -5156,8 +6020,9 @@ }, "node_modules/cssesc": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true, - "license": "MIT", "bin": { "cssesc": "bin/cssesc" }, @@ -5167,8 +6032,9 @@ }, "node_modules/csso": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", "dev": true, - "license": "MIT", "dependencies": { "css-tree": "^1.1.2" }, @@ -5178,8 +6044,9 @@ }, "node_modules/d": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", "dev": true, - "license": "ISC", "dependencies": { "es5-ext": "^0.10.50", "type": "^1.0.1" @@ -5187,11 +6054,14 @@ }, "node_modules/debounce": { "version": "1.1.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.1.0.tgz", + "integrity": "sha512-ZQVKfRVlwRfD150ndzEK8M90ABT+Y/JQKs4Y7U4MXdpuoUkkrr4DwKbVux3YjylA5bUMUj0Nc3pMxPJX6N2QQQ==", + "dev": true }, "node_modules/debug": { "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -5207,8 +6077,9 @@ }, "node_modules/debug-fabulous": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/debug-fabulous/-/debug-fabulous-1.1.0.tgz", + "integrity": "sha512-GZqvGIgKNlUnHUPQhepnUZFIMoi3dgZKQBzKDeL2g7oJF9SNAji/AAu36dusFUas0O+pae74lNeoIPHqXWDkLg==", "dev": true, - "license": "MIT", "dependencies": { "debug": "3.X", "memoizee": "0.4.X", @@ -5217,16 +6088,18 @@ }, "node_modules/debug-fabulous/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/decamelize": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -5236,15 +6109,17 @@ }, "node_modules/decode-uri-component": { "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10" } }, "node_modules/decompress-response": { "version": "6.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dependencies": { "mimic-response": "^3.1.0" }, @@ -5257,7 +6132,8 @@ }, "node_modules/decompress-response/node_modules/mimic-response": { "version": "3.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "engines": { "node": ">=10" }, @@ -5267,6 +6143,8 @@ }, "node_modules/deemon": { "version": "1.13.5", + "resolved": "https://registry.npmjs.org/deemon/-/deemon-1.13.5.tgz", + "integrity": "sha512-mmQi4Rz7ehx/xmUoDKzYAfzoEIv0HIGuDL88aj7iIxxYq0OwxRc/edFqso+aUdgame1ZBGLoV4Ucd/5/WCmu4w==", "dev": true, "license": "MIT", "dependencies": { @@ -5282,39 +6160,46 @@ }, "node_modules/deep-equal": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU= sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==", + "dev": true }, "node_modules/deep-extend": { "version": "0.6.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "engines": { "node": ">=4.0.0" } }, "node_modules/deep-is": { "version": "0.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true }, "node_modules/deepmerge": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.1.0.tgz", + "integrity": "sha512-/TnecbwXEdycfbsM2++O3eGiatEFHjjNciHEwJclM+T5Kd94qD1AP+2elP/Mq0L5b9VZJao5znR01Mz6eX8Seg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/deepmerge-json": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/deepmerge-json/-/deepmerge-json-1.5.0.tgz", + "integrity": "sha512-jZRrDmBKjmGcqMFEUJ14FjMJwm05Qaked+1vxaALRtF0UAl7lPU8OLWXFxvoeg3jbQM249VPFVn8g2znaQkEtA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4.0.0" } }, "node_modules/default-browser": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", "license": "MIT", "dependencies": { "bundle-name": "^4.1.0", @@ -5329,6 +6214,8 @@ }, "node_modules/default-browser-id": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", "license": "MIT", "engines": { "node": ">=18" @@ -5339,8 +6226,9 @@ }, "node_modules/default-compare": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", + "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", "dev": true, - "license": "MIT", "dependencies": { "kind-of": "^5.0.2" }, @@ -5350,24 +6238,27 @@ }, "node_modules/default-resolution": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz", + "integrity": "sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ= sha512-2xaP6GiwVwOEbXCGoJ4ufgC76m8cj805jrghScewJC2ZDsb9U0b4BIrba+xt/Uytyd0HvQ6+WymSRTfnYj59GQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.10" } }, "node_modules/defer-to-connect": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/define-data-property": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, - "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -5382,6 +6273,8 @@ }, "node_modules/define-lazy-prop": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", "license": "MIT", "engines": { "node": ">=12" @@ -5392,8 +6285,9 @@ }, "node_modules/define-properties": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, - "license": "MIT", "dependencies": { "object-keys": "^1.0.12" }, @@ -5403,8 +6297,9 @@ }, "node_modules/define-property": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, - "license": "MIT", "dependencies": { "is-descriptor": "^1.0.2", "isobject": "^3.0.1" @@ -5415,6 +6310,8 @@ }, "node_modules/delayed-stream": { "version": "0.0.6", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.6.tgz", + "integrity": "sha1-omRst+w9XXd0YUZwp6Zd4MFz7bw= sha512-Si7mB08fdumvLNFddq3HQOoYf8BUxfITyZi+0RBn1sbojFm8c4gD1+3se7qVEji1uiVVLYE0Np0laaS9E+j6ag==", "dev": true, "engines": { "node": ">=0.4.0" @@ -5422,21 +6319,24 @@ }, "node_modules/delegates": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true }, "node_modules/depd": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/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.npmjs.org/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" @@ -5444,43 +6344,50 @@ }, "node_modules/detect-file": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/detect-indent": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", + "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50= sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/detect-libc": { "version": "2.0.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", "engines": { "node": ">=8" } }, "node_modules/detect-newline": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", + "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I= sha512-CwffZFvlJffUg9zZA0uqrjQayUTC8ob94pnr5sFwaVv3IOmkfUHcWH+jXaQK3askE51Cqe8/9Ql/0uXNwqZ8Zg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/detect-node": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", + "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", "dev": true, - "license": "ISC", "optional": true }, "node_modules/diff": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -5489,8 +6396,9 @@ }, "node_modules/dir-glob": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, - "license": "MIT", "dependencies": { "path-type": "^4.0.0" }, @@ -5500,8 +6408,9 @@ }, "node_modules/dom-serializer": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "dev": true, - "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", @@ -5513,19 +6422,21 @@ }, "node_modules/domelementtype": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/fb55" } - ], - "license": "BSD-2-Clause" + ] }, "node_modules/domhandler": { "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "domelementtype": "^2.3.0" }, @@ -5538,8 +6449,9 @@ }, "node_modules/domutils": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", @@ -5551,12 +6463,15 @@ }, "node_modules/duplexer": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= sha512-sxNZ+ljy+RA1maXoUReeqBBpBC6RLKmg5ewzV+x+mSETmWNoKdZN6vcQjpFROemza23hGFskJtFNoUWUaQ+R4Q==", "dev": true }, "node_modules/duplexify": { "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", "dev": true, - "license": "MIT", "dependencies": { "end-of-stream": "^1.0.0", "inherits": "^2.0.1", @@ -5566,8 +6481,9 @@ }, "node_modules/duplexify/node_modules/readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, - "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -5580,8 +6496,9 @@ }, "node_modules/each-props": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz", + "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==", "dev": true, - "license": "MIT", "dependencies": { "is-plain-object": "^2.0.1", "object.defaults": "^1.1.0" @@ -5589,8 +6506,9 @@ }, "node_modules/each-props/node_modules/is-plain-object": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, - "license": "MIT", "dependencies": { "isobject": "^3.0.1" }, @@ -5600,13 +6518,15 @@ }, "node_modules/eastasianwidth": { "version": "0.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true }, "node_modules/editorconfig": { "version": "0.15.2", + "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.2.tgz", + "integrity": "sha512-GWjSI19PVJAM9IZRGOS+YKI8LN+/sjkSjNyvxL5ucqP9/IqtYNXBaQ/6c/hkPNYQHyOHra2KoXZI/JVpuqwmcQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "^10.11.7", "@types/semver": "^5.5.0", @@ -5621,34 +6541,42 @@ }, "node_modules/editorconfig/node_modules/@types/node": { "version": "10.17.60", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", + "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", "dev": true, "license": "MIT" }, "node_modules/editorconfig/node_modules/@types/semver": { "version": "5.5.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==", + "dev": true }, "node_modules/editorconfig/node_modules/commander": { "version": "2.20.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true }, "node_modules/editorconfig/node_modules/semver": { "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver" } }, "node_modules/ee-first": { "version": "1.1.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true }, "node_modules/electron": { "version": "37.2.3", + "resolved": "https://registry.npmjs.org/electron/-/electron-37.2.3.tgz", + "integrity": "sha512-JRKKn8cRDXDfkC+oWISbYs+c+L6RA776JM0NiB9bn2yV8H/LnBUlVPzKKfsXgrUIokN4YcbCw694vfAdEJwtGw==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -5666,39 +6594,47 @@ }, "node_modules/electron-to-chromium": { "version": "1.5.158", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.158.tgz", + "integrity": "sha512-9vcp2xHhkvraY6AHw2WMi+GDSLPX42qe2xjYaVoZqFRJiOcilVQFq9mZmpuHEQpzlgGDelKlV7ZiGcmMsc8WxQ==", "dev": true, "license": "ISC" }, "node_modules/emoji-regex": { "version": "10.3.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", + "integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==", + "dev": true }, "node_modules/emojis-list": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "dev": true, - "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/encodeurl": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/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", - "license": "MIT", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dependencies": { "once": "^1.4.0" } }, "node_modules/enhanced-resolve": { "version": "5.18.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.2.tgz", + "integrity": "sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5711,8 +6647,9 @@ }, "node_modules/entities": { "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=0.12" }, @@ -5722,16 +6659,18 @@ }, "node_modules/env-paths": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.0.tgz", + "integrity": "sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/envinfo": { "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", "dev": true, - "license": "MIT", "bin": { "envinfo": "dist/cli.js" }, @@ -5741,8 +6680,9 @@ }, "node_modules/errno": { "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", "dev": true, - "license": "MIT", "dependencies": { "prr": "~1.0.1" }, @@ -5752,16 +6692,18 @@ }, "node_modules/error-ex": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, - "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } }, "node_modules/es-abstract": { "version": "1.18.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", "dev": true, - "license": "MIT", "dependencies": { "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", @@ -5785,8 +6727,9 @@ }, "node_modules/es-define-property": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", "dev": true, - "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.4" }, @@ -5796,21 +6739,24 @@ }, "node_modules/es-errors": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/es-module-lexer": { "version": "1.5.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "dev": true }, "node_modules/es-to-primitive": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, - "license": "MIT", "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -5825,9 +6771,10 @@ }, "node_modules/es5-ext": { "version": "0.10.63", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.63.tgz", + "integrity": "sha512-hUCZd2Byj/mNKjfP9jXrdVZ62B8KuA/VoK7X8nUh5qT+AxDmcbvZz041oDVZdbIN1qW6XY9VDNwzkvKnZvK2TQ==", "dev": true, "hasInstallScript": true, - "license": "ISC", "dependencies": { "es6-iterator": "^2.0.3", "es6-symbol": "^3.1.3", @@ -5840,14 +6787,16 @@ }, "node_modules/es6-error": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true, - "license": "MIT", "optional": true }, "node_modules/es6-iterator": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c= sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", "dev": true, - "license": "MIT", "dependencies": { "d": "1", "es5-ext": "^0.10.35", @@ -5856,8 +6805,9 @@ }, "node_modules/es6-symbol": { "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", "dev": true, - "license": "ISC", "dependencies": { "d": "^1.0.1", "ext": "^1.1.2" @@ -5865,8 +6815,9 @@ }, "node_modules/es6-weak-map": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", "dev": true, - "license": "ISC", "dependencies": { "d": "1", "es5-ext": "^0.10.46", @@ -5876,6 +6827,8 @@ }, "node_modules/escalade": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, "license": "MIT", "engines": { @@ -5884,13 +6837,15 @@ }, "node_modules/escape-html": { "version": "1.0.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true }, "node_modules/escape-string-regexp": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -5900,8 +6855,9 @@ }, "node_modules/eslint": { "version": "9.11.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.11.1.tgz", + "integrity": "sha512-MobhYKIoAO1s1e4VUrgx1l1Sk2JBR/Gqjjgw8+mfgoLE2xwsHur4gdfTxyTgShrhvdVFTaJSgMiQBl1jv/AWxg==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.11.0", @@ -5961,24 +6917,27 @@ }, "node_modules/eslint-formatter-compact": { "version": "8.40.0", + "resolved": "https://registry.npmjs.org/eslint-formatter-compact/-/eslint-formatter-compact-8.40.0.tgz", + "integrity": "sha512-cwGUs113TgmTQXecx5kfRjB7m0y2wkDLSadPTE2pK6M/wO4N8PjmUaoWOFNCP9MHgsiZwgqd5bZFnDCnszC56Q==", "dev": true, - "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/eslint-plugin-header": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-header/-/eslint-plugin-header-3.1.1.tgz", + "integrity": "sha512-9vlKxuJ4qf793CmeeSrZUvVClw6amtpghq3CuWcB5cUNnWHQhgcqy5eF8oVKFk1G3Y/CbchGfEaw3wiIJaNmVg==", "dev": true, - "license": "MIT", "peerDependencies": { "eslint": ">=7.7.0" } }, "node_modules/eslint-plugin-jsdoc": { "version": "50.3.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-50.3.1.tgz", + "integrity": "sha512-SY9oUuTMr6aWoJggUS40LtMjsRzJPB5ZT7F432xZIHK3EfHF+8i48GbUBpwanrtlL9l1gILNTHK9o8gEhYLcKA==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@es-joy/jsdoccomment": "~0.48.0", "are-docs-informative": "^0.0.2", @@ -6001,8 +6960,9 @@ }, "node_modules/eslint-plugin-jsdoc/node_modules/spdx-expression-parse": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz", + "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==", "dev": true, - "license": "MIT", "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -6010,8 +6970,9 @@ }, "node_modules/eslint-scope": { "version": "8.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.1.0.tgz", + "integrity": "sha512-14dSvlhaVhKKsa9Fx1l8A17s7ah7Ef7wCakJ10LYk6+GYmP9yDti2oq2SEwcyndt6knfcZyhyxwY3i9yL78EQw==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -6025,8 +6986,9 @@ }, "node_modules/eslint-visitor-keys": { "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, - "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -6036,8 +6998,9 @@ }, "node_modules/eslint/node_modules/eslint-visitor-keys": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.1.0.tgz", + "integrity": "sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==", "dev": true, - "license": "Apache-2.0", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -6047,8 +7010,9 @@ }, "node_modules/eslint/node_modules/glob-parent": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -6058,8 +7022,9 @@ }, "node_modules/esniff": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", "dev": true, - "license": "ISC", "dependencies": { "d": "^1.0.1", "es5-ext": "^0.10.62", @@ -6072,13 +7037,15 @@ }, "node_modules/esniff/node_modules/type": { "version": "2.7.2", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true }, "node_modules/espree": { "version": "10.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.2.0.tgz", + "integrity": "sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "acorn": "^8.12.0", "acorn-jsx": "^5.3.2", @@ -6093,8 +7060,9 @@ }, "node_modules/espree/node_modules/eslint-visitor-keys": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.1.0.tgz", + "integrity": "sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==", "dev": true, - "license": "Apache-2.0", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -6104,8 +7072,9 @@ }, "node_modules/esquery": { "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -6115,8 +7084,9 @@ }, "node_modules/esrecurse": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -6126,24 +7096,27 @@ }, "node_modules/estraverse": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/esutils": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/event-emitter": { "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk= sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", "dev": true, - "license": "MIT", "dependencies": { "d": "1", "es5-ext": "~0.10.14" @@ -6151,8 +7124,9 @@ }, "node_modules/event-stream": { "version": "3.3.4", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", + "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE= sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==", "dev": true, - "license": "MIT", "dependencies": { "duplexer": "~0.1.1", "from": "~0", @@ -6165,16 +7139,18 @@ }, "node_modules/events": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", + "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.x" } }, "node_modules/expand-brackets": { "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI= sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", "dev": true, - "license": "MIT", "dependencies": { "debug": "^2.3.3", "define-property": "^0.2.5", @@ -6190,16 +7166,18 @@ }, "node_modules/expand-brackets/node_modules/debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/expand-brackets/node_modules/define-property": { "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "dev": true, - "license": "MIT", "dependencies": { "is-descriptor": "^0.1.0" }, @@ -6209,8 +7187,9 @@ }, "node_modules/expand-brackets/node_modules/extend-shallow": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, - "license": "MIT", "dependencies": { "is-extendable": "^0.1.0" }, @@ -6220,8 +7199,10 @@ }, "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "deprecated": "Please upgrade to v0.1.7", "dev": true, - "license": "MIT", "dependencies": { "kind-of": "^3.0.2" }, @@ -6231,8 +7212,9 @@ }, "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, - "license": "MIT", "dependencies": { "is-buffer": "^1.1.5" }, @@ -6242,8 +7224,10 @@ }, "node_modules/expand-brackets/node_modules/is-data-descriptor": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "deprecated": "Please upgrade to v0.1.5", "dev": true, - "license": "MIT", "dependencies": { "kind-of": "^3.0.2" }, @@ -6253,8 +7237,9 @@ }, "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, - "license": "MIT", "dependencies": { "is-buffer": "^1.1.5" }, @@ -6264,8 +7249,9 @@ }, "node_modules/expand-brackets/node_modules/is-descriptor": { "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, - "license": "MIT", "dependencies": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", @@ -6277,28 +7263,32 @@ }, "node_modules/expand-brackets/node_modules/is-extendable": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/expand-brackets/node_modules/ms": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true }, "node_modules/expand-template": { "version": "2.0.3", - "license": "(MIT OR WTFPL)", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", "engines": { "node": ">=6" } }, "node_modules/expand-tilde": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", "dev": true, - "license": "MIT", "dependencies": { "homedir-polyfill": "^1.0.1" }, @@ -6308,26 +7298,30 @@ }, "node_modules/ext": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", + "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", "dev": true, - "license": "ISC", "dependencies": { "type": "^2.0.0" } }, "node_modules/ext/node_modules/type": { "version": "2.1.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/type/-/type-2.1.0.tgz", + "integrity": "sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA==", + "dev": true }, "node_modules/extend": { "version": "3.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true }, "node_modules/extend-shallow": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", "dev": true, - "license": "MIT", "dependencies": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" @@ -6338,8 +7332,9 @@ }, "node_modules/extglob": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, - "license": "MIT", "dependencies": { "array-unique": "^0.3.2", "define-property": "^1.0.0", @@ -6356,8 +7351,9 @@ }, "node_modules/extglob/node_modules/define-property": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY= sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", "dev": true, - "license": "MIT", "dependencies": { "is-descriptor": "^1.0.0" }, @@ -6367,8 +7363,9 @@ }, "node_modules/extglob/node_modules/extend-shallow": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, - "license": "MIT", "dependencies": { "is-extendable": "^0.1.0" }, @@ -6378,16 +7375,18 @@ }, "node_modules/extglob/node_modules/is-extendable": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/extract-zip": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", @@ -6405,8 +7404,9 @@ }, "node_modules/extract-zip/node_modules/yauzl": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "dev": true, - "license": "MIT", "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" @@ -6414,8 +7414,9 @@ }, "node_modules/fancy-log": { "version": "1.3.3", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", + "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", "dev": true, - "license": "MIT", "dependencies": { "ansi-gray": "^0.1.1", "color-support": "^1.1.3", @@ -6428,6 +7429,8 @@ }, "node_modules/fast-content-type-parse": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-3.0.0.tgz", + "integrity": "sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg==", "dev": true, "funding": [ { @@ -6443,18 +7446,21 @@ }, "node_modules/fast-deep-equal": { "version": "3.1.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true }, "node_modules/fast-fifo": { "version": "1.3.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "dev": true }, "node_modules/fast-glob": { "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, - "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -6468,38 +7474,44 @@ }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true }, "node_modules/fast-levenshtein": { "version": "2.0.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true }, "node_modules/fastest-levenshtein": { "version": "1.0.12", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", + "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", + "dev": true }, "node_modules/fastq": { "version": "1.9.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.9.0.tgz", + "integrity": "sha512-i7FVWL8HhVY+CTkwFxkN2mk3h+787ixS5S63eb78diVRc1MCssarHq3W5cj0av7YDSwmaV928RNag+U1etRQ7w==", "dev": true, - "license": "ISC", "dependencies": { "reusify": "^1.0.4" } }, "node_modules/fd-slicer": { "version": "1.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", "dependencies": { "pend": "~1.2.0" } }, "node_modules/file-entry-cache": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, - "license": "MIT", "dependencies": { "flat-cache": "^4.0.0" }, @@ -6509,8 +7521,9 @@ }, "node_modules/file-loader": { "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", "dev": true, - "license": "MIT", "dependencies": { "loader-utils": "^2.0.0", "schema-utils": "^3.0.0" @@ -6528,8 +7541,9 @@ }, "node_modules/file-loader/node_modules/schema-utils": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "dev": true, - "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.6", "ajv": "^6.12.5", @@ -6545,11 +7559,13 @@ }, "node_modules/file-uri-to-path": { "version": "1.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" }, "node_modules/fill-range": { "version": "7.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -6559,13 +7575,15 @@ }, "node_modules/find-parent-dir": { "version": "0.3.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/find-parent-dir/-/find-parent-dir-0.3.1.tgz", + "integrity": "sha512-o4UcykWV/XN9wm+jMEtWLPlV8RXCZnMhQI6F6OdHeSez7iiJWePw8ijOlskJZMsaQoGR/b7dH6lO02HhaTN7+A==", + "dev": true }, "node_modules/find-replace": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", "dev": true, - "license": "MIT", "dependencies": { "array-back": "^3.0.1" }, @@ -6575,8 +7593,9 @@ }, "node_modules/find-up": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/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" @@ -6590,8 +7609,9 @@ }, "node_modules/findup-sync": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", "dev": true, - "license": "MIT", "dependencies": { "detect-file": "^1.0.0", "is-glob": "^4.0.0", @@ -6604,8 +7624,9 @@ }, "node_modules/findup-sync/node_modules/braces": { "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, - "license": "MIT", "dependencies": { "arr-flatten": "^1.1.0", "array-unique": "^0.3.2", @@ -6624,8 +7645,9 @@ }, "node_modules/findup-sync/node_modules/braces/node_modules/extend-shallow": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, - "license": "MIT", "dependencies": { "is-extendable": "^0.1.0" }, @@ -6635,8 +7657,9 @@ }, "node_modules/findup-sync/node_modules/fill-range": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", "dev": true, - "license": "MIT", "dependencies": { "extend-shallow": "^2.0.1", "is-number": "^3.0.0", @@ -6649,8 +7672,9 @@ }, "node_modules/findup-sync/node_modules/fill-range/node_modules/extend-shallow": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, - "license": "MIT", "dependencies": { "is-extendable": "^0.1.0" }, @@ -6660,16 +7684,18 @@ }, "node_modules/findup-sync/node_modules/is-extendable": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/findup-sync/node_modules/is-number": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", "dev": true, - "license": "MIT", "dependencies": { "kind-of": "^3.0.2" }, @@ -6679,8 +7705,9 @@ }, "node_modules/findup-sync/node_modules/is-number/node_modules/kind-of": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, - "license": "MIT", "dependencies": { "is-buffer": "^1.1.5" }, @@ -6690,16 +7717,18 @@ }, "node_modules/findup-sync/node_modules/kind-of": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/findup-sync/node_modules/micromatch": { "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, - "license": "MIT", "dependencies": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -6721,8 +7750,9 @@ }, "node_modules/findup-sync/node_modules/to-regex-range": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", "dev": true, - "license": "MIT", "dependencies": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" @@ -6733,8 +7763,9 @@ }, "node_modules/fined": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", + "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", "dev": true, - "license": "MIT", "dependencies": { "expand-tilde": "^2.0.2", "is-plain-object": "^2.0.3", @@ -6748,8 +7779,9 @@ }, "node_modules/fined/node_modules/is-plain-object": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, - "license": "MIT", "dependencies": { "isobject": "^3.0.1" }, @@ -6759,24 +7791,27 @@ }, "node_modules/flagged-respawn": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", + "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.10" } }, "node_modules/flat": { "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true, - "license": "BSD-3-Clause", "bin": { "flat": "cli.js" } }, "node_modules/flat-cache": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, - "license": "MIT", "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.4" @@ -6787,13 +7822,15 @@ }, "node_modules/flatted": { "version": "3.3.1", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true }, "node_modules/flush-write-stream": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", "dev": true, - "license": "MIT", "dependencies": { "inherits": "^2.0.3", "readable-stream": "^2.3.6" @@ -6801,8 +7838,9 @@ }, "node_modules/flush-write-stream/node_modules/readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, - "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -6815,6 +7853,8 @@ }, "node_modules/font-finder": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/font-finder/-/font-finder-1.1.0.tgz", + "integrity": "sha512-wpCL2uIbi6GurJbU7ZlQ3nGd61Ho+dSU6U83/xJT5UPFfN35EeCW/rOtS+5k+IuEZu2SYmHzDIPL9eA5tSYRAw==", "license": "MIT", "dependencies": { "get-system-fonts": "^2.0.0", @@ -6826,6 +7866,8 @@ }, "node_modules/font-ligatures": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/font-ligatures/-/font-ligatures-1.4.1.tgz", + "integrity": "sha512-7W6zlfyhvCqShZ5ReUWqmSd9vBaUudW0Hxis+tqUjtHhsPU+L3Grf8mcZAtCiXHTzorhwdRTId2WeH/88gdFkw==", "license": "MIT", "dependencies": { "font-finder": "^1.0.3", @@ -6838,6 +7880,8 @@ }, "node_modules/font-ligatures/node_modules/lru-cache": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "license": "ISC", "dependencies": { "yallist": "^4.0.0" @@ -6848,28 +7892,33 @@ }, "node_modules/font-ligatures/node_modules/yallist": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "license": "ISC" }, "node_modules/for-each": { "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, - "license": "MIT", "dependencies": { "is-callable": "^1.1.3" } }, "node_modules/for-in": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/for-own": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs= sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", "dev": true, - "license": "MIT", "dependencies": { "for-in": "^1.0.1" }, @@ -6879,8 +7928,9 @@ }, "node_modules/foreground-child": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", "dev": true, - "license": "ISC", "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -6894,8 +7944,9 @@ }, "node_modules/form-data": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dev": true, - "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -6907,6 +7958,8 @@ }, "node_modules/form-data-encoder": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-4.1.0.tgz", + "integrity": "sha512-G6NsmEW15s0Uw9XnCg+33H3ViYRyiM0hMrMhhqQOR8NFc5GhYrI+6I3u7OTw7b91J2g8rtvMBZJDbcGb2YUniw==", "dev": true, "license": "MIT", "engines": { @@ -6915,8 +7968,9 @@ }, "node_modules/fragment-cache": { "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", "dev": true, - "license": "MIT", "dependencies": { "map-cache": "^0.2.2" }, @@ -6926,24 +7980,28 @@ }, "node_modules/fresh": { "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/from": { "version": "0.1.7", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4= sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", + "dev": true }, "node_modules/fs-constants": { "version": "1.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" }, "node_modules/fs-extra": { "version": "11.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -6955,7 +8013,8 @@ }, "node_modules/fs-minipass": { "version": "2.1.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dependencies": { "minipass": "^3.0.0" }, @@ -6965,7 +8024,8 @@ }, "node_modules/fs-minipass/node_modules/minipass": { "version": "3.1.3", - "license": "ISC", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", + "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", "dependencies": { "yallist": "^4.0.0" }, @@ -6975,12 +8035,14 @@ }, "node_modules/fs-minipass/node_modules/yallist": { "version": "4.0.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/fs-mkdirp-stream": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", + "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes= sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ==", "dev": true, - "license": "MIT", "dependencies": { "graceful-fs": "^4.1.11", "through2": "^2.0.3" @@ -6991,8 +8053,9 @@ }, "node_modules/fs-mkdirp-stream/node_modules/readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, - "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -7005,8 +8068,9 @@ }, "node_modules/fs-mkdirp-stream/node_modules/through2": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/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" @@ -7014,13 +8078,16 @@ }, "node_modules/fs.realpath": { "version": "1.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8= sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true }, "node_modules/fsevents": { "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, - "license": "MIT", + "hasInstallScript": true, "optional": true, "os": [ "darwin" @@ -7031,8 +8098,10 @@ }, "node_modules/fstream": { "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "deprecated": "This package is no longer supported.", "dev": true, - "license": "ISC", "dependencies": { "graceful-fs": "^4.1.2", "inherits": "~2.0.0", @@ -7045,8 +8114,9 @@ }, "node_modules/fstream/node_modules/mkdirp": { "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, - "license": "MIT", "dependencies": { "minimist": "^1.2.5" }, @@ -7056,32 +8126,36 @@ }, "node_modules/function-bind": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/gensync": { "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/get-caller-file": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, - "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-intrinsic": { "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, - "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", @@ -7098,16 +8172,18 @@ }, "node_modules/get-stdin": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz", + "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/get-stream": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, - "license": "MIT", "dependencies": { "pump": "^3.0.0" }, @@ -7120,8 +8196,9 @@ }, "node_modules/get-stream/node_modules/pump": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/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" @@ -7129,6 +8206,8 @@ }, "node_modules/get-system-fonts": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-system-fonts/-/get-system-fonts-2.0.2.tgz", + "integrity": "sha512-zzlgaYnHMIEgHRrfC7x0Qp0Ylhw/sHpM6MHXeVBTYIsvGf5GpbnClB+Q6rAPdn+0gd2oZZIo6Tj3EaWrt4VhDQ==", "license": "MIT", "engines": { "node": ">8.0.0" @@ -7136,20 +8215,24 @@ }, "node_modules/get-value": { "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/github-from-package": { "version": "0.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4= sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" }, "node_modules/glob": { "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E= sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, - "license": "ISC", "dependencies": { "inflight": "^1.0.4", "inherits": "2", @@ -7163,8 +8246,9 @@ }, "node_modules/glob-parent": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -7174,8 +8258,9 @@ }, "node_modules/glob-stream": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", + "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ= sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==", "dev": true, - "license": "MIT", "dependencies": { "extend": "^3.0.0", "glob": "^7.1.1", @@ -7194,8 +8279,10 @@ }, "node_modules/glob-stream/node_modules/glob": { "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -7213,8 +8300,9 @@ }, "node_modules/glob-stream/node_modules/glob-parent": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^3.1.0", "path-dirname": "^1.0.0" @@ -7222,8 +8310,9 @@ }, "node_modules/glob-stream/node_modules/is-glob": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", "dev": true, - "license": "MIT", "dependencies": { "is-extglob": "^2.1.0" }, @@ -7233,8 +8322,9 @@ }, "node_modules/glob-stream/node_modules/readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, - "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -7247,13 +8337,15 @@ }, "node_modules/glob-to-regexp": { "version": "0.4.1", - "dev": true, - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true }, "node_modules/glob-watcher": { "version": "5.0.5", + "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz", + "integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==", "dev": true, - "license": "MIT", "dependencies": { "anymatch": "^2.0.0", "async-done": "^1.2.0", @@ -7269,8 +8361,9 @@ }, "node_modules/glob-watcher/node_modules/anymatch": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, - "license": "ISC", "dependencies": { "micromatch": "^3.1.4", "normalize-path": "^2.1.1" @@ -7278,8 +8371,9 @@ }, "node_modules/glob-watcher/node_modules/anymatch/node_modules/normalize-path": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", "dev": true, - "license": "MIT", "dependencies": { "remove-trailing-separator": "^1.0.1" }, @@ -7289,16 +8383,18 @@ }, "node_modules/glob-watcher/node_modules/binary-extensions": { "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/glob-watcher/node_modules/braces": { "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, - "license": "MIT", "dependencies": { "arr-flatten": "^1.1.0", "array-unique": "^0.3.2", @@ -7317,8 +8413,9 @@ }, "node_modules/glob-watcher/node_modules/braces/node_modules/extend-shallow": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, - "license": "MIT", "dependencies": { "is-extendable": "^0.1.0" }, @@ -7328,8 +8425,10 @@ }, "node_modules/glob-watcher/node_modules/chokidar": { "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", "dev": true, - "license": "MIT", "dependencies": { "anymatch": "^2.0.0", "async-each": "^1.0.1", @@ -7349,8 +8448,9 @@ }, "node_modules/glob-watcher/node_modules/fill-range": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", "dev": true, - "license": "MIT", "dependencies": { "extend-shallow": "^2.0.1", "is-number": "^3.0.0", @@ -7363,8 +8463,9 @@ }, "node_modules/glob-watcher/node_modules/fill-range/node_modules/extend-shallow": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, - "license": "MIT", "dependencies": { "is-extendable": "^0.1.0" }, @@ -7374,9 +8475,11 @@ }, "node_modules/glob-watcher/node_modules/fsevents": { "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2", "dev": true, "hasInstallScript": true, - "license": "MIT", "optional": true, "os": [ "darwin" @@ -7391,8 +8494,9 @@ }, "node_modules/glob-watcher/node_modules/glob-parent": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^3.1.0", "path-dirname": "^1.0.0" @@ -7400,8 +8504,9 @@ }, "node_modules/glob-watcher/node_modules/glob-parent/node_modules/is-glob": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", "dev": true, - "license": "MIT", "dependencies": { "is-extglob": "^2.1.0" }, @@ -7411,8 +8516,9 @@ }, "node_modules/glob-watcher/node_modules/is-binary-path": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", "dev": true, - "license": "MIT", "dependencies": { "binary-extensions": "^1.0.0" }, @@ -7422,16 +8528,18 @@ }, "node_modules/glob-watcher/node_modules/is-extendable": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/glob-watcher/node_modules/is-number": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", "dev": true, - "license": "MIT", "dependencies": { "kind-of": "^3.0.2" }, @@ -7441,8 +8549,9 @@ }, "node_modules/glob-watcher/node_modules/kind-of": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, - "license": "MIT", "dependencies": { "is-buffer": "^1.1.5" }, @@ -7452,8 +8561,9 @@ }, "node_modules/glob-watcher/node_modules/micromatch": { "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, - "license": "MIT", "dependencies": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -7475,16 +8585,18 @@ }, "node_modules/glob-watcher/node_modules/micromatch/node_modules/kind-of": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/glob-watcher/node_modules/readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, - "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -7497,8 +8609,9 @@ }, "node_modules/glob-watcher/node_modules/readdirp": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", "dev": true, - "license": "MIT", "dependencies": { "graceful-fs": "^4.1.11", "micromatch": "^3.1.10", @@ -7510,8 +8623,9 @@ }, "node_modules/glob-watcher/node_modules/to-regex-range": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", "dev": true, - "license": "MIT", "dependencies": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" @@ -7522,8 +8636,9 @@ }, "node_modules/global-agent": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", + "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", "dev": true, - "license": "BSD-3-Clause", "optional": true, "dependencies": { "boolean": "^3.0.1", @@ -7539,8 +8654,9 @@ }, "node_modules/global-modules": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", "dev": true, - "license": "MIT", "dependencies": { "global-prefix": "^1.0.1", "is-windows": "^1.0.1", @@ -7552,8 +8668,9 @@ }, "node_modules/global-prefix": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", "dev": true, - "license": "MIT", "dependencies": { "expand-tilde": "^2.0.2", "homedir-polyfill": "^1.0.1", @@ -7567,8 +8684,9 @@ }, "node_modules/global-prefix/node_modules/which": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, - "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -7578,8 +8696,9 @@ }, "node_modules/globals": { "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=18" }, @@ -7589,8 +8708,9 @@ }, "node_modules/globalthis": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.1.tgz", + "integrity": "sha512-mJPRTc/P39NH/iNG4mXa9aIhNymaQikTrnspeCa2ZuJ+mH2QN/rXwtX3XwKrHqWgUQFbNZKtHM105aHzJalElw==", "dev": true, - "license": "MIT", "optional": true, "dependencies": { "define-properties": "^1.1.3" @@ -7604,8 +8724,9 @@ }, "node_modules/glogg": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", + "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==", "dev": true, - "license": "MIT", "dependencies": { "sparkles": "^1.0.0" }, @@ -7615,8 +8736,9 @@ }, "node_modules/gopd": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dev": true, - "license": "MIT", "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -7626,8 +8748,9 @@ }, "node_modules/got": { "version": "11.8.5", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.5.tgz", + "integrity": "sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ==", "dev": true, - "license": "MIT", "dependencies": { "@sindresorhus/is": "^4.0.0", "@szmarczak/http-timer": "^4.0.5", @@ -7650,17 +8773,21 @@ }, "node_modules/graceful-fs": { "version": "4.2.11", - "license": "ISC" + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, "node_modules/graphemer": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true, "license": "MIT" }, "node_modules/gulp": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz", + "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==", "dev": true, - "license": "MIT", "dependencies": { "glob-watcher": "^5.0.3", "gulp-cli": "^2.2.0", @@ -7676,8 +8803,9 @@ }, "node_modules/gulp-azure-storage": { "version": "0.12.1", + "resolved": "https://registry.npmjs.org/gulp-azure-storage/-/gulp-azure-storage-0.12.1.tgz", + "integrity": "sha512-n/hx8bbGsqrcizruqDTX6zy2FUdkTDGAz04IdopNxNTZivZmizf8u9WLYJreUE6/qCnSJnyjS1HP82+mLk7rjg==", "dev": true, - "license": "MIT", "dependencies": { "@azure/storage-blob": "^12.8.0", "delayed-stream": "0.0.6", @@ -7696,16 +8824,18 @@ }, "node_modules/gulp-azure-storage/node_modules/camelcase": { "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/gulp-azure-storage/node_modules/cliui": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, - "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -7714,21 +8844,24 @@ }, "node_modules/gulp-azure-storage/node_modules/decamelize": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/gulp-azure-storage/node_modules/emoji-regex": { "version": "8.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/gulp-azure-storage/node_modules/find-up": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, - "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -7739,8 +8872,9 @@ }, "node_modules/gulp-azure-storage/node_modules/locate-path": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, - "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -7750,8 +8884,9 @@ }, "node_modules/gulp-azure-storage/node_modules/p-limit": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, - "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -7764,8 +8899,9 @@ }, "node_modules/gulp-azure-storage/node_modules/p-locate": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, - "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -7775,16 +8911,18 @@ }, "node_modules/gulp-azure-storage/node_modules/replace-ext": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.10" } }, "node_modules/gulp-azure-storage/node_modules/string-width": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/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", @@ -7796,8 +8934,9 @@ }, "node_modules/gulp-azure-storage/node_modules/vinyl": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", + "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", "dev": true, - "license": "MIT", "dependencies": { "clone": "^2.1.1", "clone-buffer": "^1.0.0", @@ -7812,8 +8951,9 @@ }, "node_modules/gulp-azure-storage/node_modules/wrap-ansi": { "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -7825,13 +8965,15 @@ }, "node_modules/gulp-azure-storage/node_modules/y18n": { "version": "4.0.1", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", + "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", + "dev": true }, "node_modules/gulp-azure-storage/node_modules/yargs": { "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, - "license": "MIT", "dependencies": { "cliui": "^6.0.0", "decamelize": "^1.2.0", @@ -7851,8 +8993,9 @@ }, "node_modules/gulp-azure-storage/node_modules/yargs-parser": { "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, - "license": "ISC", "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -7863,8 +9006,9 @@ }, "node_modules/gulp-bom": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/gulp-bom/-/gulp-bom-3.0.0.tgz", + "integrity": "sha512-iw/J94F+MVlxG64Q17BSkHsyjpY17qHl3N3A/jDdrL77zQBkhKtTiKLqM4di9CUX/qFToyyeDsOWwH+rESBgmA==", "dev": true, - "license": "MIT", "dependencies": { "plugin-error": "^1.0.1", "through2": "^3.0.1" @@ -7883,6 +9027,8 @@ }, "node_modules/gulp-buffer": { "version": "0.0.2", + "resolved": "https://registry.npmjs.org/gulp-buffer/-/gulp-buffer-0.0.2.tgz", + "integrity": "sha1-r4G0NGEBc2tJlC7GyfqGf/5zcDY= sha512-EBkbjjTH2gRr2B8KBAcomdTemfZHqiKs8CxSYdaW0Hq3zxltQFrCg9BBmKVHC9cfxX/3l2BZK5oiGHYNJ/gcVw==", "dev": true, "dependencies": { "through2": "~0.4.0" @@ -7890,18 +9036,21 @@ }, "node_modules/gulp-buffer/node_modules/isarray": { "version": "0.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true }, "node_modules/gulp-buffer/node_modules/object-keys": { "version": "0.4.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", + "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY= sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==", + "dev": true }, "node_modules/gulp-buffer/node_modules/readable-stream": { "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw= sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", "dev": true, - "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.1", @@ -7911,13 +9060,15 @@ }, "node_modules/gulp-buffer/node_modules/string_decoder": { "version": "0.10.31", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "dev": true }, "node_modules/gulp-buffer/node_modules/through2": { "version": "0.4.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.4.2.tgz", + "integrity": "sha1-2/WGYDEVHsg1K7bE22SiKSqEC5s= sha512-45Llu+EwHKtAZYTPPVn3XZHBgakWMN3rokhEv5hu596XP+cNgplMg+Gj+1nmAvj+L0K7+N49zBKx5rah5u0QIQ==", "dev": true, - "license": "MIT", "dependencies": { "readable-stream": "~1.0.17", "xtend": "~2.1.1" @@ -7925,6 +9076,8 @@ }, "node_modules/gulp-buffer/node_modules/xtend": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", + "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os= sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==", "dev": true, "dependencies": { "object-keys": "~0.4.0" @@ -7935,8 +9088,9 @@ }, "node_modules/gulp-cli": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz", + "integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==", "dev": true, - "license": "MIT", "dependencies": { "ansi-colors": "^1.0.1", "archy": "^1.0.0", @@ -7966,8 +9120,9 @@ }, "node_modules/gulp-cli/node_modules/ansi-colors": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-wrap": "^0.1.0" }, @@ -7977,24 +9132,27 @@ }, "node_modules/gulp-cli/node_modules/ansi-regex": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/gulp-cli/node_modules/camelcase": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/gulp-cli/node_modules/cliui": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==", "dev": true, - "license": "ISC", "dependencies": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1", @@ -8003,21 +9161,24 @@ }, "node_modules/gulp-cli/node_modules/decamelize": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/gulp-cli/node_modules/get-caller-file": { "version": "1.0.3", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true }, "node_modules/gulp-cli/node_modules/is-fullwidth-code-point": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs= sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", "dev": true, - "license": "MIT", "dependencies": { "number-is-nan": "^1.0.0" }, @@ -8027,13 +9188,15 @@ }, "node_modules/gulp-cli/node_modules/require-main-filename": { "version": "1.0.1", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==", + "dev": true }, "node_modules/gulp-cli/node_modules/string-width": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", "dev": true, - "license": "MIT", "dependencies": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -8045,8 +9208,9 @@ }, "node_modules/gulp-cli/node_modules/strip-ansi": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^2.0.0" }, @@ -8056,13 +9220,15 @@ }, "node_modules/gulp-cli/node_modules/which-module": { "version": "1.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8= sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==", + "dev": true }, "node_modules/gulp-cli/node_modules/wrap-ansi": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", "dev": true, - "license": "MIT", "dependencies": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1" @@ -8073,13 +9239,15 @@ }, "node_modules/gulp-cli/node_modules/y18n": { "version": "3.2.2", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", + "dev": true }, "node_modules/gulp-cli/node_modules/yargs": { "version": "7.1.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz", + "integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==", "dev": true, - "license": "MIT", "dependencies": { "camelcase": "^3.0.0", "cliui": "^3.2.0", @@ -8098,8 +9266,9 @@ }, "node_modules/gulp-cli/node_modules/yargs-parser": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", + "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", "dev": true, - "license": "ISC", "dependencies": { "camelcase": "^3.0.0", "object.assign": "^4.1.0" @@ -8107,8 +9276,9 @@ }, "node_modules/gulp-filter": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/gulp-filter/-/gulp-filter-5.1.0.tgz", + "integrity": "sha1-oF4Rr/sHz33PQafeHLe2OsN4PnM= sha512-ZERu1ipbPmjrNQ2dQD6lL4BjrJQG66P/c5XiyMMBqV+tUAJ+fLOyYIL/qnXd2pHmw/G/r7CLQb9ttANvQWbpfQ==", "dev": true, - "license": "MIT", "dependencies": { "multimatch": "^2.0.0", "plugin-error": "^0.1.2", @@ -8120,8 +9290,9 @@ }, "node_modules/gulp-filter/node_modules/arr-diff": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", + "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo= sha512-OQwDZUqYaQwyyhDJHThmzId8daf4/RFNLaeh3AevmSeZ5Y7ug4Ga/yKc6l6kTZOBW781rCj103ZuTh8GAsB3+Q==", "dev": true, - "license": "MIT", "dependencies": { "arr-flatten": "^1.0.1", "array-slice": "^0.2.3" @@ -8132,24 +9303,27 @@ }, "node_modules/gulp-filter/node_modules/arr-union": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", + "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0= sha512-t5db90jq+qdgk8aFnxEkjqta0B/GHrM1pxzuuZz2zWsOXc5nKu3t+76s/PQBA8FTcM/ipspIH9jWG4OxCBc2eA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/gulp-filter/node_modules/array-slice": { "version": "0.2.3", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", + "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU= sha512-rlVfZW/1Ph2SNySXwR9QYkChp8EkOEiTMO5Vwx60usw04i4nWemkm9RXmQqgkQFaLHsqLuADvjp6IfgL9l2M8Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/gulp-filter/node_modules/extend-shallow": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", + "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE= sha512-L7AGmkO6jhDkEBBGWlLtftA80Xq8DipnrRPr0pyi7GQLXkaq9JYA4xF4z6qnadIC6euiTDKco0cGSU9muw+WTw==", "dev": true, - "license": "MIT", "dependencies": { "kind-of": "^1.1.0" }, @@ -8159,16 +9333,18 @@ }, "node_modules/gulp-filter/node_modules/kind-of": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", + "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ= sha512-aUH6ElPnMGon2/YkxRIigV32MOpTVcoXQ1Oo8aYn40s+sJ3j+0gFZsT8HKDcxNy7Fi9zuquWtGaGAahOdv5p/g==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/gulp-filter/node_modules/plugin-error": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", + "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4= sha512-WzZHcm4+GO34sjFMxQMqZbsz3xiNEgonCskQ9v+IroMmYgk/tas8dG+Hr2D6IbRPybZ12oWpzE/w3cGJ6FJzOw==", "dev": true, - "license": "MIT", "dependencies": { "ansi-cyan": "^0.1.1", "ansi-red": "^0.1.1", @@ -8182,8 +9358,9 @@ }, "node_modules/gulp-flatmap": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/gulp-flatmap/-/gulp-flatmap-1.0.2.tgz", + "integrity": "sha512-xm+Ax2vPL/xiMBqLFI++wUyPtncm3b55ztGHewmRcoG/sYb0OUTatjSacOud3fee77rnk+jOgnDEHhwBtMHgFA==", "dev": true, - "license": "MIT", "dependencies": { "plugin-error": "0.1.2", "through2": "2.0.3" @@ -8194,8 +9371,9 @@ }, "node_modules/gulp-flatmap/node_modules/arr-diff": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", + "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo= sha512-OQwDZUqYaQwyyhDJHThmzId8daf4/RFNLaeh3AevmSeZ5Y7ug4Ga/yKc6l6kTZOBW781rCj103ZuTh8GAsB3+Q==", "dev": true, - "license": "MIT", "dependencies": { "arr-flatten": "^1.0.1", "array-slice": "^0.2.3" @@ -8206,24 +9384,27 @@ }, "node_modules/gulp-flatmap/node_modules/arr-union": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", + "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0= sha512-t5db90jq+qdgk8aFnxEkjqta0B/GHrM1pxzuuZz2zWsOXc5nKu3t+76s/PQBA8FTcM/ipspIH9jWG4OxCBc2eA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/gulp-flatmap/node_modules/array-slice": { "version": "0.2.3", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", + "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU= sha512-rlVfZW/1Ph2SNySXwR9QYkChp8EkOEiTMO5Vwx60usw04i4nWemkm9RXmQqgkQFaLHsqLuADvjp6IfgL9l2M8Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/gulp-flatmap/node_modules/extend-shallow": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", + "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE= sha512-L7AGmkO6jhDkEBBGWlLtftA80Xq8DipnrRPr0pyi7GQLXkaq9JYA4xF4z6qnadIC6euiTDKco0cGSU9muw+WTw==", "dev": true, - "license": "MIT", "dependencies": { "kind-of": "^1.1.0" }, @@ -8233,16 +9414,18 @@ }, "node_modules/gulp-flatmap/node_modules/kind-of": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", + "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ= sha512-aUH6ElPnMGon2/YkxRIigV32MOpTVcoXQ1Oo8aYn40s+sJ3j+0gFZsT8HKDcxNy7Fi9zuquWtGaGAahOdv5p/g==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/gulp-flatmap/node_modules/plugin-error": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", + "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4= sha512-WzZHcm4+GO34sjFMxQMqZbsz3xiNEgonCskQ9v+IroMmYgk/tas8dG+Hr2D6IbRPybZ12oWpzE/w3cGJ6FJzOw==", "dev": true, - "license": "MIT", "dependencies": { "ansi-cyan": "^0.1.1", "ansi-red": "^0.1.1", @@ -8256,8 +9439,9 @@ }, "node_modules/gulp-flatmap/node_modules/readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, - "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -8270,8 +9454,9 @@ }, "node_modules/gulp-flatmap/node_modules/through2": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4= sha512-tmNYYHFqXmaKSSlOU4ZbQ82cxmFQa5LRWKFtWCNkGIiZ3/VHmOffCeWfBRZZRyXAhNP9itVMR+cuvomBOPlm8g==", "dev": true, - "license": "MIT", "dependencies": { "readable-stream": "^2.1.5", "xtend": "~4.0.1" @@ -8279,8 +9464,9 @@ }, "node_modules/gulp-gunzip": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/gulp-gunzip/-/gulp-gunzip-1.1.0.tgz", + "integrity": "sha512-3INeprGyz5fUtAs75k6wVslGuRZIjKAoQp39xA7Bz350ReqkrfYaLYqjZ67XyIfLytRXdzeX04f+DnBduYhQWw==", "dev": true, - "license": "MIT", "dependencies": { "through2": "~2.0.3", "vinyl": "~2.0.1" @@ -8288,16 +9474,18 @@ }, "node_modules/gulp-gunzip/node_modules/clone": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4= sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8" } }, "node_modules/gulp-gunzip/node_modules/readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, - "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -8310,16 +9498,18 @@ }, "node_modules/gulp-gunzip/node_modules/replace-ext": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.10" } }, "node_modules/gulp-gunzip/node_modules/through2": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4= sha512-tmNYYHFqXmaKSSlOU4ZbQ82cxmFQa5LRWKFtWCNkGIiZ3/VHmOffCeWfBRZZRyXAhNP9itVMR+cuvomBOPlm8g==", "dev": true, - "license": "MIT", "dependencies": { "readable-stream": "^2.1.5", "xtend": "~4.0.1" @@ -8327,8 +9517,9 @@ }, "node_modules/gulp-gunzip/node_modules/vinyl": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.0.2.tgz", + "integrity": "sha1-CjcT2NTpIhxY8QyhbAEWyeJe2nw= sha512-ViPXqulxjb1yXxaf/kQZfLHkd2ppnVBWPq4XmvW377vcBTxHFtHR5NRfYsdXsiKpWndKRoCdn11DfEnoCz1Inw==", "dev": true, - "license": "MIT", "dependencies": { "clone": "^1.0.0", "clone-buffer": "^1.0.0", @@ -8344,8 +9535,9 @@ }, "node_modules/gulp-gzip": { "version": "1.4.2", + "resolved": "https://registry.npmjs.org/gulp-gzip/-/gulp-gzip-1.4.2.tgz", + "integrity": "sha512-ZIxfkUwk2XmZPTT9pPHrHUQlZMyp9nPhg2sfoeN27mBGpi7OaHnOD+WCN41NXjfJQ69lV1nQ9LLm1hYxx4h3UQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-colors": "^1.0.1", "bytes": "^3.0.0", @@ -8360,8 +9552,9 @@ }, "node_modules/gulp-gzip/node_modules/ansi-colors": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-wrap": "^0.1.0" }, @@ -8371,8 +9564,9 @@ }, "node_modules/gulp-gzip/node_modules/readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, - "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -8385,8 +9579,9 @@ }, "node_modules/gulp-gzip/node_modules/through2": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/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" @@ -8394,8 +9589,9 @@ }, "node_modules/gulp-json-editor": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/gulp-json-editor/-/gulp-json-editor-2.5.0.tgz", + "integrity": "sha512-HyrBSaE+Di6oQbKsfNM6X7dPFowOuTTuVYjxratU8QAiW7LR7Rydm+/fSS3OehdnuP++A/07q/nksihuD5FZSA==", "dev": true, - "license": "MIT", "dependencies": { "deepmerge": "^3.0.0", "detect-indent": "^5.0.0", @@ -8409,8 +9605,9 @@ }, "node_modules/gulp-plumber": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gulp-plumber/-/gulp-plumber-1.2.0.tgz", + "integrity": "sha512-L/LJftsbKoHbVj6dN5pvMsyJn9jYI0wT0nMg3G6VZhDac4NesezecYTi8/48rHi+yEic3sUpw6jlSc7qNWh32A==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^1.1.3", "fancy-log": "^1.3.2", @@ -8424,24 +9621,27 @@ }, "node_modules/gulp-plumber/node_modules/ansi-regex": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/gulp-plumber/node_modules/ansi-styles": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/gulp-plumber/node_modules/arr-diff": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", + "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo= sha512-OQwDZUqYaQwyyhDJHThmzId8daf4/RFNLaeh3AevmSeZ5Y7ug4Ga/yKc6l6kTZOBW781rCj103ZuTh8GAsB3+Q==", "dev": true, - "license": "MIT", "dependencies": { "arr-flatten": "^1.0.1", "array-slice": "^0.2.3" @@ -8452,24 +9652,27 @@ }, "node_modules/gulp-plumber/node_modules/arr-union": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", + "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0= sha512-t5db90jq+qdgk8aFnxEkjqta0B/GHrM1pxzuuZz2zWsOXc5nKu3t+76s/PQBA8FTcM/ipspIH9jWG4OxCBc2eA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/gulp-plumber/node_modules/array-slice": { "version": "0.2.3", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", + "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU= sha512-rlVfZW/1Ph2SNySXwR9QYkChp8EkOEiTMO5Vwx60usw04i4nWemkm9RXmQqgkQFaLHsqLuADvjp6IfgL9l2M8Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/gulp-plumber/node_modules/chalk": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^2.2.1", "escape-string-regexp": "^1.0.2", @@ -8483,16 +9686,18 @@ }, "node_modules/gulp-plumber/node_modules/escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/gulp-plumber/node_modules/extend-shallow": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", + "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE= sha512-L7AGmkO6jhDkEBBGWlLtftA80Xq8DipnrRPr0pyi7GQLXkaq9JYA4xF4z6qnadIC6euiTDKco0cGSU9muw+WTw==", "dev": true, - "license": "MIT", "dependencies": { "kind-of": "^1.1.0" }, @@ -8502,16 +9707,18 @@ }, "node_modules/gulp-plumber/node_modules/kind-of": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", + "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ= sha512-aUH6ElPnMGon2/YkxRIigV32MOpTVcoXQ1Oo8aYn40s+sJ3j+0gFZsT8HKDcxNy7Fi9zuquWtGaGAahOdv5p/g==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/gulp-plumber/node_modules/plugin-error": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", + "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4= sha512-WzZHcm4+GO34sjFMxQMqZbsz3xiNEgonCskQ9v+IroMmYgk/tas8dG+Hr2D6IbRPybZ12oWpzE/w3cGJ6FJzOw==", "dev": true, - "license": "MIT", "dependencies": { "ansi-cyan": "^0.1.1", "ansi-red": "^0.1.1", @@ -8525,8 +9732,9 @@ }, "node_modules/gulp-plumber/node_modules/readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, - "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -8539,8 +9747,9 @@ }, "node_modules/gulp-plumber/node_modules/strip-ansi": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^2.0.0" }, @@ -8550,16 +9759,18 @@ }, "node_modules/gulp-plumber/node_modules/supports-color": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/gulp-plumber/node_modules/through2": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/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" @@ -8567,6 +9778,8 @@ }, "node_modules/gulp-rename": { "version": "1.2.2", + "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.2.2.tgz", + "integrity": "sha1-OtRCh2PwXidk3sHGfYaNsnVoeBc= sha512-qhfUlYwq5zIP4cpRjx+np2vZVnr0xCRQrF3RsGel8uqL47Gu3yjmllSfnvJyl/39zYuxS68e1nnxImbm7388vw==", "dev": true, "engines": { "node": ">=0.10.0", @@ -8575,8 +9788,9 @@ }, "node_modules/gulp-replace": { "version": "0.5.4", + "resolved": "https://registry.npmjs.org/gulp-replace/-/gulp-replace-0.5.4.tgz", + "integrity": "sha1-aaZ5FLvRPFYr/xT1BKQDeWqg2qk= sha512-lHL+zKJN8uV95UkONnfRkoj2yJxPPupt2SahxA4vo5c+Ee3+WaIiMdWbOyUhg8BhAROQrWKnnxKOWPdVrnBwGw==", "dev": true, - "license": "MIT", "dependencies": { "istextorbinary": "1.0.2", "readable-stream": "^2.0.1", @@ -8588,8 +9802,9 @@ }, "node_modules/gulp-replace/node_modules/readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, - "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -8602,8 +9817,9 @@ }, "node_modules/gulp-sourcemaps": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-3.0.0.tgz", + "integrity": "sha512-RqvUckJkuYqy4VaIH60RMal4ZtG0IbQ6PXMNkNsshEGJ9cldUPRb/YCgboYae+CLAs1HQNb4ADTKCx65HInquQ==", "dev": true, - "license": "ISC", "dependencies": { "@gulp-sourcemaps/identity-map": "^2.0.1", "@gulp-sourcemaps/map-sources": "^1.0.0", @@ -8623,8 +9839,9 @@ }, "node_modules/gulp-sourcemaps/node_modules/acorn": { "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", "dev": true, - "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -8634,8 +9851,9 @@ }, "node_modules/gulp-sourcemaps/node_modules/readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, - "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -8648,8 +9866,9 @@ }, "node_modules/gulp-sourcemaps/node_modules/through2": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/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" @@ -8657,8 +9876,9 @@ }, "node_modules/gulp-svgmin": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/gulp-svgmin/-/gulp-svgmin-4.1.0.tgz", + "integrity": "sha512-WKpif+yu3+oIlp1e11CQi5F64YddP699l2mFmxpz8swv8/P8dhxVcMKdCPFWouArlVyn7Ma1eWCJHw5gx4NMtw==", "dev": true, - "license": "MIT", "dependencies": { "lodash.clonedeep": "^4.5.0", "plugin-error": "^1.0.1", @@ -8667,8 +9887,9 @@ }, "node_modules/gulp-symdest": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/gulp-symdest/-/gulp-symdest-1.3.0.tgz", + "integrity": "sha512-n1VaNYMpyOq4GfyQyIwRZhXOOsQVdEy56BCFxL4hu+stKwYeSQcZxLX5FOZL6jZUlBYXCWlXL+E5JU13ZMldIw==", "dev": true, - "license": "MIT", "dependencies": { "event-stream": "3.3.4", "mkdirp": "^0.5.1", @@ -8678,8 +9899,9 @@ }, "node_modules/gulp-symdest/node_modules/mkdirp": { "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, - "license": "MIT", "dependencies": { "minimist": "^1.2.5" }, @@ -8689,8 +9911,9 @@ }, "node_modules/gulp-untar": { "version": "0.0.7", + "resolved": "https://registry.npmjs.org/gulp-untar/-/gulp-untar-0.0.7.tgz", + "integrity": "sha512-0QfbCH2a1k2qkTLWPqTX+QO4qNsHn3kC546YhAP3/n0h+nvtyGITDuDrYBMDZeW4WnFijmkOvBWa5HshTic1tw==", "dev": true, - "license": "MIT", "dependencies": { "event-stream": "~3.3.4", "streamifier": "~0.1.1", @@ -8701,21 +9924,24 @@ }, "node_modules/gulp-untar/node_modules/clone": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4= sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8" } }, "node_modules/gulp-untar/node_modules/clone-stats": { "version": "0.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE= sha512-dhUqc57gSMCo6TX85FLfe51eC/s+Im2MLkAgJwfaRRexR2tA4dd3eLEW4L6efzHc2iNorrRRXITifnDLlRrhaA==", + "dev": true }, "node_modules/gulp-untar/node_modules/readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, - "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -8728,6 +9954,8 @@ }, "node_modules/gulp-untar/node_modules/replace-ext": { "version": "0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ= sha512-AFBWBy9EVRTa/LhEcG8QDP3FvpwZqmvN2QFDuJswFeaVhWnZMp8q3E6Zd90SR04PlIwfGdyVjNyLPyen/ek5CQ==", "dev": true, "engines": { "node": ">= 0.4" @@ -8735,8 +9963,10 @@ }, "node_modules/gulp-untar/node_modules/tar": { "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", + "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", + "deprecated": "This version of tar is no longer supported, and will not receive security updates. Please upgrade asap.", "dev": true, - "license": "ISC", "dependencies": { "block-stream": "*", "fstream": "^1.0.12", @@ -8745,8 +9975,9 @@ }, "node_modules/gulp-untar/node_modules/through2": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4= sha512-tmNYYHFqXmaKSSlOU4ZbQ82cxmFQa5LRWKFtWCNkGIiZ3/VHmOffCeWfBRZZRyXAhNP9itVMR+cuvomBOPlm8g==", "dev": true, - "license": "MIT", "dependencies": { "readable-stream": "^2.1.5", "xtend": "~4.0.1" @@ -8754,8 +9985,9 @@ }, "node_modules/gulp-untar/node_modules/vinyl": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", + "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ= sha512-Ci3wnR2uuSAWFMSglZuB8Z2apBdtOyz8CV7dC6/U1XbltXBC+IuutUkXQISz01P+US2ouBuesSbV6zILZ6BuzQ==", "dev": true, - "license": "MIT", "dependencies": { "clone": "^1.0.0", "clone-stats": "^0.0.1", @@ -8767,8 +9999,10 @@ }, "node_modules/gulp-vinyl-zip": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/gulp-vinyl-zip/-/gulp-vinyl-zip-2.1.2.tgz", + "integrity": "sha512-wJn09jsb8PyvUeyFF7y7ImEJqJwYy40BqL9GKfJs6UGpaGW9A+N68Q+ajsIpb9AeR6lAdjMbIdDPclIGo1/b7Q==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", "dev": true, - "license": "MIT", "dependencies": { "event-stream": "3.3.4", "queue": "^4.2.1", @@ -8781,24 +10015,27 @@ }, "node_modules/gulp-vinyl-zip/node_modules/fd-slicer": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", + "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU= sha512-MX1ZLPIuKED51hrI4++K+1B0VX87Cs4EkybD2q12Ysuf5p4vkmHqMvQJRlDwROqFr4D2Pzyit5wGQxf30grIcw==", "dev": true, - "license": "MIT", "dependencies": { "pend": "~1.2.0" } }, "node_modules/gulp-vinyl-zip/node_modules/queue": { "version": "4.5.0", + "resolved": "https://registry.npmjs.org/queue/-/queue-4.5.0.tgz", + "integrity": "sha512-DwxpAnqJuoQa+wyDgQuwkSshkhlqIlWEvwvdAY27fDPunZ2cVJzXU4JyjY+5l7zs7oGLaYAQm4MbLOVFAHFBzA==", "dev": true, - "license": "MIT", "dependencies": { "inherits": "~2.0.0" } }, "node_modules/gulp-vinyl-zip/node_modules/readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, - "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -8811,16 +10048,18 @@ }, "node_modules/gulp-vinyl-zip/node_modules/replace-ext": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.10" } }, "node_modules/gulp-vinyl-zip/node_modules/through2": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/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" @@ -8828,8 +10067,9 @@ }, "node_modules/gulp-vinyl-zip/node_modules/vinyl": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", + "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", "dev": true, - "license": "MIT", "dependencies": { "clone": "^2.1.1", "clone-buffer": "^1.0.0", @@ -8844,8 +10084,9 @@ }, "node_modules/gulp-vinyl-zip/node_modules/yauzl": { "version": "2.9.1", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.9.1.tgz", + "integrity": "sha1-qBmB6nCleUYTOIPwKcWCGok1mn8= sha512-tOFjaiYI4cNrDuqujDv5G1KdCmGtuIULZqLv263CCADNQlNInl8sJPD+Gf3neEVecFQ0sw6D4oJTI/dqlunkSw==", "dev": true, - "license": "MIT", "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.0.1" @@ -8853,8 +10094,9 @@ }, "node_modules/gulplog": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", + "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U= sha512-hm6N8nrm3Y08jXie48jsC55eCZz9mnb4OirAStEk2deqeyhXU3C1otDVh+ccttMuc1sBi6RX6ZJ720hs9RCvgw==", "dev": true, - "license": "MIT", "dependencies": { "glogg": "^1.0.0" }, @@ -8864,8 +10106,9 @@ }, "node_modules/gunzip-maybe": { "version": "1.4.2", + "resolved": "https://registry.npmjs.org/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", @@ -8880,8 +10123,9 @@ }, "node_modules/gunzip-maybe/node_modules/readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, - "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -8894,8 +10138,9 @@ }, "node_modules/gunzip-maybe/node_modules/through2": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/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" @@ -8903,8 +10148,9 @@ }, "node_modules/has": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, - "license": "MIT", "dependencies": { "function-bind": "^1.1.1" }, @@ -8914,8 +10160,9 @@ }, "node_modules/has-ansi": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^2.0.0" }, @@ -8925,24 +10172,27 @@ }, "node_modules/has-ansi/node_modules/ansi-regex": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/has-flag": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0= sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/has-property-descriptors": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, - "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" }, @@ -8952,8 +10202,9 @@ }, "node_modules/has-proto": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -8963,8 +10214,9 @@ }, "node_modules/has-symbols": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -8974,8 +10226,9 @@ }, "node_modules/has-tostringtag": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", "dev": true, - "license": "MIT", "dependencies": { "has-symbols": "^1.0.2" }, @@ -8988,8 +10241,9 @@ }, "node_modules/has-value": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", "dev": true, - "license": "MIT", "dependencies": { "get-value": "^2.0.6", "has-values": "^1.0.0", @@ -9001,8 +10255,9 @@ }, "node_modules/has-values": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", "dev": true, - "license": "MIT", "dependencies": { "is-number": "^3.0.0", "kind-of": "^4.0.0" @@ -9013,8 +10268,9 @@ }, "node_modules/has-values/node_modules/is-number": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", "dev": true, - "license": "MIT", "dependencies": { "kind-of": "^3.0.2" }, @@ -9024,8 +10280,9 @@ }, "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, - "license": "MIT", "dependencies": { "is-buffer": "^1.1.5" }, @@ -9035,8 +10292,9 @@ }, "node_modules/has-values/node_modules/kind-of": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc= sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", "dev": true, - "license": "MIT", "dependencies": { "is-buffer": "^1.1.5" }, @@ -9046,8 +10304,9 @@ }, "node_modules/hasown": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, - "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -9057,16 +10316,18 @@ }, "node_modules/he": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, - "license": "MIT", "bin": { "he": "bin/he" } }, "node_modules/homedir-polyfill": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", "dev": true, - "license": "MIT", "dependencies": { "parse-passwd": "^1.0.0" }, @@ -9076,18 +10337,21 @@ }, "node_modules/hosted-git-info": { "version": "2.8.9", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true }, "node_modules/html-escaper": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.0.tgz", + "integrity": "sha512-a4u9BeERWGu/S8JiWEAQcdrg9v4QArtP9keViQjGMdff20fBdd8waotXaNmODqBe6uZ3Nafi7K/ho4gCQHV3Ig==", + "dev": true }, "node_modules/http-assert": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/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" @@ -9098,16 +10362,18 @@ }, "node_modules/http-assert/node_modules/depd": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= 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.npmjs.org/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", @@ -9121,19 +10387,23 @@ }, "node_modules/http-assert/node_modules/statuses": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/http-cache-semantics": { "version": "4.1.1", - "dev": true, - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true }, "node_modules/http-errors": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9149,7 +10419,8 @@ }, "node_modules/http-proxy-agent": { "version": "7.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" @@ -9160,8 +10431,9 @@ }, "node_modules/http2-wrapper": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", "dev": true, - "license": "MIT", "dependencies": { "quick-lru": "^5.1.1", "resolve-alpn": "^1.0.0" @@ -9172,7 +10444,8 @@ }, "node_modules/https-proxy-agent": { "version": "7.0.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", "dependencies": { "agent-base": "^7.0.2", "debug": "4" @@ -9183,9 +10456,10 @@ }, "node_modules/husky": { "version": "0.13.4", + "resolved": "https://registry.npmjs.org/husky/-/husky-0.13.4.tgz", + "integrity": "sha512-kafsK/82ndSVKJe1IoR/z7NKkiI2LYM6H+VNI/YlKOeoOXEJTpD65TNu05Zx7pzSZzLuAdMt4fHgpUsnd6HJ7A==", "dev": true, "hasInstallScript": true, - "license": "MIT", "dependencies": { "chalk": "^1.1.3", "find-parent-dir": "^0.3.0", @@ -9195,24 +10469,27 @@ }, "node_modules/husky/node_modules/ansi-regex": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/husky/node_modules/ansi-styles": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/husky/node_modules/chalk": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^2.2.1", "escape-string-regexp": "^1.0.2", @@ -9226,24 +10503,27 @@ }, "node_modules/husky/node_modules/escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/husky/node_modules/normalize-path": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-1.0.0.tgz", + "integrity": "sha512-7WyT0w8jhpDStXRq5836AMmihQwq2nrUVQrgjvUo/p/NZf9uy/MeJ246lBJVmWuYXMlJuG9BNZHF0hWjfTbQUA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/husky/node_modules/strip-ansi": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^2.0.0" }, @@ -9253,16 +10533,18 @@ }, "node_modules/husky/node_modules/supports-color": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/icss-utils": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", "dev": true, - "license": "ISC", "engines": { "node": "^10 || ^12 || >= 14" }, @@ -9272,6 +10554,8 @@ }, "node_modules/ieee754": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "funding": [ { "type": "github", @@ -9285,26 +10569,28 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "BSD-3-Clause" + ] }, "node_modules/ignore": { "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/immediate": { "version": "3.0.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "dev": true }, "node_modules/import-fresh": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, - "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -9318,8 +10604,9 @@ }, "node_modules/import-local": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", + "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", "dev": true, - "license": "MIT", "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" @@ -9333,16 +10620,19 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o= sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.19" } }, "node_modules/inflight": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, - "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -9350,14 +10640,18 @@ }, "node_modules/inherits": { "version": "2.0.4", - "license": "ISC" + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/ini": { "version": "1.3.8", - "license": "ISC" + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "node_modules/innosetup": { "version": "6.4.1", + "resolved": "https://registry.npmjs.org/innosetup/-/innosetup-6.4.1.tgz", + "integrity": "sha512-Bh/dNlyyFsFKBGoTf19n1msPnm4Njfb0CWVirw2CV1MSJXYy0ajRI+xjo/Yr9DtZFLLafhnwm1ZsxTu309F8lQ==", "dev": true, "bin": { "innosetup-compiler": "lib/iscc" @@ -9368,23 +10662,26 @@ }, "node_modules/interpret": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.10" } }, "node_modules/invert-kv": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY= sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/ip-address": { "version": "9.0.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", "dependencies": { "jsbn": "1.1.0", "sprintf-js": "^1.1.3" @@ -9395,8 +10692,9 @@ }, "node_modules/is-absolute": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", "dev": true, - "license": "MIT", "dependencies": { "is-relative": "^1.0.0", "is-windows": "^1.0.1" @@ -9407,8 +10705,10 @@ }, "node_modules/is-accessor-descriptor": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "deprecated": "Please upgrade to v1.0.1", "dev": true, - "license": "MIT", "dependencies": { "kind-of": "^6.0.0" }, @@ -9418,16 +10718,18 @@ }, "node_modules/is-accessor-descriptor/node_modules/kind-of": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-arguments": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -9441,13 +10743,15 @@ }, "node_modules/is-arrayish": { "version": "0.2.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true }, "node_modules/is-binary-path": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, - "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" }, @@ -9457,13 +10761,15 @@ }, "node_modules/is-buffer": { "version": "1.1.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true }, "node_modules/is-callable": { "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -9473,8 +10779,9 @@ }, "node_modules/is-ci": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", + "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", "dev": true, - "license": "MIT", "dependencies": { "ci-info": "^1.5.0" }, @@ -9484,8 +10791,9 @@ }, "node_modules/is-core-module": { "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", "dev": true, - "license": "MIT", "dependencies": { "has": "^1.0.3" }, @@ -9495,8 +10803,10 @@ }, "node_modules/is-data-descriptor": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "deprecated": "Please upgrade to v1.0.1", "dev": true, - "license": "MIT", "dependencies": { "kind-of": "^6.0.0" }, @@ -9506,16 +10816,18 @@ }, "node_modules/is-data-descriptor/node_modules/kind-of": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-date-object": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -9525,13 +10837,15 @@ }, "node_modules/is-deflate": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/is-deflate/-/is-deflate-1.0.0.tgz", + "integrity": "sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ==", + "dev": true }, "node_modules/is-descriptor": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, - "license": "MIT", "dependencies": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -9543,14 +10857,17 @@ }, "node_modules/is-descriptor/node_modules/kind-of": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-docker": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", "license": "MIT", "bin": { "is-docker": "cli.js" @@ -9564,8 +10881,9 @@ }, "node_modules/is-extendable": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, - "license": "MIT", "dependencies": { "is-plain-object": "^2.0.4" }, @@ -9575,8 +10893,9 @@ }, "node_modules/is-extendable/node_modules/is-plain-object": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, - "license": "MIT", "dependencies": { "isobject": "^3.0.1" }, @@ -9586,23 +10905,26 @@ }, "node_modules/is-extglob": { "version": "2.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "engines": { "node": ">=0.10.0" } }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-generator-function": { "version": "1.0.9", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.9.tgz", + "integrity": "sha512-ZJ34p1uvIfptHCN7sFTjGibB9/oBg17sHqzDLfuwhvmN/qLVvIQXRQ8licZQ35WJ8KuEQt/etnnzQFI9C9Ue/A==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -9612,7 +10934,8 @@ }, "node_modules/is-glob": { "version": "4.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dependencies": { "is-extglob": "^2.1.1" }, @@ -9622,14 +10945,17 @@ }, "node_modules/is-gzip": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/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-inside-container": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", "license": "MIT", "dependencies": { "is-docker": "^3.0.0" @@ -9646,8 +10972,9 @@ }, "node_modules/is-interactive": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -9657,16 +10984,18 @@ }, "node_modules/is-negated-glob": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", + "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI= sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-negative-zero": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -9676,44 +11005,50 @@ }, "node_modules/is-number": { "version": "7.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "engines": { "node": ">=0.12.0" } }, "node_modules/is-path-inside": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-plain-obj": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-plain-object": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-promise": { "version": "2.2.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", + "dev": true }, "node_modules/is-regex": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", "dev": true, - "license": "MIT", "dependencies": { "has-symbols": "^1.0.1" }, @@ -9726,8 +11061,9 @@ }, "node_modules/is-relative": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", "dev": true, - "license": "MIT", "dependencies": { "is-unc-path": "^1.0.0" }, @@ -9737,16 +11073,18 @@ }, "node_modules/is-stream": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ= sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-symbol": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", "dev": true, - "license": "MIT", "dependencies": { "has-symbols": "^1.0.1" }, @@ -9759,8 +11097,9 @@ }, "node_modules/is-typed-array": { "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", "dev": true, - "license": "MIT", "dependencies": { "which-typed-array": "^1.1.11" }, @@ -9773,8 +11112,9 @@ }, "node_modules/is-unc-path": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", "dev": true, - "license": "MIT", "dependencies": { "unc-path-regex": "^0.1.2" }, @@ -9784,8 +11124,9 @@ }, "node_modules/is-unicode-supported": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -9795,27 +11136,32 @@ }, "node_modules/is-utf8": { "version": "0.2.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", + "dev": true }, "node_modules/is-valid-glob": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", + "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao= sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-windows": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-wsl": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", "license": "MIT", "dependencies": { "is-inside-container": "^1.0.0" @@ -9829,34 +11175,39 @@ }, "node_modules/isarray": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true }, "node_modules/isexe": { "version": "2.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true }, "node_modules/isobject": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8= sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/istanbul-lib-coverage": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-instrument": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz", + "integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", @@ -9870,8 +11221,9 @@ }, "node_modules/istanbul-lib-report": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/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", @@ -9883,16 +11235,18 @@ }, "node_modules/istanbul-lib-report/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/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.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -9902,8 +11256,9 @@ }, "node_modules/istanbul-lib-source-maps": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", @@ -9915,8 +11270,9 @@ }, "node_modules/istanbul-reports": { "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -9927,8 +11283,9 @@ }, "node_modules/istextorbinary": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-1.0.2.tgz", + "integrity": "sha1-rOGTVNGpoBc+/rEITOD4ewrX3s8= sha512-qZ5ptUDuni2pdCngFTraYa5kalQ0mX47Mhn08tT0DZZv/7yhX1eMb9lFtXVbWhFtgRtpLG/UdqVAjh9teO5x+w==", "dev": true, - "license": "MIT", "dependencies": { "binaryextensions": "~1.0.0", "textextensions": "~1.0.0" @@ -9939,8 +11296,9 @@ }, "node_modules/jackspeak": { "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", "dev": true, - "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -9956,6 +11314,8 @@ }, "node_modules/jest-worker": { "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, "license": "MIT", "dependencies": { @@ -9969,6 +11329,8 @@ }, "node_modules/jest-worker/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "license": "MIT", "engines": { @@ -9977,6 +11339,8 @@ }, "node_modules/jest-worker/node_modules/supports-color": { "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "license": "MIT", "dependencies": { @@ -9991,12 +11355,14 @@ }, "node_modules/js-base64": { "version": "3.7.7", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.7.tgz", + "integrity": "sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==" }, "node_modules/js-beautify": { "version": "1.8.9", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.8.9.tgz", + "integrity": "sha512-MwPmLywK9RSX0SPsUJjN7i+RQY9w/yC17Lbrq9ViEefpLRgqAR2BgrMN2AbifkUuhDV8tRauLhLda/9+bE0YQA==", "dev": true, - "license": "MIT", "dependencies": { "config-chain": "^1.1.12", "editorconfig": "^0.15.2", @@ -10012,8 +11378,10 @@ }, "node_modules/js-beautify/node_modules/glob": { "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -10031,8 +11399,9 @@ }, "node_modules/js-beautify/node_modules/mkdirp": { "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, - "license": "MIT", "dependencies": { "minimist": "^1.2.5" }, @@ -10042,13 +11411,16 @@ }, "node_modules/js-tokens": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true, "license": "MIT" }, "node_modules/js-yaml": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, - "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -10058,10 +11430,13 @@ }, "node_modules/jsbn": { "version": "1.1.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==" }, "node_modules/jschardet": { "version": "3.1.4", + "resolved": "https://registry.npmjs.org/jschardet/-/jschardet-3.1.4.tgz", + "integrity": "sha512-/kmVISmrwVwtyYU40iQUOp3SUPk2dhNCMsZBQX0R1/jZ8maaXJ/oZIzUOiyOqcgtLnETFKYChbJ5iDC/eWmFHg==", "license": "LGPL-2.1+", "engines": { "node": ">=0.1.90" @@ -10069,16 +11444,18 @@ }, "node_modules/jsdoc-type-pratt-parser": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.1.0.tgz", + "integrity": "sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==", "dev": true, - "license": "MIT", "engines": { "node": ">=12.0.0" } }, "node_modules/jsesc": { "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true, - "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, @@ -10088,39 +11465,46 @@ }, "node_modules/json-buffer": { "version": "3.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true }, "node_modules/json-parse-better-errors": { "version": "1.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true }, "node_modules/json-schema-traverse": { "version": "0.4.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true }, "node_modules/json-stringify-safe": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", "dev": true, - "license": "ISC", "optional": true }, "node_modules/json5": { "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, - "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -10130,7 +11514,8 @@ }, "node_modules/jsonfile": { "version": "6.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dependencies": { "universalify": "^2.0.0" }, @@ -10140,8 +11525,9 @@ }, "node_modules/jszip": { "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", "dev": true, - "license": "(MIT OR GPL-3.0-or-later)", "dependencies": { "lie": "~3.3.0", "pako": "~1.0.2", @@ -10151,13 +11537,15 @@ }, "node_modules/jszip/node_modules/pako": { "version": "1.0.11", - "dev": true, - "license": "(MIT AND Zlib)" + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true }, "node_modules/jszip/node_modules/readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, - "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -10170,16 +11558,20 @@ }, "node_modules/just-debounce": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.0.0.tgz", + "integrity": "sha1-h/zPrv/AtozRnVX2cilD+SnqNeo= sha512-/QLqfspz7WJ+TPmzDp5WJOlm2r3j+/12rGo7dG5uwD9vGM5sWg8p251b7Us0p19JqjddJzcYOK2v6FN92nREmg==", + "dev": true }, "node_modules/just-extend": { "version": "4.2.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", + "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", + "dev": true }, "node_modules/katex": { "version": "0.16.22", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.22.tgz", + "integrity": "sha512-XCHRdUw4lf3SKBaJe4EvgqIuWwkPSo9XoeO8GjQW94Bp7TWv9hNhzZjZ+OH9yf1UmLygb7DIT5GSFQiyt16zYg==", "funding": [ "https://opencollective.com/katex", "https://github.com/sponsors/katex" @@ -10194,6 +11586,8 @@ }, "node_modules/katex/node_modules/commander": { "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "license": "MIT", "engines": { "node": ">= 12" @@ -10201,8 +11595,9 @@ }, "node_modules/kerberos": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/kerberos/-/kerberos-2.1.1.tgz", + "integrity": "sha512-414s1G/qgK2T60cXnZsHbtRj8Ynjg0DBlQWeY99tkyqQ2e8vGgFHvxRdvjTlLHg/SxBA0zLQcGE6Pk6Dfq/BCA==", "hasInstallScript": true, - "license": "Apache-2.0", "dependencies": { "bindings": "^1.5.0", "node-addon-api": "^6.1.0", @@ -10214,8 +11609,9 @@ }, "node_modules/keygrip": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", + "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", "dev": true, - "license": "MIT", "dependencies": { "tsscmp": "1.0.6" }, @@ -10225,22 +11621,26 @@ }, "node_modules/keyv": { "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, - "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } }, "node_modules/kind-of": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/koa": { "version": "2.16.1", + "resolved": "https://registry.npmjs.org/koa/-/koa-2.16.1.tgz", + "integrity": "sha512-umfX9d3iuSxTQP4pnzLOz0HKnPg0FaUUIKcye2lOiz3KPu1Y3M3xlz76dISdFPQs37P9eJz1wUpcTS6KDPn9fA==", "dev": true, "license": "MIT", "dependencies": { @@ -10274,13 +11674,15 @@ }, "node_modules/koa-compose": { "version": "4.1.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz", + "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==", + "dev": true }, "node_modules/koa-convert": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/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" @@ -10291,16 +11693,18 @@ }, "node_modules/koa-morgan": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/koa-morgan/-/koa-morgan-1.0.1.tgz", + "integrity": "sha1-CAUuDODYOdPEMXi5CluzQkvvH5k= 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.npmjs.org/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" @@ -10311,8 +11715,9 @@ }, "node_modules/koa-send": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/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", @@ -10324,16 +11729,18 @@ }, "node_modules/koa-send/node_modules/depd": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= 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.npmjs.org/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", @@ -10347,16 +11754,18 @@ }, "node_modules/koa-send/node_modules/statuses": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= 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.npmjs.org/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" @@ -10367,16 +11776,18 @@ }, "node_modules/koa-static/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/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.npmjs.org/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", @@ -10390,24 +11801,27 @@ }, "node_modules/koa/node_modules/http-errors/node_modules/depd": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= 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.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/last-run": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", + "integrity": "sha1-RblpQsF7HHnHchmCWbqUO+v4yls= sha512-U/VxvpX4N/rFvPzr3qG5EtLKEnNI0emvIQB3/ecEwv+8GHaUKbIB8vxv1Oai5FAF0d0r7LXHhLLe5K/yChm5GQ==", "dev": true, - "license": "MIT", "dependencies": { "default-resolution": "^2.0.0", "es6-weak-map": "^2.0.1" @@ -10418,13 +11832,15 @@ }, "node_modules/lazy.js": { "version": "0.4.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lazy.js/-/lazy.js-0.4.3.tgz", + "integrity": "sha1-h/Z6B602VVEh5P/xUg3zG+Znhtg= sha512-kHcnVaCZzhv6P+YgC4iRZFw62+biYIcBYU8qqKzJysC7cdKwPgb3WRtcBPyINTSLZwsjyFdBtd97sHbkseTZKw==", + "dev": true }, "node_modules/lazystream": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ= sha512-/330KFbmC/zKdtZoVDRwvkJ8snrJyBPfoZ39zsJl2O24HOE1CTNiEbeZmHXmjBVxTSSv7JlJEXPYhU83DhA2yg==", "dev": true, - "license": "MIT", "dependencies": { "readable-stream": "^2.0.5" }, @@ -10434,8 +11850,9 @@ }, "node_modules/lazystream/node_modules/readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, - "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -10448,8 +11865,9 @@ }, "node_modules/lcid": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==", "dev": true, - "license": "MIT", "dependencies": { "invert-kv": "^1.0.0" }, @@ -10459,8 +11877,9 @@ }, "node_modules/lead": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", + "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI= sha512-IpSVCk9AYvLHo5ctcIXxOBpMWUe+4TKN3VPWAKUbJikkmsGp0VrSM8IttVc32D6J4WUsiPE6aEFRNmIoF/gdow==", "dev": true, - "license": "MIT", "dependencies": { "flush-write-stream": "^1.0.2" }, @@ -10470,8 +11889,9 @@ }, "node_modules/levn": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, - "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -10482,16 +11902,18 @@ }, "node_modules/lie": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", "dev": true, - "license": "MIT", "dependencies": { "immediate": "~3.0.5" } }, "node_modules/liftoff": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", + "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==", "dev": true, - "license": "MIT", "dependencies": { "extend": "^3.0.0", "findup-sync": "^3.0.0", @@ -10508,8 +11930,9 @@ }, "node_modules/liftoff/node_modules/is-plain-object": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, - "license": "MIT", "dependencies": { "isobject": "^3.0.1" }, @@ -10519,16 +11942,18 @@ }, "node_modules/linkify-it": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", "dev": true, - "license": "MIT", "dependencies": { "uc.micro": "^2.0.0" } }, "node_modules/load-json-file": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs= sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", "dev": true, - "license": "MIT", "dependencies": { "graceful-fs": "^4.1.2", "parse-json": "^4.0.0", @@ -10541,16 +11966,18 @@ }, "node_modules/loader-runner": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", + "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.11.5" } }, "node_modules/loader-utils": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "dev": true, - "license": "MIT", "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -10562,8 +11989,9 @@ }, "node_modules/locate-path": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, - "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -10576,43 +12004,51 @@ }, "node_modules/lodash": { "version": "4.17.21", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true }, "node_modules/lodash.camelcase": { "version": "4.3.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY= sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true }, "node_modules/lodash.clone": { "version": "4.5.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz", + "integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y= sha512-GhrVeweiTD6uTmmn5hV/lzgCQhccwReIVRLHp7LT4SopOjqEZ5BbX8b5WWEtAKasjmy8hR7ZPwsYlxRCku5odg==", + "dev": true }, "node_modules/lodash.clonedeep": { "version": "4.5.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "dev": true }, "node_modules/lodash.get": { "version": "4.4.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "dev": true }, "node_modules/lodash.merge": { "version": "4.6.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true }, "node_modules/lodash.some": { "version": "4.6.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", + "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0= sha512-j7MJE+TuT51q9ggt4fSgVqro163BEFjAt3u97IqU+JA2DkWl80nFTrowzLpZ/BnpN7rrl0JA/593NAdd8p/scQ==", + "dev": true }, "node_modules/log-symbols": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -10626,16 +12062,18 @@ }, "node_modules/lowercase-keys": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/lru-cache": { "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, - "license": "ISC", "dependencies": { "pseudomap": "^1.0.2", "yallist": "^2.1.2" @@ -10643,16 +12081,18 @@ }, "node_modules/lru-queue": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", + "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM= sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==", "dev": true, - "license": "MIT", "dependencies": { "es5-ext": "~0.10.2" } }, "node_modules/make-dir": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, - "license": "MIT", "dependencies": { "semver": "^7.5.3" }, @@ -10665,13 +12105,15 @@ }, "node_modules/make-error": { "version": "1.3.6", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true }, "node_modules/make-iterator": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", + "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", "dev": true, - "license": "MIT", "dependencies": { "kind-of": "^6.0.2" }, @@ -10681,28 +12123,33 @@ }, "node_modules/make-iterator/node_modules/kind-of": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/map-cache": { "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/map-stream": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", + "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ= sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==", "dev": true }, "node_modules/map-visit": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", "dev": true, - "license": "MIT", "dependencies": { "object-visit": "^1.0.0" }, @@ -10712,8 +12159,9 @@ }, "node_modules/markdown-it": { "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", "dev": true, - "license": "MIT", "dependencies": { "argparse": "^2.0.1", "entities": "^4.4.0", @@ -10728,6 +12176,8 @@ }, "node_modules/matchdep": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", + "integrity": "sha512-LFgVbaHIHMqCRuCZyfCtUOq9/Lnzhi7Z0KFUE2fhD54+JN2jLh3hC02RLkqauJ3U4soU6H1J3tfj/Byk7GoEjA==", "dev": true, "license": "MIT", "dependencies": { @@ -10742,8 +12192,9 @@ }, "node_modules/matchdep/node_modules/braces": { "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, - "license": "MIT", "dependencies": { "arr-flatten": "^1.1.0", "array-unique": "^0.3.2", @@ -10762,8 +12213,9 @@ }, "node_modules/matchdep/node_modules/braces/node_modules/extend-shallow": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, - "license": "MIT", "dependencies": { "is-extendable": "^0.1.0" }, @@ -10773,8 +12225,9 @@ }, "node_modules/matchdep/node_modules/fill-range": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", "dev": true, - "license": "MIT", "dependencies": { "extend-shallow": "^2.0.1", "is-number": "^3.0.0", @@ -10787,8 +12240,9 @@ }, "node_modules/matchdep/node_modules/fill-range/node_modules/extend-shallow": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, - "license": "MIT", "dependencies": { "is-extendable": "^0.1.0" }, @@ -10798,6 +12252,8 @@ }, "node_modules/matchdep/node_modules/findup-sync": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", + "integrity": "sha512-vs+3unmJT45eczmcAZ6zMJtxN3l/QXeccaXQx5cu/MeJMhewVfoWZqibRkOxPnmoR59+Zy5hjabfQc6JLSah4g==", "dev": true, "license": "MIT", "dependencies": { @@ -10812,16 +12268,18 @@ }, "node_modules/matchdep/node_modules/is-extendable": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/matchdep/node_modules/is-glob": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", "dev": true, - "license": "MIT", "dependencies": { "is-extglob": "^2.1.0" }, @@ -10831,8 +12289,9 @@ }, "node_modules/matchdep/node_modules/is-number": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", "dev": true, - "license": "MIT", "dependencies": { "kind-of": "^3.0.2" }, @@ -10842,8 +12301,9 @@ }, "node_modules/matchdep/node_modules/is-number/node_modules/kind-of": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, - "license": "MIT", "dependencies": { "is-buffer": "^1.1.5" }, @@ -10853,16 +12313,18 @@ }, "node_modules/matchdep/node_modules/kind-of": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/matchdep/node_modules/micromatch": { "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, - "license": "MIT", "dependencies": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -10884,8 +12346,9 @@ }, "node_modules/matchdep/node_modules/to-regex-range": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", "dev": true, - "license": "MIT", "dependencies": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" @@ -10896,8 +12359,9 @@ }, "node_modules/matcher": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", + "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", "dev": true, - "license": "MIT", "optional": true, "dependencies": { "escape-string-regexp": "^4.0.0" @@ -10908,8 +12372,9 @@ }, "node_modules/md5": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "charenc": "0.0.2", "crypt": "0.0.2", @@ -10918,26 +12383,30 @@ }, "node_modules/mdn-data": { "version": "2.0.14", - "dev": true, - "license": "CC0-1.0" + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true }, "node_modules/mdurl": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "dev": true }, "node_modules/media-typer": { "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/memoizee": { "version": "0.4.15", + "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", + "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==", "dev": true, - "license": "ISC", "dependencies": { "d": "^1.0.1", "es5-ext": "^0.10.53", @@ -10951,8 +12420,9 @@ }, "node_modules/memory-fs": { "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", "dev": true, - "license": "MIT", "dependencies": { "errno": "^0.1.3", "readable-stream": "^2.0.1" @@ -10963,8 +12433,9 @@ }, "node_modules/memory-fs/node_modules/readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, - "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -10977,6 +12448,8 @@ }, "node_modules/memorystream": { "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI= sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", "dev": true, "engines": { "node": ">= 0.10.0" @@ -10984,8 +12457,9 @@ }, "node_modules/merge-options": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-1.0.1.tgz", + "integrity": "sha512-iuPV41VWKWBIOpBsjoxjDZw8/GbSfZ2mk7N1453bwMrfzdrIk7EzBd+8UVR6rkw67th7xnk9Dytl3J+lHPdxvg==", "dev": true, - "license": "MIT", "dependencies": { "is-plain-obj": "^1.1" }, @@ -10995,19 +12469,24 @@ }, "node_modules/merge-stream": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true, "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/micromatch": { "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "license": "MIT", "dependencies": { "braces": "^3.0.3", @@ -11019,8 +12498,9 @@ }, "node_modules/mime": { "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true, - "license": "MIT", "bin": { "mime": "cli.js" }, @@ -11030,16 +12510,18 @@ }, "node_modules/mime-db": { "version": "1.45.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", + "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { "version": "2.1.28", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz", + "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==", "dev": true, - "license": "MIT", "dependencies": { "mime-db": "1.45.0" }, @@ -11049,24 +12531,27 @@ }, "node_modules/mimic-fn": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/mimic-response": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -11076,21 +12561,24 @@ }, "node_modules/minimist": { "version": "1.2.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/minipass": { "version": "5.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "engines": { "node": ">=8" } }, "node_modules/minizlib": { "version": "2.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "dependencies": { "minipass": "^3.0.0", "yallist": "^4.0.0" @@ -11101,7 +12589,8 @@ }, "node_modules/minizlib/node_modules/minipass": { "version": "3.1.3", - "license": "ISC", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", + "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", "dependencies": { "yallist": "^4.0.0" }, @@ -11111,12 +12600,14 @@ }, "node_modules/minizlib/node_modules/yallist": { "version": "4.0.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/mixin-deep": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", "dev": true, - "license": "MIT", "dependencies": { "for-in": "^1.0.2", "is-extendable": "^1.0.1" @@ -11127,7 +12618,8 @@ }, "node_modules/mkdirp": { "version": "1.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "bin": { "mkdirp": "bin/cmd.js" }, @@ -11137,10 +12629,13 @@ }, "node_modules/mkdirp-classic": { "version": "0.5.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" }, "node_modules/mocha": { "version": "10.8.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", + "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", "dev": true, "license": "MIT", "dependencies": { @@ -11175,8 +12670,9 @@ }, "node_modules/mocha-junit-reporter": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/mocha-junit-reporter/-/mocha-junit-reporter-2.2.1.tgz", + "integrity": "sha512-iDn2tlKHn8Vh8o4nCzcUVW4q7iXp7cC4EB78N0cDHIobLymyHNwe0XG8HEHHjc3hJlXm0Vy6zcrxaIhnI2fWmw==", "dev": true, - "license": "MIT", "dependencies": { "debug": "^4.3.4", "md5": "^2.3.0", @@ -11190,8 +12686,9 @@ }, "node_modules/mocha-junit-reporter/node_modules/mkdirp": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", "dev": true, - "license": "MIT", "bin": { "mkdirp": "dist/cjs/src/bin.js" }, @@ -11204,8 +12701,9 @@ }, "node_modules/mocha-multi-reporters": { "version": "1.5.1", + "resolved": "https://registry.npmjs.org/mocha-multi-reporters/-/mocha-multi-reporters-1.5.1.tgz", + "integrity": "sha512-Yb4QJOaGLIcmB0VY7Wif5AjvLMUFAdV57D2TWEva1Y0kU/3LjKpeRVmlMIfuO1SVbauve459kgtIizADqxMWPg==", "dev": true, - "license": "MIT", "dependencies": { "debug": "^4.1.1", "lodash": "^4.17.15" @@ -11219,6 +12717,8 @@ }, "node_modules/mocha/node_modules/ansi-colors": { "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", "dev": true, "license": "MIT", "engines": { @@ -11227,6 +12727,8 @@ }, "node_modules/mocha/node_modules/brace-expansion": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11235,8 +12737,9 @@ }, "node_modules/mocha/node_modules/cliui": { "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, - "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -11245,11 +12748,15 @@ }, "node_modules/mocha/node_modules/emoji-regex": { "version": "8.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/mocha/node_modules/glob": { "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "license": "ISC", "dependencies": { @@ -11268,14 +12775,17 @@ }, "node_modules/mocha/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/mocha/node_modules/minimatch": { "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, "license": "ISC", "dependencies": { @@ -11287,8 +12797,9 @@ }, "node_modules/mocha/node_modules/string-width": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/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", @@ -11300,8 +12811,9 @@ }, "node_modules/mocha/node_modules/supports-color": { "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -11314,8 +12826,9 @@ }, "node_modules/mocha/node_modules/yargs": { "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, - "license": "MIT", "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -11331,6 +12844,8 @@ }, "node_modules/mocha/node_modules/yargs-parser": { "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, "license": "ISC", "engines": { @@ -11339,8 +12854,9 @@ }, "node_modules/morgan": { "version": "1.10.0", + "resolved": "https://registry.npmjs.org/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", @@ -11354,21 +12870,24 @@ }, "node_modules/morgan/node_modules/debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/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", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true }, "node_modules/morgan/node_modules/on-finished": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", "dev": true, - "license": "MIT", "dependencies": { "ee-first": "1.1.1" }, @@ -11378,12 +12897,15 @@ }, "node_modules/ms": { "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, "node_modules/multimatch": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz", + "integrity": "sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis= sha512-0mzK8ymiWdehTBiJh0vClAzGyQbdtyWqzSVx//EK4N/D+599RFlGfTAsKw2zMSABtDG9C6Ul2+t8f2Lbdjf5mA==", "dev": true, - "license": "MIT", "dependencies": { "array-differ": "^1.0.0", "array-union": "^1.0.1", @@ -11396,8 +12918,9 @@ }, "node_modules/multimatch/node_modules/array-union": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", "dev": true, - "license": "MIT", "dependencies": { "array-uniq": "^1.0.1" }, @@ -11407,20 +12930,24 @@ }, "node_modules/mute-stdout": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", + "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.10" } }, "node_modules/nan": { "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", "dev": true, - "license": "MIT", "optional": true }, "node_modules/nanoid": { "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", "dev": true, "funding": [ { @@ -11438,8 +12965,9 @@ }, "node_modules/nanomatch": { "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dev": true, - "license": "MIT", "dependencies": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -11459,60 +12987,74 @@ }, "node_modules/nanomatch/node_modules/kind-of": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/napi-build-utils": { "version": "1.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" }, "node_modules/native-is-elevated": { "version": "0.7.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/native-is-elevated/-/native-is-elevated-0.7.0.tgz", + "integrity": "sha512-tp8hUqK7vexBiyIWKMvmRxdG6kqUtO+3eay9iB0i16NYgvCqE5wMe1Y0guHilpkmRgvVXEWNW4et1+qqcwpLBA==", + "hasInstallScript": true }, "node_modules/native-keymap": { "version": "3.3.5", - "license": "MIT" + "resolved": "https://registry.npmjs.org/native-keymap/-/native-keymap-3.3.5.tgz", + "integrity": "sha512-7XDOLPNX1FnUFC/cX3cioBz2M+dO212ai9DuwpfKFzkPu3xTmEzOm5xewOMLXE4V9YoRhNPxvq1H2YpPWDgSsg==", + "hasInstallScript": true }, "node_modules/native-watchdog": { "version": "1.4.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/native-watchdog/-/native-watchdog-1.4.2.tgz", + "integrity": "sha512-iT3Uj6FFdrW5vHbQ/ybiznLus9oiUoMJ8A8nyugXv9rV3EBhIodmGs+mztrwQyyBc+PB5/CrskAH/WxaUVRRSQ==", + "hasInstallScript": true }, "node_modules/natural-compare": { "version": "1.4.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true }, "node_modules/negotiator": { "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/neo-async": { "version": "2.6.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true }, "node_modules/next-tick": { "version": "1.1.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "dev": true }, "node_modules/nice-try": { "version": "1.0.5", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true }, "node_modules/nise": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.0.tgz", + "integrity": "sha512-W5WlHu+wvo3PaKLsJJkgPup2LrsXCcm7AWwyNZkUnn5rwPkuPBi3Iwk5SQtN0mv+K65k7nKKjwNQ30wg3wLAQQ==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^1.7.0", "@sinonjs/fake-timers": "^7.0.4", @@ -11523,20 +13065,23 @@ }, "node_modules/nise/node_modules/isarray": { "version": "0.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true }, "node_modules/nise/node_modules/path-to-regexp": { "version": "1.9.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz", + "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==", "dev": true, - "license": "MIT", "dependencies": { "isarray": "0.0.1" } }, "node_modules/node-abi": { "version": "3.8.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.8.0.tgz", + "integrity": "sha512-tzua9qWWi7iW4I42vUPKM+SfaF0vQSLAm4yO5J83mSwB7GeoWrDKC/K+8YCnYNwqP5duwazbw2X9l4m8SC2cUw==", "dependencies": { "semver": "^7.3.5" }, @@ -11546,6 +13091,8 @@ }, "node_modules/node-addon-api": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.0.tgz", + "integrity": "sha512-mNcltoe1R8o7STTegSOHdnJNN7s5EUvhoS7ShnTHDyOSd+8H+UdWODq6qSv67PjC8Zc5JRT8+oLAMCr0SIXw7g==", "license": "MIT", "engines": { "node": "^16 || ^18 || >= 20" @@ -11553,8 +13100,9 @@ }, "node_modules/node-fetch": { "version": "2.6.8", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.8.tgz", + "integrity": "sha512-RZ6dBYuj8dRSfxpUSu+NsdF1dpPpluJxwOp+6IoDp/sH2QNDSvurYsAa+F1WxY2RjA1iP93xhcsUoYbF2XBqVg==", "dev": true, - "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -11572,8 +13120,9 @@ }, "node_modules/node-html-markdown": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/node-html-markdown/-/node-html-markdown-1.3.0.tgz", + "integrity": "sha512-OeFi3QwC/cPjvVKZ114tzzu+YoR+v9UXW5RwSXGUqGb0qCl0DvP406tzdL7SFn8pZrMyzXoisfG2zcuF9+zw4g==", "dev": true, - "license": "MIT", "dependencies": { "node-html-parser": "^6.1.1" }, @@ -11583,8 +13132,9 @@ }, "node_modules/node-html-parser": { "version": "6.1.13", + "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-6.1.13.tgz", + "integrity": "sha512-qIsTMOY4C/dAa5Q5vsobRpOOvPfC4pB61UVW2uSwZNUp0QU/jCekTal1vMmbO0DgdHeLUJpv/ARmDqErVxA3Sg==", "dev": true, - "license": "MIT", "dependencies": { "css-select": "^5.1.0", "he": "1.2.0" @@ -11592,6 +13142,8 @@ }, "node_modules/node-pty": { "version": "1.1.0-beta33", + "resolved": "https://registry.npmjs.org/node-pty/-/node-pty-1.1.0-beta33.tgz", + "integrity": "sha512-+BN2bT/KqO+fmCHnpFS99VMVJr7VUBCUa2VIBEw0oEvszkR7ri0kwD1lF91OeQToUJ2dXKA8j6scPjbO4eRWOQ==", "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -11600,13 +13152,16 @@ }, "node_modules/node-releases": { "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", "dev": true, "license": "MIT" }, "node_modules/nopt": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= sha512-+5XZFpQZEY0cg5JaxLwGxDlKNKYxuXwGt8/Oi3UXm5/4ymrJve9d2CURituxv3rSrVCGZj4m1U1JlHTdcKt2Ng==", "dev": true, - "license": "ISC", "dependencies": { "abbrev": "1", "osenv": "^0.1.4" @@ -11617,8 +13172,9 @@ }, "node_modules/normalize-package-data": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -11628,24 +13184,27 @@ }, "node_modules/normalize-package-data/node_modules/semver": { "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver" } }, "node_modules/normalize-path": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/normalize-url": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -11655,8 +13214,9 @@ }, "node_modules/now-and-later": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", + "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", "dev": true, - "license": "MIT", "dependencies": { "once": "^1.3.2" }, @@ -11666,8 +13226,9 @@ }, "node_modules/npm-run-all": { "version": "4.1.5", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", + "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "chalk": "^2.4.1", @@ -11690,8 +13251,9 @@ }, "node_modules/npm-run-all/node_modules/ansi-styles": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -11701,8 +13263,9 @@ }, "node_modules/npm-run-all/node_modules/chalk": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -11714,21 +13277,24 @@ }, "node_modules/npm-run-all/node_modules/color-convert": { "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "1.1.3" } }, "node_modules/npm-run-all/node_modules/color-name": { "version": "1.1.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true }, "node_modules/npm-run-all/node_modules/cross-spawn": { "version": "6.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", "dev": true, - "license": "MIT", "dependencies": { "nice-try": "^1.0.4", "path-key": "^2.0.1", @@ -11742,32 +13308,36 @@ }, "node_modules/npm-run-all/node_modules/escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/npm-run-all/node_modules/path-key": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/npm-run-all/node_modules/semver": { "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver" } }, "node_modules/npm-run-all/node_modules/shebang-command": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", "dev": true, - "license": "MIT", "dependencies": { "shebang-regex": "^1.0.0" }, @@ -11777,16 +13347,18 @@ }, "node_modules/npm-run-all/node_modules/shebang-regex": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/npm-run-all/node_modules/supports-color": { "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -11796,8 +13368,9 @@ }, "node_modules/npm-run-all/node_modules/which": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, - "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -11807,8 +13380,9 @@ }, "node_modules/nth-check": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0" }, @@ -11818,24 +13392,27 @@ }, "node_modules/number-is-nan": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/object-assign": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/object-copy": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw= sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", "dev": true, - "license": "MIT", "dependencies": { "copy-descriptor": "^0.1.0", "define-property": "^0.2.5", @@ -11847,8 +13424,9 @@ }, "node_modules/object-copy/node_modules/define-property": { "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "dev": true, - "license": "MIT", "dependencies": { "is-descriptor": "^0.1.0" }, @@ -11858,8 +13436,10 @@ }, "node_modules/object-copy/node_modules/is-accessor-descriptor": { "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "deprecated": "Please upgrade to v0.1.7", "dev": true, - "license": "MIT", "dependencies": { "kind-of": "^3.0.2" }, @@ -11869,8 +13449,10 @@ }, "node_modules/object-copy/node_modules/is-data-descriptor": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "deprecated": "Please upgrade to v0.1.5", "dev": true, - "license": "MIT", "dependencies": { "kind-of": "^3.0.2" }, @@ -11880,8 +13462,9 @@ }, "node_modules/object-copy/node_modules/is-descriptor": { "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, - "license": "MIT", "dependencies": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", @@ -11893,16 +13476,18 @@ }, "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/object-copy/node_modules/kind-of": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, - "license": "MIT", "dependencies": { "is-buffer": "^1.1.5" }, @@ -11912,8 +13497,9 @@ }, "node_modules/object-inspect": { "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -11923,16 +13509,18 @@ }, "node_modules/object-keys": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/object-visit": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", "dev": true, - "license": "MIT", "dependencies": { "isobject": "^3.0.0" }, @@ -11942,8 +13530,9 @@ }, "node_modules/object.assign": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.0", "define-properties": "^1.1.3", @@ -11959,8 +13548,9 @@ }, "node_modules/object.defaults": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8= sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==", "dev": true, - "license": "MIT", "dependencies": { "array-each": "^1.0.1", "array-slice": "^1.0.0", @@ -11973,8 +13563,9 @@ }, "node_modules/object.map": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", + "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc= sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w==", "dev": true, - "license": "MIT", "dependencies": { "for-own": "^1.0.0", "make-iterator": "^1.0.0" @@ -11985,8 +13576,9 @@ }, "node_modules/object.pick": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", "dev": true, - "license": "MIT", "dependencies": { "isobject": "^3.0.1" }, @@ -11996,8 +13588,9 @@ }, "node_modules/object.reduce": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz", + "integrity": "sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60= sha512-naLhxxpUESbNkRqc35oQ2scZSJueHGQNUfMW/0U37IgN6tE2dgDWg3whf+NEliy3F/QysrO48XKUz/nGPe+AQw==", "dev": true, - "license": "MIT", "dependencies": { "for-own": "^1.0.0", "make-iterator": "^1.0.0" @@ -12008,8 +13601,9 @@ }, "node_modules/on-finished": { "version": "2.4.1", + "resolved": "https://registry.npmjs.org/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" }, @@ -12019,23 +13613,26 @@ }, "node_modules/on-headers": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/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", - "license": "ISC", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E= sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dependencies": { "wrappy": "1" } }, "node_modules/onetime": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, - "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -12048,10 +13645,14 @@ }, "node_modules/only": { "version": "0.0.2", + "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", + "integrity": "sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q= sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==", "dev": true }, "node_modules/open": { "version": "10.1.2", + "resolved": "https://registry.npmjs.org/open/-/open-10.1.2.tgz", + "integrity": "sha512-cxN6aIDPz6rm8hbebcP7vrQNhvRcveZoJU72Y7vskh4oIm+BZwBECnx5nTmrlres1Qapvx27Qo1Auukpf8PKXw==", "license": "MIT", "dependencies": { "default-browser": "^5.2.1", @@ -12068,6 +13669,8 @@ }, "node_modules/opentype.js": { "version": "0.8.0", + "resolved": "https://registry.npmjs.org/opentype.js/-/opentype.js-0.8.0.tgz", + "integrity": "sha512-FQHR4oGP+a0m/f6yHoRpBOIbn/5ZWxKd4D/djHVJu8+KpBTYrJda0b7mLcgDEMWXE9xBCJm+qb0yv6FcvPjukg==", "license": "MIT", "dependencies": { "tiny-inflate": "^1.0.2" @@ -12078,8 +13681,9 @@ }, "node_modules/optionator": { "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, - "license": "MIT", "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -12094,8 +13698,9 @@ }, "node_modules/ora": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-7.0.1.tgz", + "integrity": "sha512-0TUxTiFJWv+JnjWm4o9yvuskpEJLXTcng8MJuKd+SzAzp2o+OP3HWqNhB4OdJRt1Vsd9/mR0oyaEYlOnL7XIRw==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^5.3.0", "cli-cursor": "^4.0.0", @@ -12116,8 +13721,9 @@ }, "node_modules/ora/node_modules/ansi-regex": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -12127,8 +13733,9 @@ }, "node_modules/ora/node_modules/chalk": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true, - "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -12138,8 +13745,9 @@ }, "node_modules/ora/node_modules/is-unicode-supported": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -12149,8 +13757,9 @@ }, "node_modules/ora/node_modules/log-symbols": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", + "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^5.0.0", "is-unicode-supported": "^1.1.0" @@ -12164,8 +13773,9 @@ }, "node_modules/ora/node_modules/strip-ansi": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -12178,16 +13788,18 @@ }, "node_modules/ordered-read-streams": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", + "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4= sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw==", "dev": true, - "license": "MIT", "dependencies": { "readable-stream": "^2.0.1" } }, "node_modules/ordered-read-streams/node_modules/readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, - "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -12200,21 +13812,24 @@ }, "node_modules/os-browserify": { "version": "0.3.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", + "dev": true }, "node_modules/os-homedir": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M= sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/os-locale": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk= sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==", "dev": true, - "license": "MIT", "dependencies": { "lcid": "^1.0.0" }, @@ -12224,16 +13839,19 @@ }, "node_modules/os-tmpdir": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/osenv": { "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "deprecated": "This package is no longer supported.", "dev": true, - "license": "ISC", "dependencies": { "os-homedir": "^1.0.0", "os-tmpdir": "^1.0.0" @@ -12241,8 +13859,9 @@ }, "node_modules/p-all": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-all/-/p-all-1.0.0.tgz", + "integrity": "sha1-k731OlWiOCH9+pi0F0qZv38x340= sha512-OtbznqfGjQT+i89LK9C9YPh1G8d6n8xgsJ8yRVXrx6PRXrlOthNJhP+dHxrPopty8fugYb1DodpwrzP7z0Mtvw==", "dev": true, - "license": "MIT", "dependencies": { "p-map": "^1.0.0" }, @@ -12252,16 +13871,18 @@ }, "node_modules/p-cancelable": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/p-limit": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, - "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -12274,8 +13895,9 @@ }, "node_modules/p-locate": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/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" }, @@ -12288,34 +13910,39 @@ }, "node_modules/p-map": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/p-try": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/package-json-from-dist": { "version": "1.0.0", - "dev": true, - "license": "BlueOak-1.0.0" + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", + "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", + "dev": true }, "node_modules/pako": { "version": "0.2.9", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", + "dev": true }, "node_modules/parent-module": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, - "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -12325,8 +13952,9 @@ }, "node_modules/parse-filepath": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE= sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", "dev": true, - "license": "MIT", "dependencies": { "is-absolute": "^1.0.0", "map-cache": "^0.2.0", @@ -12338,8 +13966,9 @@ }, "node_modules/parse-imports": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/parse-imports/-/parse-imports-2.2.1.tgz", + "integrity": "sha512-OL/zLggRp8mFhKL0rNORUTR4yBYujK/uU+xZL+/0Rgm2QE4nLO9v8PzEweSJEbMGKmDRjJE4R3IMJlL2di4JeQ==", "dev": true, - "license": "Apache-2.0 AND MIT", "dependencies": { "es-module-lexer": "^1.5.3", "slashes": "^3.0.12" @@ -12350,8 +13979,9 @@ }, "node_modules/parse-json": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dev": true, - "license": "MIT", "dependencies": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" @@ -12362,79 +13992,90 @@ }, "node_modules/parse-node-version": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.10" } }, "node_modules/parse-passwd": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/parseurl": { "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/pascalcase": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/path-browserify": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true }, "node_modules/path-dirname": { "version": "1.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", + "dev": true }, "node_modules/path-exists": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/path-is-absolute": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18= sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/path-key": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/path-parse": { "version": "1.0.7", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true }, "node_modules/path-root": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc= sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", "dev": true, - "license": "MIT", "dependencies": { "path-root-regex": "^0.1.0" }, @@ -12444,16 +14085,18 @@ }, "node_modules/path-root-regex": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0= sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/path-scurry": { "version": "1.11.1", + "resolved": "https://registry.npmjs.org/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" @@ -12467,40 +14110,43 @@ }, "node_modules/path-scurry/node_modules/lru-cache": { "version": "10.3.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.3.0.tgz", + "integrity": "sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ==", "dev": true, - "license": "ISC", "engines": { "node": "14 || >=16.14" } }, "node_modules/path-to-regexp": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/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.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/pause-stream": { "version": "0.0.11", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU= sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", "dev": true, - "license": [ - "MIT", - "Apache2" - ], "dependencies": { "through": "~2.3" } }, "node_modules/peek-stream": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/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", @@ -12509,8 +14155,9 @@ }, "node_modules/peek-stream/node_modules/readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, - "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -12523,8 +14170,9 @@ }, "node_modules/peek-stream/node_modules/through2": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/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" @@ -12532,16 +14180,20 @@ }, "node_modules/pend": { "version": "1.2.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA= sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" }, "node_modules/picocolors": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "dev": true, "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "engines": { "node": ">=8.6" }, @@ -12551,8 +14203,9 @@ }, "node_modules/pidtree": { "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", + "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", "dev": true, - "license": "MIT", "bin": { "pidtree": "bin/pidtree.js" }, @@ -12562,24 +14215,27 @@ }, "node_modules/pify": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/pinkie": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA= sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/pinkie-promise": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o= sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", "dev": true, - "license": "MIT", "dependencies": { "pinkie": "^2.0.0" }, @@ -12589,8 +14245,9 @@ }, "node_modules/pkg-dir": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, - "license": "MIT", "dependencies": { "find-up": "^4.0.0" }, @@ -12600,8 +14257,9 @@ }, "node_modules/pkg-dir/node_modules/find-up": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, - "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -12612,8 +14270,9 @@ }, "node_modules/pkg-dir/node_modules/locate-path": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, - "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -12623,8 +14282,9 @@ }, "node_modules/pkg-dir/node_modules/p-limit": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, - "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -12637,8 +14297,9 @@ }, "node_modules/pkg-dir/node_modules/p-locate": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, - "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -12648,6 +14309,8 @@ }, "node_modules/playwright": { "version": "1.53.2", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.53.2.tgz", + "integrity": "sha512-6K/qQxVFuVQhRQhFsVZ9fGeatxirtrpPgxzBYWyZLEXJzqYwuL4fuNmfOfD5et1tJE4GScKyPNeLhZeRwuTU3A==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -12665,6 +14328,8 @@ }, "node_modules/playwright-core": { "version": "1.47.2", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.47.2.tgz", + "integrity": "sha512-3JvMfF+9LJfe16l7AbSmU555PaTl2tPyQsVInqm3id16pdDfvZ8TTZ/pyzmkbDrZTQefyzU7AIHlZqQnxpqHVQ==", "dev": true, "license": "Apache-2.0", "bin": { @@ -12676,6 +14341,8 @@ }, "node_modules/playwright/node_modules/playwright-core": { "version": "1.53.2", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.53.2.tgz", + "integrity": "sha512-ox/OytMy+2w1jcYEYlOo1Hhp8hZkLCximMTUTMBXjGUA1KoFfiSZ+DU+3a739jsPY0yoKH2TFy9S2fsJas8yAw==", "dev": true, "license": "Apache-2.0", "bin": { @@ -12687,8 +14354,9 @@ }, "node_modules/plist": { "version": "3.0.5", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.5.tgz", + "integrity": "sha512-83vX4eYdQp3vP9SxuYgEM/G/pJQqLUz/V/xzPrzruLs7fz7jxGQ1msZ/mg1nwZxUSuOp4sb+/bEIbRrbzZRxDA==", "dev": true, - "license": "MIT", "dependencies": { "base64-js": "^1.5.1", "xmlbuilder": "^9.0.7" @@ -12699,16 +14367,18 @@ }, "node_modules/plist/node_modules/xmlbuilder": { "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0= sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=4.0" } }, "node_modules/plugin-error": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", + "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-colors": "^1.0.1", "arr-diff": "^4.0.0", @@ -12721,8 +14391,9 @@ }, "node_modules/plugin-error/node_modules/ansi-colors": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-wrap": "^0.1.0" }, @@ -12732,14 +14403,17 @@ }, "node_modules/posix-character-classes": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/postcss": { "version": "8.5.3", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", "dev": true, "funding": [ { @@ -12767,8 +14441,9 @@ }, "node_modules/postcss-modules-extract-imports": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", "dev": true, - "license": "ISC", "engines": { "node": "^10 || ^12 || >= 14" }, @@ -12778,8 +14453,9 @@ }, "node_modules/postcss-modules-local-by-default": { "version": "4.0.4", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.4.tgz", + "integrity": "sha512-L4QzMnOdVwRm1Qb8m4x8jsZzKAaPAgrUF1r/hjDR2Xj7R+8Zsf97jAlSQzWtKx5YNiNGN8QxmPFIc/sh+RQl+Q==", "dev": true, - "license": "MIT", "dependencies": { "icss-utils": "^5.0.0", "postcss-selector-parser": "^6.0.2", @@ -12794,8 +14470,9 @@ }, "node_modules/postcss-modules-scope": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.1.1.tgz", + "integrity": "sha512-uZgqzdTleelWjzJY+Fhti6F3C9iF1JR/dODLs/JDefozYcKTBCdD8BIl6nNPbTbcLnGrk56hzwZC2DaGNvYjzA==", "dev": true, - "license": "ISC", "dependencies": { "postcss-selector-parser": "^6.0.4" }, @@ -12808,8 +14485,9 @@ }, "node_modules/postcss-modules-values": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "dev": true, - "license": "ISC", "dependencies": { "icss-utils": "^5.0.0" }, @@ -12822,6 +14500,8 @@ }, "node_modules/postcss-selector-parser": { "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", "dev": true, "license": "MIT", "dependencies": { @@ -12834,12 +14514,14 @@ }, "node_modules/postcss-value-parser": { "version": "4.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true }, "node_modules/prebuild-install": { "version": "7.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", + "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==", "dependencies": { "detect-libc": "^2.0.0", "expand-template": "^2.0.3", @@ -12863,11 +14545,13 @@ }, "node_modules/prebuild-install/node_modules/chownr": { "version": "1.1.4", - "license": "ISC" + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" }, "node_modules/prebuild-install/node_modules/pump": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -12875,6 +14559,8 @@ }, "node_modules/prebuild-install/node_modules/tar-fs": { "version": "2.1.3", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.3.tgz", + "integrity": "sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==", "license": "MIT", "dependencies": { "chownr": "^1.1.1", @@ -12885,7 +14571,8 @@ }, "node_modules/prebuild-install/node_modules/tar-stream": { "version": "2.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", @@ -12899,35 +14586,41 @@ }, "node_modules/prelude-ls": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8.0" } }, "node_modules/pretty-hrtime": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE= sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/process": { "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI= sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6.0" } }, "node_modules/process-nextick-args": { "version": "2.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true }, "node_modules/progress": { "version": "1.1.8", + "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", + "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74= sha512-UdA8mJ4weIkUBO224tIarHzuHs4HuYiJvsuGT7j/SPQiUJVjYvNDBIPa0hAorduOfjGohB/qHWRa/lrrWX/mXw==", "dev": true, "engines": { "node": ">=0.4.0" @@ -12935,6 +14628,8 @@ }, "node_modules/promise-stream-reader": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-stream-reader/-/promise-stream-reader-1.0.1.tgz", + "integrity": "sha512-Tnxit5trUjBAqqZCGWwjyxhmgMN4hGrtpW3Oc/tRI4bpm/O2+ej72BB08l6JBnGQgVDGCLvHFGjGgQS6vzhwXg==", "license": "MIT", "engines": { "node": ">8.0.0" @@ -12942,22 +14637,26 @@ }, "node_modules/proto-list": { "version": "1.2.4", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true }, "node_modules/proxy-from-env": { "version": "1.1.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, "node_modules/prr": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY= sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true }, "node_modules/pseudo-localization": { "version": "2.4.0", + "resolved": "https://registry.npmjs.org/pseudo-localization/-/pseudo-localization-2.4.0.tgz", + "integrity": "sha512-ISYMOKY8+f+PmiXMFw2y6KLY74LBrv/8ml/VjjoVEV2k+MS+OJZz7ydciK5ntJwxPrKQPTU1+oXq9Mx2b0zEzg==", "dev": true, - "license": "MIT", "dependencies": { "flat": "^5.0.2", "get-stdin": "^7.0.0", @@ -12970,8 +14669,9 @@ }, "node_modules/pseudo-localization/node_modules/typescript": { "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true, - "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -12982,18 +14682,21 @@ }, "node_modules/pseudomap": { "version": "1.0.2", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM= sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", + "dev": true }, "node_modules/psl": { "version": "1.8.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true }, "node_modules/pump": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.2.tgz", + "integrity": "sha1-Oz7mUS+U8OV1U4wXmV+fFpkKXVE= sha512-0l9Rf87wCGXiNCxHxjixpBTPa0iLYFp6an+fwXp7Yz6Fxyhdo7YiBsV76yqzwajT/2+XjKdiCaCDVIcvyEHqCA==", "dev": true, - "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -13001,8 +14704,9 @@ }, "node_modules/pumpify": { "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "dev": true, - "license": "MIT", "dependencies": { "duplexify": "^3.6.0", "inherits": "^2.0.3", @@ -13011,8 +14715,9 @@ }, "node_modules/pumpify/node_modules/pump": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dev": true, - "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -13020,29 +14725,33 @@ }, "node_modules/punycode.js": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/querystringify": { "version": "2.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true }, "node_modules/queue": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/queue/-/queue-3.1.0.tgz", + "integrity": "sha1-bEnQHwCeIlZ4h4nyv/rGuLmZBYU= sha512-z3XqdkYJ/YVQuAAoAKLcePEk2BZDMZR2jv2hTrpQb0K5M0dUbiwADr48N1F63M4ChD/GwPc/LeaA9VC5dJFfTA==", "dev": true, - "license": "WTFPL", "dependencies": { "inherits": "~2.0.0" } }, "node_modules/quick-lru": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -13052,15 +14761,17 @@ }, "node_modules/randombytes": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, - "license": "MIT", "dependencies": { "safe-buffer": "^5.1.0" } }, "node_modules/rc": { "version": "1.2.8", - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -13073,20 +14784,23 @@ }, "node_modules/rc/node_modules/strip-json-comments": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo= sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "engines": { "node": ">=0.10.0" } }, "node_modules/rcedit": { "version": "1.1.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/rcedit/-/rcedit-1.1.0.tgz", + "integrity": "sha512-JkXJ0IrUcdupLoIx6gE4YcFaMVSGtu7kQf4NJoDJUnfBZGuATmJ2Yal2v55KTltp+WV8dGr7A0RtOzx6jmtM6Q==", + "dev": true }, "node_modules/read-pkg": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", "dev": true, - "license": "MIT", "dependencies": { "load-json-file": "^4.0.0", "normalize-package-data": "^2.3.2", @@ -13098,8 +14812,9 @@ }, "node_modules/read-pkg-up": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", "dev": true, - "license": "MIT", "dependencies": { "find-up": "^1.0.0", "read-pkg": "^1.0.0" @@ -13110,8 +14825,9 @@ }, "node_modules/read-pkg-up/node_modules/find-up": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", "dev": true, - "license": "MIT", "dependencies": { "path-exists": "^2.0.0", "pinkie-promise": "^2.0.0" @@ -13122,8 +14838,9 @@ }, "node_modules/read-pkg-up/node_modules/load-json-file": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", "dev": true, - "license": "MIT", "dependencies": { "graceful-fs": "^4.1.2", "parse-json": "^2.2.0", @@ -13137,8 +14854,9 @@ }, "node_modules/read-pkg-up/node_modules/parse-json": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", "dev": true, - "license": "MIT", "dependencies": { "error-ex": "^1.2.0" }, @@ -13148,8 +14866,9 @@ }, "node_modules/read-pkg-up/node_modules/path-exists": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", "dev": true, - "license": "MIT", "dependencies": { "pinkie-promise": "^2.0.0" }, @@ -13159,8 +14878,9 @@ }, "node_modules/read-pkg-up/node_modules/path-type": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", "dev": true, - "license": "MIT", "dependencies": { "graceful-fs": "^4.1.2", "pify": "^2.0.0", @@ -13172,16 +14892,18 @@ }, "node_modules/read-pkg-up/node_modules/pify": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/read-pkg-up/node_modules/read-pkg": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", "dev": true, - "license": "MIT", "dependencies": { "load-json-file": "^1.0.0", "normalize-package-data": "^2.3.2", @@ -13193,8 +14915,9 @@ }, "node_modules/read-pkg-up/node_modules/strip-bom": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", "dev": true, - "license": "MIT", "dependencies": { "is-utf8": "^0.2.0" }, @@ -13204,8 +14927,9 @@ }, "node_modules/read-pkg/node_modules/path-type": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, - "license": "MIT", "dependencies": { "pify": "^3.0.0" }, @@ -13215,7 +14939,8 @@ }, "node_modules/readable-stream": { "version": "3.6.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -13227,8 +14952,9 @@ }, "node_modules/readdirp": { "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, - "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -13238,6 +14964,8 @@ }, "node_modules/rechoir": { "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", "dev": true, "dependencies": { "resolve": "^1.1.6" @@ -13248,8 +14976,9 @@ }, "node_modules/regex-not": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, - "license": "MIT", "dependencies": { "extend-shallow": "^3.0.2", "safe-regex": "^1.1.0" @@ -13260,8 +14989,9 @@ }, "node_modules/remove-bom-buffer": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", + "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", "dev": true, - "license": "MIT", "dependencies": { "is-buffer": "^1.1.5", "is-utf8": "^0.2.1" @@ -13272,8 +15002,9 @@ }, "node_modules/remove-bom-stream": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", + "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM= sha512-wigO8/O08XHb8YPzpDDT+QmRANfW6vLqxfaXm1YXhnFf3AkSLyjfG3GEFg4McZkmgL7KvCj5u2KczkvSP6NfHA==", "dev": true, - "license": "MIT", "dependencies": { "remove-bom-buffer": "^3.0.0", "safe-buffer": "^5.1.0", @@ -13285,8 +15016,9 @@ }, "node_modules/remove-bom-stream/node_modules/readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, - "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -13299,8 +15031,9 @@ }, "node_modules/remove-bom-stream/node_modules/through2": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/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" @@ -13308,37 +15041,42 @@ }, "node_modules/remove-trailing-separator": { "version": "1.1.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8= sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", + "dev": true }, "node_modules/repeat-element": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/repeat-string": { "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc= sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10" } }, "node_modules/replace-ext": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", + "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", "dev": true, - "license": "MIT", "engines": { "node": ">= 10" } }, "node_modules/replace-homedir": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz", + "integrity": "sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw= sha512-CHPV/GAglbIB1tnQgaiysb8H2yCy8WQ7lcEwQ/eT+kLj0QHV8LnJW0zpqpE7RSkrMSRoa+EBoag86clf7WAgSg==", "dev": true, - "license": "MIT", "dependencies": { "homedir-polyfill": "^1.0.1", "is-absolute": "^1.0.0", @@ -13350,8 +15088,9 @@ }, "node_modules/replacestream": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/replacestream/-/replacestream-4.0.3.tgz", + "integrity": "sha512-AC0FiLS352pBBiZhd4VXB1Ab/lh0lEgpP+GGvZqbQh8a5cmXVoTe5EX/YeTFArnp4SRGTHh1qCHu9lGs1qG8sA==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "escape-string-regexp": "^1.0.3", "object-assign": "^4.0.1", @@ -13360,16 +15099,18 @@ }, "node_modules/replacestream/node_modules/escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/replacestream/node_modules/readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, - "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -13382,34 +15123,39 @@ }, "node_modules/require-directory": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I= sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/require-from-string": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/require-main-filename": { "version": "2.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true }, "node_modules/requires-port": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true }, "node_modules/resolve": { "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", "dev": true, - "license": "MIT", "dependencies": { "is-core-module": "^2.9.0", "path-parse": "^1.0.7", @@ -13424,13 +15170,15 @@ }, "node_modules/resolve-alpn": { "version": "1.2.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true }, "node_modules/resolve-cwd": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, - "license": "MIT", "dependencies": { "resolve-from": "^5.0.0" }, @@ -13440,16 +15188,18 @@ }, "node_modules/resolve-cwd/node_modules/resolve-from": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/resolve-dir": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", "dev": true, - "license": "MIT", "dependencies": { "expand-tilde": "^2.0.0", "global-modules": "^1.0.0" @@ -13460,16 +15210,18 @@ }, "node_modules/resolve-from": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/resolve-options": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", + "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE= sha512-NYDgziiroVeDC29xq7bp/CacZERYsA9bXYd1ZmcJlF3BcrZv5pTb4NG7SjdyKDnXZ84aC4vo2u6sNKIA1LCu/A==", "dev": true, - "license": "MIT", "dependencies": { "value-or-function": "^3.0.0" }, @@ -13479,8 +15231,9 @@ }, "node_modules/resolve-path": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/resolve-path/-/resolve-path-1.4.0.tgz", + "integrity": "sha1-xL2p9e+y/OZSR4c6s2u02DT+Fvc= sha512-i1xevIst/Qa+nA9olDxLWnLk8YZbi8R/7JPbCMcgyWaFR6bKWaexgJgEB5oc2PKMjYdrHynyz0NY+if+H98t1w==", "dev": true, - "license": "MIT", "dependencies": { "http-errors": "~1.6.2", "path-is-absolute": "1.0.1" @@ -13491,16 +15244,18 @@ }, "node_modules/resolve-path/node_modules/depd": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= 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.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", "dev": true, - "license": "MIT", "dependencies": { "depd": "~1.1.2", "inherits": "2.0.3", @@ -13513,31 +15268,37 @@ }, "node_modules/resolve-path/node_modules/inherits": { "version": "2.0.3", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true }, "node_modules/resolve-path/node_modules/setprototypeof": { "version": "1.1.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true }, "node_modules/resolve-path/node_modules/statuses": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/resolve-url": { "version": "0.2.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", + "deprecated": "https://github.com/lydell/resolve-url#deprecated", + "dev": true }, "node_modules/responselike": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", "dev": true, - "license": "MIT", "dependencies": { "lowercase-keys": "^2.0.0" }, @@ -13547,8 +15308,9 @@ }, "node_modules/restore-cursor": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", "dev": true, - "license": "MIT", "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -13562,21 +15324,24 @@ }, "node_modules/restore-cursor/node_modules/signal-exit": { "version": "3.0.3", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true }, "node_modules/ret": { "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.12" } }, "node_modules/reusify": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, - "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -13584,8 +15349,10 @@ }, "node_modules/rimraf": { "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, - "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -13595,8 +15362,10 @@ }, "node_modules/rimraf/node_modules/glob": { "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -13614,8 +15383,9 @@ }, "node_modules/roarr": { "version": "2.15.4", + "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", + "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", "dev": true, - "license": "BSD-3-Clause", "optional": true, "dependencies": { "boolean": "^3.0.1", @@ -13631,6 +15401,8 @@ }, "node_modules/run-applescript": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", + "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", "license": "MIT", "engines": { "node": ">=18" @@ -13641,6 +15413,8 @@ }, "node_modules/run-parallel": { "version": "1.1.10", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz", + "integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==", "dev": true, "funding": [ { @@ -13655,28 +15429,32 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/safe-buffer": { "version": "5.1.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "node_modules/safe-regex": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4= sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", "dev": true, - "license": "MIT", "dependencies": { "ret": "~0.1.10" } }, "node_modules/sax": { "version": "1.2.4", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true }, "node_modules/schema-utils": { "version": "4.3.2", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz", + "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13695,8 +15473,9 @@ }, "node_modules/schema-utils/node_modules/ajv": { "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -13710,8 +15489,9 @@ }, "node_modules/schema-utils/node_modules/ajv-keywords": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3" }, @@ -13721,11 +15501,14 @@ }, "node_modules/schema-utils/node_modules/json-schema-traverse": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true }, "node_modules/semver": { "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -13736,14 +15519,16 @@ }, "node_modules/semver-compare": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w= sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", "dev": true, - "license": "MIT", "optional": true }, "node_modules/semver-greatest-satisfied-range": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz", + "integrity": "sha1-E+jCZYq5aRywzXEJMkAoDTb3els= sha512-Ny/iyOzSSa8M5ML46IAx3iXc6tfOsYU2R4AXi2UpHk60Zrgyq6eqPj/xiOfS0rRl/iiQ/rdJkVjw/5cdUyCntQ==", "dev": true, - "license": "MIT", "dependencies": { "sver-compat": "^1.5.0" }, @@ -13753,8 +15538,9 @@ }, "node_modules/serialize-error": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", + "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", "dev": true, - "license": "MIT", "optional": true, "dependencies": { "type-fest": "^0.13.1" @@ -13768,8 +15554,9 @@ }, "node_modules/serialize-error/node_modules/type-fest": { "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", "dev": true, - "license": "(MIT OR CC0-1.0)", "optional": true, "engines": { "node": ">=10" @@ -13780,6 +15567,8 @@ }, "node_modules/serialize-javascript": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -13788,13 +15577,15 @@ }, "node_modules/set-blocking": { "version": "2.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc= sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true }, "node_modules/set-function-length": { "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, - "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -13809,8 +15600,9 @@ }, "node_modules/set-value": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", "dev": true, - "license": "MIT", "dependencies": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", @@ -13823,8 +15615,9 @@ }, "node_modules/set-value/node_modules/extend-shallow": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, - "license": "MIT", "dependencies": { "is-extendable": "^0.1.0" }, @@ -13834,16 +15627,18 @@ }, "node_modules/set-value/node_modules/is-extendable": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/set-value/node_modules/is-plain-object": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, - "license": "MIT", "dependencies": { "isobject": "^3.0.1" }, @@ -13853,18 +15648,21 @@ }, "node_modules/setimmediate": { "version": "1.0.5", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true }, "node_modules/setprototypeof": { "version": "1.2.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true }, "node_modules/shallow-clone": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, - "license": "MIT", "dependencies": { "kind-of": "^6.0.2" }, @@ -13874,16 +15672,18 @@ }, "node_modules/shallow-clone/node_modules/kind-of": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/shebang-command": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, - "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -13893,26 +15693,30 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/shell-quote": { "version": "1.7.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", + "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", + "dev": true }, "node_modules/sigmund": { "version": "1.0.1", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA= sha512-fCvEXfh6NWpm+YSuY2bpXb/VIihqWA6hLsgboC+0nl71Q7N7o2eaCW8mJa/NLvQhs6jpd3VZV4UiUQlV6+lc8g==", + "dev": true }, "node_modules/signal-exit": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, - "license": "ISC", "engines": { "node": ">=14" }, @@ -13922,6 +15726,8 @@ }, "node_modules/simple-concat": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", "funding": [ { "type": "github", @@ -13935,11 +15741,12 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/simple-get": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", "funding": [ { "type": "github", @@ -13954,7 +15761,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "decompress-response": "^6.0.0", "once": "^1.3.1", @@ -13963,8 +15769,10 @@ }, "node_modules/sinon": { "version": "12.0.1", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-12.0.1.tgz", + "integrity": "sha512-iGu29Xhym33ydkAT+aNQFBINakjq69kKO6ByPvTsm3yyIACfyQttRTP03aBP/I8GfhFmLzrnKwNNkr0ORb1udg==", + "deprecated": "16.1.1", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^1.8.3", "@sinonjs/fake-timers": "^8.1.0", @@ -13980,32 +15788,36 @@ }, "node_modules/sinon-test": { "version": "3.1.3", + "resolved": "https://registry.npmjs.org/sinon-test/-/sinon-test-3.1.3.tgz", + "integrity": "sha512-jBDvPVW2z8uAoiud3Nqc6+e8+WX6UTB1gPQuYXK00mSnp9m/JYyeLdBjLlqbnk1DVmsgRCAHSoXYPNLHp0t56Q==", "dev": true, - "license": "BSD-3-Clause", "peerDependencies": { "sinon": "2.x - 13.x" } }, "node_modules/sinon/node_modules/@sinonjs/fake-timers": { "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^1.7.0" } }, "node_modules/sinon/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/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.npmjs.org/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" }, @@ -14015,12 +15827,14 @@ }, "node_modules/slashes": { "version": "3.0.12", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/slashes/-/slashes-3.0.12.tgz", + "integrity": "sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA==", + "dev": true }, "node_modules/smart-buffer": { "version": "4.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "engines": { "node": ">= 6.0.0", "npm": ">= 3.0.0" @@ -14028,8 +15842,9 @@ }, "node_modules/snapdragon": { "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "dev": true, - "license": "MIT", "dependencies": { "base": "^0.11.1", "debug": "^2.2.0", @@ -14046,8 +15861,9 @@ }, "node_modules/snapdragon-node": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, - "license": "MIT", "dependencies": { "define-property": "^1.0.0", "isobject": "^3.0.0", @@ -14059,8 +15875,9 @@ }, "node_modules/snapdragon-node/node_modules/define-property": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY= sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", "dev": true, - "license": "MIT", "dependencies": { "is-descriptor": "^1.0.0" }, @@ -14070,8 +15887,9 @@ }, "node_modules/snapdragon-util": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, - "license": "MIT", "dependencies": { "kind-of": "^3.2.0" }, @@ -14081,8 +15899,9 @@ }, "node_modules/snapdragon-util/node_modules/kind-of": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, - "license": "MIT", "dependencies": { "is-buffer": "^1.1.5" }, @@ -14092,16 +15911,18 @@ }, "node_modules/snapdragon/node_modules/debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/snapdragon/node_modules/define-property": { "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "dev": true, - "license": "MIT", "dependencies": { "is-descriptor": "^0.1.0" }, @@ -14111,8 +15932,9 @@ }, "node_modules/snapdragon/node_modules/extend-shallow": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, - "license": "MIT", "dependencies": { "is-extendable": "^0.1.0" }, @@ -14122,8 +15944,10 @@ }, "node_modules/snapdragon/node_modules/is-accessor-descriptor": { "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "deprecated": "Please upgrade to v0.1.7", "dev": true, - "license": "MIT", "dependencies": { "kind-of": "^3.0.2" }, @@ -14133,8 +15957,9 @@ }, "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, - "license": "MIT", "dependencies": { "is-buffer": "^1.1.5" }, @@ -14144,8 +15969,10 @@ }, "node_modules/snapdragon/node_modules/is-data-descriptor": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "deprecated": "Please upgrade to v0.1.5", "dev": true, - "license": "MIT", "dependencies": { "kind-of": "^3.0.2" }, @@ -14155,8 +15982,9 @@ }, "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, - "license": "MIT", "dependencies": { "is-buffer": "^1.1.5" }, @@ -14166,8 +15994,9 @@ }, "node_modules/snapdragon/node_modules/is-descriptor": { "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, - "license": "MIT", "dependencies": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", @@ -14179,29 +16008,34 @@ }, "node_modules/snapdragon/node_modules/is-extendable": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/snapdragon/node_modules/ms": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true }, "node_modules/snapdragon/node_modules/source-map": { "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/snapdragon/node_modules/source-map-resolve": { "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", "dev": true, - "license": "MIT", "dependencies": { "atob": "^2.1.2", "decode-uri-component": "^0.2.0", @@ -14212,7 +16046,8 @@ }, "node_modules/socks": { "version": "2.8.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", "dependencies": { "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" @@ -14224,7 +16059,8 @@ }, "node_modules/socks-proxy-agent": { "version": "8.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz", + "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==", "dependencies": { "agent-base": "^7.1.1", "debug": "^4.3.4", @@ -14236,14 +16072,17 @@ }, "node_modules/source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-js": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -14252,8 +16091,10 @@ }, "node_modules/source-map-resolve": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", + "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", "dev": true, - "license": "MIT", "dependencies": { "atob": "^2.1.2", "decode-uri-component": "^0.2.0" @@ -14261,14 +16102,17 @@ }, "node_modules/source-map-support": { "version": "0.3.3", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.3.3.tgz", + "integrity": "sha1-NJAJd9W6PwfHdX7nLnO7GptTdU8= sha512-9O4+y9n64RewmFoKUZ/5Tx9IHIcXM6Q+RTSw6ehnqybUz4a7iwR3Eaw80uLtqqQ5D0C+5H03D4KKGo9PdP33Gg==", "dev": true, - "license": "MIT", "dependencies": { "source-map": "0.1.32" } }, "node_modules/source-map-support/node_modules/source-map": { "version": "0.1.32", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.32.tgz", + "integrity": "sha1-yLbBZ3l7pHQKjqMyUhYv8IWRsmY= sha512-htQyLrrRLkQ87Zfrir4/yN+vAUd6DNjVayEjTSHXu29AYQJw57I4/xEL/M6p6E/woPNJwvZt6rVlzc7gFEJccQ==", "dev": true, "dependencies": { "amdefine": ">=0.0.4" @@ -14279,21 +16123,25 @@ }, "node_modules/source-map-url": { "version": "0.4.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= sha512-liJwHPI9x9d9w5WSIjM58MqGmmb7XzNqwdUA3kSBQ4lmDngexlKwawGzK3J1mKXi6+sysoMDlpVyZh9sv5vRfw==", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated", + "dev": true }, "node_modules/sparkles": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", + "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.10" } }, "node_modules/spdx-correct": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "dev": true, - "license": "Apache-2.0", "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -14301,13 +16149,15 @@ }, "node_modules/spdx-exceptions": { "version": "2.2.0", - "dev": true, - "license": "CC-BY-3.0" + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", + "dev": true }, "node_modules/spdx-expression-parse": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, - "license": "MIT", "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -14315,13 +16165,15 @@ }, "node_modules/spdx-license-ids": { "version": "3.0.5", - "dev": true, - "license": "CC0-1.0" + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", + "dev": true }, "node_modules/split": { "version": "0.3.3", + "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", + "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8= sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==", "dev": true, - "license": "MIT", "dependencies": { "through": "2" }, @@ -14331,8 +16183,9 @@ }, "node_modules/split-string": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, - "license": "MIT", "dependencies": { "extend-shallow": "^3.0.0" }, @@ -14342,25 +16195,30 @@ }, "node_modules/sprintf-js": { "version": "1.1.3", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==" }, "node_modules/stable": { "version": "0.1.8", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", + "dev": true }, "node_modules/stack-trace": { "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA= sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", "dev": true, - "license": "MIT", "engines": { "node": "*" } }, "node_modules/static-extend": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", "dev": true, - "license": "MIT", "dependencies": { "define-property": "^0.2.5", "object-copy": "^0.1.0" @@ -14371,8 +16229,9 @@ }, "node_modules/static-extend/node_modules/define-property": { "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "dev": true, - "license": "MIT", "dependencies": { "is-descriptor": "^0.1.0" }, @@ -14382,8 +16241,10 @@ }, "node_modules/static-extend/node_modules/is-accessor-descriptor": { "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "deprecated": "Please upgrade to v0.1.7", "dev": true, - "license": "MIT", "dependencies": { "kind-of": "^3.0.2" }, @@ -14393,8 +16254,9 @@ }, "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, - "license": "MIT", "dependencies": { "is-buffer": "^1.1.5" }, @@ -14404,8 +16266,10 @@ }, "node_modules/static-extend/node_modules/is-data-descriptor": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "deprecated": "Please upgrade to v0.1.5", "dev": true, - "license": "MIT", "dependencies": { "kind-of": "^3.0.2" }, @@ -14415,8 +16279,9 @@ }, "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, - "license": "MIT", "dependencies": { "is-buffer": "^1.1.5" }, @@ -14426,8 +16291,9 @@ }, "node_modules/static-extend/node_modules/is-descriptor": { "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, - "license": "MIT", "dependencies": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", @@ -14439,6 +16305,8 @@ }, "node_modules/statuses": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true, "license": "MIT", "engines": { @@ -14447,8 +16315,9 @@ }, "node_modules/stdin-discarder": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.1.0.tgz", + "integrity": "sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==", "dev": true, - "license": "MIT", "dependencies": { "bl": "^5.0.0" }, @@ -14461,8 +16330,9 @@ }, "node_modules/stdin-discarder/node_modules/bl": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", "dev": true, - "license": "MIT", "dependencies": { "buffer": "^6.0.3", "inherits": "^2.0.4", @@ -14471,6 +16341,8 @@ }, "node_modules/stdin-discarder/node_modules/buffer": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "dev": true, "funding": [ { @@ -14486,7 +16358,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" @@ -14494,42 +16365,48 @@ }, "node_modules/stream-combiner": { "version": "0.0.4", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", + "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ= sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==", "dev": true, - "license": "MIT", "dependencies": { "duplexer": "~0.1.1" } }, "node_modules/stream-exhaust": { "version": "1.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", + "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", + "dev": true }, "node_modules/stream-shift": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "dev": true }, "node_modules/stream-to-array": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz", + "integrity": "sha1-u/azn19D7DC8cbq8s3VXrOzzQ1M= sha512-UsZtOYEn4tWU2RGLOXr/o/xjRBftZRlG3dEWoaHr8j4GuypJ3isitGbVyjQKAuMu+xbiop8q224TjiZWc4XTZA==", "dev": true, - "license": "MIT", "dependencies": { "any-promise": "^1.1.0" } }, "node_modules/streamfilter": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/streamfilter/-/streamfilter-1.0.5.tgz", + "integrity": "sha1-h1BxEb644phFFxe1Ec/tjwAqv1M= sha512-IHuyNEAPs3pi2ABhJ7Dbjza9Gc6Nq7NDvx14tsKw4h4cMUz4YoLOON6nghUvIZVO4NW4qvYUoED1kd6/bipTVQ==", "dev": true, - "license": "MIT", "dependencies": { "readable-stream": "^2.0.2" } }, "node_modules/streamfilter/node_modules/readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, - "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -14542,14 +16419,17 @@ }, "node_modules/streamifier": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/streamifier/-/streamifier-0.1.1.tgz", + "integrity": "sha1-l+mNj6TRBdYqJpHR3AfoINuN/E8= sha512-zDgl+muIlWzXNsXeyUfOk9dChMjlpkq0DRsxujtYPgyJ676yQ8jEm6zzaaWHFDg5BNcLuif0eD2MTyJdZqXpdg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10" } }, "node_modules/streamx": { "version": "2.22.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.22.0.tgz", + "integrity": "sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==", "dev": true, "license": "MIT", "dependencies": { @@ -14562,15 +16442,17 @@ }, "node_modules/string_decoder": { "version": "1.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/string-width": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-6.1.0.tgz", + "integrity": "sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ==", "dev": true, - "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^10.2.1", @@ -14586,8 +16468,9 @@ "node_modules/string-width-cjs": { "name": "string-width", "version": "4.2.3", + "resolved": "https://registry.npmjs.org/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", @@ -14599,13 +16482,15 @@ }, "node_modules/string-width-cjs/node_modules/emoji-regex": { "version": "8.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/string-width/node_modules/ansi-regex": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -14615,8 +16500,9 @@ }, "node_modules/string-width/node_modules/strip-ansi": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -14629,8 +16515,9 @@ }, "node_modules/string.prototype.padend": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.1.tgz", + "integrity": "sha512-eCzTASPnoCr5Ht+Vn1YXgm8SB015hHKgEIMu9Nr9bQmLhRBxKRfmzSj/IQsxDFc8JInJDDFA0qXwK+xxI7wDkg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.0", "define-properties": "^1.1.3", @@ -14645,8 +16532,9 @@ }, "node_modules/string.prototype.trimend": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", + "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.0", "define-properties": "^1.1.3" @@ -14657,8 +16545,9 @@ }, "node_modules/string.prototype.trimstart": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz", + "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.0", "define-properties": "^1.1.3" @@ -14669,8 +16558,9 @@ }, "node_modules/strip-ansi": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -14681,8 +16571,9 @@ "node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -14692,24 +16583,27 @@ }, "node_modules/strip-bom": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/strip-bom-string": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI= sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/strip-json-comments": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" }, @@ -14719,8 +16613,9 @@ }, "node_modules/style-loader": { "version": "3.3.2", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.2.tgz", + "integrity": "sha512-RHs/vcrKdQK8wZliteNK4NKzxvLBzpuHMqYmUVWeKa6MkaIQ97ZTOS0b+zapZhy6GcrgWnvWYCMHRirC3FsUmw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 12.13.0" }, @@ -14734,8 +16629,9 @@ }, "node_modules/sumchecker": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", + "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", "dev": true, - "license": "Apache-2.0", "dependencies": { "debug": "^4.1.0" }, @@ -14745,8 +16641,9 @@ }, "node_modules/supports-color": { "version": "9.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz", + "integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -14756,8 +16653,9 @@ }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -14767,8 +16665,9 @@ }, "node_modules/sver-compat": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", + "integrity": "sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg= sha512-aFTHfmjwizMNlNE6dsGmoAM4lHjL0CyiobWaFiXWSlD7cIxshW422Nb8KbXCmR6z+0ZEPY+daXJrDyh/vuwTyg==", "dev": true, - "license": "MIT", "dependencies": { "es6-iterator": "^2.0.1", "es6-symbol": "^3.1.1" @@ -14776,8 +16675,9 @@ }, "node_modules/svgo": { "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", "dev": true, - "license": "MIT", "dependencies": { "@trysound/sax": "0.2.0", "commander": "^7.2.0", @@ -14796,16 +16696,18 @@ }, "node_modules/svgo/node_modules/commander": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 10" } }, "node_modules/svgo/node_modules/css-select": { "version": "4.2.1", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz", + "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", "css-what": "^5.1.0", @@ -14819,8 +16721,9 @@ }, "node_modules/svgo/node_modules/css-what": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">= 6" }, @@ -14830,8 +16733,9 @@ }, "node_modules/svgo/node_modules/dom-serializer": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", "dev": true, - "license": "MIT", "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", @@ -14843,8 +16747,9 @@ }, "node_modules/svgo/node_modules/domhandler": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "domelementtype": "^2.2.0" }, @@ -14857,8 +16762,9 @@ }, "node_modules/svgo/node_modules/domutils": { "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", @@ -14870,16 +16776,18 @@ }, "node_modules/svgo/node_modules/entities": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", "dev": true, - "license": "BSD-2-Clause", "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } }, "node_modules/synckit": { "version": "0.9.1", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.1.tgz", + "integrity": "sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==", "dev": true, - "license": "MIT", "dependencies": { "@pkgr/core": "^0.1.0", "tslib": "^2.6.2" @@ -14893,15 +16801,17 @@ }, "node_modules/tapable": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", + "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/tar": { "version": "6.2.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -14916,6 +16826,8 @@ }, "node_modules/tar-fs": { "version": "3.0.10", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.10.tgz", + "integrity": "sha512-C1SwlQGNLe/jPNqapK8epDsXME7CAJR5RL3GcE6KWx1d9OUByzoHVcbu1VPI8tevg9H8Alae0AApHHFGzrD5zA==", "dev": true, "license": "MIT", "dependencies": { @@ -14929,8 +16841,9 @@ }, "node_modules/tar-fs/node_modules/pump": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/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" @@ -14938,8 +16851,9 @@ }, "node_modules/tar-stream": { "version": "3.1.6", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.6.tgz", + "integrity": "sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==", "dev": true, - "license": "MIT", "dependencies": { "b4a": "^1.6.4", "fast-fifo": "^1.2.0", @@ -14948,24 +16862,28 @@ }, "node_modules/tar/node_modules/yallist": { "version": "4.0.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/tas-client-umd": { "version": "0.2.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/tas-client-umd/-/tas-client-umd-0.2.0.tgz", + "integrity": "sha512-oezN7mJVm5qZDVEby7OzxCLKUpUN5of0rY4dvOWaDF2JZBlGpd3BXceFN8B53qlTaIkVSzP65aAMT0Vc+/N25Q==" }, "node_modules/teex": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz", + "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==", "dev": true, - "license": "MIT", "dependencies": { "streamx": "^2.12.5" } }, "node_modules/temp": { "version": "0.8.4", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz", + "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==", "dev": true, - "license": "MIT", "dependencies": { "rimraf": "~2.6.2" }, @@ -14975,6 +16893,8 @@ }, "node_modules/terser": { "version": "5.43.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.43.1.tgz", + "integrity": "sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -14992,6 +16912,8 @@ }, "node_modules/terser-webpack-plugin": { "version": "5.3.14", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", + "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", "dev": true, "license": "MIT", "dependencies": { @@ -15025,11 +16947,15 @@ }, "node_modules/terser/node_modules/commander": { "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true, "license": "MIT" }, "node_modules/terser/node_modules/source-map-support": { "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "license": "MIT", "dependencies": { @@ -15039,8 +16965,9 @@ }, "node_modules/test-exclude": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/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", @@ -15052,8 +16979,10 @@ }, "node_modules/test-exclude/node_modules/glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -15071,31 +17000,36 @@ }, "node_modules/text-decoder": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.1.0.tgz", + "integrity": "sha512-TmLJNj6UgX8xcUZo4UDStGQtDiTzF7BzWlzn9g7UWrjkpHr5uJTK1ld16wZ3LXb2vb6jH8qU89dW5whuMdXYdw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "b4a": "^1.6.4" } }, "node_modules/text-table": { "version": "0.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true }, "node_modules/textextensions": { "version": "1.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-1.0.2.tgz", + "integrity": "sha1-ZUhjk+4fK7A5pgy7oFsLaL2VAdI= sha512-jm9KjEWiDmtGLBrTqXEduGzlYTTlPaoDKdq5YRQhD0rYjo61ZNTYKZ/x5J4ajPSBH9wIYY5qm9GNG5otIKjtOA==", + "dev": true }, "node_modules/through": { "version": "2.3.8", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true }, "node_modules/through2": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", + "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", "dev": true, - "license": "MIT", "dependencies": { "inherits": "^2.0.4", "readable-stream": "2 || 3" @@ -15103,8 +17037,9 @@ }, "node_modules/through2-filter": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", + "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", "dev": true, - "license": "MIT", "dependencies": { "through2": "~2.0.0", "xtend": "~4.0.0" @@ -15112,8 +17047,9 @@ }, "node_modules/through2-filter/node_modules/readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, - "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -15126,8 +17062,9 @@ }, "node_modules/through2-filter/node_modules/through2": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/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" @@ -15135,16 +17072,18 @@ }, "node_modules/time-stamp": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM= sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/timers-ext": { "version": "0.1.7", + "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", + "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", "dev": true, - "license": "ISC", "dependencies": { "es5-ext": "~0.10.46", "next-tick": "1" @@ -15152,12 +17091,15 @@ }, "node_modules/tiny-inflate": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", "license": "MIT" }, "node_modules/to-absolute-glob": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", + "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs= sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA==", "dev": true, - "license": "MIT", "dependencies": { "is-absolute": "^1.0.0", "is-negated-glob": "^1.0.0" @@ -15168,8 +17110,9 @@ }, "node_modules/to-object-path": { "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", "dev": true, - "license": "MIT", "dependencies": { "kind-of": "^3.0.2" }, @@ -15179,8 +17122,9 @@ }, "node_modules/to-object-path/node_modules/kind-of": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, - "license": "MIT", "dependencies": { "is-buffer": "^1.1.5" }, @@ -15190,8 +17134,9 @@ }, "node_modules/to-regex": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, - "license": "MIT", "dependencies": { "define-property": "^2.0.2", "extend-shallow": "^3.0.2", @@ -15204,7 +17149,8 @@ }, "node_modules/to-regex-range": { "version": "5.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dependencies": { "is-number": "^7.0.0" }, @@ -15214,8 +17160,9 @@ }, "node_modules/to-through": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", + "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY= sha512-+QIz37Ly7acM4EMdw2PRN389OneM5+d844tirkGp4dPKzI5OE72V9OsbFp+CIYJDahZ41ZV05hNtcPAQUAm9/Q==", "dev": true, - "license": "MIT", "dependencies": { "through2": "^2.0.3" }, @@ -15225,8 +17172,9 @@ }, "node_modules/to-through/node_modules/readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, - "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -15239,8 +17187,9 @@ }, "node_modules/to-through/node_modules/through2": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/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" @@ -15248,16 +17197,18 @@ }, "node_modules/toidentifier": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.6" } }, "node_modules/tough-cookie": { "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "psl": "^1.1.33", "punycode": "^2.1.1", @@ -15270,35 +17221,41 @@ }, "node_modules/tough-cookie/node_modules/punycode": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/tough-cookie/node_modules/universalify": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 4.0.0" } }, "node_modules/tr46": { "version": "0.0.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true }, "node_modules/tree-kill": { "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", "dev": true, - "license": "MIT", "bin": { "tree-kill": "cli.js" } }, "node_modules/ts-api-utils": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", "dev": true, "license": "MIT", "engines": { @@ -15310,8 +17267,9 @@ }, "node_modules/ts-loader": { "version": "9.5.1", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz", + "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^4.1.0", "enhanced-resolve": "^5.0.0", @@ -15329,16 +17287,18 @@ }, "node_modules/ts-loader/node_modules/source-map": { "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">= 8" } }, "node_modules/ts-morph": { "version": "19.0.0", + "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-19.0.0.tgz", + "integrity": "sha512-D6qcpiJdn46tUqV45vr5UGM2dnIEuTGNxVhg0sk5NX11orcouwj6i1bMqZIz2mZTZB1Hcgy7C3oEVhAT+f6mbQ==", "dev": true, - "license": "MIT", "dependencies": { "@ts-morph/common": "~0.20.0", "code-block-writer": "^12.0.0" @@ -15346,8 +17306,9 @@ }, "node_modules/ts-node": { "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", "dev": true, - "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -15388,16 +17349,18 @@ }, "node_modules/ts-node/node_modules/diff": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, "node_modules/tsec": { "version": "0.2.7", + "resolved": "https://registry.npmjs.org/tsec/-/tsec-0.2.7.tgz", + "integrity": "sha512-Pj9DuBBWLEo8p7QsbrEdXzW/u6QJBcib0ZGOTXkeSDx+PLXFY7hwyZE9Tfhp3TA3LQNpYouyT0WmzXRyUW4otQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { "glob": "^7.1.1", "minimatch": "^3.0.3" @@ -15413,8 +17376,10 @@ }, "node_modules/tsec/node_modules/glob": { "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -15432,28 +17397,32 @@ }, "node_modules/tslib": { "version": "2.6.3", - "dev": true, - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "dev": true }, "node_modules/tsscmp": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", + "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.6.x" } }, "node_modules/tunnel": { "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.6.11 <=0.7.0 || >=0.7.3" } }, "node_modules/tunnel-agent": { "version": "0.6.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "dependencies": { "safe-buffer": "^5.0.1" }, @@ -15463,13 +17432,15 @@ }, "node_modules/type": { "version": "1.2.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true }, "node_modules/type-check": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, - "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -15479,14 +17450,17 @@ }, "node_modules/type-detect": { "version": "4.0.8", + "resolved": "https://registry.npmjs.org/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": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -15498,8 +17472,9 @@ }, "node_modules/type-is": { "version": "1.6.18", + "resolved": "https://registry.npmjs.org/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" @@ -15510,8 +17485,9 @@ }, "node_modules/typedarray": { "version": "0.0.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true }, "node_modules/typescript": { "version": "6.0.0-dev.20250806", @@ -15529,6 +17505,8 @@ }, "node_modules/typescript-eslint": { "version": "8.39.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.39.0.tgz", + "integrity": "sha512-lH8FvtdtzcHJCkMOKnN73LIn6SLTpoojgJqDAxPm1jCR14eWSGPX8ul/gggBdPMk/d5+u9V854vTYQ8T5jF/1Q==", "dev": true, "license": "MIT", "dependencies": { @@ -15551,29 +17529,33 @@ }, "node_modules/typical": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/uc.micro": { "version": "2.1.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "dev": true }, "node_modules/unc-path-regex": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo= sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/undertaker": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz", + "integrity": "sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==", "dev": true, - "license": "MIT", "dependencies": { "arr-flatten": "^1.0.1", "arr-map": "^2.0.0", @@ -15592,19 +17574,23 @@ }, "node_modules/undertaker-registry": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz", + "integrity": "sha1-XkvaMI5KiirlhPm5pDWaSZglzFA= sha512-UR1khWeAjugW3548EfQmL9Z7pGMlBgXteQpr1IZeZBtnkCJQJIJ1Scj0mb9wQaPvUZ9Q17XqW6TIaPchJkyfqw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.10" } }, "node_modules/undertaker/node_modules/fast-levenshtein": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz", + "integrity": "sha1-5qdUzI8V5YmHqpy9J69m/W9OWvk= sha512-Ia0sQNrMPXXkqVFt6w6M1n1oKo3NfKs+mvaV811Jwir7vAk9a6PVV9VPYf6X3BU97QiLEmuW3uXH9u87zDFfdw==", + "dev": true }, "node_modules/undici": { "version": "7.9.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.9.0.tgz", + "integrity": "sha512-e696y354tf5cFZPXsF26Yg+5M63+5H3oE6Vtkh2oqbvsE2Oe7s2nIbcQh5lmG7Lp/eS29vJtTpw9+p6PX0qNSg==", "license": "MIT", "engines": { "node": ">=20.18.1" @@ -15612,13 +17598,16 @@ }, "node_modules/undici-types": { "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", "dev": true, "license": "MIT" }, "node_modules/union-value": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", "dev": true, - "license": "MIT", "dependencies": { "arr-union": "^3.1.0", "get-value": "^2.0.6", @@ -15631,16 +17620,18 @@ }, "node_modules/union-value/node_modules/is-extendable": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/unique-stream": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", + "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", "dev": true, - "license": "MIT", "dependencies": { "json-stable-stringify-without-jsonify": "^1.0.1", "through2-filter": "^3.0.0" @@ -15648,20 +17639,24 @@ }, "node_modules/universal-user-agent": { "version": "7.0.3", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.3.tgz", + "integrity": "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==", "dev": true, "license": "ISC" }, "node_modules/universalify": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "engines": { "node": ">= 10.0.0" } }, "node_modules/unset-value": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", "dev": true, - "license": "MIT", "dependencies": { "has-value": "^0.3.1", "isobject": "^3.0.0" @@ -15672,8 +17667,9 @@ }, "node_modules/unset-value/node_modules/has-value": { "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", "dev": true, - "license": "MIT", "dependencies": { "get-value": "^2.0.3", "has-values": "^0.1.4", @@ -15685,8 +17681,9 @@ }, "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", "dev": true, - "license": "MIT", "dependencies": { "isarray": "1.0.0" }, @@ -15696,16 +17693,18 @@ }, "node_modules/unset-value/node_modules/has-values": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E= sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/upath": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", "dev": true, - "license": "MIT", "engines": { "node": ">=4", "yarn": "*" @@ -15713,6 +17712,8 @@ }, "node_modules/update-browserslist-db": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", "dev": true, "funding": [ { @@ -15742,29 +17743,34 @@ }, "node_modules/uri-js": { "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } }, "node_modules/uri-js/node_modules/punycode": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/urix": { "version": "0.1.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", + "deprecated": "Please see https://github.com/lydell/urix#deprecated", + "dev": true }, "node_modules/url-parse": { "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", "dev": true, - "license": "MIT", "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" @@ -15772,16 +17778,18 @@ }, "node_modules/use": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/util": { "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", "dev": true, - "license": "MIT", "dependencies": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", @@ -15792,35 +17800,40 @@ }, "node_modules/util-deprecate": { "version": "1.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "node_modules/uuid": { "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], - "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true }, "node_modules/v8-inspect-profiler": { "version": "0.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/v8-inspect-profiler/-/v8-inspect-profiler-0.1.1.tgz", + "integrity": "sha512-GB3X9w7w+y9v4gq85olmf/bM3F2hj2DjjwvVpDXIziW5JBy8cDcIQ/K7m8xJVDWiFemxRX2Dxoo1k6JDvLMTig==", "dependencies": { "chrome-remote-interface": "^0.33.0" } }, "node_modules/v8-to-istanbul": { "version": "9.2.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", + "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", "dev": true, - "license": "ISC", "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", @@ -15832,13 +17845,15 @@ }, "node_modules/v8-to-istanbul/node_modules/convert-source-map": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true }, "node_modules/v8flags": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", + "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", "dev": true, - "license": "MIT", "dependencies": { "homedir-polyfill": "^1.0.1" }, @@ -15848,8 +17863,9 @@ }, "node_modules/validate-npm-package-license": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, - "license": "Apache-2.0", "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -15857,24 +17873,27 @@ }, "node_modules/value-or-function": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", + "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM= sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.10" } }, "node_modules/vary": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/vinyl": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.0.tgz", + "integrity": "sha512-rC2VRfAVVCGEgjnxHUnpIVh3AGuk62rP3tqVrn+yab0YH7UULisC085+NYH+mnqf3Wx4SpSi1RQMwudL89N03g==", "dev": true, - "license": "MIT", "dependencies": { "clone": "^2.1.2", "clone-stats": "^1.0.0", @@ -15888,8 +17907,9 @@ }, "node_modules/vinyl-fs": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", + "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", "dev": true, - "license": "MIT", "dependencies": { "fs-mkdirp-stream": "^1.0.0", "glob-stream": "^6.1.0", @@ -15915,8 +17935,9 @@ }, "node_modules/vinyl-fs/node_modules/readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, - "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -15929,16 +17950,18 @@ }, "node_modules/vinyl-fs/node_modules/replace-ext": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.10" } }, "node_modules/vinyl-fs/node_modules/through2": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/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" @@ -15946,8 +17969,9 @@ }, "node_modules/vinyl-fs/node_modules/vinyl": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz", + "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw= sha512-M5D/ZRG7KC3ETrV7iA/GNF/lznml4dZ7ggwtYbqM/B+0INyNTjCdFhw4TqMq//PtNbPpceE7wOqKqK5YfUThPA==", "dev": true, - "license": "MIT", "dependencies": { "clone": "^2.1.1", "clone-buffer": "^1.0.0", @@ -15962,8 +17986,9 @@ }, "node_modules/vinyl-sourcemap": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", + "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY= sha512-NiibMgt6VJGJmyw7vtzhctDcfKch4e4n9TBeoWlirb7FMg9/1Ov9k+A5ZRAtywBpRPiyECvQRQllYM8dECegVA==", "dev": true, - "license": "MIT", "dependencies": { "append-buffer": "^1.0.2", "convert-source-map": "^1.5.0", @@ -15979,8 +18004,9 @@ }, "node_modules/vinyl-sourcemap/node_modules/normalize-path": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", "dev": true, - "license": "MIT", "dependencies": { "remove-trailing-separator": "^1.0.1" }, @@ -15990,16 +18016,18 @@ }, "node_modules/vinyl-sourcemap/node_modules/replace-ext": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.10" } }, "node_modules/vinyl-sourcemap/node_modules/vinyl": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz", + "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw= sha512-M5D/ZRG7KC3ETrV7iA/GNF/lznml4dZ7ggwtYbqM/B+0INyNTjCdFhw4TqMq//PtNbPpceE7wOqKqK5YfUThPA==", "dev": true, - "license": "MIT", "dependencies": { "clone": "^2.1.1", "clone-buffer": "^1.0.0", @@ -16014,11 +18042,13 @@ }, "node_modules/vscode-oniguruma": { "version": "1.7.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", + "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==" }, "node_modules/vscode-regexpp": { "version": "3.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/vscode-regexpp/-/vscode-regexpp-3.1.0.tgz", + "integrity": "sha512-pqtN65VC1jRLawfluX4Y80MMG0DHJydWhe5ZwMHewZD6sys4LbU6lHwFAHxeuaVE6Y6+xZOtAw+9hvq7/0ejkg==", "engines": { "node": ">=8" }, @@ -16028,17 +18058,21 @@ }, "node_modules/vscode-textmate": { "version": "9.2.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-9.2.0.tgz", + "integrity": "sha512-rkvG4SraZQaPSN/5XjwKswdU0OP9MF28QjrYzUBbhb8QyG3ljB1Ky996m++jiI7KdiAP2CkBiQZd9pqEDTClqA==", "license": "MIT" }, "node_modules/vscode-uri": { "version": "3.0.8", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz", + "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==", + "dev": true }, "node_modules/watchpack": { "version": "2.4.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", + "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", "dev": true, - "license": "MIT", "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -16049,16 +18083,20 @@ }, "node_modules/web-tree-sitter": { "version": "0.20.8", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.20.8.tgz", + "integrity": "sha512-weOVgZ3aAARgdnb220GqYuh7+rZU0Ka9k9yfKtGAzEYMa6GgiCzW9JjQRJyCJakvibQW+dfjJdihjInKuuCAUQ==", + "dev": true }, "node_modules/webidl-conversions": { "version": "3.0.1", - "dev": true, - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true }, "node_modules/webpack": { "version": "5.100.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.100.0.tgz", + "integrity": "sha512-H8yBSBTk+BqxrINJnnRzaxU94SVP2bjd7WmA+PfCphoIdDpeQMJ77pq9/4I7xjLq38cB1bNKfzYPZu8pB3zKtg==", "dev": true, "license": "MIT", "dependencies": { @@ -16106,8 +18144,9 @@ }, "node_modules/webpack-cli": { "version": "5.1.4", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", + "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", "dev": true, - "license": "MIT", "dependencies": { "@discoveryjs/json-ext": "^0.5.0", "@webpack-cli/configtest": "^2.1.1", @@ -16150,24 +18189,27 @@ }, "node_modules/webpack-cli/node_modules/commander": { "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "dev": true, - "license": "MIT", "engines": { "node": ">=14" } }, "node_modules/webpack-cli/node_modules/interpret": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=10.13.0" } }, "node_modules/webpack-cli/node_modules/rechoir": { "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", "dev": true, - "license": "MIT", "dependencies": { "resolve": "^1.20.0" }, @@ -16177,8 +18219,9 @@ }, "node_modules/webpack-merge": { "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", "dev": true, - "license": "MIT", "dependencies": { "clone-deep": "^4.0.1", "wildcard": "^2.0.0" @@ -16189,6 +18232,8 @@ }, "node_modules/webpack-sources": { "version": "3.3.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", + "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", "dev": true, "license": "MIT", "engines": { @@ -16197,8 +18242,9 @@ }, "node_modules/webpack-stream": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webpack-stream/-/webpack-stream-7.0.0.tgz", + "integrity": "sha512-XoAQTHyCaYMo6TS7Atv1HYhtmBgKiVLONJbzLBl2V3eibXQ2IT/MCRM841RW/r3vToKD5ivrTJFWgd/ghoxoRg==", "dev": true, - "license": "MIT", "dependencies": { "fancy-log": "^1.3.3", "lodash.clone": "^4.3.2", @@ -16218,24 +18264,27 @@ }, "node_modules/webpack-stream/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/webpack-stream/node_modules/replace-ext": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.10" } }, "node_modules/webpack-stream/node_modules/supports-color": { "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -16248,8 +18297,9 @@ }, "node_modules/webpack-stream/node_modules/vinyl": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", + "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", "dev": true, - "license": "MIT", "dependencies": { "clone": "^2.1.1", "clone-buffer": "^1.0.0", @@ -16264,8 +18314,9 @@ }, "node_modules/webpack/node_modules/eslint-scope": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -16276,16 +18327,18 @@ }, "node_modules/webpack/node_modules/estraverse": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/whatwg-url": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0= sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dev": true, - "license": "MIT", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -16293,8 +18346,9 @@ }, "node_modules/which": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, - "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -16307,13 +18361,15 @@ }, "node_modules/which-module": { "version": "2.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", + "dev": true }, "node_modules/which-typed-array": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", "dev": true, - "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", @@ -16330,31 +18386,38 @@ }, "node_modules/wildcard": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "dev": true }, "node_modules/windows-foreground-love": { "version": "0.5.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/windows-foreground-love/-/windows-foreground-love-0.5.0.tgz", + "integrity": "sha512-yjBwmKEmQBDk3Z7yg/U9hizGWat8C6Pe4MQWl5bN6mvPU81Bt6HV2k/6mGlK3ETJLW1hCLhYx2wcGh+ykUUCyA==", + "hasInstallScript": true, "optional": true }, "node_modules/word-wrap": { "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/workerpool": { "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", + "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", "dev": true, "license": "Apache-2.0" }, "node_modules/wrap-ansi": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/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", @@ -16370,8 +18433,9 @@ "node_modules/wrap-ansi-cjs": { "name": "wrap-ansi", "version": "7.0.0", + "resolved": "https://registry.npmjs.org/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", @@ -16386,13 +18450,15 @@ }, "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { "version": "8.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/wrap-ansi-cjs/node_modules/string-width": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/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", @@ -16404,13 +18470,15 @@ }, "node_modules/wrap-ansi/node_modules/emoji-regex": { "version": "8.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/wrap-ansi/node_modules/string-width": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/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", @@ -16422,17 +18490,20 @@ }, "node_modules/wrappy": { "version": "1.0.2", - "license": "ISC" + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/xml": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", + "integrity": "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==", + "dev": true }, "node_modules/xml2js": { "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", "dev": true, - "license": "MIT", "dependencies": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" @@ -16443,37 +18514,42 @@ }, "node_modules/xml2js/node_modules/xmlbuilder": { "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4.0" } }, "node_modules/xtend": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/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.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, - "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/yallist": { "version": "2.1.2", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", + "dev": true }, "node_modules/yargs": { "version": "17.7.2", + "resolved": "https://registry.npmjs.org/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", @@ -16489,16 +18565,18 @@ }, "node_modules/yargs-parser": { "version": "21.1.1", + "resolved": "https://registry.npmjs.org/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.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, - "license": "MIT", "dependencies": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", @@ -16511,21 +18589,24 @@ }, "node_modules/yargs-unparser/node_modules/is-plain-obj": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/yargs/node_modules/emoji-regex": { "version": "8.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/yargs/node_modules/string-width": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/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", @@ -16537,15 +18618,17 @@ }, "node_modules/yaserver": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/yaserver/-/yaserver-0.4.0.tgz", + "integrity": "sha512-98Vj4sgqB1fLcpf2wK7h3dFCaabISHU9CXZHaAx3QLkvTTCD31MzMcNbw5V5jZFBK7ffkFqfWig6B20KQt4wtA==", "dev": true, - "license": "MIT", "bin": { "yaserver": "bin/yaserver" } }, "node_modules/yauzl": { "version": "3.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-3.1.1.tgz", + "integrity": "sha512-MPxA7oN5cvGV0wzfkeHKF2/+Q4TkMpHSWGRy/96I4Cozljmx0ph91+Muxh6HegEtDC4GftJ8qYDE51vghFiEYA==", "dependencies": { "buffer-crc32": "~0.2.3", "pend": "~1.2.0" @@ -16556,31 +18639,35 @@ }, "node_modules/yazl": { "version": "2.4.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.4.3.tgz", + "integrity": "sha1-7CblzIfVYBud+EMtvdPNLlFzoHE= sha512-cIUrm3/81iF/BzuyORI7ppz1vGHAhA62JYzAFFC+rwJ2jQF1LcYxY9UXx4XyUXojkCnol0SvPuc+Toc7FO4W8g==", "dependencies": { "buffer-crc32": "~0.2.3" } }, "node_modules/ylru": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.2.1.tgz", + "integrity": "sha512-faQrqNMzcPCHGVC2aaOINk13K+aaBDUPjGWl0teOXywElLjyVAB6Oe2jj62jHYtwsU49jXhScYbvPENK+6zAvQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 4.0.0" } }, "node_modules/yn": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/yocto-queue": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -16590,6 +18677,8 @@ }, "node_modules/zx": { "version": "8.7.0", + "resolved": "https://registry.npmjs.org/zx/-/zx-8.7.0.tgz", + "integrity": "sha512-pArftqj5JV/er8p+czFZwF+k6SbCldl7kcfCR+rIiDIh3gUsLB0F3Xh05diP8PzToZ39D/GWeFoVFimjHQkbAg==", "dev": true, "license": "Apache-2.0", "bin": { From c995a68ee0283f0a206523362fdb3a1ea697d48a Mon Sep 17 00:00:00 2001 From: Raymond Zhao <7199958+rzhao271@users.noreply.github.com> Date: Wed, 6 Aug 2025 10:42:25 -0700 Subject: [PATCH 0059/2080] chore: add more suppressions (#260152) Suppresses Windows ARM vsce-sign false positives. --- .config/guardian/.gdnsuppress | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/.config/guardian/.gdnsuppress b/.config/guardian/.gdnsuppress index d1d93c2afbc89..1e1db8b98ea9a 100644 --- a/.config/guardian/.gdnsuppress +++ b/.config/guardian/.gdnsuppress @@ -41,6 +41,36 @@ "default" ], "createdDate": "2025-03-17 11:52:32Z" + }, + "9d60fae9db4b8d511637e4a0f902820fbabf962c64ce2b2b8c8ae54c0c06d3ab": { + "signature": "9d60fae9db4b8d511637e4a0f902820fbabf962c64ce2b2b8c8ae54c0c06d3ab", + "alternativeSignatures": [ + "d06382c4909cfa81370526b06d4c47ebdf4425fc0b36053d3f457d5cdf5df8a8" + ], + "memberOf": [ + "default" + ], + "createdDate": "2025-08-06 13:58:56Z" + }, + "7f0626fd14d60d2810a8ddfc1e9fdf1563b991dc8e1ac5880eca42449f752e90": { + "signature": "7f0626fd14d60d2810a8ddfc1e9fdf1563b991dc8e1ac5880eca42449f752e90", + "alternativeSignatures": [ + "6d3dc1d67e5413347520202ce038daf52825c58099670688103db2661facf187" + ], + "memberOf": [ + "default" + ], + "createdDate": "2025-08-06 13:58:56Z" + }, + "40121a40ac42fef69ebcb2b8c2ec7ee659c8d10bc7ab4e95d2a290a48b3d281f": { + "signature": "40121a40ac42fef69ebcb2b8c2ec7ee659c8d10bc7ab4e95d2a290a48b3d281f", + "alternativeSignatures": [ + "3f4bc3f870aa2c71232dd65907522d59a1964c148e373105dec71e0d3da9427f" + ], + "memberOf": [ + "default" + ], + "createdDate": "2025-08-06 13:58:56Z" } } } From 535c0a624c64416fc83c757c4ebe8b4987de3897 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Wed, 6 Aug 2025 09:53:00 -0700 Subject: [PATCH 0060/2080] Cover other cases for legacy terminal toolSpecificData Fixes #258542 --- .../chat/browser/chatAccessibilityProvider.ts | 4 ++- .../chatTerminalMarkdownProgressPart.ts | 7 +++-- .../chatTerminalToolSubPart.ts | 26 +++---------------- src/vs/workbench/contrib/chat/common/chat.ts | 20 ++++++++++++++ .../contrib/chat/common/chatService.ts | 12 ++++++++- 5 files changed, 42 insertions(+), 27 deletions(-) diff --git a/src/vs/workbench/contrib/chat/browser/chatAccessibilityProvider.ts b/src/vs/workbench/contrib/chat/browser/chatAccessibilityProvider.ts index feff809b0546f..54716f8822ba0 100644 --- a/src/vs/workbench/contrib/chat/browser/chatAccessibilityProvider.ts +++ b/src/vs/workbench/contrib/chat/browser/chatAccessibilityProvider.ts @@ -17,6 +17,7 @@ import { AcceptToolConfirmationActionId } from './actions/chatToolActions.js'; import { CancelChatActionId } from './actions/chatExecuteActions.js'; import { IInstantiationService, ServicesAccessor } from '../../../../platform/instantiation/common/instantiation.js'; import { IChatToolInvocation } from '../common/chatService.js'; +import { migrateLegacyTerminalToolSpecificData } from '../common/chat.js'; export const getToolConfirmationAlert = (accessor: ServicesAccessor, toolInvocation: IChatToolInvocation[]) => { const keybindingService = accessor.get(IKeybindingService); @@ -28,7 +29,8 @@ export const getToolConfirmationAlert = (accessor: ServicesAccessor, toolInvocat let input = ''; if (v.toolSpecificData) { if (v.toolSpecificData.kind === 'terminal') { - input = v.toolSpecificData.commandLine.toolEdited ?? v.toolSpecificData.commandLine.original; + const terminalData = migrateLegacyTerminalToolSpecificData(v.toolSpecificData); + input = terminalData.commandLine.toolEdited ?? terminalData.commandLine.original; } else if (v.toolSpecificData.kind === 'extensions') { input = JSON.stringify(v.toolSpecificData.extensions); } else if (v.toolSpecificData.kind === 'input') { diff --git a/src/vs/workbench/contrib/chat/browser/chatContentParts/toolInvocationParts/chatTerminalMarkdownProgressPart.ts b/src/vs/workbench/contrib/chat/browser/chatContentParts/toolInvocationParts/chatTerminalMarkdownProgressPart.ts index 8f6fefecdae23..f4db4bc20d481 100644 --- a/src/vs/workbench/contrib/chat/browser/chatContentParts/toolInvocationParts/chatTerminalMarkdownProgressPart.ts +++ b/src/vs/workbench/contrib/chat/browser/chatContentParts/toolInvocationParts/chatTerminalMarkdownProgressPart.ts @@ -8,7 +8,8 @@ import { MarkdownString } from '../../../../../../base/common/htmlContent.js'; import { ThemeIcon } from '../../../../../../base/common/themables.js'; import { MarkdownRenderer } from '../../../../../../editor/browser/widget/markdownRenderer/browser/markdownRenderer.js'; import { IInstantiationService } from '../../../../../../platform/instantiation/common/instantiation.js'; -import { IChatMarkdownContent, IChatToolInvocation, IChatToolInvocationSerialized, type IChatTerminalToolInvocationData } from '../../../common/chatService.js'; +import { migrateLegacyTerminalToolSpecificData } from '../../../common/chat.js'; +import { IChatMarkdownContent, IChatToolInvocation, IChatToolInvocationSerialized, type IChatTerminalToolInvocationData, type ILegacyChatTerminalToolInvocationData } from '../../../common/chatService.js'; import { CodeBlockModelCollection } from '../../../common/codeBlockModelCollection.js'; import { IChatCodeBlockInfo } from '../../chat.js'; import { ICodeBlockRenderOptions } from '../../codeBlockPart.js'; @@ -27,7 +28,7 @@ export class ChatTerminalMarkdownProgressPart extends BaseChatToolInvocationSubP constructor( toolInvocation: IChatToolInvocation | IChatToolInvocationSerialized, - terminalData: IChatTerminalToolInvocationData, + terminalData: IChatTerminalToolInvocationData | ILegacyChatTerminalToolInvocationData, context: IChatContentPartRenderContext, renderer: MarkdownRenderer, editorPool: EditorPool, @@ -38,6 +39,8 @@ export class ChatTerminalMarkdownProgressPart extends BaseChatToolInvocationSubP ) { super(toolInvocation); + terminalData = migrateLegacyTerminalToolSpecificData(terminalData); + const command = terminalData.commandLine.userEdited ?? terminalData.commandLine.toolEdited ?? terminalData.commandLine.original; let content = `\`\`\`${terminalData.language}\n${command}\n\`\`\``; diff --git a/src/vs/workbench/contrib/chat/browser/chatContentParts/toolInvocationParts/chatTerminalToolSubPart.ts b/src/vs/workbench/contrib/chat/browser/chatContentParts/toolInvocationParts/chatTerminalToolSubPart.ts index 836477c45d749..b3ed501118c61 100644 --- a/src/vs/workbench/contrib/chat/browser/chatContentParts/toolInvocationParts/chatTerminalToolSubPart.ts +++ b/src/vs/workbench/contrib/chat/browser/chatContentParts/toolInvocationParts/chatTerminalToolSubPart.ts @@ -16,8 +16,9 @@ import { localize } from '../../../../../../nls.js'; import { IContextKeyService } from '../../../../../../platform/contextkey/common/contextkey.js'; import { IInstantiationService } from '../../../../../../platform/instantiation/common/instantiation.js'; import { IKeybindingService } from '../../../../../../platform/keybinding/common/keybinding.js'; +import { migrateLegacyTerminalToolSpecificData } from '../../../common/chat.js'; import { ChatContextKeys } from '../../../common/chatContextKeys.js'; -import { IChatToolInvocation, type IChatTerminalToolInvocationData } from '../../../common/chatService.js'; +import { IChatToolInvocation, type IChatTerminalToolInvocationData, type ILegacyChatTerminalToolInvocationData } from '../../../common/chatService.js'; import type { CodeBlockModelCollection } from '../../../common/codeBlockModelCollection.js'; import { CancelChatActionId } from '../../actions/chatExecuteActions.js'; import { AcceptToolConfirmationActionId } from '../../actions/chatToolActions.js'; @@ -28,16 +29,6 @@ import { IChatContentPartRenderContext } from '../chatContentParts.js'; import { ChatMarkdownContentPart, EditorPool } from '../chatMarkdownContentPart.js'; import { BaseChatToolInvocationSubPart } from './chatToolInvocationSubPart.js'; -/** - * @deprecated This is the old API shape, we should support this for a while before removing it so - * we don't break existing chats - */ -interface ILegacyChatTerminalToolInvocationData { - kind: 'terminal'; - command: string; - language: string; -} - export class TerminalConfirmationWidgetSubPart extends BaseChatToolInvocationSubPart { public readonly domNode: HTMLElement; public readonly codeblocks: IChatCodeBlockInfo[] = []; @@ -64,18 +55,7 @@ export class TerminalConfirmationWidgetSubPart extends BaseChatToolInvocationSub throw new Error('Confirmation messages are missing'); } - // Migrate forward the old tool data format - if ('command' in terminalData) { - terminalData = { - kind: 'terminal', - commandLine: { - original: terminalData.command, - toolEdited: undefined, - userEdited: undefined - }, - language: terminalData.language - } satisfies IChatTerminalToolInvocationData; - } + terminalData = migrateLegacyTerminalToolSpecificData(terminalData); const { title, message, disclaimer } = toolInvocation.confirmationMessages; const continueLabel = localize('continue', "Continue"); diff --git a/src/vs/workbench/contrib/chat/common/chat.ts b/src/vs/workbench/contrib/chat/common/chat.ts index 4e58fc89009ac..6c3b229e70a14 100644 --- a/src/vs/workbench/contrib/chat/common/chat.ts +++ b/src/vs/workbench/contrib/chat/common/chat.ts @@ -3,6 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +import type { IChatTerminalToolInvocationData, ILegacyChatTerminalToolInvocationData } from './chatService.js'; import { ChatModeKind } from './constants.js'; export function checkModeOption(mode: ChatModeKind, option: boolean | ((mode: ChatModeKind) => boolean) | undefined): boolean | undefined { @@ -14,3 +15,22 @@ export function checkModeOption(mode: ChatModeKind, option: boolean | ((mode: Ch } return option; } + +/** + * @deprecated This is the old API shape, we should support this for a while before removing it so + * we don't break existing chats + */ +export function migrateLegacyTerminalToolSpecificData(data: IChatTerminalToolInvocationData | ILegacyChatTerminalToolInvocationData): IChatTerminalToolInvocationData { + if ('command' in data) { + data = { + kind: 'terminal', + commandLine: { + original: data.command, + toolEdited: undefined, + userEdited: undefined + }, + language: data.language + } satisfies IChatTerminalToolInvocationData; + } + return data; +} diff --git a/src/vs/workbench/contrib/chat/common/chatService.ts b/src/vs/workbench/contrib/chat/common/chatService.ts index abb2bf72a6842..b40db0525c5cf 100644 --- a/src/vs/workbench/contrib/chat/common/chatService.ts +++ b/src/vs/workbench/contrib/chat/common/chatService.ts @@ -290,6 +290,16 @@ export interface IChatTerminalToolInvocationData { language: string; } +/** + * @deprecated This is the old API shape, we should support this for a while before removing it so + * we don't break existing chats + */ +export interface ILegacyChatTerminalToolInvocationData { + kind: 'terminal'; + command: string; + language: string; +} + export interface IChatToolInputInvocationData { kind: 'input'; rawInput: any; @@ -297,7 +307,7 @@ export interface IChatToolInputInvocationData { export interface IChatToolInvocation { presentation: IPreparedToolInvocation['presentation']; - toolSpecificData?: IChatTerminalToolInvocationData | IChatToolInputInvocationData | IChatExtensionsContent | IChatPullRequestContent | IChatTodoListContent; + toolSpecificData?: IChatTerminalToolInvocationData | ILegacyChatTerminalToolInvocationData | IChatToolInputInvocationData | IChatExtensionsContent | IChatPullRequestContent | IChatTodoListContent; /** Presence of this property says that confirmation is required */ confirmationMessages?: IToolConfirmationMessages; confirmed: DeferredPromise; From f0b1d54920a5e8dd2f51b5f41d9cb58747d7f31c Mon Sep 17 00:00:00 2001 From: Justin Chen <54879025+justschen@users.noreply.github.com> Date: Wed, 6 Aug 2025 11:13:15 -0700 Subject: [PATCH 0061/2080] make sure we only render thinking if there is thinking text (#260161) --- src/vs/workbench/contrib/chat/browser/chatListRenderer.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/vs/workbench/contrib/chat/browser/chatListRenderer.ts b/src/vs/workbench/contrib/chat/browser/chatListRenderer.ts index a48e9c0e5e357..49c867abed562 100644 --- a/src/vs/workbench/contrib/chat/browser/chatListRenderer.ts +++ b/src/vs/workbench/contrib/chat/browser/chatListRenderer.ts @@ -1000,6 +1000,9 @@ export class ChatListItemRenderer extends Disposable implements ITreeRenderer Date: Wed, 6 Aug 2025 11:15:51 -0700 Subject: [PATCH 0062/2080] Fix accessible view case --- .../contrib/chat/browser/chatResponseAccessibleView.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/vs/workbench/contrib/chat/browser/chatResponseAccessibleView.ts b/src/vs/workbench/contrib/chat/browser/chatResponseAccessibleView.ts index 5dbc324c9fc28..233a1e27e4946 100644 --- a/src/vs/workbench/contrib/chat/browser/chatResponseAccessibleView.ts +++ b/src/vs/workbench/contrib/chat/browser/chatResponseAccessibleView.ts @@ -11,6 +11,7 @@ import { AccessibleViewProviderId, AccessibleViewType, IAccessibleViewContentPro import { IAccessibleViewImplementation } from '../../../../platform/accessibility/browser/accessibleViewRegistry.js'; import { ServicesAccessor } from '../../../../platform/instantiation/common/instantiation.js'; import { AccessibilityVerbositySettingId } from '../../accessibility/browser/accessibilityConfiguration.js'; +import { migrateLegacyTerminalToolSpecificData } from '../common/chat.js'; import { ChatContextKeys } from '../common/chatContextKeys.js'; import { isResponseVM } from '../common/chatViewModel.js'; import { ChatTreeItem, IChatWidget, IChatWidgetService } from './chat.js'; @@ -87,15 +88,18 @@ class ChatResponseAccessibleProvider extends Disposable implements IAccessibleVi const message = typeof toolInvocation.confirmationMessages.message === 'string' ? toolInvocation.confirmationMessages.message : stripIcons(renderAsPlaintext(toolInvocation.confirmationMessages.message)); let input = ''; if (toolInvocation.toolSpecificData) { - input = toolInvocation.toolSpecificData?.kind === 'terminal' - ? toolInvocation.toolSpecificData.commandLine.userEdited ?? toolInvocation.toolSpecificData.commandLine.toolEdited ?? toolInvocation.toolSpecificData.commandLine.original - : toolInvocation.toolSpecificData?.kind === 'extensions' + if (toolInvocation.toolSpecificData?.kind === 'terminal') { + const terminalData = migrateLegacyTerminalToolSpecificData(toolInvocation.toolSpecificData); + input = terminalData.commandLine.userEdited ?? terminalData.commandLine.toolEdited ?? terminalData.commandLine.original; + } else { + input = toolInvocation.toolSpecificData?.kind === 'extensions' ? JSON.stringify(toolInvocation.toolSpecificData.extensions) : toolInvocation.toolSpecificData?.kind === 'todoList' ? JSON.stringify(toolInvocation.toolSpecificData.todoList) : toolInvocation.toolSpecificData?.kind === 'pullRequest' ? JSON.stringify(toolInvocation.toolSpecificData) : JSON.stringify(toolInvocation.toolSpecificData.rawInput); + } } responseContent += `${title}`; if (input) { From 4c5f085f771c42b15577addf5e50e1d4d6b486ed Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 6 Aug 2025 11:32:13 -0700 Subject: [PATCH 0063/2080] Bump tmp from 0.2.3 to 0.2.4 in /build (#260146) Bumps [tmp](https://github.com/raszi/node-tmp) from 0.2.3 to 0.2.4. - [Changelog](https://github.com/raszi/node-tmp/blob/master/CHANGELOG.md) - [Commits](https://github.com/raszi/node-tmp/compare/v0.2.3...v0.2.4) --- updated-dependencies: - dependency-name: tmp dependency-version: 0.2.4 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- build/package-lock.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/build/package-lock.json b/build/package-lock.json index 8316900804e11..55607f7de719f 100644 --- a/build/package-lock.json +++ b/build/package-lock.json @@ -4199,10 +4199,11 @@ } }, "node_modules/tmp": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", - "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.4.tgz", + "integrity": "sha512-UdiSoX6ypifLmrfQ/XfiawN6hkjSBpCjhKxxZcWlUUmoXLaCKQU0bx4HF/tdDK2uzRuchf1txGvrWBzYREssoQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.14" } From 12a275ffe7ba7e8b4cd98e4005ebe63cd619e1f5 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Wed, 6 Aug 2025 11:41:52 -0700 Subject: [PATCH 0064/2080] Use ts-native to compile our build scripts There are a few minor differences in output, mostly around formatting/comments. Const enums are also not inlined but that seems fine in these cases --- .../common/checkForArtifact.js | 2 +- build/azure-pipelines/common/codesign.js | 8 +-- .../common/computeBuiltInDepsCacheKey.js | 8 +-- .../common/computeNodeModulesCacheKey.js | 8 +-- build/azure-pipelines/common/createBuild.js | 2 +- .../common/getPublishAuthTokens.js | 4 -- .../azure-pipelines/common/listNodeModules.js | 8 +-- build/azure-pipelines/common/publish.js | 8 +-- build/azure-pipelines/common/releaseBuild.js | 2 +- build/azure-pipelines/common/retry.js | 4 +- build/azure-pipelines/common/sign-win32.js | 8 +-- build/azure-pipelines/common/sign.js | 17 +++-- .../common/waitForArtifacts.js | 2 +- build/azure-pipelines/darwin/codesign.js | 2 +- build/azure-pipelines/distro/mixin-npm.js | 8 +-- build/azure-pipelines/distro/mixin-quality.js | 8 +-- build/azure-pipelines/linux/codesign.js | 2 +- .../publish-types/check-version.js | 8 +-- .../publish-types/update-types.js | 8 +-- build/azure-pipelines/upload-cdn.js | 8 +-- build/azure-pipelines/upload-nlsmetadata.js | 8 +-- build/azure-pipelines/upload-sourcemaps.js | 8 +-- build/azure-pipelines/win32/codesign.js | 2 +- build/checker/layersChecker.js | 10 +-- build/darwin/create-universal-app.js | 8 +-- build/darwin/sign.js | 10 +-- build/darwin/verify-macho.js | 8 +-- build/lib/asar.js | 8 +-- build/lib/builtInExtensions.js | 8 +-- build/lib/builtInExtensionsCG.js | 8 +-- build/lib/bundle.js | 4 -- build/lib/compilation.js | 8 +-- build/lib/date.js | 8 +-- build/lib/dependencies.js | 8 +-- build/lib/electron.js | 8 +-- build/lib/extensions.js | 8 +-- build/lib/fetch.js | 8 +-- build/lib/getVersion.js | 8 +-- build/lib/i18n.js | 8 +-- build/lib/inlineMeta.js | 8 +-- build/lib/mangle/index.js | 32 ++++----- build/lib/mangle/renameWorker.js | 8 +-- build/lib/mangle/staticLanguageServiceHost.js | 8 +-- build/lib/monaco-api.js | 8 +-- build/lib/nls.js | 4 -- build/lib/node.js | 8 +-- build/lib/optimize.js | 8 +-- build/lib/policies.js | 8 +-- build/lib/preLaunch.js | 8 +-- build/lib/propertyInitOrderChecker.js | 10 +-- build/lib/reporter.js | 8 +-- build/lib/snapshotLoader.js | 4 +- build/lib/standalone.js | 8 +-- build/lib/stats.js | 8 +-- build/lib/stylelint/validateVariableNames.js | 8 +-- build/lib/task.js | 8 +-- build/lib/test/i18n.test.js | 8 +-- build/lib/treeshaking.js | 72 +++++++++---------- build/lib/tsb/builder.js | 8 +-- build/lib/tsb/index.js | 8 +-- build/lib/tsb/transpiler.js | 16 ++--- build/lib/tsb/utils.js | 4 +- build/lib/util.js | 8 +-- build/lib/watch/index.js | 2 +- build/lib/watch/watch-win32.js | 8 +-- build/linux/debian/calculate-deps.js | 8 +-- build/linux/debian/dep-lists.js | 4 +- build/linux/debian/install-sysroot.js | 8 +-- build/linux/debian/types.js | 4 -- build/linux/libcxx-fetcher.js | 8 +-- build/linux/rpm/calculate-deps.js | 4 +- build/linux/rpm/dep-lists.js | 4 +- build/linux/rpm/types.js | 4 -- build/package.json | 6 +- package.json | 2 +- 75 files changed, 297 insertions(+), 314 deletions(-) diff --git a/build/azure-pipelines/common/checkForArtifact.js b/build/azure-pipelines/common/checkForArtifact.js index 899448f78bdc9..371ca6b952022 100644 --- a/build/azure-pipelines/common/checkForArtifact.js +++ b/build/azure-pipelines/common/checkForArtifact.js @@ -1,9 +1,9 @@ "use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); /*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -Object.defineProperty(exports, "__esModule", { value: true }); const publish_1 = require("./publish"); const retry_1 = require("./retry"); async function getPipelineArtifacts() { diff --git a/build/azure-pipelines/common/codesign.js b/build/azure-pipelines/common/codesign.js index e3a8f330dcd86..4e82538d10533 100644 --- a/build/azure-pipelines/common/codesign.js +++ b/build/azure-pipelines/common/codesign.js @@ -1,12 +1,12 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ Object.defineProperty(exports, "__esModule", { value: true }); exports.printBanner = printBanner; exports.streamProcessOutputAndCheckResult = streamProcessOutputAndCheckResult; exports.spawnCodesignProcess = spawnCodesignProcess; +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const zx_1 = require("zx"); function printBanner(title) { title = `${title} (${new Date().toISOString()})`; diff --git a/build/azure-pipelines/common/computeBuiltInDepsCacheKey.js b/build/azure-pipelines/common/computeBuiltInDepsCacheKey.js index 10fa9087454f6..8f8c833f2262d 100644 --- a/build/azure-pipelines/common/computeBuiltInDepsCacheKey.js +++ b/build/azure-pipelines/common/computeBuiltInDepsCacheKey.js @@ -1,12 +1,12 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); const crypto_1 = __importDefault(require("crypto")); diff --git a/build/azure-pipelines/common/computeNodeModulesCacheKey.js b/build/azure-pipelines/common/computeNodeModulesCacheKey.js index c09c13be9d429..59d570e96e68c 100644 --- a/build/azure-pipelines/common/computeNodeModulesCacheKey.js +++ b/build/azure-pipelines/common/computeNodeModulesCacheKey.js @@ -1,12 +1,12 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); const crypto_1 = __importDefault(require("crypto")); diff --git a/build/azure-pipelines/common/createBuild.js b/build/azure-pipelines/common/createBuild.js index c605ed6218efb..feb06cbe67f22 100644 --- a/build/azure-pipelines/common/createBuild.js +++ b/build/azure-pipelines/common/createBuild.js @@ -1,9 +1,9 @@ "use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); /*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -Object.defineProperty(exports, "__esModule", { value: true }); const identity_1 = require("@azure/identity"); const cosmos_1 = require("@azure/cosmos"); const retry_1 = require("./retry"); diff --git a/build/azure-pipelines/common/getPublishAuthTokens.js b/build/azure-pipelines/common/getPublishAuthTokens.js index 9c22e9ad94bc9..d0ead104b1c82 100644 --- a/build/azure-pipelines/common/getPublishAuthTokens.js +++ b/build/azure-pipelines/common/getPublishAuthTokens.js @@ -1,8 +1,4 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ Object.defineProperty(exports, "__esModule", { value: true }); exports.getAccessToken = getAccessToken; const msal_node_1 = require("@azure/msal-node"); diff --git a/build/azure-pipelines/common/listNodeModules.js b/build/azure-pipelines/common/listNodeModules.js index 301b5f930b614..7112ecab9ccb5 100644 --- a/build/azure-pipelines/common/listNodeModules.js +++ b/build/azure-pipelines/common/listNodeModules.js @@ -1,12 +1,12 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); if (process.argv.length !== 3) { diff --git a/build/azure-pipelines/common/publish.js b/build/azure-pipelines/common/publish.js index d65a4348f9bed..2199846a7c165 100644 --- a/build/azure-pipelines/common/publish.js +++ b/build/azure-pipelines/common/publish.js @@ -1,14 +1,14 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.e = e; exports.requestAZDOAPI = requestAZDOAPI; +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); const stream_1 = require("stream"); diff --git a/build/azure-pipelines/common/releaseBuild.js b/build/azure-pipelines/common/releaseBuild.js index fa69cb4e258a5..9ba2454cfc50a 100644 --- a/build/azure-pipelines/common/releaseBuild.js +++ b/build/azure-pipelines/common/releaseBuild.js @@ -1,9 +1,9 @@ "use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); /*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -Object.defineProperty(exports, "__esModule", { value: true }); const identity_1 = require("@azure/identity"); const cosmos_1 = require("@azure/cosmos"); const retry_1 = require("./retry"); diff --git a/build/azure-pipelines/common/retry.js b/build/azure-pipelines/common/retry.js index 91f60bf24b204..aaa90dd7006eb 100644 --- a/build/azure-pipelines/common/retry.js +++ b/build/azure-pipelines/common/retry.js @@ -1,10 +1,10 @@ "use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.retry = retry; /*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -Object.defineProperty(exports, "__esModule", { value: true }); -exports.retry = retry; async function retry(fn) { let lastError; for (let run = 1; run <= 10; run++) { diff --git a/build/azure-pipelines/common/sign-win32.js b/build/azure-pipelines/common/sign-win32.js index f4e3f27c1f255..1a6a6a97e0213 100644 --- a/build/azure-pipelines/common/sign-win32.js +++ b/build/azure-pipelines/common/sign-win32.js @@ -1,12 +1,12 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const sign_1 = require("./sign"); const path_1 = __importDefault(require("path")); (0, sign_1.main)([ diff --git a/build/azure-pipelines/common/sign.js b/build/azure-pipelines/common/sign.js index fd87772b3b874..2136e03d1f10b 100644 --- a/build/azure-pipelines/common/sign.js +++ b/build/azure-pipelines/common/sign.js @@ -1,14 +1,14 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Temp = void 0; exports.main = main; +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const child_process_1 = __importDefault(require("child_process")); const fs_1 = __importDefault(require("fs")); const crypto_1 = __importDefault(require("crypto")); @@ -159,8 +159,10 @@ function main([esrpCliPath, type, folderPath, pattern]) { const args = [ esrpCliPath, 'vsts.sign', - '-a', process.env['ESRP_CLIENT_ID'], - '-d', process.env['ESRP_TENANT_ID'], + '-a', + process.env['ESRP_CLIENT_ID'], + '-d', + process.env['ESRP_TENANT_ID'], '-k', JSON.stringify({ akv: 'vscode-esrp' }), '-z', JSON.stringify({ akv: 'vscode-esrp', cert: 'esrp-sign' }), '-f', folderPath, @@ -186,7 +188,8 @@ function main([esrpCliPath, type, folderPath, pattern]) { '-pendingAnalysisWaitTimeoutMinutes', '5', '-adoTaskVersion', adoTaskVersion, '-resourceUri', 'https://msazurecloud.onmicrosoft.com/api.esrp.microsoft.com', - '-esrpClientId', process.env['ESRP_CLIENT_ID'], + '-esrpClientId', + process.env['ESRP_CLIENT_ID'], '-useMSIAuthentication', 'true', '-federatedTokenData', JSON.stringify(federatedTokenData) ]; diff --git a/build/azure-pipelines/common/waitForArtifacts.js b/build/azure-pipelines/common/waitForArtifacts.js index b9ffb73962d99..d84a34ecea73d 100644 --- a/build/azure-pipelines/common/waitForArtifacts.js +++ b/build/azure-pipelines/common/waitForArtifacts.js @@ -1,9 +1,9 @@ "use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); /*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -Object.defineProperty(exports, "__esModule", { value: true }); const publish_1 = require("../common/publish"); const retry_1 = require("../common/retry"); async function getPipelineArtifacts() { diff --git a/build/azure-pipelines/darwin/codesign.js b/build/azure-pipelines/darwin/codesign.js index edc3a5f6f8095..8accbf70ec879 100644 --- a/build/azure-pipelines/darwin/codesign.js +++ b/build/azure-pipelines/darwin/codesign.js @@ -1,9 +1,9 @@ "use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); /*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -Object.defineProperty(exports, "__esModule", { value: true }); const codesign_1 = require("../common/codesign"); const publish_1 = require("../common/publish"); async function main() { diff --git a/build/azure-pipelines/distro/mixin-npm.js b/build/azure-pipelines/distro/mixin-npm.js index 87958a5d44902..40f5ee134afc6 100644 --- a/build/azure-pipelines/distro/mixin-npm.js +++ b/build/azure-pipelines/distro/mixin-npm.js @@ -1,12 +1,12 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); const { dirs } = require('../../npm/dirs'); diff --git a/build/azure-pipelines/distro/mixin-quality.js b/build/azure-pipelines/distro/mixin-quality.js index 335f63ca1fc3e..08aee7c89bd7e 100644 --- a/build/azure-pipelines/distro/mixin-quality.js +++ b/build/azure-pipelines/distro/mixin-quality.js @@ -1,12 +1,12 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); function log(...args) { diff --git a/build/azure-pipelines/linux/codesign.js b/build/azure-pipelines/linux/codesign.js index 98b97db566604..93ec2434ea856 100644 --- a/build/azure-pipelines/linux/codesign.js +++ b/build/azure-pipelines/linux/codesign.js @@ -1,9 +1,9 @@ "use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); /*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -Object.defineProperty(exports, "__esModule", { value: true }); const codesign_1 = require("../common/codesign"); const publish_1 = require("../common/publish"); async function main() { diff --git a/build/azure-pipelines/publish-types/check-version.js b/build/azure-pipelines/publish-types/check-version.js index 5bd80a69bbfca..e9564a469d112 100644 --- a/build/azure-pipelines/publish-types/check-version.js +++ b/build/azure-pipelines/publish-types/check-version.js @@ -1,12 +1,12 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const child_process_1 = __importDefault(require("child_process")); let tag = ''; try { diff --git a/build/azure-pipelines/publish-types/update-types.js b/build/azure-pipelines/publish-types/update-types.js index 29f9bfcf66eb1..a528a6027d9da 100644 --- a/build/azure-pipelines/publish-types/update-types.js +++ b/build/azure-pipelines/publish-types/update-types.js @@ -1,12 +1,12 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const fs_1 = __importDefault(require("fs")); const child_process_1 = __importDefault(require("child_process")); const path_1 = __importDefault(require("path")); diff --git a/build/azure-pipelines/upload-cdn.js b/build/azure-pipelines/upload-cdn.js index f8247450f2580..fcf24ad607395 100644 --- a/build/azure-pipelines/upload-cdn.js +++ b/build/azure-pipelines/upload-cdn.js @@ -1,12 +1,12 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const event_stream_1 = __importDefault(require("event-stream")); const vinyl_1 = __importDefault(require("vinyl")); const vinyl_fs_1 = __importDefault(require("vinyl-fs")); diff --git a/build/azure-pipelines/upload-nlsmetadata.js b/build/azure-pipelines/upload-nlsmetadata.js index e89a6497d704f..18ff71b7191cb 100644 --- a/build/azure-pipelines/upload-nlsmetadata.js +++ b/build/azure-pipelines/upload-nlsmetadata.js @@ -1,12 +1,12 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const event_stream_1 = __importDefault(require("event-stream")); const vinyl_fs_1 = __importDefault(require("vinyl-fs")); const gulp_merge_json_1 = __importDefault(require("gulp-merge-json")); diff --git a/build/azure-pipelines/upload-sourcemaps.js b/build/azure-pipelines/upload-sourcemaps.js index cac1ae3caf205..ecb8679d68419 100644 --- a/build/azure-pipelines/upload-sourcemaps.js +++ b/build/azure-pipelines/upload-sourcemaps.js @@ -1,8 +1,4 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); @@ -40,6 +36,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const path_1 = __importDefault(require("path")); const event_stream_1 = __importDefault(require("event-stream")); const vinyl_fs_1 = __importDefault(require("vinyl-fs")); diff --git a/build/azure-pipelines/win32/codesign.js b/build/azure-pipelines/win32/codesign.js index 630f9a64ba15f..cee33ae3208e7 100644 --- a/build/azure-pipelines/win32/codesign.js +++ b/build/azure-pipelines/win32/codesign.js @@ -1,9 +1,9 @@ "use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); /*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -Object.defineProperty(exports, "__esModule", { value: true }); const zx_1 = require("zx"); const codesign_1 = require("../common/codesign"); const publish_1 = require("../common/publish"); diff --git a/build/checker/layersChecker.js b/build/checker/layersChecker.js index b2e319b5ecb33..a59901d8a5755 100644 --- a/build/checker/layersChecker.js +++ b/build/checker/layersChecker.js @@ -1,12 +1,12 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const typescript_1 = __importDefault(require("typescript")); const fs_1 = require("fs"); const path_1 = require("path"); @@ -51,7 +51,7 @@ const RULES = [ 'browserElements/common/browserElements.ts', 'browserElements/common/nativeBrowserElementsService.ts' ].join(',')}}`, - disallowedTypes: [ /* Ignore native types that are defined from here */], + disallowedTypes: [ /* Ignore native types that are defined from here */ /* Ignore native types that are defined from here */], }, // Common: vs/base/parts/sandbox/electron-browser/preload{,-aux}.ts { diff --git a/build/darwin/create-universal-app.js b/build/darwin/create-universal-app.js index 7d3f9164d5f10..c655005212f88 100644 --- a/build/darwin/create-universal-app.js +++ b/build/darwin/create-universal-app.js @@ -1,12 +1,12 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const path_1 = __importDefault(require("path")); const fs_1 = __importDefault(require("fs")); const minimatch_1 = __importDefault(require("minimatch")); diff --git a/build/darwin/sign.js b/build/darwin/sign.js index fb55b8aa03d54..5824fdef8f59a 100644 --- a/build/darwin/sign.js +++ b/build/darwin/sign.js @@ -1,12 +1,12 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); const osx_sign_1 = require("@electron/osx-sign"); @@ -89,7 +89,7 @@ async function main(buildDir) { await (0, osx_sign_1.sign)(appOpts); } if (require.main === module) { - main(process.argv[2]).catch(async (err) => { + main(process.argv[2]).catch(async err => { console.error(err); const tempDir = process.env['AGENT_TEMPDIRECTORY']; if (tempDir) { diff --git a/build/darwin/verify-macho.js b/build/darwin/verify-macho.js index e7a4eb28d705c..0ce73a112120b 100644 --- a/build/darwin/verify-macho.js +++ b/build/darwin/verify-macho.js @@ -1,12 +1,12 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const assert_1 = __importDefault(require("assert")); const path_1 = __importDefault(require("path")); const promises_1 = require("fs/promises"); diff --git a/build/lib/asar.js b/build/lib/asar.js index 20c982a66217d..2da31a93904f1 100644 --- a/build/lib/asar.js +++ b/build/lib/asar.js @@ -1,13 +1,13 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createAsar = createAsar; +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const path_1 = __importDefault(require("path")); const event_stream_1 = __importDefault(require("event-stream")); const pickle = require('chromium-pickle-js'); diff --git a/build/lib/builtInExtensions.js b/build/lib/builtInExtensions.js index 249777c44588e..95fe7a09bac27 100644 --- a/build/lib/builtInExtensions.js +++ b/build/lib/builtInExtensions.js @@ -1,8 +1,4 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); @@ -42,6 +38,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) { Object.defineProperty(exports, "__esModule", { value: true }); exports.getExtensionStream = getExtensionStream; exports.getBuiltInExtensions = getBuiltInExtensions; +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); const os_1 = __importDefault(require("os")); diff --git a/build/lib/builtInExtensionsCG.js b/build/lib/builtInExtensionsCG.js index 3dc0ae27f0a8c..70546237ba43f 100644 --- a/build/lib/builtInExtensionsCG.js +++ b/build/lib/builtInExtensionsCG.js @@ -1,12 +1,12 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); const url_1 = __importDefault(require("url")); diff --git a/build/lib/bundle.js b/build/lib/bundle.js index 382b648defbe6..08f29d1084746 100644 --- a/build/lib/bundle.js +++ b/build/lib/bundle.js @@ -1,8 +1,4 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ Object.defineProperty(exports, "__esModule", { value: true }); exports.removeAllTSBoilerplate = removeAllTSBoilerplate; function removeAllTSBoilerplate(source) { diff --git a/build/lib/compilation.js b/build/lib/compilation.js index 61a6d28b29fb4..7e0927e9d2f3d 100644 --- a/build/lib/compilation.js +++ b/build/lib/compilation.js @@ -1,8 +1,4 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); @@ -45,6 +41,10 @@ exports.createCompile = createCompile; exports.transpileTask = transpileTask; exports.compileTask = compileTask; exports.watchTask = watchTask; +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const event_stream_1 = __importDefault(require("event-stream")); const fs_1 = __importDefault(require("fs")); const gulp_1 = __importDefault(require("gulp")); diff --git a/build/lib/date.js b/build/lib/date.js index 1ed884fb7ee7a..d189815ab0607 100644 --- a/build/lib/date.js +++ b/build/lib/date.js @@ -1,14 +1,14 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.writeISODate = writeISODate; exports.readISODate = readISODate; +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const path_1 = __importDefault(require("path")); const fs_1 = __importDefault(require("fs")); const root = path_1.default.join(__dirname, '..', '..'); diff --git a/build/lib/dependencies.js b/build/lib/dependencies.js index 04a09f98708af..c6baaafa07022 100644 --- a/build/lib/dependencies.js +++ b/build/lib/dependencies.js @@ -1,13 +1,13 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getProductionDependencies = getProductionDependencies; +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); const child_process_1 = __importDefault(require("child_process")); diff --git a/build/lib/electron.js b/build/lib/electron.js index 56992d8a7f71b..0602307f4c3b8 100644 --- a/build/lib/electron.js +++ b/build/lib/electron.js @@ -1,8 +1,4 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); @@ -41,6 +37,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) { }; Object.defineProperty(exports, "__esModule", { value: true }); exports.config = void 0; +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); const vinyl_fs_1 = __importDefault(require("vinyl-fs")); diff --git a/build/lib/extensions.js b/build/lib/extensions.js index 1d2f95299c85b..33c089de720de 100644 --- a/build/lib/extensions.js +++ b/build/lib/extensions.js @@ -1,8 +1,4 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); @@ -51,6 +47,10 @@ exports.scanBuiltinExtensions = scanBuiltinExtensions; exports.translatePackageJSON = translatePackageJSON; exports.webpackExtensions = webpackExtensions; exports.buildExtensionMedia = buildExtensionMedia; +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const event_stream_1 = __importDefault(require("event-stream")); const fs_1 = __importDefault(require("fs")); const child_process_1 = __importDefault(require("child_process")); diff --git a/build/lib/fetch.js b/build/lib/fetch.js index 9f2b974b7ac5a..2558769701629 100644 --- a/build/lib/fetch.js +++ b/build/lib/fetch.js @@ -1,8 +1,4 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; @@ -10,6 +6,10 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.fetchUrls = fetchUrls; exports.fetchUrl = fetchUrl; exports.fetchGithub = fetchGithub; +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const event_stream_1 = __importDefault(require("event-stream")); const vinyl_1 = __importDefault(require("vinyl")); const fancy_log_1 = __importDefault(require("fancy-log")); diff --git a/build/lib/getVersion.js b/build/lib/getVersion.js index 7606c17ab14f7..94744415d6076 100644 --- a/build/lib/getVersion.js +++ b/build/lib/getVersion.js @@ -1,8 +1,4 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); @@ -38,6 +34,10 @@ var __importStar = (this && this.__importStar) || (function () { })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.getVersion = getVersion; +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const git = __importStar(require("./git")); function getVersion(root) { let version = process.env['BUILD_SOURCEVERSION']; diff --git a/build/lib/i18n.js b/build/lib/i18n.js index 1d3bfb901b86d..a2d7e8720fd53 100644 --- a/build/lib/i18n.js +++ b/build/lib/i18n.js @@ -1,8 +1,4 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; @@ -15,6 +11,10 @@ exports.createXlfFilesForExtensions = createXlfFilesForExtensions; exports.createXlfFilesForIsl = createXlfFilesForIsl; exports.prepareI18nPackFiles = prepareI18nPackFiles; exports.prepareIslFiles = prepareIslFiles; +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const path_1 = __importDefault(require("path")); const fs_1 = __importDefault(require("fs")); const event_stream_1 = require("event-stream"); diff --git a/build/lib/inlineMeta.js b/build/lib/inlineMeta.js index 3b473ae091e16..b997f5e9a78b0 100644 --- a/build/lib/inlineMeta.js +++ b/build/lib/inlineMeta.js @@ -1,13 +1,13 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.inlineMeta = inlineMeta; +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const event_stream_1 = __importDefault(require("event-stream")); const path_1 = require("path"); const packageJsonMarkerId = 'BUILD_INSERT_PACKAGE_CONFIGURATION'; diff --git a/build/lib/mangle/index.js b/build/lib/mangle/index.js index fa729052f7c4b..2c3443b86d3c3 100644 --- a/build/lib/mangle/index.js +++ b/build/lib/mangle/index.js @@ -1,13 +1,13 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Mangler = void 0; +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const node_v8_1 = __importDefault(require("node:v8")); const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); @@ -63,10 +63,10 @@ class ClassData { parent; children; constructor(fileName, node) { - // analyse all fields (properties and methods). Find usages of all protected and - // private ones and keep track of all public ones (to prevent naming collisions) this.fileName = fileName; this.node = node; + // analyse all fields (properties and methods). Find usages of all protected and + // private ones and keep track of all public ones (to prevent naming collisions) const candidates = []; for (const member of node.members) { if (typescript_1.default.isMethodDeclaration(member)) { @@ -124,34 +124,34 @@ class ClassData { } static _getFieldType(node) { if (hasModifier(node, typescript_1.default.SyntaxKind.PrivateKeyword)) { - return 2 /* FieldType.Private */; + return FieldType.Private; } else if (hasModifier(node, typescript_1.default.SyntaxKind.ProtectedKeyword)) { - return 1 /* FieldType.Protected */; + return FieldType.Protected; } else { - return 0 /* FieldType.Public */; + return FieldType.Public; } } static _shouldMangle(type) { - return type === 2 /* FieldType.Private */ - || type === 1 /* FieldType.Protected */; + return type === FieldType.Private + || type === FieldType.Protected; } static makeImplicitPublicActuallyPublic(data, reportViolation) { // TS-HACK // A subtype can make an inherited protected field public. To prevent accidential // mangling of public fields we mark the original (protected) fields as public... for (const [name, info] of data.fields) { - if (info.type !== 0 /* FieldType.Public */) { + if (info.type !== FieldType.Public) { continue; } let parent = data.parent; while (parent) { - if (parent.fields.get(name)?.type === 1 /* FieldType.Protected */) { + if (parent.fields.get(name)?.type === FieldType.Protected) { const parentPos = parent.node.getSourceFile().getLineAndCharacterOfPosition(parent.fields.get(name).pos); const infoPos = data.node.getSourceFile().getLineAndCharacterOfPosition(info.pos); reportViolation(name, `'${name}' from ${parent.fileName}:${parentPos.line + 1}`, `${data.fileName}:${infoPos.line + 1}`); - parent.fields.get(name).type = 0 /* FieldType.Public */; + parent.fields.get(name).type = FieldType.Public; } parent = parent.parent; } @@ -227,7 +227,7 @@ class ClassData { let value = this.replacements.get(name); let parent = this.parent; while (parent) { - if (parent.replacements.has(name) && parent.fields.get(name)?.type === 1 /* FieldType.Protected */) { + if (parent.replacements.has(name) && parent.fields.get(name)?.type === FieldType.Protected) { value = parent.replacements.get(name) ?? value; } parent = parent.parent; @@ -509,7 +509,7 @@ class Mangler { // and because of that we might need to ignore this now let parent = data.parent; while (parent) { - if (parent.fields.get(name)?.type === 0 /* FieldType.Public */) { + if (parent.fields.get(name)?.type === FieldType.Public) { continue fields; } parent = parent.parent; diff --git a/build/lib/mangle/renameWorker.js b/build/lib/mangle/renameWorker.js index 8bd59a4e2d552..d34e0a2346f0e 100644 --- a/build/lib/mangle/renameWorker.js +++ b/build/lib/mangle/renameWorker.js @@ -1,12 +1,12 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const typescript_1 = __importDefault(require("typescript")); const workerpool_1 = __importDefault(require("workerpool")); const staticLanguageServiceHost_1 = require("./staticLanguageServiceHost"); diff --git a/build/lib/mangle/staticLanguageServiceHost.js b/build/lib/mangle/staticLanguageServiceHost.js index 7777888dd06a7..e17846f717fd5 100644 --- a/build/lib/mangle/staticLanguageServiceHost.js +++ b/build/lib/mangle/staticLanguageServiceHost.js @@ -1,13 +1,13 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.StaticLanguageServiceHost = void 0; +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const typescript_1 = __importDefault(require("typescript")); const path_1 = __importDefault(require("path")); class StaticLanguageServiceHost { diff --git a/build/lib/monaco-api.js b/build/lib/monaco-api.js index 84cc556cb6253..cc801849a5dfa 100644 --- a/build/lib/monaco-api.js +++ b/build/lib/monaco-api.js @@ -1,8 +1,4 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; @@ -10,6 +6,10 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.DeclarationResolver = exports.FSProvider = exports.RECIPE_PATH = void 0; exports.run3 = run3; exports.execute = execute; +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); const fancy_log_1 = __importDefault(require("fancy-log")); diff --git a/build/lib/nls.js b/build/lib/nls.js index 12e60a36ec99f..b2fbf88981c28 100644 --- a/build/lib/nls.js +++ b/build/lib/nls.js @@ -1,8 +1,4 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; diff --git a/build/lib/node.js b/build/lib/node.js index 01a381183ff54..62533fbe6ca25 100644 --- a/build/lib/node.js +++ b/build/lib/node.js @@ -1,12 +1,12 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const path_1 = __importDefault(require("path")); const fs_1 = __importDefault(require("fs")); const root = path_1.default.dirname(path_1.default.dirname(__dirname)); diff --git a/build/lib/optimize.js b/build/lib/optimize.js index 2a87c239c94ce..fbc455b1cd137 100644 --- a/build/lib/optimize.js +++ b/build/lib/optimize.js @@ -1,8 +1,4 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); @@ -42,6 +38,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) { Object.defineProperty(exports, "__esModule", { value: true }); exports.bundleTask = bundleTask; exports.minifyTask = minifyTask; +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const event_stream_1 = __importDefault(require("event-stream")); const gulp_1 = __importDefault(require("gulp")); const gulp_filter_1 = __importDefault(require("gulp-filter")); diff --git a/build/lib/policies.js b/build/lib/policies.js index b6b520098d110..d2ef760870d70 100644 --- a/build/lib/policies.js +++ b/build/lib/policies.js @@ -1,12 +1,12 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const child_process_1 = require("child_process"); const fs_1 = require("fs"); const path_1 = __importDefault(require("path")); diff --git a/build/lib/preLaunch.js b/build/lib/preLaunch.js index 75207fe50c037..ca79a09b068fb 100644 --- a/build/lib/preLaunch.js +++ b/build/lib/preLaunch.js @@ -1,12 +1,12 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ // @ts-check const path_1 = __importDefault(require("path")); const child_process_1 = require("child_process"); diff --git a/build/lib/propertyInitOrderChecker.js b/build/lib/propertyInitOrderChecker.js index 67a17054cd66a..778a825810695 100644 --- a/build/lib/propertyInitOrderChecker.js +++ b/build/lib/propertyInitOrderChecker.js @@ -1,8 +1,4 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); @@ -38,6 +34,10 @@ var __importStar = (this && this.__importStar) || (function () { })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.EntryKind = void 0; +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const ts = __importStar(require("typescript")); const path = __importStar(require("path")); const fs = __importStar(require("fs")); @@ -213,7 +213,7 @@ function* findAllReferencesInClass(node) { } for (const ref of findAllReferences(node)) { for (const entry of ref.references) { - if (entry.kind !== 1 /* EntryKind.Node */ || entry.node === node) { + if (entry.kind !== EntryKind.Node || entry.node === node) { continue; } if (findClass(entry.node) === classDecl) { diff --git a/build/lib/reporter.js b/build/lib/reporter.js index 16bb44ec539dc..da3ca0f46a1b5 100644 --- a/build/lib/reporter.js +++ b/build/lib/reporter.js @@ -1,13 +1,13 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createReporter = createReporter; +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const event_stream_1 = __importDefault(require("event-stream")); const fancy_log_1 = __importDefault(require("fancy-log")); const ansi_colors_1 = __importDefault(require("ansi-colors")); diff --git a/build/lib/snapshotLoader.js b/build/lib/snapshotLoader.js index 7d9b3f154f17d..315ebcc1e0153 100644 --- a/build/lib/snapshotLoader.js +++ b/build/lib/snapshotLoader.js @@ -1,10 +1,10 @@ "use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.snaps = void 0; /*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -Object.defineProperty(exports, "__esModule", { value: true }); -exports.snaps = void 0; var snaps; (function (snaps) { const fs = require('fs'); diff --git a/build/lib/standalone.js b/build/lib/standalone.js index 732a34228b92e..94aea68a9be3f 100644 --- a/build/lib/standalone.js +++ b/build/lib/standalone.js @@ -1,8 +1,4 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); @@ -41,6 +37,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) { }; Object.defineProperty(exports, "__esModule", { value: true }); exports.extractEditor = extractEditor; +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); const tss = __importStar(require("./treeshaking")); diff --git a/build/lib/stats.js b/build/lib/stats.js index 3f6d953ae4073..e6a4f9f633e42 100644 --- a/build/lib/stats.js +++ b/build/lib/stats.js @@ -1,13 +1,13 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createStatsStream = createStatsStream; +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const event_stream_1 = __importDefault(require("event-stream")); const fancy_log_1 = __importDefault(require("fancy-log")); const ansi_colors_1 = __importDefault(require("ansi-colors")); diff --git a/build/lib/stylelint/validateVariableNames.js b/build/lib/stylelint/validateVariableNames.js index b0e064e7b561e..a5e84d415ba0c 100644 --- a/build/lib/stylelint/validateVariableNames.js +++ b/build/lib/stylelint/validateVariableNames.js @@ -1,13 +1,13 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getVariableNameValidator = getVariableNameValidator; +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const fs_1 = require("fs"); const path_1 = __importDefault(require("path")); const RE_VAR_PROP = /var\(\s*(--([\w\-\.]+))/g; diff --git a/build/lib/task.js b/build/lib/task.js index 6887714681af7..025e0a4e8f27d 100644 --- a/build/lib/task.js +++ b/build/lib/task.js @@ -1,8 +1,4 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; @@ -10,6 +6,10 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.series = series; exports.parallel = parallel; exports.define = define; +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const fancy_log_1 = __importDefault(require("fancy-log")); const ansi_colors_1 = __importDefault(require("ansi-colors")); function _isPromise(p) { diff --git a/build/lib/test/i18n.test.js b/build/lib/test/i18n.test.js index 41aa8a7f668d8..da7a426a1034a 100644 --- a/build/lib/test/i18n.test.js +++ b/build/lib/test/i18n.test.js @@ -1,8 +1,4 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); @@ -40,6 +36,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const assert_1 = __importDefault(require("assert")); const i18n = __importStar(require("../i18n")); suite('XLF Parser Tests', () => { diff --git a/build/lib/treeshaking.js b/build/lib/treeshaking.js index d51eee91f1e35..ad69d5488d386 100644 --- a/build/lib/treeshaking.js +++ b/build/lib/treeshaking.js @@ -1,8 +1,4 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; @@ -10,6 +6,10 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.ShakeLevel = void 0; exports.toStringShakeLevel = toStringShakeLevel; exports.shake = shake; +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); const TYPESCRIPT_LIB_FOLDER = path_1.default.dirname(require.resolve('typescript/lib/lib.d.ts')); @@ -21,11 +21,11 @@ var ShakeLevel; })(ShakeLevel || (exports.ShakeLevel = ShakeLevel = {})); function toStringShakeLevel(shakeLevel) { switch (shakeLevel) { - case 0 /* ShakeLevel.Files */: + case ShakeLevel.Files: return 'Files (0)'; - case 1 /* ShakeLevel.InnerFile */: + case ShakeLevel.InnerFile: return 'InnerFile (1)'; - case 2 /* ShakeLevel.ClassMembers */: + case ShakeLevel.ClassMembers: return 'ClassMembers (2)'; } } @@ -231,7 +231,7 @@ var NodeColor; NodeColor[NodeColor["Black"] = 2] = "Black"; })(NodeColor || (NodeColor = {})); function getColor(node) { - return node.$$$color || 0 /* NodeColor.White */; + return node.$$$color || NodeColor.White; } function setColor(node, color) { node.$$$color = color; @@ -245,7 +245,7 @@ function isNeededSourceFile(node) { function nodeOrParentIsBlack(node) { while (node) { const color = getColor(node); - if (color === 2 /* NodeColor.Black */) { + if (color === NodeColor.Black) { return true; } node = node.parent; @@ -253,7 +253,7 @@ function nodeOrParentIsBlack(node) { return false; } function nodeOrChildIsBlack(node) { - if (getColor(node) === 2 /* NodeColor.Black */) { + if (getColor(node) === NodeColor.Black) { return true; } for (const child of node.getChildren()) { @@ -317,10 +317,10 @@ function markNodes(ts, languageService, options) { if (!program) { throw new Error('Could not get program from language service'); } - if (options.shakeLevel === 0 /* ShakeLevel.Files */) { + if (options.shakeLevel === ShakeLevel.Files) { // Mark all source files Black program.getSourceFiles().forEach((sourceFile) => { - setColor(sourceFile, 2 /* NodeColor.Black */); + setColor(sourceFile, NodeColor.Black); }); return; } @@ -332,7 +332,7 @@ function markNodes(ts, languageService, options) { sourceFile.forEachChild((node) => { if (ts.isImportDeclaration(node)) { if (!node.importClause && ts.isStringLiteral(node.moduleSpecifier)) { - setColor(node, 2 /* NodeColor.Black */); + setColor(node, NodeColor.Black); enqueueImport(node, node.moduleSpecifier.text); } return; @@ -340,7 +340,7 @@ function markNodes(ts, languageService, options) { if (ts.isExportDeclaration(node)) { if (!node.exportClause && node.moduleSpecifier && ts.isStringLiteral(node.moduleSpecifier)) { // export * from "foo"; - setColor(node, 2 /* NodeColor.Black */); + setColor(node, NodeColor.Black); enqueueImport(node, node.moduleSpecifier.text); } if (node.exportClause && ts.isNamedExports(node.exportClause)) { @@ -381,21 +381,21 @@ function markNodes(ts, languageService, options) { return null; } function enqueue_gray(node) { - if (nodeOrParentIsBlack(node) || getColor(node) === 1 /* NodeColor.Gray */) { + if (nodeOrParentIsBlack(node) || getColor(node) === NodeColor.Gray) { return; } - setColor(node, 1 /* NodeColor.Gray */); + setColor(node, NodeColor.Gray); gray_queue.push(node); } function enqueue_black(node) { const previousColor = getColor(node); - if (previousColor === 2 /* NodeColor.Black */) { + if (previousColor === NodeColor.Black) { return; } - if (previousColor === 1 /* NodeColor.Gray */) { + if (previousColor === NodeColor.Gray) { // remove from gray queue gray_queue.splice(gray_queue.indexOf(node), 1); - setColor(node, 0 /* NodeColor.White */); + setColor(node, NodeColor.White); // add to black queue enqueue_black(node); // move from one queue to the other @@ -408,7 +408,7 @@ function markNodes(ts, languageService, options) { } const fileName = node.getSourceFile().fileName; if (/^defaultLib:/.test(fileName) || /\.d\.ts$/.test(fileName)) { - setColor(node, 2 /* NodeColor.Black */); + setColor(node, NodeColor.Black); return; } const sourceFile = node.getSourceFile(); @@ -419,9 +419,9 @@ function markNodes(ts, languageService, options) { if (ts.isSourceFile(node)) { return; } - setColor(node, 2 /* NodeColor.Black */); + setColor(node, NodeColor.Black); black_queue.push(node); - if (options.shakeLevel === 2 /* ShakeLevel.ClassMembers */ && (ts.isMethodDeclaration(node) || ts.isMethodSignature(node) || ts.isPropertySignature(node) || ts.isPropertyDeclaration(node) || ts.isGetAccessor(node) || ts.isSetAccessor(node))) { + if (options.shakeLevel === ShakeLevel.ClassMembers && (ts.isMethodDeclaration(node) || ts.isMethodSignature(node) || ts.isPropertySignature(node) || ts.isPropertyDeclaration(node) || ts.isGetAccessor(node) || ts.isSetAccessor(node))) { const references = languageService.getReferencesAtPosition(node.getSourceFile().fileName, node.name.pos + node.name.getLeadingTriviaWidth()); if (references) { for (let i = 0, len = references.length; i < len; i++) { @@ -487,7 +487,7 @@ function markNodes(ts, languageService, options) { if ((ts.isClassDeclaration(nodeParent) || ts.isInterfaceDeclaration(nodeParent)) && nodeOrChildIsBlack(nodeParent)) { gray_queue.splice(i, 1); black_queue.push(node); - setColor(node, 2 /* NodeColor.Black */); + setColor(node, NodeColor.Black); i--; } } @@ -504,7 +504,7 @@ function markNodes(ts, languageService, options) { const symbols = getRealNodeSymbol(ts, checker, node); for (const { symbol, symbolImportNode } of symbols) { if (symbolImportNode) { - setColor(symbolImportNode, 2 /* NodeColor.Black */); + setColor(symbolImportNode, NodeColor.Black); const importDeclarationNode = findParentImportDeclaration(symbolImportNode); if (importDeclarationNode && ts.isStringLiteral(importDeclarationNode.moduleSpecifier)) { enqueueImport(importDeclarationNode, importDeclarationNode.moduleSpecifier.text); @@ -518,7 +518,7 @@ function markNodes(ts, languageService, options) { // (they can be the declaration of a module import) continue; } - if (options.shakeLevel === 2 /* ShakeLevel.ClassMembers */ && (ts.isClassDeclaration(declaration) || ts.isInterfaceDeclaration(declaration)) && !isLocalCodeExtendingOrInheritingFromDefaultLibSymbol(ts, program, checker, declaration)) { + if (options.shakeLevel === ShakeLevel.ClassMembers && (ts.isClassDeclaration(declaration) || ts.isInterfaceDeclaration(declaration)) && !isLocalCodeExtendingOrInheritingFromDefaultLibSymbol(ts, program, checker, declaration)) { enqueue_black(declaration.name); for (let j = 0; j < declaration.members.length; j++) { const member = declaration.members[j]; @@ -569,7 +569,7 @@ function markNodes(ts, languageService, options) { const aliased = checker.getAliasedSymbol(symbol); if (aliased.declarations && aliased.declarations.length > 0) { if (nodeOrParentIsBlack(aliased.declarations[0]) || nodeOrChildIsBlack(aliased.declarations[0])) { - setColor(node, 2 /* NodeColor.Black */); + setColor(node, NodeColor.Black); } } } @@ -616,7 +616,7 @@ function generateResult(ts, languageService, shakeLevel) { result += data; } function writeMarkedNodes(node) { - if (getColor(node) === 2 /* NodeColor.Black */) { + if (getColor(node) === NodeColor.Black) { return keep(node); } // Always keep certain top-level statements @@ -632,34 +632,34 @@ function generateResult(ts, languageService, shakeLevel) { if (ts.isImportDeclaration(node)) { if (node.importClause && node.importClause.namedBindings) { if (ts.isNamespaceImport(node.importClause.namedBindings)) { - if (getColor(node.importClause.namedBindings) === 2 /* NodeColor.Black */) { + if (getColor(node.importClause.namedBindings) === NodeColor.Black) { return keep(node); } } else { const survivingImports = []; for (const importNode of node.importClause.namedBindings.elements) { - if (getColor(importNode) === 2 /* NodeColor.Black */) { + if (getColor(importNode) === NodeColor.Black) { survivingImports.push(importNode.getFullText(sourceFile)); } } const leadingTriviaWidth = node.getLeadingTriviaWidth(); const leadingTrivia = sourceFile.text.substr(node.pos, leadingTriviaWidth); if (survivingImports.length > 0) { - if (node.importClause && node.importClause.name && getColor(node.importClause) === 2 /* NodeColor.Black */) { + if (node.importClause && node.importClause.name && getColor(node.importClause) === NodeColor.Black) { return write(`${leadingTrivia}import ${node.importClause.name.text}, {${survivingImports.join(',')} } from${node.moduleSpecifier.getFullText(sourceFile)};`); } return write(`${leadingTrivia}import {${survivingImports.join(',')} } from${node.moduleSpecifier.getFullText(sourceFile)};`); } else { - if (node.importClause && node.importClause.name && getColor(node.importClause) === 2 /* NodeColor.Black */) { + if (node.importClause && node.importClause.name && getColor(node.importClause) === NodeColor.Black) { return write(`${leadingTrivia}import ${node.importClause.name.text} from${node.moduleSpecifier.getFullText(sourceFile)};`); } } } } else { - if (node.importClause && getColor(node.importClause) === 2 /* NodeColor.Black */) { + if (node.importClause && getColor(node.importClause) === NodeColor.Black) { return keep(node); } } @@ -668,7 +668,7 @@ function generateResult(ts, languageService, shakeLevel) { if (node.exportClause && node.moduleSpecifier && ts.isNamedExports(node.exportClause)) { const survivingExports = []; for (const exportSpecifier of node.exportClause.elements) { - if (getColor(exportSpecifier) === 2 /* NodeColor.Black */) { + if (getColor(exportSpecifier) === NodeColor.Black) { survivingExports.push(exportSpecifier.getFullText(sourceFile)); } } @@ -679,11 +679,11 @@ function generateResult(ts, languageService, shakeLevel) { } } } - if (shakeLevel === 2 /* ShakeLevel.ClassMembers */ && (ts.isClassDeclaration(node) || ts.isInterfaceDeclaration(node)) && nodeOrChildIsBlack(node)) { + if (shakeLevel === ShakeLevel.ClassMembers && (ts.isClassDeclaration(node) || ts.isInterfaceDeclaration(node)) && nodeOrChildIsBlack(node)) { let toWrite = node.getFullText(); for (let i = node.members.length - 1; i >= 0; i--) { const member = node.members[i]; - if (getColor(member) === 2 /* NodeColor.Black */ || !member.name) { + if (getColor(member) === NodeColor.Black || !member.name) { // keep method continue; } @@ -699,7 +699,7 @@ function generateResult(ts, languageService, shakeLevel) { } node.forEachChild(writeMarkedNodes); } - if (getColor(sourceFile) !== 2 /* NodeColor.Black */) { + if (getColor(sourceFile) !== NodeColor.Black) { if (!nodeOrChildIsBlack(sourceFile)) { // none of the elements are reachable if (isNeededSourceFile(sourceFile)) { diff --git a/build/lib/tsb/builder.js b/build/lib/tsb/builder.js index b149cf5ade64a..6267db35f0b7c 100644 --- a/build/lib/tsb/builder.js +++ b/build/lib/tsb/builder.js @@ -1,8 +1,4 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); @@ -42,6 +38,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) { Object.defineProperty(exports, "__esModule", { value: true }); exports.CancellationToken = void 0; exports.createTypeScriptBuilder = createTypeScriptBuilder; +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); const crypto_1 = __importDefault(require("crypto")); diff --git a/build/lib/tsb/index.js b/build/lib/tsb/index.js index 552eea5014f72..af10bf8ce19b7 100644 --- a/build/lib/tsb/index.js +++ b/build/lib/tsb/index.js @@ -1,8 +1,4 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); @@ -41,6 +37,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) { }; Object.defineProperty(exports, "__esModule", { value: true }); exports.create = create; +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const vinyl_1 = __importDefault(require("vinyl")); const through_1 = __importDefault(require("through")); const builder = __importStar(require("./builder")); diff --git a/build/lib/tsb/transpiler.js b/build/lib/tsb/transpiler.js index adccb10441665..7920539d37c36 100644 --- a/build/lib/tsb/transpiler.js +++ b/build/lib/tsb/transpiler.js @@ -1,13 +1,13 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ESBuildTranspiler = exports.TscTranspiler = void 0; +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const esbuild_1 = __importDefault(require("esbuild")); const typescript_1 = __importDefault(require("typescript")); const node_worker_threads_1 = __importDefault(require("node:worker_threads")); @@ -100,12 +100,12 @@ class TranspileWorker { SuffixTypes[SuffixTypes["Ts"] = 3] = "Ts"; SuffixTypes[SuffixTypes["Unknown"] = 0] = "Unknown"; })(SuffixTypes || (SuffixTypes = {})); - const suffixLen = file.path.endsWith('.d.ts') ? 5 /* SuffixTypes.Dts */ - : file.path.endsWith('.ts') ? 3 /* SuffixTypes.Ts */ - : 0 /* SuffixTypes.Unknown */; + const suffixLen = file.path.endsWith('.d.ts') ? SuffixTypes.Dts + : file.path.endsWith('.ts') ? SuffixTypes.Ts + : SuffixTypes.Unknown; // check if output of a DTS-files isn't just "empty" and iff so // skip this file - if (suffixLen === 5 /* SuffixTypes.Dts */ && _isDefaultEmpty(jsSrc)) { + if (suffixLen === SuffixTypes.Dts && _isDefaultEmpty(jsSrc)) { continue; } const outBase = options.compilerOptions?.outDir ?? file.base; diff --git a/build/lib/tsb/utils.js b/build/lib/tsb/utils.js index 2ea820c6e6bec..72de33b5ac711 100644 --- a/build/lib/tsb/utils.js +++ b/build/lib/tsb/utils.js @@ -1,10 +1,10 @@ "use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.graph = exports.strings = void 0; /*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -Object.defineProperty(exports, "__esModule", { value: true }); -exports.graph = exports.strings = void 0; var strings; (function (strings) { function format(value, ...rest) { diff --git a/build/lib/util.js b/build/lib/util.js index 8b6f039628173..389b9e0cd4f0f 100644 --- a/build/lib/util.js +++ b/build/lib/util.js @@ -1,8 +1,4 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; @@ -26,6 +22,10 @@ exports.rebase = rebase; exports.filter = filter; exports.streamToPromise = streamToPromise; exports.getElectronVersion = getElectronVersion; +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const event_stream_1 = __importDefault(require("event-stream")); const debounce_1 = __importDefault(require("debounce")); const gulp_filter_1 = __importDefault(require("gulp-filter")); diff --git a/build/lib/watch/index.js b/build/lib/watch/index.js index 69eca78fd704c..21dc978dbfc3e 100644 --- a/build/lib/watch/index.js +++ b/build/lib/watch/index.js @@ -1,9 +1,9 @@ "use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); /*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -Object.defineProperty(exports, "__esModule", { value: true }); const watch = process.platform === 'win32' ? require('./watch-win32') : require('vscode-gulp-watch'); module.exports = function () { return watch.apply(null, arguments); diff --git a/build/lib/watch/watch-win32.js b/build/lib/watch/watch-win32.js index 7b77981d620ea..4113d93526e1b 100644 --- a/build/lib/watch/watch-win32.js +++ b/build/lib/watch/watch-win32.js @@ -1,12 +1,12 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const path_1 = __importDefault(require("path")); const child_process_1 = __importDefault(require("child_process")); const fs_1 = __importDefault(require("fs")); diff --git a/build/linux/debian/calculate-deps.js b/build/linux/debian/calculate-deps.js index 34276ce7705c5..c9c96967f47ff 100644 --- a/build/linux/debian/calculate-deps.js +++ b/build/linux/debian/calculate-deps.js @@ -1,13 +1,13 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.generatePackageDeps = generatePackageDeps; +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const child_process_1 = require("child_process"); const fs_1 = require("fs"); const os_1 = require("os"); diff --git a/build/linux/debian/dep-lists.js b/build/linux/debian/dep-lists.js index 4ef448d454eb9..f58d0f8e86682 100644 --- a/build/linux/debian/dep-lists.js +++ b/build/linux/debian/dep-lists.js @@ -1,10 +1,10 @@ "use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.referenceGeneratedDepsByArch = exports.recommendedDeps = exports.additionalDeps = void 0; /*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -Object.defineProperty(exports, "__esModule", { value: true }); -exports.referenceGeneratedDepsByArch = exports.recommendedDeps = exports.additionalDeps = void 0; // Based on https://source.chromium.org/chromium/chromium/src/+/main:chrome/installer/linux/debian/additional_deps // Additional dependencies not in the dpkg-shlibdeps output. exports.additionalDeps = [ diff --git a/build/linux/debian/install-sysroot.js b/build/linux/debian/install-sysroot.js index a94ca427a967b..d16e13bd63eef 100644 --- a/build/linux/debian/install-sysroot.js +++ b/build/linux/debian/install-sysroot.js @@ -1,14 +1,14 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getVSCodeSysroot = getVSCodeSysroot; exports.getChromiumSysroot = getChromiumSysroot; +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ const child_process_1 = require("child_process"); const os_1 = require("os"); const fs_1 = __importDefault(require("fs")); diff --git a/build/linux/debian/types.js b/build/linux/debian/types.js index ce21d50e1a98f..f2a80aebb7a6e 100644 --- a/build/linux/debian/types.js +++ b/build/linux/debian/types.js @@ -1,8 +1,4 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ Object.defineProperty(exports, "__esModule", { value: true }); exports.isDebianArchString = isDebianArchString; function isDebianArchString(s) { diff --git a/build/linux/libcxx-fetcher.js b/build/linux/libcxx-fetcher.js index d6c998e5aea94..710a8be743462 100644 --- a/build/linux/libcxx-fetcher.js +++ b/build/linux/libcxx-fetcher.js @@ -1,14 +1,14 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.downloadLibcxxHeaders = downloadLibcxxHeaders; exports.downloadLibcxxObjects = downloadLibcxxObjects; +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ // Can be removed once https://github.com/electron/electron-rebuild/pull/703 is available. const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); diff --git a/build/linux/rpm/calculate-deps.js b/build/linux/rpm/calculate-deps.js index b19e26f18544e..b31a5aa9d5c0d 100644 --- a/build/linux/rpm/calculate-deps.js +++ b/build/linux/rpm/calculate-deps.js @@ -1,10 +1,10 @@ "use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.generatePackageDeps = generatePackageDeps; /*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -Object.defineProperty(exports, "__esModule", { value: true }); -exports.generatePackageDeps = generatePackageDeps; const child_process_1 = require("child_process"); const fs_1 = require("fs"); const dep_lists_1 = require("./dep-lists"); diff --git a/build/linux/rpm/dep-lists.js b/build/linux/rpm/dep-lists.js index 2f742daf2f84d..74156ebe47ab1 100644 --- a/build/linux/rpm/dep-lists.js +++ b/build/linux/rpm/dep-lists.js @@ -1,10 +1,10 @@ "use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.referenceGeneratedDepsByArch = exports.additionalDeps = void 0; /*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -Object.defineProperty(exports, "__esModule", { value: true }); -exports.referenceGeneratedDepsByArch = exports.additionalDeps = void 0; // Based on https://source.chromium.org/chromium/chromium/src/+/main:chrome/installer/linux/rpm/additional_deps // Additional dependencies not in the rpm find-requires output. exports.additionalDeps = [ diff --git a/build/linux/rpm/types.js b/build/linux/rpm/types.js index a20b9c2fe025b..39b1334cc7b7a 100644 --- a/build/linux/rpm/types.js +++ b/build/linux/rpm/types.js @@ -1,8 +1,4 @@ "use strict"; -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ Object.defineProperty(exports, "__esModule", { value: true }); exports.isRpmArchString = isRpmArchString; function isRpmArchString(s) { diff --git a/build/package.json b/build/package.json index ba53cb453d67f..9477b8403cac5 100644 --- a/build/package.json +++ b/build/package.json @@ -58,9 +58,9 @@ }, "type": "commonjs", "scripts": { - "compile": "../node_modules/.bin/tsc -p tsconfig.build.json", - "watch": "../node_modules/.bin/tsc -p tsconfig.build.json --watch", - "npmCheckJs": "../node_modules/.bin/tsc --noEmit" + "compile": "cd .. && npx tsgo --project build/tsconfig.build.json", + "watch": "cd .. && npx tsgo --project build/tsconfig.build.json --watch", + "npmCheckJs": "cd .. && npx tsgo --project build/tsconfig.build.json --noEmit" }, "optionalDependencies": { "tree-sitter-typescript": "^0.23.2", diff --git a/package.json b/package.json index 0f4ddc202e4e3..92c93b6024c7c 100644 --- a/package.json +++ b/package.json @@ -67,7 +67,7 @@ "extensions-ci": "node ./node_modules/gulp/bin/gulp.js extensions-ci", "extensions-ci-pr": "node ./node_modules/gulp/bin/gulp.js extensions-ci-pr", "perf": "node scripts/code-perf.js", - "update-build-ts-version": "npm install -D typescript@next && npm install -D @typescript/native-preview && tsc -p ./build/tsconfig.build.json" + "update-build-ts-version": "npm install -D typescript@next && npm install -D @typescript/native-preview && (cd build && npm run compile)" }, "dependencies": { "@microsoft/1ds-core-js": "^3.2.13", From bd031dafbcd7f47dafd1149d08046afa33b1a1f5 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Wed, 6 Aug 2025 11:47:45 -0700 Subject: [PATCH 0065/2080] Convert const enums --- build/lib/propertyInitOrderChecker.js | 3 +-- build/lib/propertyInitOrderChecker.ts | 2 +- build/lib/treeshaking.js | 3 +-- build/lib/treeshaking.ts | 2 +- 4 files changed, 4 insertions(+), 6 deletions(-) diff --git a/build/lib/propertyInitOrderChecker.js b/build/lib/propertyInitOrderChecker.js index 778a825810695..7ed6eb7e04a57 100644 --- a/build/lib/propertyInitOrderChecker.js +++ b/build/lib/propertyInitOrderChecker.js @@ -33,7 +33,6 @@ var __importStar = (this && this.__importStar) || (function () { }; })(); Object.defineProperty(exports, "__esModule", { value: true }); -exports.EntryKind = void 0; /*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. @@ -247,5 +246,5 @@ var EntryKind; EntryKind[EntryKind["StringLiteral"] = 2] = "StringLiteral"; EntryKind[EntryKind["SearchedLocalFoundProperty"] = 3] = "SearchedLocalFoundProperty"; EntryKind[EntryKind["SearchedPropertyFoundLocal"] = 4] = "SearchedPropertyFoundLocal"; -})(EntryKind || (exports.EntryKind = EntryKind = {})); +})(EntryKind || (EntryKind = {})); //# sourceMappingURL=propertyInitOrderChecker.js.map \ No newline at end of file diff --git a/build/lib/propertyInitOrderChecker.ts b/build/lib/propertyInitOrderChecker.ts index 141a9c918e6d4..d3c9753f76aba 100644 --- a/build/lib/propertyInitOrderChecker.ts +++ b/build/lib/propertyInitOrderChecker.ts @@ -272,7 +272,7 @@ type Definition = | { readonly type: DefinitionKind.TripleSlashReference; readonly reference: ts.FileReference; readonly file: ts.SourceFile }; /** @internal */ -export const enum EntryKind { +enum EntryKind { Span, Node, StringLiteral, diff --git a/build/lib/treeshaking.js b/build/lib/treeshaking.js index ad69d5488d386..22a1f6577babb 100644 --- a/build/lib/treeshaking.js +++ b/build/lib/treeshaking.js @@ -3,7 +3,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); -exports.ShakeLevel = void 0; exports.toStringShakeLevel = toStringShakeLevel; exports.shake = shake; /*--------------------------------------------------------------------------------------------- @@ -18,7 +17,7 @@ var ShakeLevel; ShakeLevel[ShakeLevel["Files"] = 0] = "Files"; ShakeLevel[ShakeLevel["InnerFile"] = 1] = "InnerFile"; ShakeLevel[ShakeLevel["ClassMembers"] = 2] = "ClassMembers"; -})(ShakeLevel || (exports.ShakeLevel = ShakeLevel = {})); +})(ShakeLevel || (ShakeLevel = {})); function toStringShakeLevel(shakeLevel) { switch (shakeLevel) { case ShakeLevel.Files: diff --git a/build/lib/treeshaking.ts b/build/lib/treeshaking.ts index ac71bb205da74..2f55e3d42a9fa 100644 --- a/build/lib/treeshaking.ts +++ b/build/lib/treeshaking.ts @@ -9,7 +9,7 @@ import type * as ts from 'typescript'; const TYPESCRIPT_LIB_FOLDER = path.dirname(require.resolve('typescript/lib/lib.d.ts')); -export const enum ShakeLevel { +enum ShakeLevel { Files = 0, InnerFile = 1, ClassMembers = 2 From d499211732305086bbac4e603392e540dee05bd2 Mon Sep 17 00:00:00 2001 From: Raymond Zhao <7199958+rzhao271@users.noreply.github.com> Date: Wed, 6 Aug 2025 11:52:08 -0700 Subject: [PATCH 0066/2080] fix: switch everyone to DEB822 (#260171) Fixes #259302 --- resources/linux/debian/postinst.template | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/resources/linux/debian/postinst.template b/resources/linux/debian/postinst.template index 8eb6474e79ca6..5ee1ebb5af529 100755 --- a/resources/linux/debian/postinst.template +++ b/resources/linux/debian/postinst.template @@ -86,12 +86,10 @@ if [ "@@NAME@@" != "code-oss" ]; then fi if [ "$WRITE_SOURCE" != 'no' ]; then - # Check if apt modernize-sources is available. - if apt modernize-sources --help >/dev/null 2>&1; then - # Write repository in deb822 format with Signed-By. - echo "### THIS FILE IS AUTOMATICALLY CONFIGURED ### + # Write repository in deb822 format with Signed-By. + echo "### THIS FILE IS AUTOMATICALLY CONFIGURED ### # You may comment out this entry, but any other modifications may be lost." > "$CODE_SOURCE_PART_DEB822" - cat <> "$CODE_SOURCE_PART_DEB822" + cat <> "$CODE_SOURCE_PART_DEB822" Types: deb URIs: https://packages.microsoft.com/repos/code Suites: stable @@ -99,13 +97,8 @@ Components: main Architectures: @@ARCHITECTURE@@ Signed-By: $CODE_TRUSTED_PART EOF - if [ -f "$CODE_SOURCE_PART" ]; then - rm -f "$CODE_SOURCE_PART" - fi - else - echo "### THIS FILE IS AUTOMATICALLY CONFIGURED ### -# You may comment out this entry, but any other modifications may be lost. -deb [arch=@@ARCHITECTURE@@] https://packages.microsoft.com/repos/code stable main" > $CODE_SOURCE_PART + if [ -f "$CODE_SOURCE_PART" ]; then + rm -f "$CODE_SOURCE_PART" fi # Sourced from https://packages.microsoft.com/keys/microsoft.asc From 0dce61c27fd41600490309afe8dde13a819ffe12 Mon Sep 17 00:00:00 2001 From: Himanshu Ravindra Iwanati Date: Thu, 7 Aug 2025 00:29:46 +0530 Subject: [PATCH 0067/2080] fix: update capitalization for 'Restore to Last Checkpoint' hover text (#259572) --- .../contrib/chat/browser/chatEditing/chatEditingActions.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingActions.ts b/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingActions.ts index 1f453b5992ae1..42421d9b54b56 100644 --- a/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingActions.ts +++ b/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingActions.ts @@ -478,7 +478,7 @@ registerAction2(class RestoreLastCheckpoint extends Action2 { constructor() { super({ id: 'workbench.action.chat.restoreLastCheckpoint', - title: localize2('chat.restoreLastCheckpoint.label', "Restore to last checkpoint"), + title: localize2('chat.restoreLastCheckpoint.label', "Restore to Last Checkpoint"), f1: false, category: CHAT_CATEGORY, icon: Codicon.discard, From f91e6f01b80416c13e86d4e4239c98f65765e2f5 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Wed, 6 Aug 2025 12:00:36 -0700 Subject: [PATCH 0068/2080] Fix enum init order --- build/lib/propertyInitOrderChecker.js | 17 ++++++++--------- build/lib/propertyInitOrderChecker.ts | 15 +++++++-------- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/build/lib/propertyInitOrderChecker.js b/build/lib/propertyInitOrderChecker.js index 7ed6eb7e04a57..4813485630855 100644 --- a/build/lib/propertyInitOrderChecker.js +++ b/build/lib/propertyInitOrderChecker.js @@ -52,6 +52,14 @@ const TS_CONFIG_PATH = path.join(__dirname, '../../', 'src', 'tsconfig.json'); // // ############################################################################################# // +var EntryKind; +(function (EntryKind) { + EntryKind[EntryKind["Span"] = 0] = "Span"; + EntryKind[EntryKind["Node"] = 1] = "Node"; + EntryKind[EntryKind["StringLiteral"] = 2] = "StringLiteral"; + EntryKind[EntryKind["SearchedLocalFoundProperty"] = 3] = "SearchedLocalFoundProperty"; + EntryKind[EntryKind["SearchedPropertyFoundLocal"] = 4] = "SearchedPropertyFoundLocal"; +})(EntryKind || (EntryKind = {})); const cancellationToken = { isCancellationRequested: () => false, throwIfCancellationRequested: () => { }, @@ -238,13 +246,4 @@ var DefinitionKind; DefinitionKind[DefinitionKind["String"] = 4] = "String"; DefinitionKind[DefinitionKind["TripleSlashReference"] = 5] = "TripleSlashReference"; })(DefinitionKind || (DefinitionKind = {})); -/** @internal */ -var EntryKind; -(function (EntryKind) { - EntryKind[EntryKind["Span"] = 0] = "Span"; - EntryKind[EntryKind["Node"] = 1] = "Node"; - EntryKind[EntryKind["StringLiteral"] = 2] = "StringLiteral"; - EntryKind[EntryKind["SearchedLocalFoundProperty"] = 3] = "SearchedLocalFoundProperty"; - EntryKind[EntryKind["SearchedPropertyFoundLocal"] = 4] = "SearchedPropertyFoundLocal"; -})(EntryKind || (EntryKind = {})); //# sourceMappingURL=propertyInitOrderChecker.js.map \ No newline at end of file diff --git a/build/lib/propertyInitOrderChecker.ts b/build/lib/propertyInitOrderChecker.ts index d3c9753f76aba..fc958c475c00d 100644 --- a/build/lib/propertyInitOrderChecker.ts +++ b/build/lib/propertyInitOrderChecker.ts @@ -22,6 +22,13 @@ const TS_CONFIG_PATH = path.join(__dirname, '../../', 'src', 'tsconfig.json'); // ############################################################################################# // +enum EntryKind { + Span, + Node, + StringLiteral, + SearchedLocalFoundProperty, + SearchedPropertyFoundLocal, +} const cancellationToken: ts.CancellationToken = { isCancellationRequested: () => false, @@ -271,14 +278,6 @@ type Definition = | { readonly type: DefinitionKind.String; readonly node: ts.StringLiteralLike } | { readonly type: DefinitionKind.TripleSlashReference; readonly reference: ts.FileReference; readonly file: ts.SourceFile }; -/** @internal */ -enum EntryKind { - Span, - Node, - StringLiteral, - SearchedLocalFoundProperty, - SearchedPropertyFoundLocal, -} type NodeEntryKind = EntryKind.Node | EntryKind.StringLiteral | EntryKind.SearchedLocalFoundProperty | EntryKind.SearchedPropertyFoundLocal; type Entry = NodeEntry | SpanEntry; interface ContextWithStartAndEndNode { From ccba531e02d969f9f8762bba1329bbe60dc1af19 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Wed, 6 Aug 2025 20:19:58 +0000 Subject: [PATCH 0069/2080] Add Command Palette and Keybinding Support to Toggle Debug Exception Breakpoints (#260123) * Initial plan * Implement toggle exception breakpoints command with quickpick support Co-authored-by: connor4312 <2230985+connor4312@users.noreply.github.com> * Improve exception breakpoints command with proper disposal pattern and validation Co-authored-by: connor4312 <2230985+connor4312@users.noreply.github.com> * fix * rm --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: connor4312 <2230985+connor4312@users.noreply.github.com> Co-authored-by: Connor Peet --- .../contrib/debug/browser/debugCommands.ts | 87 ++++++++++++++++++- 1 file changed, 86 insertions(+), 1 deletion(-) diff --git a/src/vs/workbench/contrib/debug/browser/debugCommands.ts b/src/vs/workbench/contrib/debug/browser/debugCommands.ts index c2c983421fc2d..5b8b22870dc01 100644 --- a/src/vs/workbench/contrib/debug/browser/debugCommands.ts +++ b/src/vs/workbench/contrib/debug/browser/debugCommands.ts @@ -8,7 +8,7 @@ import { KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; import { List } from '../../../../base/browser/ui/list/listWidget.js'; import { KeybindingsRegistry, KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js'; import { IListService } from '../../../../platform/list/browser/listService.js'; -import { IDebugService, IEnablement, CONTEXT_BREAKPOINTS_FOCUSED, CONTEXT_WATCH_EXPRESSIONS_FOCUSED, CONTEXT_VARIABLES_FOCUSED, EDITOR_CONTRIBUTION_ID, IDebugEditorContribution, CONTEXT_IN_DEBUG_MODE, CONTEXT_EXPRESSION_SELECTED, IConfig, IStackFrame, IThread, IDebugSession, CONTEXT_DEBUG_STATE, IDebugConfiguration, CONTEXT_JUMP_TO_CURSOR_SUPPORTED, REPL_VIEW_ID, CONTEXT_DEBUGGERS_AVAILABLE, State, getStateLabel, CONTEXT_BREAKPOINT_INPUT_FOCUSED, CONTEXT_FOCUSED_SESSION_IS_ATTACH, VIEWLET_ID, CONTEXT_DISASSEMBLY_VIEW_FOCUS, CONTEXT_IN_DEBUG_REPL, CONTEXT_STEP_INTO_TARGETS_SUPPORTED, isFrameDeemphasized, IDataBreakpointInfoResponse, DataBreakpointSetType } from '../common/debug.js'; +import { IDebugService, IEnablement, CONTEXT_BREAKPOINTS_FOCUSED, CONTEXT_WATCH_EXPRESSIONS_FOCUSED, CONTEXT_VARIABLES_FOCUSED, EDITOR_CONTRIBUTION_ID, IDebugEditorContribution, CONTEXT_IN_DEBUG_MODE, CONTEXT_EXPRESSION_SELECTED, IConfig, IStackFrame, IThread, IDebugSession, CONTEXT_DEBUG_STATE, IDebugConfiguration, CONTEXT_JUMP_TO_CURSOR_SUPPORTED, REPL_VIEW_ID, CONTEXT_DEBUGGERS_AVAILABLE, State, getStateLabel, CONTEXT_BREAKPOINT_INPUT_FOCUSED, CONTEXT_FOCUSED_SESSION_IS_ATTACH, VIEWLET_ID, CONTEXT_DISASSEMBLY_VIEW_FOCUS, CONTEXT_IN_DEBUG_REPL, CONTEXT_STEP_INTO_TARGETS_SUPPORTED, isFrameDeemphasized, IDataBreakpointInfoResponse, DataBreakpointSetType, IExceptionBreakpoint } from '../common/debug.js'; import { Expression, Variable, Breakpoint, FunctionBreakpoint, DataBreakpoint, Thread } from '../common/debugModel.js'; import { IExtensionsWorkbenchService } from '../../extensions/common/extensions.js'; import { ICodeEditor, isCodeEditor } from '../../../../editor/browser/editorBrowser.js'; @@ -84,6 +84,7 @@ export const COPY_VALUE_ID = 'workbench.debug.viewlet.action.copyValue'; export const BREAK_WHEN_VALUE_CHANGES_ID = 'debug.breakWhenValueChanges'; export const BREAK_WHEN_VALUE_IS_ACCESSED_ID = 'debug.breakWhenValueIsAccessed'; export const BREAK_WHEN_VALUE_IS_READ_ID = 'debug.breakWhenValueIsRead'; +export const TOGGLE_EXCEPTION_BREAKPOINTS_ID = 'debug.toggleExceptionBreakpoints'; export const DEBUG_COMMAND_CATEGORY: ILocalizedString = nls.localize2('debug', 'Debug'); export const RESTART_LABEL = nls.localize2('restartDebug', "Restart"); @@ -1074,6 +1075,90 @@ KeybindingsRegistry.registerCommandAndKeybindingRule({ } }); +registerAction2(class ToggleExceptionBreakpointsAction extends Action2 { + constructor() { + super({ + id: TOGGLE_EXCEPTION_BREAKPOINTS_ID, + title: nls.localize2('toggleExceptionBreakpoints', "Toggle Exception Breakpoints"), + category: DEBUG_COMMAND_CATEGORY, + f1: true, + precondition: CONTEXT_DEBUGGERS_AVAILABLE + }); + } + + async run(accessor: ServicesAccessor): Promise { + const debugService = accessor.get(IDebugService); + const quickInputService = accessor.get(IQuickInputService); + + // Get the focused session or the first available session + const debugModel = debugService.getModel(); + const session = debugService.getViewModel().focusedSession || debugModel.getSessions()[0]; + const exceptionBreakpoints = session ? debugModel.getExceptionBreakpointsForSession(session.getId()) : debugModel.getExceptionBreakpoints(); + if (exceptionBreakpoints.length === 0) { + return; + } + + // If only one exception breakpoint type, toggle it directly + if (exceptionBreakpoints.length === 1) { + const breakpoint = exceptionBreakpoints[0]; + await debugService.enableOrDisableBreakpoints(!breakpoint.enabled, breakpoint); + return; + } + + // Multiple exception breakpoint types - show quickpick for selection + interface IExceptionBreakpointItem extends IQuickPickItem { + breakpoint: IExceptionBreakpoint; + } + + const disposables = new DisposableStore(); + const quickPick = disposables.add(quickInputService.createQuickPick()); + quickPick.placeholder = nls.localize('selectExceptionBreakpointsPlaceholder', "Pick enabled exception breakpoints"); + quickPick.canSelectMany = true; + quickPick.matchOnDescription = true; + quickPick.matchOnDetail = true; + + // Create quickpick items from exception breakpoints + quickPick.items = exceptionBreakpoints.map(bp => ({ + label: bp.label, + description: bp.description, + picked: bp.enabled, + breakpoint: bp + })); + + quickPick.selectedItems = quickPick.items.filter(item => item.picked); + + disposables.add(quickPick.onDidAccept(() => { + const selectedItems = quickPick.selectedItems; + const toEnable: IExceptionBreakpoint[] = []; + const toDisable: IExceptionBreakpoint[] = []; + + // Determine which breakpoints need to be toggled + for (const bp of exceptionBreakpoints) { + const isSelected = selectedItems.some(item => item.breakpoint === bp); + if (isSelected && !bp.enabled) { + toEnable.push(bp); + } else if (!isSelected && bp.enabled) { + toDisable.push(bp); + } + } + + // Toggle the breakpoints + const promises: Promise[] = []; + for (const bp of toEnable) { + promises.push(debugService.enableOrDisableBreakpoints(true, bp)); + } + for (const bp of toDisable) { + promises.push(debugService.enableOrDisableBreakpoints(false, bp)); + } + + Promise.all(promises).then(() => disposables.dispose()); + })); + + disposables.add(quickPick.onDidHide(() => disposables.dispose())); + quickPick.show(); + } +}); + // When there are no debug extensions, open the debug viewlet when F5 is pressed so the user can read the limitations KeybindingsRegistry.registerCommandAndKeybindingRule({ id: 'debug.openView', From d8c9852fe967748fcfc3d7bf0e329ccb33df0c15 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Wed, 6 Aug 2025 13:24:19 -0700 Subject: [PATCH 0070/2080] Don't use experimental decorators in extensions Seeing if we can compile our extensions using TS native which doesn't support these. The usage is so low that I think we can just remove them --- extensions/git-base/tsconfig.json | 1 - extensions/git/src/api/extension.ts | 16 +++------ extensions/git/tsconfig.json | 1 - .../github-authentication/tsconfig.json | 1 - extensions/github/tsconfig.json | 1 - .../microsoft-authentication/tsconfig.json | 1 - extensions/terminal-suggest/tsconfig.json | 2 -- .../src/languageFeatures/quickFix.ts | 11 +++--- .../src/logging/logger.ts | 15 ++++---- .../tsServer/logDirectoryProvider.electron.ts | 9 +++-- .../src/tsServer/spawner.ts | 9 +++-- .../src/utils/memoize.ts | 34 ------------------- .../tsconfig.json | 1 - .../web/tsconfig.json | 1 - 14 files changed, 24 insertions(+), 79 deletions(-) delete mode 100644 extensions/typescript-language-features/src/utils/memoize.ts diff --git a/extensions/git-base/tsconfig.json b/extensions/git-base/tsconfig.json index d7aed1836eeda..796a159a61c21 100644 --- a/extensions/git-base/tsconfig.json +++ b/extensions/git-base/tsconfig.json @@ -2,7 +2,6 @@ "extends": "../tsconfig.base.json", "compilerOptions": { "outDir": "./out", - "experimentalDecorators": true, "typeRoots": [ "./node_modules/@types" ] diff --git a/extensions/git/src/api/extension.ts b/extensions/git/src/api/extension.ts index bfedc0cc9093b..28d18ba612702 100644 --- a/extensions/git/src/api/extension.ts +++ b/extensions/git/src/api/extension.ts @@ -8,16 +8,8 @@ import { GitExtension, Repository, API } from './git'; import { ApiRepository, ApiImpl } from './api1'; import { Event, EventEmitter } from 'vscode'; -export function deprecated(_target: any, key: string, descriptor: any): void { - if (typeof descriptor.value !== 'function') { - throw new Error('not supported'); - } - - const fn = descriptor.value; - descriptor.value = function () { - console.warn(`Git extension API method '${key}' is deprecated.`); - return fn.apply(this, arguments); - }; +function warnDeprecated(name: string) { + console.warn(`Git extension API method '${name}' is deprecated.`); } export class GitExtensionImpl implements GitExtension { @@ -53,8 +45,8 @@ export class GitExtensionImpl implements GitExtension { } } - @deprecated async getGitPath(): Promise { + warnDeprecated('getGitPath'); if (!this._model) { throw new Error('Git model not found'); } @@ -62,8 +54,8 @@ export class GitExtensionImpl implements GitExtension { return this._model.git.path; } - @deprecated async getRepositories(): Promise { + warnDeprecated('getRepositories'); if (!this._model) { throw new Error('Git model not found'); } diff --git a/extensions/git/tsconfig.json b/extensions/git/tsconfig.json index c1179f34d2905..8bc4c420ef66e 100644 --- a/extensions/git/tsconfig.json +++ b/extensions/git/tsconfig.json @@ -2,7 +2,6 @@ "extends": "../tsconfig.base.json", "compilerOptions": { "outDir": "./out", - "experimentalDecorators": true, "typeRoots": [ "./node_modules/@types" ] diff --git a/extensions/github-authentication/tsconfig.json b/extensions/github-authentication/tsconfig.json index 17c9dbad6103b..1a65fe8109588 100644 --- a/extensions/github-authentication/tsconfig.json +++ b/extensions/github-authentication/tsconfig.json @@ -2,7 +2,6 @@ "extends": "../tsconfig.base.json", "compilerOptions": { "outDir": "./out", - "experimentalDecorators": true, "typeRoots": [ "./node_modules/@types" ], diff --git a/extensions/github/tsconfig.json b/extensions/github/tsconfig.json index f8459d0f629a1..63a4cd931d91c 100644 --- a/extensions/github/tsconfig.json +++ b/extensions/github/tsconfig.json @@ -5,7 +5,6 @@ "moduleResolution": "NodeNext", "outDir": "./out", "skipLibCheck": true, - "experimentalDecorators": true, "allowSyntheticDefaultImports": false, "typeRoots": [ "./node_modules/@types" diff --git a/extensions/microsoft-authentication/tsconfig.json b/extensions/microsoft-authentication/tsconfig.json index dc4571cacdab9..e36d26389b5aa 100644 --- a/extensions/microsoft-authentication/tsconfig.json +++ b/extensions/microsoft-authentication/tsconfig.json @@ -2,7 +2,6 @@ "extends": "../tsconfig.base.json", "compilerOptions": { "baseUrl": ".", - "experimentalDecorators": true, "module": "commonjs", "moduleResolution": "node", "noFallthroughCasesInSwitch": true, diff --git a/extensions/terminal-suggest/tsconfig.json b/extensions/terminal-suggest/tsconfig.json index a61b7c7846936..f1439c3281921 100644 --- a/extensions/terminal-suggest/tsconfig.json +++ b/extensions/terminal-suggest/tsconfig.json @@ -3,11 +3,9 @@ "compilerOptions": { "outDir": "./out", "esModuleInterop": true, - "experimentalDecorators": true, "types": [ "node" ], - // Needed to suppress warnings in upstream completions "noImplicitReturns": false, "noUnusedParameters": false diff --git a/extensions/typescript-language-features/src/languageFeatures/quickFix.ts b/extensions/typescript-language-features/src/languageFeatures/quickFix.ts index 8da3ab3ee922f..e32727befbdfd 100644 --- a/extensions/typescript-language-features/src/languageFeatures/quickFix.ts +++ b/extensions/typescript-language-features/src/languageFeatures/quickFix.ts @@ -12,13 +12,13 @@ import type * as Proto from '../tsServer/protocol/protocol'; import * as typeConverters from '../typeConverters'; import { ClientCapability, ITypeScriptServiceClient } from '../typescriptService'; import { nulToken } from '../utils/cancellation'; -import { memoize } from '../utils/memoize'; +import { Lazy } from '../utils/lazy'; import { equals } from '../utils/objects'; import { DiagnosticsManager } from './diagnostics'; import FileConfigurationManager from './fileConfigurationManager'; import { applyCodeActionCommands, getEditForCodeAction } from './util/codeAction'; +import { CompositeCommand, EditorChatFollowUp, EditorChatFollowUp_Args, Expand } from './util/copilot'; import { conditionalRegistration, requireSomeCapability } from './util/dependentRegistration'; -import { Expand, EditorChatFollowUp_Args, CompositeCommand, EditorChatFollowUp } from './util/copilot'; type ApplyCodeActionCommand_args = { readonly document: vscode.TextDocument; @@ -199,17 +199,16 @@ class SupportedCodeActionProvider { ) { } public async getFixableDiagnosticsForContext(diagnostics: readonly vscode.Diagnostic[]): Promise { - const fixableCodes = await this.fixableDiagnosticCodes; + const fixableCodes = await this.fixableDiagnosticCodes.value; return DiagnosticsSet.from( diagnostics.filter(diagnostic => typeof diagnostic.code !== 'undefined' && fixableCodes.has(diagnostic.code + ''))); } - @memoize - private get fixableDiagnosticCodes(): Thenable> { + private readonly fixableDiagnosticCodes = new Lazy>>(() => { return this.client.execute('getSupportedCodeFixes', null, nulToken) .then(response => response.type === 'response' ? response.body || [] : []) .then(codes => new Set(codes)); - } + }); } class TypeScriptQuickFixProvider implements vscode.CodeActionProvider { diff --git a/extensions/typescript-language-features/src/logging/logger.ts b/extensions/typescript-language-features/src/logging/logger.ts index 33139b1553701..1d33a75a30b84 100644 --- a/extensions/typescript-language-features/src/logging/logger.ts +++ b/extensions/typescript-language-features/src/logging/logger.ts @@ -4,25 +4,24 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import { memoize } from '../utils/memoize'; +import { Lazy } from '../utils/lazy'; export class Logger { - @memoize - private get output(): vscode.LogOutputChannel { + private readonly output = new Lazy(() => { return vscode.window.createOutputChannel('TypeScript', { log: true }); - } + }); public get logLevel(): vscode.LogLevel { - return this.output.logLevel; + return this.output.value.logLevel; } public info(message: string, ...args: any[]): void { - this.output.info(message, ...args); + this.output.value.info(message, ...args); } public trace(message: string, ...args: any[]): void { - this.output.trace(message, ...args); + this.output.value.trace(message, ...args); } public error(message: string, data?: any): void { @@ -30,6 +29,6 @@ export class Logger { if (data && data.message === 'No content available.') { return; } - this.output.error(message, ...(data ? [data] : [])); + this.output.value.error(message, ...(data ? [data] : [])); } } diff --git a/extensions/typescript-language-features/src/tsServer/logDirectoryProvider.electron.ts b/extensions/typescript-language-features/src/tsServer/logDirectoryProvider.electron.ts index 69f9515211cfe..bc3235bee6dc5 100644 --- a/extensions/typescript-language-features/src/tsServer/logDirectoryProvider.electron.ts +++ b/extensions/typescript-language-features/src/tsServer/logDirectoryProvider.electron.ts @@ -6,8 +6,8 @@ import * as fs from 'fs'; import * as path from 'path'; import * as vscode from 'vscode'; -import { memoize } from '../utils/memoize'; import { ILogDirectoryProvider } from './logDirectoryProvider'; +import { Lazy } from '../utils/lazy'; export class NodeLogDirectoryProvider implements ILogDirectoryProvider { public constructor( @@ -15,7 +15,7 @@ export class NodeLogDirectoryProvider implements ILogDirectoryProvider { ) { } public getNewLogDirectory(): vscode.Uri | undefined { - const root = this.logDirectory(); + const root = this.logDirectory.value; if (root) { try { return vscode.Uri.file(fs.mkdtempSync(path.join(root, `tsserver-log-`))); @@ -26,8 +26,7 @@ export class NodeLogDirectoryProvider implements ILogDirectoryProvider { return undefined; } - @memoize - private logDirectory(): string | undefined { + private readonly logDirectory = new Lazy(() => { try { const path = this.context.logPath; if (!fs.existsSync(path)) { @@ -37,5 +36,5 @@ export class NodeLogDirectoryProvider implements ILogDirectoryProvider { } catch { return undefined; } - } + }); } diff --git a/extensions/typescript-language-features/src/tsServer/spawner.ts b/extensions/typescript-language-features/src/tsServer/spawner.ts index aac3186631e28..944ff393c05f6 100644 --- a/extensions/typescript-language-features/src/tsServer/spawner.ts +++ b/extensions/typescript-language-features/src/tsServer/spawner.ts @@ -10,7 +10,6 @@ import { TelemetryReporter } from '../logging/telemetry'; import Tracer from '../logging/tracer'; import { OngoingRequestCancellerFactory } from '../tsServer/cancellation'; import { ClientCapabilities, ClientCapability, ServerType } from '../typescriptService'; -import { memoize } from '../utils/memoize'; import { isWeb, isWebAndHasSharedArrayBuffers } from '../utils/platform'; import { API } from './api'; import { ILogDirectoryProvider } from './logDirectoryProvider'; @@ -20,6 +19,7 @@ import { GetErrRoutingTsServer, ITypeScriptServer, SingleTsServer, SyntaxRouting import { TypeScriptVersionManager } from './versionManager'; import { ITypeScriptVersionProvider, TypeScriptVersion } from './versionProvider'; import { NodeVersionManager } from './nodeManager'; +import { Lazy } from '../utils/lazy'; const enum CompositeServerType { /** Run a single server that handles all commands */ @@ -37,10 +37,9 @@ const enum CompositeServerType { export class TypeScriptServerSpawner { - @memoize - public static get tsServerLogOutputChannel(): vscode.OutputChannel { + public static readonly tsServerLogOutputChannel = new Lazy(() => { return vscode.window.createOutputChannel(vscode.l10n.t("TypeScript Server Log")); - } + }); public constructor( private readonly _versionProvider: ITypeScriptVersionProvider, @@ -223,7 +222,7 @@ export class TypeScriptServerSpawner { if (TypeScriptServerSpawner.isLoggingEnabled(configuration)) { if (isWeb()) { args.push('--logVerbosity', TsServerLogLevel.toString(configuration.tsServerLogLevel)); - tsServerLog = { type: 'output', output: TypeScriptServerSpawner.tsServerLogOutputChannel }; + tsServerLog = { type: 'output', output: TypeScriptServerSpawner.tsServerLogOutputChannel.value }; } else { const logDir = this._logDirectoryProvider.getNewLogDirectory(); if (logDir) { diff --git a/extensions/typescript-language-features/src/utils/memoize.ts b/extensions/typescript-language-features/src/utils/memoize.ts deleted file mode 100644 index 12ce836dd0dd0..0000000000000 --- a/extensions/typescript-language-features/src/utils/memoize.ts +++ /dev/null @@ -1,34 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -export function memoize(_target: any, key: string, descriptor: any) { - let fnKey: string | undefined; - let fn: Function | undefined; - - if (typeof descriptor.value === 'function') { - fnKey = 'value'; - fn = descriptor.value; - } else if (typeof descriptor.get === 'function') { - fnKey = 'get'; - fn = descriptor.get; - } else { - throw new Error('not supported'); - } - - const memoizeKey = `$memoize$${key}`; - - descriptor[fnKey] = function (...args: any[]) { - if (!this.hasOwnProperty(memoizeKey)) { - Object.defineProperty(this, memoizeKey, { - configurable: false, - enumerable: false, - writable: false, - value: fn!.apply(this, args) - }); - } - - return this[memoizeKey]; - }; -} diff --git a/extensions/typescript-language-features/tsconfig.json b/extensions/typescript-language-features/tsconfig.json index 776a71efaf859..c34a9ffb7bf82 100644 --- a/extensions/typescript-language-features/tsconfig.json +++ b/extensions/typescript-language-features/tsconfig.json @@ -3,7 +3,6 @@ "compilerOptions": { "outDir": "./out", "esModuleInterop": true, - "experimentalDecorators": true, "types": [ "node" ] diff --git a/extensions/typescript-language-features/web/tsconfig.json b/extensions/typescript-language-features/web/tsconfig.json index fce002fbadc88..1cd5916402384 100644 --- a/extensions/typescript-language-features/web/tsconfig.json +++ b/extensions/typescript-language-features/web/tsconfig.json @@ -3,7 +3,6 @@ "compilerOptions": { "outDir": "../../out", "esModuleInterop": true, - "experimentalDecorators": true, "types": [ "node" ] From b60739fef2a7f4c1dfa709018bc813b981989ccf Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Wed, 6 Aug 2025 13:25:55 -0700 Subject: [PATCH 0071/2080] Add jq to safe commands Fixes #259668 --- .../chatAgentTools/common/terminalChatAgentToolsConfiguration.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalChatAgentToolsConfiguration.ts b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalChatAgentToolsConfiguration.ts index 65bcf6d15b97a..a93ed44af915f 100644 --- a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalChatAgentToolsConfiguration.ts +++ b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/common/terminalChatAgentToolsConfiguration.ts @@ -121,6 +121,7 @@ export const terminalChatAgentToolsConfiguration: IStringDictionary Date: Wed, 6 Aug 2025 13:28:39 -0700 Subject: [PATCH 0072/2080] Ensure shell type is reported before we exit SI early Fixes #260186 --- .../common/scripts/shellIntegration-rc.zsh | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/vs/workbench/contrib/terminal/common/scripts/shellIntegration-rc.zsh b/src/vs/workbench/contrib/terminal/common/scripts/shellIntegration-rc.zsh index 1f521d4a684d0..028735b63ddde 100644 --- a/src/vs/workbench/contrib/terminal/common/scripts/shellIntegration-rc.zsh +++ b/src/vs/workbench/contrib/terminal/common/scripts/shellIntegration-rc.zsh @@ -68,6 +68,15 @@ if [ -n "${VSCODE_ENV_APPEND:-}" ]; then unset VSCODE_ENV_APPEND fi +# Report prompt type +if [ -n "$ZSH" ] && [ -n "$ZSH_VERSION" ] && (( ${+functions[omz]} )) ; then + builtin printf '\e]633;P;PromptType=oh-my-zsh\a' +elif [ -n "$STARSHIP_SESSION_KEY" ]; then + builtin printf '\e]633;P;PromptType=starship\a' +elif [ -n "$P9K_SSH" ] || [ -n "$P9K_TTY" ]; then + builtin printf '\e]633;P;PromptType=p10k\a' +fi + # Shell integration was disabled by the shell, exit without warning assuming either the shell has # explicitly disabled shell integration as it's incompatible or it implements the protocol. if [ -z "$VSCODE_SHELL_INTEGRATION" ]; then @@ -118,15 +127,6 @@ IFS=',' read -rA envVarsToReport <<< "$__vscode_shell_env_reporting" builtin printf "\e]633;P;ContinuationPrompt=%s\a" "$(echo "$PS2" | sed 's/\x1b/\\\\x1b/g')" -# Report prompt type -if [ -n "$ZSH" ] && [ -n "$ZSH_VERSION" ] && (( ${+functions[omz]} )) ; then - builtin printf '\e]633;P;PromptType=oh-my-zsh\a' -elif [ -n "$STARSHIP_SESSION_KEY" ]; then - builtin printf '\e]633;P;PromptType=starship\a' -elif [ -n "$P9K_SSH" ] || [ -n "$P9K_TTY" ]; then - builtin printf '\e]633;P;PromptType=p10k\a' -fi - # Report this shell supports rich command detection builtin printf '\e]633;P;HasRichCommandDetection=True\a' From 2baf1b4cdecad52727208420a1624d0c69d92258 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Wed, 6 Aug 2025 14:32:43 -0700 Subject: [PATCH 0073/2080] Runtime fixes for stage 3 decorators --- extensions/git-base/src/decorators.ts | 18 +++--------------- extensions/git/src/commands.ts | 8 ++++---- extensions/git/src/decorators.ts | 20 ++++---------------- extensions/github/src/util.ts | 20 ++++---------------- 4 files changed, 15 insertions(+), 51 deletions(-) diff --git a/extensions/git-base/src/decorators.ts b/extensions/git-base/src/decorators.ts index f7c25b24ef9bf..067d32cdb5ffa 100644 --- a/extensions/git-base/src/decorators.ts +++ b/extensions/git-base/src/decorators.ts @@ -48,22 +48,10 @@ function _throttle(fn: Function, key: string): Function { } function decorate(decorator: (fn: Function, key: string) => Function): Function { - return (_target: any, key: string, descriptor: any) => { - let fnKey: string | null = null; - let fn: Function | null = null; - - if (typeof descriptor.value === 'function') { - fnKey = 'value'; - fn = descriptor.value; - } else if (typeof descriptor.get === 'function') { - fnKey = 'get'; - fn = descriptor.get; - } - - if (!fn || !fnKey) { + return function (original: any, context: ClassMethodDecoratorContext) { + if (context.kind !== 'method') { throw new Error('not supported'); } - - descriptor[fnKey] = decorator(fn, key); + return decorator(original, context.name.toString()); }; } diff --git a/extensions/git/src/commands.ts b/extensions/git/src/commands.ts index 55b0a8ec016bb..a47d56b1106d0 100644 --- a/extensions/git/src/commands.ts +++ b/extensions/git/src/commands.ts @@ -363,12 +363,12 @@ interface ScmCommand { const Commands: ScmCommand[] = []; function command(commandId: string, options: ScmCommandOptions = {}): Function { - return (_target: any, key: string, descriptor: any) => { - if (!(typeof descriptor.value === 'function')) { + return (value: any, context: ClassMethodDecoratorContext) => { + if (context.kind !== 'method') { throw new Error('not supported'); } - - Commands.push({ commandId, key, method: descriptor.value, options }); + const key = context.name.toString(); + Commands.push({ commandId, key, method: value, options }); }; } diff --git a/extensions/git/src/decorators.ts b/extensions/git/src/decorators.ts index f89ff2327e95f..cd1c7d72d3bc2 100644 --- a/extensions/git/src/decorators.ts +++ b/extensions/git/src/decorators.ts @@ -6,23 +6,11 @@ import { done } from './util'; function decorate(decorator: (fn: Function, key: string) => Function): Function { - return (_target: any, key: string, descriptor: any) => { - let fnKey: string | null = null; - let fn: Function | null = null; - - if (typeof descriptor.value === 'function') { - fnKey = 'value'; - fn = descriptor.value; - } else if (typeof descriptor.get === 'function') { - fnKey = 'get'; - fn = descriptor.get; + return function (original: any, context: ClassMethodDecoratorContext) { + if (context.kind === 'method' || context.kind === 'getter' || context.kind === 'setter') { + return decorator(original, context.name.toString()); } - - if (!fn || !fnKey) { - throw new Error('not supported'); - } - - descriptor[fnKey] = decorator(fn, key); + throw new Error('not supported'); }; } diff --git a/extensions/github/src/util.ts b/extensions/github/src/util.ts index a06eeba869249..d2ccc426170b6 100644 --- a/extensions/github/src/util.ts +++ b/extensions/github/src/util.ts @@ -24,23 +24,11 @@ export class DisposableStore { } function decorate(decorator: (fn: Function, key: string) => Function): Function { - return (_target: any, key: string, descriptor: any) => { - let fnKey: string | null = null; - let fn: Function | null = null; - - if (typeof descriptor.value === 'function') { - fnKey = 'value'; - fn = descriptor.value; - } else if (typeof descriptor.get === 'function') { - fnKey = 'get'; - fn = descriptor.get; + return function (original: any, context: ClassMethodDecoratorContext) { + if (context.kind === 'method' || context.kind === 'getter' || context.kind === 'setter') { + return decorator(original, context.name.toString()); } - - if (!fn || !fnKey) { - throw new Error('not supported'); - } - - descriptor[fnKey] = decorator(fn, key); + throw new Error('not supported'); }; } From fc965dd3f6d163e1f6ee2f890982f8c20ab92dc0 Mon Sep 17 00:00:00 2001 From: Martin Aeschlimann Date: Wed, 6 Aug 2025 23:36:41 +0200 Subject: [PATCH 0074/2080] fixes --- .../chat/browser/actions/chatActions.ts | 7 ++- .../contrib/chat/browser/chatWidget.ts | 2 +- .../contrib/chat/common/chatModes.ts | 10 ++-- .../promptHeaderAutocompletion.ts | 4 +- .../promptHeaderDiagnosticsProvider.ts | 46 +++++++++++-------- .../chat/test/common/mockChatModeService.ts | 6 ++- .../parsers/textModelPromptParser.test.ts | 6 +-- 7 files changed, 46 insertions(+), 35 deletions(-) diff --git a/src/vs/workbench/contrib/chat/browser/actions/chatActions.ts b/src/vs/workbench/contrib/chat/browser/actions/chatActions.ts index d18fb50415544..4c3d79316fba5 100644 --- a/src/vs/workbench/contrib/chat/browser/actions/chatActions.ts +++ b/src/vs/workbench/contrib/chat/browser/actions/chatActions.ts @@ -121,7 +121,7 @@ export const CHAT_CONFIG_MENU_ID = new MenuId('workbench.chat.menu.config'); const OPEN_CHAT_QUOTA_EXCEEDED_DIALOG = 'workbench.action.chat.openQuotaExceededDialog'; abstract class OpenChatGlobalAction extends Action2 { - constructor(overrides: Pick, private readonly mode?: ChatModeKind) { + constructor(overrides: Pick, private readonly mode?: IChatMode) { super({ ...overrides, icon: Codicon.copilot, @@ -159,8 +159,7 @@ abstract class OpenChatGlobalAction extends Action2 { return; } - const switchToModeInput = opts?.mode ?? this.mode; - const switchToMode = switchToModeInput && (chatModeService.findModeById(switchToModeInput) ?? chatModeService.findModeByName(switchToModeInput)); + const switchToMode = (opts?.mode ? chatModeService.findModeByName(opts?.mode) : undefined) ?? this.mode; if (switchToMode) { await this.handleSwitchToMode(switchToMode, chatWidget, instaService, commandService); } @@ -276,7 +275,7 @@ abstract class ModeOpenChatGlobalAction extends OpenChatGlobalAction { id: getOpenChatActionIdForMode(mode), title: localize2('openChatMode', "Open Chat ({0})", mode.name), keybinding - }, mode.kind); + }, mode); } } diff --git a/src/vs/workbench/contrib/chat/browser/chatWidget.ts b/src/vs/workbench/contrib/chat/browser/chatWidget.ts index 3e0f41d225dc7..28204d6cab0a4 100644 --- a/src/vs/workbench/contrib/chat/browser/chatWidget.ts +++ b/src/vs/workbench/contrib/chat/browser/chatWidget.ts @@ -2111,7 +2111,7 @@ export class ChatWidget extends Disposable implements IChatWidget { // switch to appropriate chat mode if needed if (mode && mode !== this.input.currentModeKind) { // Find the mode object to get its kind - const modeObject = this.chatModeService.findModeById(mode); + const modeObject = this.chatModeService.findModeByName(mode); const modeKind = modeObject?.kind ?? ChatModeKind.Agent; // Default to Agent for custom modes const chatModeCheck = await this.instantiationService.invokeFunction(handleModeSwitch, this.input.currentModeKind, modeKind, this.viewModel?.model.getRequests().length ?? 0, this.viewModel?.model.editingSession); diff --git a/src/vs/workbench/contrib/chat/common/chatModes.ts b/src/vs/workbench/contrib/chat/common/chatModes.ts index 5ef9f8da279c2..c44b47ff0cf8d 100644 --- a/src/vs/workbench/contrib/chat/common/chatModes.ts +++ b/src/vs/workbench/contrib/chat/common/chatModes.ts @@ -179,8 +179,12 @@ export class ChatModeService extends Disposable implements IChatModeService { } findModeByName(name: string): IChatMode | undefined { - const allModes = this.getFlatModes(); - return allModes.find(mode => mode.name === name); + const allModes = this.getModes(); + const builtIn = allModes.builtin.find(mode => mode.kind === name); + if (builtIn) { + return builtIn; + } + return allModes.custom.find(mode => mode.name === name); } private getBuiltinModes(): IChatMode[] { @@ -270,7 +274,7 @@ export class CustomChatMode implements IChatMode { constructor( customChatMode: ICustomChatMode ) { - this.id = customChatMode.name; + this.id = customChatMode.uri.toString(); this.name = customChatMode.name; this._descriptionObservable = observableValue('description', customChatMode.description); this._customToolsObservable = observableValue('customTools', customChatMode.tools); diff --git a/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.ts b/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.ts index 8d3507e939244..043ee15236c70 100644 --- a/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.ts +++ b/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderAutocompletion.ts @@ -221,9 +221,7 @@ export class PromptHeaderAutocompletion extends Disposable implements Completion suggestions.push(...modes.builtin.map(mode => mode.kind)); // Add custom mode IDs - if (modes.custom && modes.custom.length > 0) { - suggestions.push(...modes.custom.map(mode => mode.id)); - } + suggestions.push(...modes.custom.map(mode => mode.name)); return suggestions; } diff --git a/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderDiagnosticsProvider.ts b/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderDiagnosticsProvider.ts index 99c2492d639ba..39d39d3551d40 100644 --- a/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderDiagnosticsProvider.ts +++ b/src/vs/workbench/contrib/chat/common/promptSyntax/languageProviders/promptHeaderDiagnosticsProvider.ts @@ -19,7 +19,7 @@ import { ILanguageModelChatMetadata, ILanguageModelsService } from '../../langua import { ILanguageModelToolsService } from '../../languageModelToolsService.js'; import { localize } from '../../../../../../nls.js'; import { ChatModeKind } from '../../constants.js'; -import { IChatModeService } from '../../chatModes.js'; +import { IChatMode, IChatModeService } from '../../chatModes.js'; import { PromptModeMetadata } from '../parsers/promptHeader/metadata/mode.js'; /** @@ -79,9 +79,9 @@ class PromptHeaderDiagnosticsProvider extends ProviderInstanceBase { } if (header instanceof PromptHeader) { - this.validateMode(header.metadataUtility.mode, markers); - this.validateTools(header.metadataUtility.tools, header.metadata.mode, markers); - this.validateModel(header.metadataUtility.model, header.metadata.mode, markers); + const mode = this.validateMode(header.metadataUtility.mode, markers); + this.validateTools(header.metadataUtility.tools, mode?.kind, markers); + this.validateModel(header.metadataUtility.model, mode?.kind, markers); } else if (header instanceof ModeHeader) { this.validateTools(header.metadataUtility.tools, ChatModeKind.Agent, markers); this.validateModel(header.metadataUtility.model, ChatModeKind.Agent, markers); @@ -162,7 +162,7 @@ class PromptHeaderDiagnosticsProvider extends ProviderInstanceBase { } } - validateMode(modeNode: PromptModeMetadata | undefined, markers: IMarkerData[]) { + validateMode(modeNode: PromptModeMetadata | undefined, markers: IMarkerData[]): IChatMode | undefined { if (!modeNode || modeNode.value === undefined) { return; } @@ -170,25 +170,31 @@ class PromptHeaderDiagnosticsProvider extends ProviderInstanceBase { const modeValue = modeNode.value; const modes = this.chatModeService.getModes(); - // Check if mode exists in builtin modes (by id or kind) - const isBuiltinMode = modes.builtin.some(mode => mode.id === modeValue || mode.kind === modeValue); + // Check if mode exists in builtin modes + const builtinMode = modes.builtin.find(mode => mode.kind === modeValue); + if (builtinMode) { + return builtinMode; + } // Check if mode exists in custom modes (by id) - const isCustomMode = modes.custom.some(mode => mode.id === modeValue); + const customMode = modes.custom.find(mode => mode.name === modeValue); + if (customMode) { + return customMode; + } - if (!isBuiltinMode && !isCustomMode) { - // Use mode IDs for display (for custom modes) - const availableModes = [ - ...modes.builtin.map(mode => mode.id), - ...modes.custom.map(mode => mode.id) - ]; + // Use mode IDs for display (for custom modes) + const availableModes = [ + ...modes.builtin.map(mode => mode.id), + ...modes.custom.map(mode => mode.name) + ]; + + markers.push({ + message: localize('promptHeaderDiagnosticsProvider.modeNotFound', "Unknown mode '{0}'. Available modes: {1}", modeValue, availableModes.join(', ')), + severity: MarkerSeverity.Warning, + ...modeNode.range, + }); + return undefined; - markers.push({ - message: localize('promptHeaderDiagnosticsProvider.modeNotFound', "Unknown mode '{0}'. Available modes: {1}", modeValue, availableModes.join(', ')), - severity: MarkerSeverity.Warning, - ...modeNode.range, - }); - } } /** diff --git a/src/vs/workbench/contrib/chat/test/common/mockChatModeService.ts b/src/vs/workbench/contrib/chat/test/common/mockChatModeService.ts index 2940d1563afe7..199388705484e 100644 --- a/src/vs/workbench/contrib/chat/test/common/mockChatModeService.ts +++ b/src/vs/workbench/contrib/chat/test/common/mockChatModeService.ts @@ -23,7 +23,11 @@ export class MockChatModeService implements IChatModeService { } findModeByName(name: string): IChatMode | undefined { - return this.getFlatModes().find(mode => mode.name === name); + const builtIn = this._modes.builtin.find(mode => mode.kind === name); + if (builtIn) { + return builtIn; + } + return this._modes.custom.find(mode => mode.name === name); } private getFlatModes(): IChatMode[] { diff --git a/src/vs/workbench/contrib/chat/test/common/promptSyntax/parsers/textModelPromptParser.test.ts b/src/vs/workbench/contrib/chat/test/common/promptSyntax/parsers/textModelPromptParser.test.ts index 16d96501500ff..7cbdcee6eccd5 100644 --- a/src/vs/workbench/contrib/chat/test/common/promptSyntax/parsers/textModelPromptParser.test.ts +++ b/src/vs/workbench/contrib/chat/test/common/promptSyntax/parsers/textModelPromptParser.test.ts @@ -1309,14 +1309,14 @@ suite('TextModelPromptParser', () => { }); test('custom mode with tools', async () => { - const customModeId = 'myCustomMode'; + const customModeName = 'myCustomMode'; const test = createTest( URI.file('/absolute/folder/and/a/filename.txt'), [ /* 01 */"---", /* 02 */"tools: [ 'tool_name3', \"tool_name4\" ] \t\t ", - /* 03 */`mode: ${customModeId}`, + /* 03 */`mode: ${customModeName}`, /* 04 */"---", /* 05 */"The cactus on my desk has a thriving Instagram account.", ], @@ -1344,7 +1344,7 @@ suite('TextModelPromptParser', () => { assert.strictEqual( mode, - customModeId, + customModeName, 'Mode metadata must have the custom mode value.', ); From 3e7a233c6482483d06f8db971249ac07259e0eb4 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Wed, 6 Aug 2025 14:38:32 -0700 Subject: [PATCH 0075/2080] Revert git api change --- extensions/git/src/api/extension.ts | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/extensions/git/src/api/extension.ts b/extensions/git/src/api/extension.ts index 28d18ba612702..bfedc0cc9093b 100644 --- a/extensions/git/src/api/extension.ts +++ b/extensions/git/src/api/extension.ts @@ -8,8 +8,16 @@ import { GitExtension, Repository, API } from './git'; import { ApiRepository, ApiImpl } from './api1'; import { Event, EventEmitter } from 'vscode'; -function warnDeprecated(name: string) { - console.warn(`Git extension API method '${name}' is deprecated.`); +export function deprecated(_target: any, key: string, descriptor: any): void { + if (typeof descriptor.value !== 'function') { + throw new Error('not supported'); + } + + const fn = descriptor.value; + descriptor.value = function () { + console.warn(`Git extension API method '${key}' is deprecated.`); + return fn.apply(this, arguments); + }; } export class GitExtensionImpl implements GitExtension { @@ -45,8 +53,8 @@ export class GitExtensionImpl implements GitExtension { } } + @deprecated async getGitPath(): Promise { - warnDeprecated('getGitPath'); if (!this._model) { throw new Error('Git model not found'); } @@ -54,8 +62,8 @@ export class GitExtensionImpl implements GitExtension { return this._model.git.path; } + @deprecated async getRepositories(): Promise { - warnDeprecated('getRepositories'); if (!this._model) { throw new Error('Git model not found'); } From 1908c48d3ce18de0fc06b5658f956129412eae3f Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Wed, 6 Aug 2025 14:52:15 -0700 Subject: [PATCH 0076/2080] Update decorator signature --- extensions/git/src/api/extension.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/extensions/git/src/api/extension.ts b/extensions/git/src/api/extension.ts index bfedc0cc9093b..d381ebc7f6496 100644 --- a/extensions/git/src/api/extension.ts +++ b/extensions/git/src/api/extension.ts @@ -8,15 +8,15 @@ import { GitExtension, Repository, API } from './git'; import { ApiRepository, ApiImpl } from './api1'; import { Event, EventEmitter } from 'vscode'; -export function deprecated(_target: any, key: string, descriptor: any): void { - if (typeof descriptor.value !== 'function') { +function deprecated(original: any, context: ClassMemberDecoratorContext) { + if (context.kind !== 'method') { throw new Error('not supported'); } - const fn = descriptor.value; - descriptor.value = function () { + const key = context.name.toString(); + return function (this: any, ...args: any[]): any { console.warn(`Git extension API method '${key}' is deprecated.`); - return fn.apply(this, arguments); + return original.apply(this, args); }; } From 4d9e43384fd547ede92f99266b2077b808a1a7f9 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Wed, 6 Aug 2025 15:12:37 -0700 Subject: [PATCH 0077/2080] Bump main build target to es2024 The es2024 library additions are now widely supported in node 22 and in modern browsers --- src/tsconfig.base.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/tsconfig.base.json b/src/tsconfig.base.json index 6d27694964882..732da287a1008 100644 --- a/src/tsconfig.base.json +++ b/src/tsconfig.base.json @@ -13,10 +13,10 @@ "exactOptionalPropertyTypes": false, "useUnknownInCatchVariables": false, "forceConsistentCasingInFileNames": true, - "target": "es2022", + "target": "ES2024", "useDefineForClassFields": false, "lib": [ - "ES2022", + "ES2024", "DOM", "DOM.Iterable", "WebWorker.ImportScripts" From 4f78bbea1f7539bfce0c9da10efefdb13018ca49 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Wed, 6 Aug 2025 15:23:26 -0700 Subject: [PATCH 0078/2080] Continue building out prepare telemetry event --- .../contrib/chat/common/chatService.ts | 1 + .../browser/tools/runInTerminalTool.ts | 66 +++++++++++++------ 2 files changed, 48 insertions(+), 19 deletions(-) diff --git a/src/vs/workbench/contrib/chat/common/chatService.ts b/src/vs/workbench/contrib/chat/common/chatService.ts index b40db0525c5cf..2c3b7bdd6a86d 100644 --- a/src/vs/workbench/contrib/chat/common/chatService.ts +++ b/src/vs/workbench/contrib/chat/common/chatService.ts @@ -288,6 +288,7 @@ export interface IChatTerminalToolInvocationData { /** Message for model recommending the use of an alternative tool */ alternativeRecommendation?: string; language: string; + terminalToolSessionId: string; } /** diff --git a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts index bfe1083bb02cd..7d666fdf6665d 100644 --- a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts +++ b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts @@ -195,6 +195,8 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { const language = os === OperatingSystem.Windows ? 'pwsh' : 'sh'; const instance = context.chatSessionId ? this._sessionTerminalAssociations.get(context.chatSessionId)?.instance : undefined; + const terminalToolSessionId = generateUuid(); + let toolEditedCommand: string | undefined = await this._rewriteCommandIfNeeded(args, instance, shell); if (toolEditedCommand === args.command) { toolEditedCommand = undefined; @@ -241,7 +243,16 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { } // Send telemetry about auto approval process - this._sendTelemetryPrepare(actualCommand, shell, os, subCommandResults, commandLineResult, subCommands, inlineSubCommands); + this._sendTelemetryPrepare({ + terminalToolSessionId, + commandLine: actualCommand, + shell, + os, + subCommandResults, + commandLineResult, + subCommands, + inlineSubCommands + }); // Add a disclaimer warning about prompt injection for common commands that return // content from the web @@ -268,6 +279,7 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { presentation, toolSpecificData: { kind: 'terminal', + terminalToolSessionId, commandLine: { original: args.command, toolEdited: toolEditedCommand @@ -400,6 +412,7 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { this._logService.debug(`RunInTerminalTool: Finished polling \`${outputAndIdle?.output.length}\` lines of output in \`${outputAndIdle?.pollDurationMs}\``); const timingExecuteMs = Date.now() - timingStart; this._sendTelemetryInvoke(toolTerminal.instance, { + terminalToolSessionId: toolSpecificData.terminalToolSessionId, didUserEditCommand, didToolEditCommand, shellIntegrationQuality: toolTerminal.shellIntegrationQuality, @@ -468,6 +481,7 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { store.dispose(); const timingExecuteMs = Date.now() - timingStart; this._sendTelemetryInvoke(toolTerminal.instance, { + terminalToolSessionId: toolSpecificData.terminalToolSessionId, didUserEditCommand, didToolEditCommand, isBackground: false, @@ -688,7 +702,16 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { } } - private _sendTelemetryPrepare(commandLine: string, shell: string, os: OperatingSystem, subCommandResults: Array<{ result: ICommandApprovalResult; reason: string }>, commandLineResult: { result: ICommandApprovalResult; reason: string }, subCommands: string[], inlineSubCommands: string[]) { + private _sendTelemetryPrepare(state: { + terminalToolSessionId: string | undefined; + commandLine: string; + shell: string; + os: OperatingSystem; + subCommandResults: Array<{ result: ICommandApprovalResult; reason: string }>; + commandLineResult: { result: ICommandApprovalResult; reason: string }; + subCommands: string[]; + inlineSubCommands: string[]; + }) { // Count approval types for sub-commands let subCommandsApproved = 0; let subCommandsDenied = 0; @@ -696,7 +719,7 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { let subCommandsRegexApproved = 0; let subCommandsDefaultApproved = 0; - for (const result of subCommandResults) { + for (const result of state.subCommandResults) { switch (result.result) { case 'approved': subCommandsApproved++; @@ -718,17 +741,17 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { // Determine command line approval type let commandLineRegexApproved = false; let commandLineDefaultApproved = false; - if (commandLineResult.result === 'approved') { - commandLineRegexApproved = commandLineResult.reason.includes('allow list rule: /'); + if (state.commandLineResult.result === 'approved') { + commandLineRegexApproved = state.commandLineResult.reason.includes('allow list rule: /'); commandLineDefaultApproved = !commandLineRegexApproved; } // Calculate command and argument metrics - const firstCommand = subCommands[0]?.trim().split(/\s+/)[0] || ''; - const argCount = commandLine.trim().split(/\s+/).length - 1; + const firstCommand = state.subCommands[0]?.trim().split(/\s+/)[0] || ''; + const argCount = state.commandLine.trim().split(/\s+/).length - 1; type TelemetryEvent = { - terminalSessionId: string; + terminalToolSessionId: string | undefined; // Overall approval status overallApproved: 0 | 1; @@ -760,7 +783,7 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { owner: 'tyriar'; comment: 'Understanding the auto approval behavior of the runInTerminal tool'; - terminalSessionId: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'The session ID of the terminal instance.' }; + terminalToolSessionId: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'The session ID for this particular terminal tool invocation.' }; overallApproved: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'Whether the overall command was auto-approved' }; overallDenied: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'Whether the overall command was denied by deny list' }; @@ -788,45 +811,46 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { let overallApproved = false; let overallDenied = false; - if (subCommandResults.some(e => e.result === 'denied')) { + if (state.subCommandResults.some(e => e.result === 'denied')) { overallDenied = true; - } else if (commandLineResult.result === 'denied') { + } else if (state.commandLineResult.result === 'denied') { overallDenied = true; } else { - if (subCommandResults.every(e => e.result === 'approved')) { + if (state.subCommandResults.every(e => e.result === 'approved')) { overallApproved = true; - } else if (commandLineResult.result === 'approved') { + } else if (state.commandLineResult.result === 'approved') { overallApproved = true; } } this._telemetryService.publicLog2('toolUse.runInTerminal.prepare', { - terminalSessionId: 'prepare-phase', // No terminal session available yet during prepare + terminalToolSessionId: state.terminalToolSessionId, overallApproved: overallApproved ? 1 : 0, overallDenied: overallDenied ? 1 : 0, - subCommandCount: subCommands.length, + subCommandCount: state.subCommands.length, subCommandsApproved, subCommandsDenied, subCommandsNoMatch, subCommandsRegexApproved, subCommandsDefaultApproved, - commandLineApproved: commandLineResult.result === 'approved' ? 1 : 0, - commandLineDenied: commandLineResult.result === 'denied' ? 1 : 0, + commandLineApproved: state.commandLineResult.result === 'approved' ? 1 : 0, + commandLineDenied: state.commandLineResult.result === 'denied' ? 1 : 0, commandLineRegexApproved: commandLineRegexApproved ? 1 : 0, commandLineDefaultApproved: commandLineDefaultApproved ? 1 : 0, - inlineSubCommandCount: inlineSubCommands.length, + inlineSubCommandCount: state.inlineSubCommands.length, - commandLength: commandLine.length, + commandLength: state.commandLine.length, argCount, firstCommand, }); } private _sendTelemetryInvoke(instance: ITerminalInstance, state: { + terminalToolSessionId: string | undefined; didUserEditCommand: boolean; didToolEditCommand: boolean; error: string | undefined; @@ -844,6 +868,7 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { }) { type TelemetryEvent = { terminalSessionId: string; + terminalToolSessionId: string | undefined; result: string; strategy: 0 | 1 | 2; @@ -865,6 +890,7 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { comment: 'Understanding the usage of the runInTerminal tool'; terminalSessionId: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'The session ID of the terminal instance.' }; + terminalToolSessionId: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'The session ID for this particular terminal tool invocation.' }; result: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'Whether the tool ran successfully, or the type of error' }; strategy: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'What strategy was used to execute the command (0=none, 1=basic, 2=rich)' }; @@ -883,6 +909,8 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { }; this._telemetryService.publicLog2('toolUse.runInTerminal', { terminalSessionId: instance.sessionId, + terminalToolSessionId: state.terminalToolSessionId, + result: state.error ?? 'success', strategy: state.shellIntegrationQuality === ShellIntegrationQuality.Rich ? 2 : state.shellIntegrationQuality === ShellIntegrationQuality.Basic ? 1 : 0, userEditedCommand: state.didUserEditCommand ? 1 : 0, From 3cef167a29bb4501247c72c77dff14ca1dd8c195 Mon Sep 17 00:00:00 2001 From: Justin Chen <54879025+justschen@users.noreply.github.com> Date: Wed, 6 Aug 2025 15:26:41 -0700 Subject: [PATCH 0079/2080] setting for showing thinking (#260184) --- src/vs/workbench/contrib/chat/browser/chat.contribution.ts | 6 ++++++ src/vs/workbench/contrib/chat/browser/chatListRenderer.ts | 2 +- src/vs/workbench/contrib/chat/common/constants.ts | 1 + 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/vs/workbench/contrib/chat/browser/chat.contribution.ts b/src/vs/workbench/contrib/chat/browser/chat.contribution.ts index a05220dcd3cab..e294e6d7dd82f 100644 --- a/src/vs/workbench/contrib/chat/browser/chat.contribution.ts +++ b/src/vs/workbench/contrib/chat/browser/chat.contribution.ts @@ -558,6 +558,12 @@ configurationRegistry.registerConfiguration({ default: true, description: nls.localize('chat.tools.useTreePicker', "Use the new Quick Tree-based tools picker instead of the Quick Pick-based one. Provides better hierarchical organization of tools and tool sets with collapsible sections, improved visual hierarchy, and native tree interactions."), tags: ['experimental'], + }, + [ChatConfiguration.ShowThinking]: { + type: 'boolean', + default: false, + description: nls.localize('chat.agent.showThinking', "Controls whether to show the thinking process of the model in chat responses."), + tags: ['experimental'], } } }); diff --git a/src/vs/workbench/contrib/chat/browser/chatListRenderer.ts b/src/vs/workbench/contrib/chat/browser/chatListRenderer.ts index 49c867abed562..dd29cbe78d151 100644 --- a/src/vs/workbench/contrib/chat/browser/chatListRenderer.ts +++ b/src/vs/workbench/contrib/chat/browser/chatListRenderer.ts @@ -1150,7 +1150,7 @@ export class ChatListItemRenderer extends Disposable implements ITreeRenderer(ChatConfiguration.ShowThinking) && content.value) { return this.renderThinking(context, content, templateData); } else if (content.kind === 'changesSummary') { return this.renderChangesSummary(content, context, templateData); diff --git a/src/vs/workbench/contrib/chat/common/constants.ts b/src/vs/workbench/contrib/chat/common/constants.ts index 57fdce6dcb2fa..27a18317623a8 100644 --- a/src/vs/workbench/contrib/chat/common/constants.ts +++ b/src/vs/workbench/contrib/chat/common/constants.ts @@ -12,6 +12,7 @@ export enum ChatConfiguration { EnableMath = 'chat.math.enabled', CheckpointsEnabled = 'chat.checkpoints.enabled', AgentSessionsViewLocation = 'chat.agentSessionsViewLocation', + ShowThinking = 'chat.agent.showThinking', } /** From 1e328b3b7b3c0f9ead040da67f3ab0745de3d101 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Wed, 6 Aug 2025 16:14:36 -0700 Subject: [PATCH 0080/2080] Simplify new telemetry event --- .../browser/tools/runInTerminalTool.ts | 155 +++--------------- 1 file changed, 20 insertions(+), 135 deletions(-) diff --git a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts index 7d666fdf6665d..a30fe3230e2cd 100644 --- a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts +++ b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts @@ -29,7 +29,7 @@ import type { XtermTerminal } from '../../../../terminal/browser/xterm/xtermTerm import { ITerminalProfileResolverService } from '../../../../terminal/common/terminal.js'; import { getRecommendedToolsOverRunInTerminal } from '../alternativeRecommendation.js'; import { getOutput, pollForOutputAndIdle, promptForMorePolling, racePollingOrPrompt } from '../bufferOutputPolling.js'; -import { CommandLineAutoApprover, type ICommandApprovalResult } from '../commandLineAutoApprover.js'; +import { CommandLineAutoApprover } from '../commandLineAutoApprover.js'; import { BasicExecuteStrategy } from '../executeStrategy/basicExecuteStrategy.js'; import type { ITerminalExecuteStrategy } from '../executeStrategy/executeStrategy.js'; import { NoneExecuteStrategy } from '../executeStrategy/noneExecuteStrategy.js'; @@ -218,18 +218,26 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { ]; let isAutoApproved = false; + let isDenied = false; + let autoApproveReason: 'subCommand' | 'commandLine' | undefined; if (subCommandResults.some(e => e.result === 'denied')) { this._logService.info('autoApprove: Sub-command DENIED auto approval'); + isDenied = true; + autoApproveReason = 'subCommand'; } else if (commandLineResult.result === 'denied') { this._logService.info('autoApprove: Command line DENIED auto approval'); + isDenied = true; + autoApproveReason = 'commandLine'; } else { if (subCommandResults.every(e => e.result === 'approved')) { this._logService.info('autoApprove: All sub-commands auto-approved'); + autoApproveReason = 'subCommand'; isAutoApproved = true; } else { this._logService.info('autoApprove: All sub-commands NOT auto-approved'); if (commandLineResult.result === 'approved') { this._logService.info('autoApprove: Command line auto-approved'); + autoApproveReason = 'commandLine'; isAutoApproved = true; } else { this._logService.info('autoApprove: Command line NOT auto-approved'); @@ -245,13 +253,8 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { // Send telemetry about auto approval process this._sendTelemetryPrepare({ terminalToolSessionId, - commandLine: actualCommand, - shell, - os, - subCommandResults, - commandLineResult, - subCommands, - inlineSubCommands + autoApproveResult: isAutoApproved ? 'approved' : isDenied ? 'denied' : 'manual', + autoApproveReason }); // Add a disclaimer warning about prompt injection for common commands that return @@ -704,148 +707,30 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { private _sendTelemetryPrepare(state: { terminalToolSessionId: string | undefined; - commandLine: string; - shell: string; - os: OperatingSystem; - subCommandResults: Array<{ result: ICommandApprovalResult; reason: string }>; - commandLineResult: { result: ICommandApprovalResult; reason: string }; - subCommands: string[]; - inlineSubCommands: string[]; + autoApproveResult: 'approved' | 'denied' | 'manual'; + autoApproveReason: 'subCommand' | 'commandLine' | undefined; }) { - // Count approval types for sub-commands - let subCommandsApproved = 0; - let subCommandsDenied = 0; - let subCommandsNoMatch = 0; - let subCommandsRegexApproved = 0; - let subCommandsDefaultApproved = 0; - - for (const result of state.subCommandResults) { - switch (result.result) { - case 'approved': - subCommandsApproved++; - if (result.reason.includes('allow list rule: /')) { - subCommandsRegexApproved++; - } else { - subCommandsDefaultApproved++; - } - break; - case 'denied': - subCommandsDenied++; - break; - case 'noMatch': - subCommandsNoMatch++; - break; - } - } - - // Determine command line approval type - let commandLineRegexApproved = false; - let commandLineDefaultApproved = false; - if (state.commandLineResult.result === 'approved') { - commandLineRegexApproved = state.commandLineResult.reason.includes('allow list rule: /'); - commandLineDefaultApproved = !commandLineRegexApproved; - } - - // Calculate command and argument metrics - const firstCommand = state.subCommands[0]?.trim().split(/\s+/)[0] || ''; - const argCount = state.commandLine.trim().split(/\s+/).length - 1; - type TelemetryEvent = { terminalToolSessionId: string | undefined; - // Overall approval status - overallApproved: 0 | 1; - overallDenied: 0 | 1; - - // Sub-command breakdown - subCommandCount: number; - subCommandsApproved: number; - subCommandsDenied: number; - subCommandsNoMatch: number; - subCommandsRegexApproved: number; - subCommandsDefaultApproved: number; - - // Command line approval - commandLineApproved: 0 | 1; - commandLineDenied: 0 | 1; - commandLineRegexApproved: 0 | 1; - commandLineDefaultApproved: 0 | 1; - - // Inline sub-command count - inlineSubCommandCount: number; - - // Command characteristics - commandLength: number; - argCount: number; - firstCommand: string; + autoApproveResult: string; + autoApproveReason: string | undefined; }; type TelemetryClassification = { owner: 'tyriar'; - comment: 'Understanding the auto approval behavior of the runInTerminal tool'; + comment: 'Understanding the auto approve behavior of the runInTerminal tool'; terminalToolSessionId: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'The session ID for this particular terminal tool invocation.' }; - overallApproved: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'Whether the overall command was auto-approved' }; - overallDenied: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'Whether the overall command was denied by deny list' }; - - subCommandCount: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'Number of sub-commands found in the command line' }; - subCommandsApproved: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'Number of sub-commands that were auto-approved' }; - subCommandsDenied: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'Number of sub-commands that were denied' }; - subCommandsNoMatch: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'Number of sub-commands that had no matching rules' }; - subCommandsRegexApproved: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'Number of sub-commands approved by regex rules' }; - subCommandsDefaultApproved: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'Number of sub-commands approved by default/string rules' }; - - commandLineApproved: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'Whether the full command line was auto-approved' }; - commandLineDenied: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'Whether the full command line was denied' }; - commandLineRegexApproved: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'Whether the command line was approved by a regex rule' }; - commandLineDefaultApproved: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'Whether the command line was approved by a default/string rule' }; - - inlineSubCommandCount: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'Number of inline sub-commands (command substitution) found' }; - - commandLength: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'Total length of the command line in characters' }; - argCount: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'Number of arguments in the command' }; - firstCommand: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'The first command in the command line' }; + autoApproveResult: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'Whether the command line was auto-approved' }; + autoApproveReason: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'The reason it was auto approved or denied' }; }; - // Determine overall approval status - let overallApproved = false; - let overallDenied = false; - - if (state.subCommandResults.some(e => e.result === 'denied')) { - overallDenied = true; - } else if (state.commandLineResult.result === 'denied') { - overallDenied = true; - } else { - if (state.subCommandResults.every(e => e.result === 'approved')) { - overallApproved = true; - } else if (state.commandLineResult.result === 'approved') { - overallApproved = true; - } - } - this._telemetryService.publicLog2('toolUse.runInTerminal.prepare', { terminalToolSessionId: state.terminalToolSessionId, - overallApproved: overallApproved ? 1 : 0, - overallDenied: overallDenied ? 1 : 0, - - subCommandCount: state.subCommands.length, - subCommandsApproved, - subCommandsDenied, - subCommandsNoMatch, - subCommandsRegexApproved, - subCommandsDefaultApproved, - - commandLineApproved: state.commandLineResult.result === 'approved' ? 1 : 0, - commandLineDenied: state.commandLineResult.result === 'denied' ? 1 : 0, - commandLineRegexApproved: commandLineRegexApproved ? 1 : 0, - commandLineDefaultApproved: commandLineDefaultApproved ? 1 : 0, - - inlineSubCommandCount: state.inlineSubCommands.length, - - commandLength: state.commandLine.length, - argCount, - firstCommand, + autoApproveResult: state.autoApproveResult, + autoApproveReason: state.autoApproveReason, }); } From 8573ceda738202706f072a7ff57e7fd6b96b4535 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Wed, 6 Aug 2025 16:54:00 -0700 Subject: [PATCH 0081/2080] Add is default prop --- .../contrib/chat/common/chatService.ts | 2 +- .../browser/commandLineAutoApprover.ts | 67 ++++++++++++++----- .../browser/tools/runInTerminalTool.ts | 16 ++++- 3 files changed, 65 insertions(+), 20 deletions(-) diff --git a/src/vs/workbench/contrib/chat/common/chatService.ts b/src/vs/workbench/contrib/chat/common/chatService.ts index 2c3b7bdd6a86d..40eebf5d8115c 100644 --- a/src/vs/workbench/contrib/chat/common/chatService.ts +++ b/src/vs/workbench/contrib/chat/common/chatService.ts @@ -288,7 +288,7 @@ export interface IChatTerminalToolInvocationData { /** Message for model recommending the use of an alternative tool */ alternativeRecommendation?: string; language: string; - terminalToolSessionId: string; + terminalToolSessionId?: string; } /** diff --git a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandLineAutoApprover.ts b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandLineAutoApprover.ts index 0dc300ec42c62..6e76b9bf6cbd5 100644 --- a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandLineAutoApprover.ts +++ b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandLineAutoApprover.ts @@ -6,7 +6,8 @@ import { Disposable } from '../../../../../base/common/lifecycle.js'; import type { OperatingSystem } from '../../../../../base/common/platform.js'; import { regExpLeadsToEndlessLoop } from '../../../../../base/common/strings.js'; -import { IConfigurationService } from '../../../../../platform/configuration/common/configuration.js'; +import { isObject } from '../../../../../base/common/types.js'; +import { IConfigurationService, type IConfigurationValue } from '../../../../../platform/configuration/common/configuration.js'; import { TerminalChatAgentToolsSettingId } from '../common/terminalChatAgentToolsConfiguration.js'; import { isPowerShell } from './runInTerminalHelpers.js'; @@ -14,6 +15,7 @@ interface IAutoApproveRule { regex: RegExp; regexCaseInsensitive: RegExp; sourceText: string; + isDefaultRule: boolean; } export type ICommandApprovalResult = 'approved' | 'denied' | 'noMatch'; @@ -43,6 +45,7 @@ export class CommandLineAutoApprover extends Disposable { updateConfiguration() { let configValue = this._configurationService.getValue(TerminalChatAgentToolsSettingId.AutoApprove); + const configInspectValue = this._configurationService.inspect(TerminalChatAgentToolsSettingId.AutoApprove); const deprecatedValue = this._configurationService.getValue(TerminalChatAgentToolsSettingId.DeprecatedAutoApproveCompatible); if (deprecatedValue && typeof deprecatedValue === 'object' && configValue && typeof configValue === 'object') { configValue = { @@ -56,49 +59,73 @@ export class CommandLineAutoApprover extends Disposable { allowListRules, allowListCommandLineRules, denyListCommandLineRules - } = this._mapAutoApproveConfigToRules(configValue); + } = this._mapAutoApproveConfigToRules(configValue, configInspectValue); this._allowListRules = allowListRules; this._denyListRules = denyListRules; this._allowListCommandLineRules = allowListCommandLineRules; this._denyListCommandLineRules = denyListCommandLineRules; } - isCommandAutoApproved(command: string, shell: string, os: OperatingSystem): { result: ICommandApprovalResult; reason: string } { + isCommandAutoApproved(command: string, shell: string, os: OperatingSystem): { result: ICommandApprovalResult; isDefaultRule: boolean | undefined; reason: string } { // Check the deny list to see if this command requires explicit approval for (const rule of this._denyListRules) { if (this._commandMatchesRule(rule, command, shell, os)) { - return { result: 'denied', reason: `Command '${command}' is denied by deny list rule: ${rule.sourceText}` }; + return { + result: 'denied', + isDefaultRule: rule.isDefaultRule, + reason: `Command '${command}' is denied by deny list rule: ${rule.sourceText}` + }; } } // Check the allow list to see if the command is allowed to run without explicit approval for (const rule of this._allowListRules) { if (this._commandMatchesRule(rule, command, shell, os)) { - return { result: 'approved', reason: `Command '${command}' is approved by allow list rule: ${rule.sourceText}` }; + return { + result: 'approved', + isDefaultRule: rule.isDefaultRule, + reason: `Command '${command}' is approved by allow list rule: ${rule.sourceText}` + }; } } // TODO: LLM-based auto-approval https://github.com/microsoft/vscode/issues/253267 // Fallback is always to require approval - return { result: 'noMatch', reason: `Command '${command}' has no matching auto approve entries` }; + return { + result: 'noMatch', + isDefaultRule: undefined, + reason: `Command '${command}' has no matching auto approve entries` + }; } - isCommandLineAutoApproved(commandLine: string): { result: ICommandApprovalResult; reason: string } { + isCommandLineAutoApproved(commandLine: string): { result: ICommandApprovalResult; isDefaultRule: boolean | undefined; reason: string } { // Check the deny list first to see if this command line requires explicit approval for (const rule of this._denyListCommandLineRules) { if (rule.regex.test(commandLine)) { - return { result: 'denied', reason: `Command line '${commandLine}' is denied by deny list rule: ${rule.sourceText}` }; + return { + result: 'denied', + isDefaultRule: rule.isDefaultRule, + reason: `Command line '${commandLine}' is denied by deny list rule: ${rule.sourceText}` + }; } } // Check if the full command line matches any of the allow list command line regexes for (const rule of this._allowListCommandLineRules) { if (rule.regex.test(commandLine)) { - return { result: 'approved', reason: `Command line '${commandLine}' is approved by allow list rule: ${rule.sourceText}` }; + return { + result: 'approved', + isDefaultRule: rule.isDefaultRule, + reason: `Command line '${commandLine}' is approved by allow list rule: ${rule.sourceText}` + }; } } - return { result: 'noMatch', reason: `Command line '${commandLine}' has no matching auto approve entries` }; + return { + result: 'noMatch', + isDefaultRule: undefined, + reason: `Command line '${commandLine}' has no matching auto approve entries` + }; } private _removeEnvAssignments(command: string, shell: string, os: OperatingSystem): string { @@ -141,7 +168,7 @@ export class CommandLineAutoApprover extends Disposable { return false; } - private _mapAutoApproveConfigToRules(config: unknown): { + private _mapAutoApproveConfigToRules(config: unknown, configInspectValue: IConfigurationValue>): { denyListRules: IAutoApproveRule[]; allowListRules: IAutoApproveRule[]; allowListCommandLineRules: IAutoApproveRule[]; @@ -162,13 +189,19 @@ export class CommandLineAutoApprover extends Disposable { const denyListCommandLineRules: IAutoApproveRule[] = []; Object.entries(config).forEach(([key, value]) => { + const defaultValue = configInspectValue?.default?.value; + const isDefaultRule = !!( + isObject(defaultValue) && + key in defaultValue && + (defaultValue as Record)[key] === value + ); if (typeof value === 'boolean') { const { regex, regexCaseInsensitive } = this._convertAutoApproveEntryToRegex(key); // IMPORTANT: Only true and false are used, null entries need to be ignored if (value === true) { - allowListRules.push({ regex, regexCaseInsensitive, sourceText: key }); + allowListRules.push({ regex, regexCaseInsensitive, sourceText: key, isDefaultRule }); } else if (value === false) { - denyListRules.push({ regex, regexCaseInsensitive, sourceText: key }); + denyListRules.push({ regex, regexCaseInsensitive, sourceText: key, isDefaultRule }); } } else if (typeof value === 'object' && value !== null) { // Handle object format like { approve: true/false, matchCommandLine: true/false } @@ -177,15 +210,15 @@ export class CommandLineAutoApprover extends Disposable { const { regex, regexCaseInsensitive } = this._convertAutoApproveEntryToRegex(key); if (objectValue.approve === true) { if (objectValue.matchCommandLine === true) { - allowListCommandLineRules.push({ regex, regexCaseInsensitive, sourceText: key }); + allowListCommandLineRules.push({ regex, regexCaseInsensitive, sourceText: key, isDefaultRule }); } else { - allowListRules.push({ regex, regexCaseInsensitive, sourceText: key }); + allowListRules.push({ regex, regexCaseInsensitive, sourceText: key, isDefaultRule }); } } else if (objectValue.approve === false) { if (objectValue.matchCommandLine === true) { - denyListCommandLineRules.push({ regex, regexCaseInsensitive, sourceText: key }); + denyListCommandLineRules.push({ regex, regexCaseInsensitive, sourceText: key, isDefaultRule }); } else { - denyListRules.push({ regex, regexCaseInsensitive, sourceText: key }); + denyListRules.push({ regex, regexCaseInsensitive, sourceText: key, isDefaultRule }); } } } diff --git a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts index a30fe3230e2cd..37ad61e173e4b 100644 --- a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts +++ b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts @@ -220,25 +220,32 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { let isAutoApproved = false; let isDenied = false; let autoApproveReason: 'subCommand' | 'commandLine' | undefined; - if (subCommandResults.some(e => e.result === 'denied')) { + let autoApproveDefault: boolean | undefined; + + const deniedSubCommandResult = subCommandResults.find(e => e.result === 'denied'); + if (deniedSubCommandResult) { this._logService.info('autoApprove: Sub-command DENIED auto approval'); isDenied = true; + autoApproveDefault = deniedSubCommandResult.isDefaultRule; autoApproveReason = 'subCommand'; } else if (commandLineResult.result === 'denied') { this._logService.info('autoApprove: Command line DENIED auto approval'); isDenied = true; + autoApproveDefault = commandLineResult.isDefaultRule; autoApproveReason = 'commandLine'; } else { if (subCommandResults.every(e => e.result === 'approved')) { this._logService.info('autoApprove: All sub-commands auto-approved'); autoApproveReason = 'subCommand'; isAutoApproved = true; + autoApproveDefault = subCommandResults.every(e => e.isDefaultRule); } else { this._logService.info('autoApprove: All sub-commands NOT auto-approved'); if (commandLineResult.result === 'approved') { this._logService.info('autoApprove: Command line auto-approved'); autoApproveReason = 'commandLine'; isAutoApproved = true; + autoApproveDefault = commandLineResult.isDefaultRule; } else { this._logService.info('autoApprove: Command line NOT auto-approved'); } @@ -254,7 +261,8 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { this._sendTelemetryPrepare({ terminalToolSessionId, autoApproveResult: isAutoApproved ? 'approved' : isDenied ? 'denied' : 'manual', - autoApproveReason + autoApproveReason, + autoApproveDefault, }); // Add a disclaimer warning about prompt injection for common commands that return @@ -709,12 +717,14 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { terminalToolSessionId: string | undefined; autoApproveResult: 'approved' | 'denied' | 'manual'; autoApproveReason: 'subCommand' | 'commandLine' | undefined; + autoApproveDefault: boolean | undefined; }) { type TelemetryEvent = { terminalToolSessionId: string | undefined; autoApproveResult: string; autoApproveReason: string | undefined; + autoApproveDefault: boolean | undefined; }; type TelemetryClassification = { owner: 'tyriar'; @@ -724,6 +734,7 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { autoApproveResult: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'Whether the command line was auto-approved' }; autoApproveReason: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'The reason it was auto approved or denied' }; + autoApproveDefault: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'Whether the command line was auto approved due to a default rule' }; }; this._telemetryService.publicLog2('toolUse.runInTerminal.prepare', { @@ -731,6 +742,7 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { autoApproveResult: state.autoApproveResult, autoApproveReason: state.autoApproveReason, + autoApproveDefault: state.autoApproveDefault, }); } From 27fe9fc76c2fb9e1c957c0249b89ae85880fe05c Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Thu, 7 Aug 2025 00:24:33 +0000 Subject: [PATCH 0082/2080] Fix debug console collapsing identical lines to work on text lines instead of events (#259932) * Initial plan * Implement line-based collapsing for debug console identical lines Co-authored-by: connor4312 <2230985+connor4312@users.noreply.github.com> * Fix line-based collapsing for character-by-character completed lines Co-authored-by: connor4312 <2230985+connor4312@users.noreply.github.com> * fixup --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: connor4312 <2230985+connor4312@users.noreply.github.com> Co-authored-by: Connor Peet --- .../contrib/debug/common/replModel.ts | 154 ++++++++++++++++-- .../contrib/debug/test/browser/repl.test.ts | 100 ++++++++---- 2 files changed, 214 insertions(+), 40 deletions(-) diff --git a/src/vs/workbench/contrib/debug/common/replModel.ts b/src/vs/workbench/contrib/debug/common/replModel.ts index 244edd900278e..15ed70f7993eb 100644 --- a/src/vs/workbench/contrib/debug/common/replModel.ts +++ b/src/vs/workbench/contrib/debug/common/replModel.ts @@ -304,24 +304,158 @@ export class ReplModel { return; } + this.appendOutputToRepl(session, output, sev, source); + } + + private appendOutputToRepl(session: IDebugSession, output: string, sev: severity, source?: IReplElementSource): void { + const config = this.configurationService.getValue('debug'); const previousElement = this.replElements.length ? this.replElements[this.replElements.length - 1] : undefined; - if (previousElement instanceof ReplOutputElement && previousElement.severity === sev) { - const config = this.configurationService.getValue('debug'); - if (previousElement.value === output && areSourcesEqual(previousElement.sourceData, source) && config.console.collapseIdenticalLines) { - previousElement.count++; - // No need to fire an event, just the count updates and badge will adjust automatically - return; - } + + // Handle concatenation of incomplete lines first + if (previousElement instanceof ReplOutputElement && previousElement.severity === sev && areSourcesEqual(previousElement.sourceData, source)) { if (!previousElement.value.endsWith('\n') && !previousElement.value.endsWith('\r\n') && previousElement.count === 1) { + // Concatenate with previous incomplete line + const combinedOutput = previousElement.value + output; this.replElements[this.replElements.length - 1] = new ReplOutputElement( - session, getUniqueId(), previousElement.value + output, sev, source); + session, getUniqueId(), combinedOutput, sev, source); this._onDidChangeElements.fire(undefined); + + // If the combined output now forms a complete line and collapsing is enabled, + // check if it can be collapsed with previous elements + if (config.console.collapseIdenticalLines && combinedOutput.endsWith('\n')) { + this.tryCollapseCompleteLine(sev, source); + } + + // If the combined output contains multiple lines, apply line-level collapsing + if (config.console.collapseIdenticalLines && combinedOutput.includes('\n')) { + const lines = this.splitIntoLines(combinedOutput); + if (lines.length > 1) { + this.applyLineLevelCollapsing(session, sev, source); + } + } return; } } - const element = new ReplOutputElement(session, getUniqueId(), output, sev, source); - this.addReplElement(element); + // If collapsing is enabled and the output contains line breaks, parse and collapse at line level + if (config.console.collapseIdenticalLines && output.includes('\n')) { + this.processMultiLineOutput(session, output, sev, source); + } else { + // For simple output without line breaks, use the original logic + if (previousElement instanceof ReplOutputElement && previousElement.severity === sev && areSourcesEqual(previousElement.sourceData, source)) { + if (previousElement.value === output && config.console.collapseIdenticalLines) { + previousElement.count++; + // No need to fire an event, just the count updates and badge will adjust automatically + return; + } + } + + const element = new ReplOutputElement(session, getUniqueId(), output, sev, source); + this.addReplElement(element); + } + } + + private tryCollapseCompleteLine(sev: severity, source?: IReplElementSource): void { + // Try to collapse the last element with the second-to-last if they are identical complete lines + if (this.replElements.length < 2) { + return; + } + + const lastElement = this.replElements[this.replElements.length - 1]; + const secondToLastElement = this.replElements[this.replElements.length - 2]; + + if (lastElement instanceof ReplOutputElement && + secondToLastElement instanceof ReplOutputElement && + lastElement.severity === sev && + secondToLastElement.severity === sev && + areSourcesEqual(lastElement.sourceData, source) && + areSourcesEqual(secondToLastElement.sourceData, source) && + lastElement.value === secondToLastElement.value && + lastElement.count === 1 && + lastElement.value.endsWith('\n')) { + + // Collapse the last element into the second-to-last + secondToLastElement.count += lastElement.count; + this.replElements.pop(); + this._onDidChangeElements.fire(undefined); + } + } + + private processMultiLineOutput(session: IDebugSession, output: string, sev: severity, source?: IReplElementSource): void { + // Split output into lines, preserving line endings + const lines = this.splitIntoLines(output); + + for (const line of lines) { + if (line.length === 0) { continue; } + + const previousElement = this.replElements.length ? this.replElements[this.replElements.length - 1] : undefined; + + // Check if this line can be collapsed with the previous one + if (previousElement instanceof ReplOutputElement && + previousElement.severity === sev && + areSourcesEqual(previousElement.sourceData, source) && + previousElement.value === line) { + previousElement.count++; + // No need to fire an event, just the count updates and badge will adjust automatically + } else { + const element = new ReplOutputElement(session, getUniqueId(), line, sev, source); + this.addReplElement(element); + } + } + } + + private splitIntoLines(text: string): string[] { + // Split text into lines while preserving line endings, using indexOf for efficiency + const lines: string[] = []; + let start = 0; + + while (start < text.length) { + const nextLF = text.indexOf('\n', start); + if (nextLF === -1) { + lines.push(text.substring(start)); + break; + } + lines.push(text.substring(start, nextLF + 1)); + start = nextLF + 1; + } + + return lines; + } + + private applyLineLevelCollapsing(session: IDebugSession, sev: severity, source?: IReplElementSource): void { + // Apply line-level collapsing to the last element if it contains multiple lines + const lastElement = this.replElements[this.replElements.length - 1]; + if (!(lastElement instanceof ReplOutputElement) || lastElement.severity !== sev || !areSourcesEqual(lastElement.sourceData, source)) { + return; + } + + const lines = this.splitIntoLines(lastElement.value); + if (lines.length <= 1) { + return; // No multiple lines to collapse + } + + // Remove the last element and reprocess it as multiple lines + this.replElements.pop(); + + // Process each line and try to collapse with existing elements + for (const line of lines) { + if (line.length === 0) { continue; } + + const previousElement = this.replElements.length ? this.replElements[this.replElements.length - 1] : undefined; + + // Check if this line can be collapsed with the previous one + if (previousElement instanceof ReplOutputElement && + previousElement.severity === sev && + areSourcesEqual(previousElement.sourceData, source) && + previousElement.value === line) { + previousElement.count++; + } else { + const element = new ReplOutputElement(session, getUniqueId(), line, sev, source); + this.addReplElement(element); + } + } + + this._onDidChangeElements.fire(undefined); } startGroup(session: IDebugSession, name: string, autoExpand: boolean, sourceData?: IReplElementSource): void { diff --git a/src/vs/workbench/contrib/debug/test/browser/repl.test.ts b/src/vs/workbench/contrib/debug/test/browser/repl.test.ts index 7256a35390549..041a603c63ad6 100644 --- a/src/vs/workbench/contrib/debug/test/browser/repl.test.ts +++ b/src/vs/workbench/contrib/debug/test/browser/repl.test.ts @@ -65,26 +65,9 @@ suite('Debug - REPL', () => { repl.appendToRepl(session, { output: '5\n', sev: severity.Info }); repl.appendToRepl(session, { output: '6', sev: severity.Info }); elements = repl.getReplElements(); - assert.strictEqual(elements.length, 3); - assert.strictEqual(elements[0].toString(), '1\n'); - assert.strictEqual(elements[1].toString(), '23\n45\n'); - assert.strictEqual(elements[2].toString(), '6'); + assert.deepStrictEqual(elements.map(e => e.toString()), ['1\n', '23\n', '45\n', '6']); repl.removeReplExpressions(); - repl.appendToRepl(session, { output: 'first line\n', sev: severity.Info }); - repl.appendToRepl(session, { output: 'first line\n', sev: severity.Info }); - repl.appendToRepl(session, { output: 'first line\n', sev: severity.Info }); - repl.appendToRepl(session, { output: 'second line', sev: severity.Info }); - repl.appendToRepl(session, { output: 'second line', sev: severity.Info }); - repl.appendToRepl(session, { output: 'third line', sev: severity.Info }); - elements = repl.getReplElements(); - assert.strictEqual(elements.length, 3); - assert.strictEqual(elements[0].value, 'first line\n'); - assert.strictEqual(elements[0].count, 3); - assert.strictEqual(elements[1].value, 'second line'); - assert.strictEqual(elements[1].count, 2); - assert.strictEqual(elements[2].value, 'third line'); - assert.strictEqual(elements[2].count, 1); }); test('repl output count', () => { @@ -93,19 +76,15 @@ suite('Debug - REPL', () => { repl.appendToRepl(session, { output: 'first line\n', sev: severity.Info }); repl.appendToRepl(session, { output: 'first line\n', sev: severity.Info }); repl.appendToRepl(session, { output: 'first line\n', sev: severity.Info }); - repl.appendToRepl(session, { output: 'second line', sev: severity.Info }); - repl.appendToRepl(session, { output: 'second line', sev: severity.Info }); - repl.appendToRepl(session, { output: 'third line', sev: severity.Info }); + repl.appendToRepl(session, { output: 'second line\n', sev: severity.Info }); + repl.appendToRepl(session, { output: 'second line\n', sev: severity.Info }); + repl.appendToRepl(session, { output: 'third line\n', sev: severity.Info }); const elements = repl.getReplElements(); - assert.strictEqual(elements.length, 3); - assert.strictEqual(elements[0].value, 'first line\n'); - assert.strictEqual(elements[0].toString(), 'first line\nfirst line\nfirst line\n'); - assert.strictEqual(elements[0].count, 3); - assert.strictEqual(elements[1].value, 'second line'); - assert.strictEqual(elements[1].toString(), 'second line\nsecond line'); - assert.strictEqual(elements[1].count, 2); - assert.strictEqual(elements[2].value, 'third line'); - assert.strictEqual(elements[2].count, 1); + assert.deepStrictEqual(elements.map(e => ({ value: e.value, count: e.count })), [ + { value: 'first line\n', count: 3 }, + { value: 'second line\n', count: 2 }, + { value: 'third line\n', count: 1 } + ]); }); test('repl merging', () => { @@ -234,6 +213,67 @@ suite('Debug - REPL', () => { assert.strictEqual((repl.getReplElements()[2]).value, 'second global line'); }); + test('repl identical line collapsing - character by character', () => { + const session = disposables.add(createTestSession(model)); + const repl = new ReplModel(configurationService); + + // Test case 1: Character-by-character output should NOT be collapsed + // These should print "111\n", not "(3)1" + repl.appendToRepl(session, { output: '1', sev: severity.Info }); + repl.appendToRepl(session, { output: '1', sev: severity.Info }); + repl.appendToRepl(session, { output: '1', sev: severity.Info }); + repl.appendToRepl(session, { output: '\n', sev: severity.Info }); + + let elements = repl.getReplElements(); + // Should be one element with "111\n" value, not collapsed + assert.strictEqual(elements.length, 1); + assert.strictEqual(elements[0].value, '111\n'); + assert.strictEqual(elements[0].count, 1); + + repl.removeReplExpressions(); + + // Test case 2: Character-by-character with mixed output + repl.appendToRepl(session, { output: '5', sev: severity.Info }); + repl.appendToRepl(session, { output: '5', sev: severity.Info }); + repl.appendToRepl(session, { output: '\n', sev: severity.Info }); + + elements = repl.getReplElements(); + // Should be one element with "55\n" value, not "(2)5" + assert.strictEqual(elements.length, 1); + assert.strictEqual(elements[0].value, '55\n'); + assert.strictEqual(elements[0].count, 1); + }); + + test('repl identical line collapsing - single event multiple lines', () => { + const session = disposables.add(createTestSession(model)); + const repl = new ReplModel(configurationService); + + // Test case: Single event with multiple identical lines should be collapsed + // This should be collapsed into "(2)hello" + repl.appendToRepl(session, { output: 'hello\nhello\n', sev: severity.Info }); + + const elements = repl.getReplElements(); + // Should be one collapsed element with count 2 + assert.strictEqual(elements.length, 1); + assert.strictEqual(elements[0].value, 'hello\n'); + assert.strictEqual(elements[0].count, 2); + }); + + test('repl identical line collapsing - mixed scenarios', () => { + const session = disposables.add(createTestSession(model)); + const repl = new ReplModel(configurationService); + + // Test case: Mix of single events and multi-line events + repl.appendToRepl(session, { output: 'test\n', sev: severity.Info }); + repl.appendToRepl(session, { output: 'test\ntest\n', sev: severity.Info }); + + const elements = repl.getReplElements(); + // Should be one collapsed element with count 3 + assert.strictEqual(elements.length, 1); + assert.strictEqual(elements[0].value, 'test\n'); + assert.strictEqual(elements[0].count, 3); + }); + test('repl filter', async () => { const session = disposables.add(createTestSession(model)); const repl = new ReplModel(configurationService); From ef775eb0b8f7140a35107cd882ce61d6c20b97d0 Mon Sep 17 00:00:00 2001 From: Tyler James Leonhardt <2644648+TylerLeonhardt@users.noreply.github.com> Date: Wed, 6 Aug 2025 17:57:01 -0700 Subject: [PATCH 0083/2080] Clear sign in requests based on the session returned (#260222) Also remove session requests based on the session that was returned. Fixes https://github.com/microsoft/vscode/issues/252242 --- src/vs/base/common/oauth.ts | 26 ++++++++++ src/vs/base/test/common/oauth.test.ts | 48 +++++++++++++++++++ .../api/browser/mainThreadAuthentication.ts | 1 + .../authenticationExtensionsService.ts | 19 +++++--- .../browser/authenticationMcpService.ts | 7 ++- .../authentication/common/authentication.ts | 1 + .../authenticationQueryServiceMocks.ts | 1 + 7 files changed, 95 insertions(+), 8 deletions(-) diff --git a/src/vs/base/common/oauth.ts b/src/vs/base/common/oauth.ts index 69fa62305ead0..14064315869c9 100644 --- a/src/vs/base/common/oauth.ts +++ b/src/vs/base/common/oauth.ts @@ -819,3 +819,29 @@ export function getClaimsFromJWT(token: string): IAuthorizationJWTClaims { throw new Error('Failed to parse JWT token'); } } + +/** + * Checks if two scope lists are equivalent, regardless of order. + * This is useful for comparing OAuth scopes where the order should not matter. + * + * @param scopes1 First list of scopes to compare + * @param scopes2 Second list of scopes to compare + * @returns true if the scope lists contain the same scopes (order-independent), false otherwise + * + * @example + * ```typescript + * scopesMatch(['read', 'write'], ['write', 'read']) // Returns: true + * scopesMatch(['read'], ['write']) // Returns: false + * ``` + */ +export function scopesMatch(scopes1: readonly string[], scopes2: readonly string[]): boolean { + if (scopes1.length !== scopes2.length) { + return false; + } + + // Sort both arrays for comparison to handle different orderings + const sortedScopes1 = [...scopes1].sort(); + const sortedScopes2 = [...scopes2].sort(); + + return sortedScopes1.every((scope, index) => scope === sortedScopes2[index]); +} diff --git a/src/vs/base/test/common/oauth.test.ts b/src/vs/base/test/common/oauth.test.ts index 1244d42b9ee2f..b3b1168859130 100644 --- a/src/vs/base/test/common/oauth.test.ts +++ b/src/vs/base/test/common/oauth.test.ts @@ -17,6 +17,7 @@ import { isAuthorizationTokenResponse, parseWWWAuthenticateHeader, fetchDynamicRegistration, + scopesMatch, IAuthorizationJWTClaims, IAuthorizationServerMetadata, DEFAULT_AUTH_FLOW_PORT @@ -176,6 +177,53 @@ suite('OAuth', () => { }); }); + suite('Scope Matching', () => { + test('scopesMatch should return true for identical scopes', () => { + const scopes1 = ['test', 'scopes']; + const scopes2 = ['test', 'scopes']; + assert.strictEqual(scopesMatch(scopes1, scopes2), true); + }); + + test('scopesMatch should return true for scopes in different order', () => { + const scopes1 = ['6f1cc985-85e8-487e-b0dd-aa633302a731/.default', 'VSCODE_TENANT:organizations']; + const scopes2 = ['VSCODE_TENANT:organizations', '6f1cc985-85e8-487e-b0dd-aa633302a731/.default']; + assert.strictEqual(scopesMatch(scopes1, scopes2), true); + }); + + test('scopesMatch should return false for different scopes', () => { + const scopes1 = ['test', 'scopes']; + const scopes2 = ['different', 'scopes']; + assert.strictEqual(scopesMatch(scopes1, scopes2), false); + }); + + test('scopesMatch should return false for different length arrays', () => { + const scopes1 = ['test']; + const scopes2 = ['test', 'scopes']; + assert.strictEqual(scopesMatch(scopes1, scopes2), false); + }); + + test('scopesMatch should handle complex Microsoft scopes', () => { + const scopes1 = ['6f1cc985-85e8-487e-b0dd-aa633302a731/.default', 'VSCODE_TENANT:organizations']; + const scopes2 = ['VSCODE_TENANT:organizations', '6f1cc985-85e8-487e-b0dd-aa633302a731/.default']; + assert.strictEqual(scopesMatch(scopes1, scopes2), true); + }); + + test('scopesMatch should handle empty arrays', () => { + assert.strictEqual(scopesMatch([], []), true); + }); + + test('scopesMatch should handle single scope arrays', () => { + assert.strictEqual(scopesMatch(['single'], ['single']), true); + assert.strictEqual(scopesMatch(['single'], ['different']), false); + }); + + test('scopesMatch should handle duplicate scopes within arrays', () => { + const scopes1 = ['scope1', 'scope2', 'scope1']; + const scopes2 = ['scope2', 'scope1', 'scope1']; + assert.strictEqual(scopesMatch(scopes1, scopes2), true); + }); + }); + suite('Utility Functions', () => { test('getDefaultMetadataForUrl should return correct default endpoints', () => { const authorizationServer = new URL('https://auth.example.com'); diff --git a/src/vs/workbench/api/browser/mainThreadAuthentication.ts b/src/vs/workbench/api/browser/mainThreadAuthentication.ts index 4dfd750dd2a0c..e713623fe517a 100644 --- a/src/vs/workbench/api/browser/mainThreadAuthentication.ts +++ b/src/vs/workbench/api/browser/mainThreadAuthentication.ts @@ -405,6 +405,7 @@ export class MainThreadAuthentication extends Disposable implements MainThreadAu } this.authenticationAccessService.updateAllowedExtensions(providerId, session.account.label, [{ id: extensionId, name: extensionName, allowed: true }]); + this.authenticationExtensionsService.updateNewSessionRequests(providerId, [session]); this._updateAccountPreference(extensionId, providerId, session); return session; } diff --git a/src/vs/workbench/services/authentication/browser/authenticationExtensionsService.ts b/src/vs/workbench/services/authentication/browser/authenticationExtensionsService.ts index ff0e09e7f311d..214f7b52e9216 100644 --- a/src/vs/workbench/services/authentication/browser/authenticationExtensionsService.ts +++ b/src/vs/workbench/services/authentication/browser/authenticationExtensionsService.ts @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { Disposable, DisposableStore, dispose, IDisposable, MutableDisposable } from '../../../../base/common/lifecycle.js'; +import { scopesMatch } from '../../../../base/common/oauth.js'; import * as nls from '../../../../nls.js'; import { MenuId, MenuRegistry } from '../../../../platform/actions/common/actions.js'; import { CommandsRegistry } from '../../../../platform/commands/common/commands.js'; @@ -67,14 +68,13 @@ export class AuthenticationExtensionsService extends Disposable implements IAuth } private registerListeners() { - this._register(this._authenticationService.onDidChangeSessions(async e => { + this._register(this._authenticationService.onDidChangeSessions(e => { if (e.event.added?.length) { - await this.updateNewSessionRequests(e.providerId, e.event.added); + this.updateNewSessionRequests(e.providerId, e.event.added); } if (e.event.removed?.length) { - await this.updateAccessRequests(e.providerId, e.event.removed); + this.updateAccessRequests(e.providerId, e.event.removed); } - this.updateBadgeCount(); })); this._register(this._authenticationService.onDidUnregisterAuthenticationProvider(e => { @@ -85,14 +85,18 @@ export class AuthenticationExtensionsService extends Disposable implements IAuth })); } - private async updateNewSessionRequests(providerId: string, addedSessions: readonly AuthenticationSession[]): Promise { + updateNewSessionRequests(providerId: string, addedSessions: readonly AuthenticationSession[]): void { const existingRequestsForProvider = this._signInRequestItems.get(providerId); if (!existingRequestsForProvider) { return; } Object.keys(existingRequestsForProvider).forEach(requestedScopes => { - if (addedSessions.some(session => session.scopes.slice().join(SCOPESLIST_SEPARATOR) === requestedScopes)) { + // Parse the requested scopes from the stored key + const requestedScopesArray = requestedScopes.split(SCOPESLIST_SEPARATOR); + + // Check if any added session has matching scopes (order-independent) + if (addedSessions.some(session => scopesMatch(session.scopes, requestedScopesArray))) { const sessionRequest = existingRequestsForProvider[requestedScopes]; sessionRequest?.disposables.forEach(item => item.dispose()); @@ -102,11 +106,12 @@ export class AuthenticationExtensionsService extends Disposable implements IAuth } else { this._signInRequestItems.set(providerId, existingRequestsForProvider); } + this.updateBadgeCount(); } }); } - private async updateAccessRequests(providerId: string, removedSessions: readonly AuthenticationSession[]) { + private updateAccessRequests(providerId: string, removedSessions: readonly AuthenticationSession[]): void { const providerRequests = this._sessionAccessRequestItems.get(providerId); if (providerRequests) { Object.keys(providerRequests).forEach(extensionId => { diff --git a/src/vs/workbench/services/authentication/browser/authenticationMcpService.ts b/src/vs/workbench/services/authentication/browser/authenticationMcpService.ts index 66d93a1449141..f2050a312e298 100644 --- a/src/vs/workbench/services/authentication/browser/authenticationMcpService.ts +++ b/src/vs/workbench/services/authentication/browser/authenticationMcpService.ts @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { Disposable, DisposableStore, dispose, IDisposable, MutableDisposable } from '../../../../base/common/lifecycle.js'; +import { scopesMatch } from '../../../../base/common/oauth.js'; import * as nls from '../../../../nls.js'; import { MenuId, MenuRegistry } from '../../../../platform/actions/common/actions.js'; import { CommandsRegistry } from '../../../../platform/commands/common/commands.js'; @@ -150,7 +151,11 @@ export class AuthenticationMcpService extends Disposable implements IAuthenticat } Object.keys(existingRequestsForProvider).forEach(requestedScopes => { - if (addedSessions.some(session => session.scopes.slice().join(SCOPESLIST_SEPARATOR) === requestedScopes)) { + // Parse the requested scopes from the stored key + const requestedScopesArray = requestedScopes.split(SCOPESLIST_SEPARATOR); + + // Check if any added session has matching scopes (order-independent) + if (addedSessions.some(session => scopesMatch(session.scopes, requestedScopesArray))) { const sessionRequest = existingRequestsForProvider[requestedScopes]; sessionRequest?.disposables.forEach(item => item.dispose()); diff --git a/src/vs/workbench/services/authentication/common/authentication.ts b/src/vs/workbench/services/authentication/common/authentication.ts index e52d269b145a9..52aa20fd08d0b 100644 --- a/src/vs/workbench/services/authentication/common/authentication.ts +++ b/src/vs/workbench/services/authentication/common/authentication.ts @@ -318,6 +318,7 @@ export interface IAuthenticationExtensionsService { selectSession(providerId: string, extensionId: string, extensionName: string, scopes: string[], possibleSessions: readonly AuthenticationSession[]): Promise; requestSessionAccess(providerId: string, extensionId: string, extensionName: string, scopes: string[], possibleSessions: readonly AuthenticationSession[]): void; requestNewSession(providerId: string, scopes: string[], extensionId: string, extensionName: string): Promise; + updateNewSessionRequests(providerId: string, addedSessions: readonly AuthenticationSession[]): void; } /** diff --git a/src/vs/workbench/services/authentication/test/browser/authenticationQueryServiceMocks.ts b/src/vs/workbench/services/authentication/test/browser/authenticationQueryServiceMocks.ts index 42291f00a742f..4a2ca0e628436 100644 --- a/src/vs/workbench/services/authentication/test/browser/authenticationQueryServiceMocks.ts +++ b/src/vs/workbench/services/authentication/test/browser/authenticationQueryServiceMocks.ts @@ -271,6 +271,7 @@ export class TestExtensionsService extends TestPreferencesService implements IAu selectSession(): Promise { return Promise.resolve(createSession()); } requestSessionAccess(): void { } requestNewSession(): Promise { return Promise.resolve(); } + updateNewSessionRequests(): void { } } export class TestMcpService extends TestPreferencesService implements IAuthenticationMcpService { From a941a5e28d36689505445de0af9966ab131c724c Mon Sep 17 00:00:00 2001 From: Connor Peet Date: Wed, 6 Aug 2025 17:57:11 -0700 Subject: [PATCH 0084/2080] mcp: turn other-app discovery off by default (#260209) Closes #258823 --- .../contrib/chat/browser/chat.contribution.ts | 76 ++++++++++--------- .../browser/mcpCommandsAddConfiguration.ts | 33 +++++--- .../discovery/nativeMcpDiscoveryAbstract.ts | 26 +++---- .../contrib/mcp/common/mcpConfiguration.ts | 6 ++ 4 files changed, 81 insertions(+), 60 deletions(-) diff --git a/src/vs/workbench/contrib/chat/browser/chat.contribution.ts b/src/vs/workbench/contrib/chat/browser/chat.contribution.ts index e294e6d7dd82f..eb8b283ede792 100644 --- a/src/vs/workbench/contrib/chat/browser/chat.contribution.ts +++ b/src/vs/workbench/contrib/chat/browser/chat.contribution.ts @@ -3,27 +3,24 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { PolicyTag } from '../../../../base/common/policy.js'; -import './promptSyntax/promptToolsCodeLensProvider.js'; -import './promptSyntax/promptCodingAgentActionContribution.js'; import { timeout } from '../../../../base/common/async.js'; import { Event } from '../../../../base/common/event.js'; import { MarkdownString, isMarkdownString } from '../../../../base/common/htmlContent.js'; import { Disposable } from '../../../../base/common/lifecycle.js'; import { Schemas } from '../../../../base/common/network.js'; import { isMacintosh } from '../../../../base/common/platform.js'; +import { PolicyTag } from '../../../../base/common/policy.js'; import { assertDefined } from '../../../../base/common/types.js'; import { registerEditorFeature } from '../../../../editor/common/editorFeatures.js'; import * as nls from '../../../../nls.js'; import { AccessibleViewRegistry } from '../../../../platform/accessibility/browser/accessibleViewRegistry.js'; +import { registerAction2 } from '../../../../platform/actions/common/actions.js'; import { ICommandService } from '../../../../platform/commands/common/commands.js'; import { Extensions as ConfigurationExtensions, ConfigurationScope, IConfigurationNode, IConfigurationRegistry } from '../../../../platform/configuration/common/configurationRegistry.js'; import { SyncDescriptor } from '../../../../platform/instantiation/common/descriptors.js'; import { InstantiationType, registerSingleton } from '../../../../platform/instantiation/common/extensions.js'; import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; -import { mcpAutoStartConfig, McpAutoStartValue, mcpEnabledConfig, mcpGalleryServiceUrlConfig } from '../../../../platform/mcp/common/mcpManagement.js'; -import { PromptsConfig } from '../common/promptSyntax/config/config.js'; -import { INSTRUCTIONS_DEFAULT_SOURCE_FOLDER, INSTRUCTION_FILE_EXTENSION, MODE_DEFAULT_SOURCE_FOLDER, MODE_FILE_EXTENSION, PROMPT_DEFAULT_SOURCE_FOLDER, PROMPT_FILE_EXTENSION } from '../common/promptSyntax/config/promptFileLocations.js'; +import { McpAutoStartValue, mcpAutoStartConfig, mcpEnabledConfig, mcpGalleryServiceUrlConfig } from '../../../../platform/mcp/common/mcpManagement.js'; import { Registry } from '../../../../platform/registry/common/platform.js'; import { EditorPaneDescriptor, IEditorPaneRegistry } from '../../../browser/editor.js'; import { Extensions, IConfigurationMigrationRegistry } from '../../../common/configuration.js'; @@ -31,16 +28,20 @@ import { IWorkbenchContribution, WorkbenchPhase, registerWorkbenchContribution2 import { EditorExtensions, IEditorFactoryRegistry } from '../../../common/editor.js'; import { IWorkbenchAssignmentService } from '../../../services/assignment/common/assignmentService.js'; import { IEditorResolverService, RegisteredEditorPriority } from '../../../services/editor/common/editorResolverService.js'; -import { allDiscoverySources, discoverySourceLabel, mcpDiscoverySection, mcpServerSamplingSection } from '../../mcp/common/mcpConfiguration.js'; +import { AddConfigurationType, AssistedTypes } from '../../mcp/browser/mcpCommandsAddConfiguration.js'; +import { allDiscoverySources, discoverySourceSettingsLabel, mcpDiscoverySection, mcpServerSamplingSection } from '../../mcp/common/mcpConfiguration.js'; import { ChatAgentNameService, ChatAgentService, IChatAgentNameService, IChatAgentService } from '../common/chatAgents.js'; import { CodeMapperService, ICodeMapperService } from '../common/chatCodeMapperService.js'; import '../common/chatColors.js'; import { IChatEditingService } from '../common/chatEditingService.js'; import { ChatEntitlement, ChatEntitlementService, IChatEntitlementService } from '../common/chatEntitlementService.js'; +import { ChatModeService, IChatModeService } from '../common/chatModes.js'; import { chatVariableLeader } from '../common/chatParserTypes.js'; +import { ChatResponseResourceFileSystemProvider } from '../common/chatResponseResourceFileSystemProvider.js'; import { IChatService } from '../common/chatService.js'; import { ChatService } from '../common/chatServiceImpl.js'; import { ChatSlashCommandService, IChatSlashCommandService } from '../common/chatSlashCommands.js'; +import { ChatTodoListService, IChatTodoListService } from '../common/chatTodoListService.js'; import { ChatTransferService, IChatTransferService } from '../common/chatTransferService.js'; import { IChatVariablesService } from '../common/chatVariables.js'; import { ChatWidgetHistoryService, IChatWidgetHistoryService } from '../common/chatWidgetHistoryService.js'; @@ -49,16 +50,17 @@ import { ILanguageModelIgnoredFilesService, LanguageModelIgnoredFilesService } f import { ILanguageModelsService, LanguageModelsService } from '../common/languageModels.js'; import { ILanguageModelStatsService, LanguageModelStatsService } from '../common/languageModelStats.js'; import { ILanguageModelToolsService } from '../common/languageModelToolsService.js'; -import { INSTRUCTIONS_DOCUMENTATION_URL, MODE_DOCUMENTATION_URL, PROMPT_DOCUMENTATION_URL } from '../common/promptSyntax/promptTypes.js'; +import { PromptsConfig } from '../common/promptSyntax/config/config.js'; +import { INSTRUCTIONS_DEFAULT_SOURCE_FOLDER, INSTRUCTION_FILE_EXTENSION, MODE_DEFAULT_SOURCE_FOLDER, MODE_FILE_EXTENSION, PROMPT_DEFAULT_SOURCE_FOLDER, PROMPT_FILE_EXTENSION } from '../common/promptSyntax/config/promptFileLocations.js'; import { registerPromptFileContributions } from '../common/promptSyntax/promptFileContributions.js'; -import { PromptsService } from '../common/promptSyntax/service/promptsServiceImpl.js'; +import { INSTRUCTIONS_DOCUMENTATION_URL, MODE_DOCUMENTATION_URL, PROMPT_DOCUMENTATION_URL } from '../common/promptSyntax/promptTypes.js'; import { IPromptsService } from '../common/promptSyntax/service/promptsService.js'; +import { PromptsService } from '../common/promptSyntax/service/promptsServiceImpl.js'; import { LanguageModelToolsExtensionPointHandler } from '../common/tools/languageModelToolsContribution.js'; import { BuiltinToolsContribution } from '../common/tools/tools.js'; -import { ConfigureToolSets, UserToolSetsContributions } from './tools/toolSetsContribution.js'; import { IVoiceChatService, VoiceChatService } from '../common/voiceChatService.js'; import { AgentChatAccessibilityHelp, EditsChatAccessibilityHelp, PanelChatAccessibilityHelp, QuickChatAccessibilityHelp } from './actions/chatAccessibilityHelp.js'; -import { CopilotTitleBarMenuRendering, registerChatActions, ACTION_ID_NEW_CHAT } from './actions/chatActions.js'; +import { ACTION_ID_NEW_CHAT, CopilotTitleBarMenuRendering, registerChatActions } from './actions/chatActions.js'; import { registerNewChatActions } from './actions/chatClearActions.js'; import { CodeBlockActionRendering, registerChatCodeBlockActions, registerChatCodeCompareBlockActions } from './actions/chatCodeblockActions.js'; import { ChatContextContributions } from './actions/chatContext.js'; @@ -69,6 +71,7 @@ import { ChatSubmitAction, registerChatExecuteActions } from './actions/chatExec import { registerChatFileTreeActions } from './actions/chatFileTreeActions.js'; import { ChatGettingStartedContribution } from './actions/chatGettingStarted.js'; import { registerChatExportActions } from './actions/chatImportExport.js'; +import { registerLanguageModelActions } from './actions/chatLanguageModelActions.js'; import { registerMoveActions } from './actions/chatMoveActions.js'; import { registerQuickChatActions } from './actions/chatQuickInputActions.js'; import { registerChatTitleActions } from './actions/chatTitleActions.js'; @@ -77,6 +80,7 @@ import { ChatTransferContribution } from './actions/chatTransfer.js'; import { IChatAccessibilityService, IChatCodeBlockContextProviderService, IChatWidgetService, IQuickChatService } from './chat.js'; import { ChatAccessibilityService } from './chatAccessibilityService.js'; import './chatAttachmentModel.js'; +import { ChatAttachmentResolveService, IChatAttachmentResolveService } from './chatAttachmentResolveService.js'; import { ChatMarkdownAnchorService, IChatMarkdownAnchorService } from './chatContentParts/chatMarkdownAnchorService.js'; import { ChatContextPickService, IChatContextPickService } from './chatContextPickService.js'; import { ChatInputBoxContentProvider } from './chatEdinputInputContentProvider.js'; @@ -90,34 +94,30 @@ import { SimpleBrowserOverlay } from './chatEditing/simpleBrowserEditorOverlay.j import { ChatEditor, IChatEditorOptions } from './chatEditor.js'; import { ChatEditorInput, ChatEditorInputSerializer } from './chatEditorInput.js'; import { agentSlashCommandToMarkdown, agentToMarkdown } from './chatMarkdownDecorationsRenderer.js'; +import { ChatOutputRendererService, IChatOutputRendererService } from './chatOutputItemRenderer.js'; import { ChatCompatibilityNotifier, ChatExtensionPointHandler } from './chatParticipant.contribution.js'; import { ChatPasteProvidersFeature } from './chatPasteProviders.js'; import { QuickChatService } from './chatQuick.js'; import { ChatResponseAccessibleView } from './chatResponseAccessibleView.js'; +import { ChatSessionsView } from './chatSessions.js'; import { ChatSetupContribution } from './chatSetup.js'; import { ChatStatusBarEntry } from './chatStatus.js'; import { ChatVariablesService } from './chatVariables.js'; import { ChatWidget, ChatWidgetService } from './chatWidget.js'; import { ChatCodeBlockContextProviderService } from './codeBlockContextProviderService.js'; +import { ChatDynamicVariableModel } from './contrib/chatDynamicVariables.js'; import { ChatImplicitContextContribution } from './contrib/chatImplicitContext.js'; import './contrib/chatInputCompletions.js'; import './contrib/chatInputEditorContrib.js'; import './contrib/chatInputEditorHover.js'; import { ChatRelatedFilesContribution } from './contrib/chatInputRelatedFilesContrib.js'; import { LanguageModelToolsService } from './languageModelToolsService.js'; -import { ChatViewsWelcomeHandler } from './viewsWelcome/chatViewsWelcomeHandler.js'; -import { registerAction2 } from '../../../../platform/actions/common/actions.js'; -import { ChatModeService, IChatModeService } from '../common/chatModes.js'; -import { ChatResponseResourceFileSystemProvider } from '../common/chatResponseResourceFileSystemProvider.js'; -import { SAVE_TO_PROMPT_ACTION_ID, SAVE_TO_PROMPT_SLASH_COMMAND_NAME } from './promptSyntax/saveToPromptAction.js'; -import { ChatDynamicVariableModel } from './contrib/chatDynamicVariables.js'; -import { ChatAttachmentResolveService, IChatAttachmentResolveService } from './chatAttachmentResolveService.js'; -import { registerLanguageModelActions } from './actions/chatLanguageModelActions.js'; +import './promptSyntax/promptCodingAgentActionContribution.js'; +import './promptSyntax/promptToolsCodeLensProvider.js'; import { PromptUrlHandler } from './promptSyntax/promptUrlHandler.js'; -import { ChatTodoListService, IChatTodoListService } from '../common/chatTodoListService.js'; -import { ChatOutputRendererService, IChatOutputRendererService } from './chatOutputItemRenderer.js'; -import { AssistedTypes, AddConfigurationType } from '../../mcp/browser/mcpCommandsAddConfiguration.js'; -import { ChatSessionsView } from './chatSessions.js'; +import { SAVE_TO_PROMPT_ACTION_ID, SAVE_TO_PROMPT_SLASH_COMMAND_NAME } from './promptSyntax/saveToPromptAction.js'; +import { ConfigureToolSets, UserToolSetsContributions } from './tools/toolSetsContribution.js'; +import { ChatViewsWelcomeHandler } from './viewsWelcome/chatViewsWelcomeHandler.js'; // Register configuration const configurationRegistry = Registry.as(ConfigurationExtensions.Configuration); @@ -399,19 +399,11 @@ configurationRegistry.registerConfiguration({ tags: ['experimental'], }, [mcpDiscoverySection]: { - oneOf: [ - { type: 'boolean' }, - { - type: 'object', - default: Object.fromEntries(allDiscoverySources.map(k => [k, true])), - properties: Object.fromEntries(allDiscoverySources.map(k => [ - k, - { type: 'boolean', description: nls.localize('mcp.discovery.source', "Enables discovery of {0} servers", discoverySourceLabel[k]) } - ])), - } - ], - default: true, - markdownDescription: nls.localize('mcp.discovery.enabled', "Configures discovery of Model Context Protocol servers on the machine. It may be set to `true` or `false` to disable or enable all sources, and an mapping sources you wish to enable."), + type: 'object', + properties: Object.fromEntries(allDiscoverySources.map(k => [k, { type: 'boolean', description: discoverySourceSettingsLabel[k] }])), + additionalProperties: false, + default: Object.fromEntries(allDiscoverySources.map(k => [k, false])), + markdownDescription: nls.localize('mcp.discovery.enabled', "Configures discovery of Model Context Protocol servers from configuration from various other applications."), }, [mcpGalleryServiceUrlConfig]: { type: 'string', @@ -584,7 +576,17 @@ Registry.as(Extensions.ConfigurationMigration). ['chat.experimental.detectParticipant.enabled', { value: undefined }], ['chat.detectParticipant.enabled', { value: value !== false }] ]) - } + }, + { + key: mcpDiscoverySection, + migrateFn: (value: unknown) => { + if (typeof value === 'boolean') { + return { value: Object.fromEntries(allDiscoverySources.map(k => [k, value])) }; + } + + return { value }; + } + }, ]); class ChatResolverContribution extends Disposable { diff --git a/src/vs/workbench/contrib/mcp/browser/mcpCommandsAddConfiguration.ts b/src/vs/workbench/contrib/mcp/browser/mcpCommandsAddConfiguration.ts index 0acbf325aa7d7..ea7800f6280b1 100644 --- a/src/vs/workbench/contrib/mcp/browser/mcpCommandsAddConfiguration.ts +++ b/src/vs/workbench/contrib/mcp/browser/mcpCommandsAddConfiguration.ts @@ -27,7 +27,7 @@ import { IEditorService } from '../../../services/editor/common/editorService.js import { IWorkbenchEnvironmentService } from '../../../services/environment/common/environmentService.js'; import { IWorkbenchMcpManagementService } from '../../../services/mcp/common/mcpWorkbenchManagementService.js'; import { McpCommandIds } from '../common/mcpCommandIds.js'; -import { mcpStdioServerSchema } from '../common/mcpConfiguration.js'; +import { allDiscoverySources, DiscoverySource, mcpDiscoverySection, mcpStdioServerSchema } from '../common/mcpConfiguration.js'; import { IMcpRegistry } from '../common/mcpRegistryTypes.js'; import { IMcpService, McpConnectionState } from '../common/mcpTypes.js'; @@ -130,7 +130,8 @@ export class McpAddConfigurationCommand { ) { } private async getServerType(): Promise { - const items: QuickPickInput<{ kind: AddConfigurationType | 'browse' } & IQuickPickItem>[] = [ + type TItem = { kind: AddConfigurationType | 'browse' | 'discovery' } & IQuickPickItem; + const items: QuickPickInput[] = [ { kind: AddConfigurationType.Stdio, label: localize('mcp.serverType.command', "Command (stdio)"), description: localize('mcp.serverType.command.description', "Run a local command that implements the MCP protocol") }, { kind: AddConfigurationType.HTTP, label: localize('mcp.serverType.http', "HTTP (HTTP or Server-Sent Events)"), description: localize('mcp.serverType.http.description', "Connect to a remote HTTP server that implements the MCP protocol") } ]; @@ -165,15 +166,22 @@ export class McpAddConfigurationCommand { ); } - items.push( - { type: 'separator' }, - { - kind: 'browse', - label: localize('mcp.servers.browse', "Browse MCP Servers..."), - } - ); + items.push({ type: 'separator' }); + + const discovery = this._configurationService.getValue<{ [K in DiscoverySource]: boolean }>(mcpDiscoverySection); + if (discovery && typeof discovery === 'object' && allDiscoverySources.some(d => !discovery[d])) { + items.push({ + kind: 'discovery', + label: localize('mcp.servers.discovery', "Add from another application..."), + }); + } - const result = await this._quickInputService.pick<{ kind: AddConfigurationType | 'browse' } & IQuickPickItem>(items, { + items.push({ + kind: 'browse', + label: localize('mcp.servers.browse', "Browse MCP Servers..."), + }); + + const result = await this._quickInputService.pick(items, { placeHolder: localize('mcp.serverType.placeholder', "Choose the type of MCP server to add"), }); @@ -182,6 +190,11 @@ export class McpAddConfigurationCommand { return undefined; } + if (result?.kind === 'discovery') { + this._commandService.executeCommand('workbench.action.openSettings', mcpDiscoverySection); + return undefined; + } + return result?.kind; } diff --git a/src/vs/workbench/contrib/mcp/common/discovery/nativeMcpDiscoveryAbstract.ts b/src/vs/workbench/contrib/mcp/common/discovery/nativeMcpDiscoveryAbstract.ts index a599264a19b87..4f895687d25d8 100644 --- a/src/vs/workbench/contrib/mcp/common/discovery/nativeMcpDiscoveryAbstract.ts +++ b/src/vs/workbench/contrib/mcp/common/discovery/nativeMcpDiscoveryAbstract.ts @@ -7,7 +7,7 @@ import { RunOnceScheduler } from '../../../../../base/common/async.js'; import { VSBuffer } from '../../../../../base/common/buffer.js'; import { Disposable, DisposableStore, IDisposable, MutableDisposable } from '../../../../../base/common/lifecycle.js'; import { Schemas } from '../../../../../base/common/network.js'; -import { autorunWithStore, IObservable, IReader, ISettableObservable, observableValue } from '../../../../../base/common/observable.js'; +import { autorun, IObservable, IReader, ISettableObservable, observableValue } from '../../../../../base/common/observable.js'; import { URI } from '../../../../../base/common/uri.js'; import { localize } from '../../../../../nls.js'; import { ConfigurationTarget, IConfigurationService } from '../../../../../platform/configuration/common/configuration.js'; @@ -27,7 +27,7 @@ import { ClaudeDesktopMpcDiscoveryAdapter, CursorDesktopMpcDiscoveryAdapter, Nat export type WritableMcpCollectionDefinition = McpCollectionDefinition & { serverDefinitions: ISettableObservable }; export abstract class FilesystemMcpDiscovery extends Disposable { - protected readonly _fsDiscoveryEnabled: IObservable; + protected readonly _fsDiscoveryEnabled: IObservable<{ [K in DiscoverySource]: boolean } | undefined>; constructor( @IConfigurationService configurationService: IConfigurationService, @@ -36,24 +36,24 @@ export abstract class FilesystemMcpDiscovery extends Disposable { ) { super(); - this._fsDiscoveryEnabled = observableConfigValue(mcpDiscoverySection, true, configurationService); + this._fsDiscoveryEnabled = observableConfigValue(mcpDiscoverySection, undefined, configurationService); } - protected _isDiscoveryEnabled(reader: IReader, discoverySource: DiscoverySource | undefined): boolean { + protected _isDiscoveryEnabled(reader: IReader, discoverySource: DiscoverySource): boolean { const fsDiscovery = this._fsDiscoveryEnabled.read(reader); if (typeof fsDiscovery === 'boolean') { - return fsDiscovery; + return fsDiscovery; // old commands } - if (discoverySource && fsDiscovery[discoverySource] === false) { - return false; + if (discoverySource && fsDiscovery?.[discoverySource] === true) { + return true; } - return true; + return false; } protected watchFile( file: URI, collection: WritableMcpCollectionDefinition, - discoverySource: DiscoverySource | undefined, + discoverySource: DiscoverySource, adaptFile: (contents: VSBuffer) => Promise, ): IDisposable { const store = new DisposableStore(); @@ -76,15 +76,15 @@ export abstract class FilesystemMcpDiscovery extends Disposable { } }; - store.add(autorunWithStore((reader, store) => { + store.add(autorun(reader => { if (!this._isDiscoveryEnabled(reader, discoverySource)) { collectionRegistration.clear(); return; } - const throttler = store.add(new RunOnceScheduler(updateFile, 500)); - const watcher = store.add(this._fileService.createWatcher(file, { recursive: false, excludes: [] })); - store.add(watcher.onDidChange(() => throttler.schedule())); + const throttler = reader.store.add(new RunOnceScheduler(updateFile, 500)); + const watcher = reader.store.add(this._fileService.createWatcher(file, { recursive: false, excludes: [] })); + reader.store.add(watcher.onDidChange(() => throttler.schedule())); updateFile(); })); diff --git a/src/vs/workbench/contrib/mcp/common/mcpConfiguration.ts b/src/vs/workbench/contrib/mcp/common/mcpConfiguration.ts index cb2910c103224..e1af22069c92f 100644 --- a/src/vs/workbench/contrib/mcp/common/mcpConfiguration.ts +++ b/src/vs/workbench/contrib/mcp/common/mcpConfiguration.ts @@ -44,6 +44,12 @@ export const discoverySourceLabel: Record = { [DiscoverySource.CursorGlobal]: localize('mcp.discovery.source.cursor-global', "Cursor (Global)"), [DiscoverySource.CursorWorkspace]: localize('mcp.discovery.source.cursor-workspace', "Cursor (Workspace)"), }; +export const discoverySourceSettingsLabel: Record = { + [DiscoverySource.ClaudeDesktop]: localize('mcp.discovery.source.claude-desktop.config', "Claude Desktop configuration (`claude_desktop_config.json`)"), + [DiscoverySource.Windsurf]: localize('mcp.discovery.source.windsurf.config', "Windsurf configurations (`~/.codeium/windsurf/mcp_config.json`)"), + [DiscoverySource.CursorGlobal]: localize('mcp.discovery.source.cursor-global.config', "Cursor global configuration (`~/.cursor/mcp.json`)"), + [DiscoverySource.CursorWorkspace]: localize('mcp.discovery.source.cursor-workspace.config', "Cursor workspace configuration (`.cursor/mcp.json`)"), +}; export const mcpConfigurationSection = 'mcp'; export const mcpDiscoverySection = 'chat.mcp.discovery.enabled'; From 6f978585c1f0e884f702ebc7dca7b12ffc8c87a2 Mon Sep 17 00:00:00 2001 From: Tyler James Leonhardt <2644648+TylerLeonhardt@users.noreply.github.com> Date: Wed, 6 Aug 2025 18:26:53 -0700 Subject: [PATCH 0085/2080] Expose `Manage Extension Account Preferences` in the Command Palette (#260224) fixes https://github.com/microsoft/vscode/issues/256635 --- .../manageAccountPreferencesForExtensionAction.ts | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/vs/workbench/contrib/authentication/browser/actions/manageAccountPreferencesForExtensionAction.ts b/src/vs/workbench/contrib/authentication/browser/actions/manageAccountPreferencesForExtensionAction.ts index 8e4e44a752a5b..4c6a18e825856 100644 --- a/src/vs/workbench/contrib/authentication/browser/actions/manageAccountPreferencesForExtensionAction.ts +++ b/src/vs/workbench/contrib/authentication/browser/actions/manageAccountPreferencesForExtensionAction.ts @@ -21,7 +21,7 @@ export class ManageAccountPreferencesForExtensionAction extends Action2 { id: '_manageAccountPreferencesForExtension', title: localize2('manageAccountPreferenceForExtension', "Manage Extension Account Preferences"), category: localize2('accounts', "Accounts"), - f1: false + f1: true }); } @@ -55,6 +55,18 @@ class ManageAccountPreferenceForExtensionActionImpl { ) { } async run(extensionId?: string, providerId?: string) { + const extensions = this._extensionService.extensions + .filter(ext => this._authenticationQueryService.extension(ext.identifier.value).getAllAccountPreferences().size > 0) + .sort((a, b) => (a.displayName ?? a.name).localeCompare((b.displayName ?? b.name))); + + const result = await this._quickInputService.pick(extensions.map(ext => ({ + label: ext.displayName ?? ext.name, + id: ext.identifier.value + })), { + placeHolder: localize('selectExtension', "Select an extension to manage account preferences for"), + title: localize('pickAProviderTitle', "Manage Extension Account Preferences") + }); + extensionId = result?.id; if (!extensionId) { return; } From d5e090535a16ab04d9a92c4f42e12a1b04dbf721 Mon Sep 17 00:00:00 2001 From: Aaron Munger <2019016+amunger@users.noreply.github.com> Date: Wed, 6 Aug 2025 19:48:18 -0700 Subject: [PATCH 0086/2080] register disposabls (#260238) --- .../contrib/find/notebookFindReplaceWidget.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/vs/workbench/contrib/notebook/browser/contrib/find/notebookFindReplaceWidget.ts b/src/vs/workbench/contrib/notebook/browser/contrib/find/notebookFindReplaceWidget.ts index 64a78fe594aff..522a4ccb8252e 100644 --- a/src/vs/workbench/contrib/notebook/browser/contrib/find/notebookFindReplaceWidget.ts +++ b/src/vs/workbench/contrib/notebook/browser/contrib/find/notebookFindReplaceWidget.ts @@ -180,7 +180,7 @@ export class NotebookFindInputFilterButton extends Disposable { super(); this._toggleStyles = options.toggleStyles; - this._filtersAction = new Action('notebookFindFilterAction', tooltip, 'notebook-filters ' + ThemeIcon.asClassName(filterIcon)); + this._filtersAction = this._register(new Action('notebookFindFilterAction', tooltip, 'notebook-filters ' + ThemeIcon.asClassName(filterIcon))); this._filtersAction.checked = false; this._filterButtonContainer = dom.$('.find-filter-button'); this._filterButtonContainer.classList.add('monaco-custom-toggle'); @@ -347,12 +347,12 @@ export abstract class SimpleFindReplaceWidget extends Widget { const findHistoryConfig = this._configurationService.getValue<'never' | 'workspace'>('editor.find.history'); const replaceHistoryConfig = this._configurationService.getValue<'never' | 'workspace'>('editor.find.replaceHistory'); - this._filters = new NotebookFindFilters(findFilters.markupSource, findFilters.markupPreview, findFilters.codeSource, findFilters.codeOutput, { findScopeType: NotebookFindScopeType.None }); + this._filters = this._register(new NotebookFindFilters(findFilters.markupSource, findFilters.markupPreview, findFilters.codeSource, findFilters.codeOutput, { findScopeType: NotebookFindScopeType.None })); this._state.change({ filters: this._filters }, false); - this._filters.onDidChange(() => { + this._register(this._filters.onDidChange(() => { this._state.change({ filters: this._filters }, false); - }); + })); this._domNode = document.createElement('div'); this._domNode.classList.add('simple-fr-find-part-wrapper'); @@ -368,10 +368,10 @@ export abstract class SimpleFindReplaceWidget extends Widget { })); this._register(this._state.onFindReplaceStateChange((e) => this._onStateChanged(e))); - this._scopedContextKeyService = contextKeyService.createScoped(this._domNode); + this._scopedContextKeyService = this._register(contextKeyService.createScoped(this._domNode)); const progressContainer = dom.$('.find-replace-progress'); - this._progressBar = new ProgressBar(progressContainer, defaultProgressBarStyles); + this._progressBar = this._register(new ProgressBar(progressContainer, defaultProgressBarStyles)); this._domNode.appendChild(progressContainer); const isInteractiveWindow = contextKeyService.getContextKeyValue('notebookType') === 'interactive'; @@ -489,7 +489,7 @@ export abstract class SimpleFindReplaceWidget extends Widget { })); this.inSelectionToggle.domNode.style.display = 'inline'; - this.inSelectionToggle.onChange(() => { + this._register(this.inSelectionToggle.onChange(() => { const checked = this.inSelectionToggle.checked; if (checked) { // selection logic: @@ -530,7 +530,7 @@ export abstract class SimpleFindReplaceWidget extends Widget { this.clearCellSelectionDecorations(); this.clearTextSelectionDecorations(); } - }); + })); const closeBtn = this._register(new SimpleButton({ label: NLS_CLOSE_BTN_LABEL, From b4d91402fe427be0d7df68bf47cec1572afd1373 Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Thu, 7 Aug 2025 08:05:43 +0200 Subject: [PATCH 0087/2080] Revert "Fix theme not being synchronized with external windows on firefox" (#260252) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Revert "Fix theme not being synchronized with external windows on firefox (#2…" This reverts commit 5a03ce4006bf67abbf84c235bc888e87c9508f2e. --- src/vs/base/browser/domStylesheets.ts | 11 +------- .../themes/browser/workbenchThemeService.ts | 25 ++++++------------- 2 files changed, 9 insertions(+), 27 deletions(-) diff --git a/src/vs/base/browser/domStylesheets.ts b/src/vs/base/browser/domStylesheets.ts index feb3aeba8d7cd..76a71c5402dd0 100644 --- a/src/vs/base/browser/domStylesheets.ts +++ b/src/vs/base/browser/domStylesheets.ts @@ -5,7 +5,6 @@ import { DisposableStore, toDisposable, IDisposable } from '../common/lifecycle.js'; import { autorun, IObservable } from '../common/observable.js'; -import { isFirefox } from './browser.js'; import { getWindows, sharedMutationObserver } from './dom.js'; import { mainWindow } from './window.js'; @@ -98,15 +97,7 @@ function cloneGlobalStyleSheet(globalStylesheet: HTMLStyleElement, globalStylesh clone.sheet?.insertRule(rule.cssText, clone.sheet?.cssRules.length); } - let observeInit: MutationObserverInit = { childList: true }; - if (isFirefox) { - // Firefox doesn't support observing style tag contents - // As a workaround, also observe the data-version attribute - // that is updated when the content is updated - observeInit = { ...observeInit, attributes: true, attributeFilter: ['data-version'] }; - } - - disposables.add(sharedMutationObserver.observe(globalStylesheet, disposables, observeInit)(() => { + disposables.add(sharedMutationObserver.observe(globalStylesheet, disposables, { childList: true })(() => { clone.textContent = globalStylesheet.textContent; })); diff --git a/src/vs/workbench/services/themes/browser/workbenchThemeService.ts b/src/vs/workbench/services/themes/browser/workbenchThemeService.ts index 972e265195504..d85b23015f45c 100644 --- a/src/vs/workbench/services/themes/browser/workbenchThemeService.ts +++ b/src/vs/workbench/services/themes/browser/workbenchThemeService.ts @@ -33,7 +33,7 @@ import { updateColorThemeConfigurationSchemas, updateFileIconThemeConfigurationS import { ProductIconThemeData, DEFAULT_PRODUCT_ICON_THEME_ID } from './productIconThemeData.js'; import { registerProductIconThemeSchemas } from '../common/productIconThemeSchema.js'; import { ILogService } from '../../../../platform/log/common/log.js'; -import { isFirefox, isWeb } from '../../../../base/common/platform.js'; +import { isWeb } from '../../../../base/common/platform.js'; import { ColorScheme, ThemeTypeSelector } from '../../../../platform/theme/common/theme.js'; import { IHostColorSchemeService } from '../common/hostColorSchemeService.js'; import { RunOnceScheduler, Sequencer } from '../../../../base/common/async.js'; @@ -42,7 +42,6 @@ import { getIconsStyleSheet } from '../../../../platform/theme/browser/iconsStyl import { asCssVariableName, getColorRegistry } from '../../../../platform/theme/common/colorRegistry.js'; import { ILanguageService } from '../../../../editor/common/languages/language.js'; import { mainWindow } from '../../../../base/browser/window.js'; -import { generateUuid } from '../../../../base/common/uuid.js'; // implementation @@ -794,21 +793,13 @@ class ThemeFileWatcher { } function _applyRules(styleSheetContent: string, rulesClassName: string) { - let themeStyle = mainWindow.document.head.getElementsByClassName(rulesClassName).item(0); - if (!themeStyle) { - themeStyle = createStyleSheet(); - themeStyle.className = rulesClassName; - } - - if (themeStyle.textContent !== styleSheetContent) { - themeStyle.textContent = styleSheetContent; - - if (isFirefox) { - // Firefox doesn't support observing style tag contents - // As a workaround, also update the data-version attribute - // when it changes so it can be observed - themeStyle.setAttribute('data-version', generateUuid()); - } + const themeStyles = mainWindow.document.head.getElementsByClassName(rulesClassName); + if (themeStyles.length === 0) { + const elStyle = createStyleSheet(); + elStyle.className = rulesClassName; + elStyle.textContent = styleSheetContent; + } else { + (themeStyles[0]).textContent = styleSheetContent; } } From db7d3372070b613817d8cf466196ea32bdc020e9 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Thu, 7 Aug 2025 04:18:40 -0700 Subject: [PATCH 0088/2080] Polish tests --- .../browser/commandLineAutoApprover.ts | 3 +- .../browser/commandLineAutoApprover.test.ts | 296 ++++++++++++++++++ 2 files changed, 298 insertions(+), 1 deletion(-) diff --git a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandLineAutoApprover.ts b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandLineAutoApprover.ts index 6e76b9bf6cbd5..e9ee727bca463 100644 --- a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandLineAutoApprover.ts +++ b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandLineAutoApprover.ts @@ -7,6 +7,7 @@ import { Disposable } from '../../../../../base/common/lifecycle.js'; import type { OperatingSystem } from '../../../../../base/common/platform.js'; import { regExpLeadsToEndlessLoop } from '../../../../../base/common/strings.js'; import { isObject } from '../../../../../base/common/types.js'; +import { structuralEquals } from '../../../../../base/common/equals.js'; import { IConfigurationService, type IConfigurationValue } from '../../../../../platform/configuration/common/configuration.js'; import { TerminalChatAgentToolsSettingId } from '../common/terminalChatAgentToolsConfiguration.js'; import { isPowerShell } from './runInTerminalHelpers.js'; @@ -193,7 +194,7 @@ export class CommandLineAutoApprover extends Disposable { const isDefaultRule = !!( isObject(defaultValue) && key in defaultValue && - (defaultValue as Record)[key] === value + structuralEquals((defaultValue as Record)[key], value) ); if (typeof value === 'boolean') { const { regex, regexCaseInsensitive } = this._convertAutoApproveEntryToRegex(key); diff --git a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/test/browser/commandLineAutoApprover.test.ts b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/test/browser/commandLineAutoApprover.test.ts index 041b3461317ac..534b4dcb609a1 100644 --- a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/test/browser/commandLineAutoApprover.test.ts +++ b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/test/browser/commandLineAutoApprover.test.ts @@ -701,6 +701,302 @@ suite('CommandLineAutoApprover', () => { }); }); + suite('isDefaultRule logic', () => { + function getIsDefaultRule(command: string): boolean | undefined { + return commandLineAutoApprover.isCommandAutoApproved(command, shell, os).isDefaultRule; + } + + function getCommandLineIsDefaultRule(commandLine: string): boolean | undefined { + return commandLineAutoApprover.isCommandLineAutoApproved(commandLine).isDefaultRule; + } + + function setAutoApproveWithDefaults(userConfig: { [key: string]: boolean }, defaultConfig: { [key: string]: boolean }) { + // Set up mock configuration with default values + configurationService.setUserConfiguration(TerminalChatAgentToolsSettingId.AutoApprove, userConfig); + + // Mock the inspect method to return default values + const originalInspect = configurationService.inspect; + const originalGetValue = configurationService.getValue; + + configurationService.inspect = (key: string): any => { + if (key === TerminalChatAgentToolsSettingId.AutoApprove) { + return { + default: { value: defaultConfig }, + user: { value: userConfig }, + workspace: undefined, + workspaceFolder: undefined, + application: undefined, + policy: undefined, + memory: undefined, + value: { ...defaultConfig, ...userConfig } + }; + } + return originalInspect.call(configurationService, key); + }; + + configurationService.getValue = (key: string): any => { + if (key === TerminalChatAgentToolsSettingId.AutoApprove) { + return { ...defaultConfig, ...userConfig }; + } + return originalGetValue.call(configurationService, key); + }; + + // Trigger configuration update + configurationService.onDidChangeConfigurationEmitter.fire({ + affectsConfiguration: () => true, + affectedKeys: new Set([TerminalChatAgentToolsSettingId.AutoApprove]), + source: ConfigurationTarget.USER, + change: null!, + }); + } + + function setAutoApproveWithDefaultsCommandLine( + userConfig: { [key: string]: { approve: boolean; matchCommandLine?: boolean } | boolean }, + defaultConfig: { [key: string]: { approve: boolean; matchCommandLine?: boolean } | boolean } + ) { + // Set up mock configuration with default values for command line rules + configurationService.setUserConfiguration(TerminalChatAgentToolsSettingId.AutoApprove, userConfig); + + // Mock the inspect method to return default values + const originalInspect = configurationService.inspect; + const originalGetValue = configurationService.getValue; + + configurationService.inspect = (key: string): any => { + if (key === TerminalChatAgentToolsSettingId.AutoApprove) { + return { + default: { value: defaultConfig }, + user: { value: userConfig }, + workspace: undefined, + workspaceFolder: undefined, + application: undefined, + policy: undefined, + memory: undefined, + value: { ...defaultConfig, ...userConfig } + }; + } + return originalInspect.call(configurationService, key); + }; + + configurationService.getValue = (key: string): any => { + if (key === TerminalChatAgentToolsSettingId.AutoApprove) { + return { ...defaultConfig, ...userConfig }; + } + return originalGetValue.call(configurationService, key); + }; + + // Trigger configuration update + configurationService.onDidChangeConfigurationEmitter.fire({ + affectsConfiguration: () => true, + affectedKeys: new Set([TerminalChatAgentToolsSettingId.AutoApprove]), + source: ConfigurationTarget.USER, + change: null!, + }); + } + + test('should correctly identify default rules vs user-defined rules', () => { + setAutoApproveWithDefaults( + { "echo": true, "ls": true, "pwd": false }, + { "echo": true, "cat": true } + ); + + strictEqual(getIsDefaultRule('echo hello'), true, 'echo is in both default and user config with same value - should be marked as default'); + strictEqual(getIsDefaultRule('ls -la'), false, 'ls is only in user config - should be marked as user-defined'); + strictEqual(getIsDefaultRule('pwd'), false, 'pwd is only in user config - should be marked as user-defined'); + strictEqual(getIsDefaultRule('cat file.txt'), true, 'cat is in both default and user config with same value - should be marked as default'); + }); + + test('should mark as default when command is only in default config but not in user config', () => { + setAutoApproveWithDefaults( + { "echo": true, "ls": true }, // User config (cat is NOT here) + { "echo": true, "cat": true } // Default config (cat IS here) + ); + + // Test that merged config includes all commands + strictEqual(commandLineAutoApprover.isCommandAutoApproved('echo', shell, os).result, 'approved', 'echo should be approved'); + strictEqual(commandLineAutoApprover.isCommandAutoApproved('ls', shell, os).result, 'approved', 'ls should be approved'); + + // cat should be approved because it's in the merged config + const catResult = commandLineAutoApprover.isCommandAutoApproved('cat', shell, os); + strictEqual(catResult.result, 'approved', 'cat should be approved from default config'); + + // cat should be marked as default rule since it comes from default config only + strictEqual(catResult.isDefaultRule, true, 'cat is only in default config, not in user config - should be marked as default'); + }); + + test('should handle default rules with different values', () => { + setAutoApproveWithDefaults( + { "echo": true, "rm": true }, + { "echo": false, "rm": true } + ); + + strictEqual(getIsDefaultRule('echo hello'), false, 'echo has different values in default vs user - should be marked as user-defined'); + strictEqual(getIsDefaultRule('rm file.txt'), true, 'rm has same value in both - should be marked as default'); + }); + + test('should handle regex patterns as default rules', () => { + setAutoApproveWithDefaults( + { "/^git/": true, "/^npm/": false }, + { "/^git/": true, "/^docker/": true } + ); + + strictEqual(getIsDefaultRule('git status'), true, 'git pattern matches default - should be marked as default'); + strictEqual(getIsDefaultRule('npm install'), false, 'npm pattern is user-only - should be marked as user-defined'); + }); + + test('should handle mixed string and regex patterns', () => { + setAutoApproveWithDefaults( + { "echo": true, "/^ls/": false }, + { "echo": true, "cat": true } + ); + + strictEqual(getIsDefaultRule('echo hello'), true, 'String pattern matching default'); + strictEqual(getIsDefaultRule('ls -la'), false, 'Regex pattern user-defined'); + }); + + test('should handle command line rules with isDefaultRule', () => { + setAutoApproveWithDefaultsCommandLine( + { + "echo": { approve: true, matchCommandLine: true }, + "ls": { approve: false, matchCommandLine: true } + }, + { + "echo": { approve: true, matchCommandLine: true }, + "cat": { approve: true, matchCommandLine: true } + } + ); + + strictEqual(getCommandLineIsDefaultRule('echo hello world'), true, 'echo matches default config exactly using structural equality - should be marked as default'); + strictEqual(getCommandLineIsDefaultRule('ls -la'), false, 'ls is user-defined only - should be marked as user-defined'); + }); + + test('should handle command line rules with different matchCommandLine values', () => { + setAutoApproveWithDefaultsCommandLine( + { + "echo": { approve: true, matchCommandLine: true }, + "ls": { approve: true, matchCommandLine: false } + }, + { + "echo": { approve: true, matchCommandLine: false }, + "ls": { approve: true, matchCommandLine: false } + } + ); + + strictEqual(getCommandLineIsDefaultRule('echo hello'), false, 'echo has different matchCommandLine value - should be user-defined'); + strictEqual(getCommandLineIsDefaultRule('ls -la'), undefined, 'ls matches exactly - should be default (but won\'t match command line check since matchCommandLine is false)'); + }); + + test('should handle boolean vs object format consistency', () => { + setAutoApproveWithDefaultsCommandLine( + { + "echo": true, + "ls": { approve: true, matchCommandLine: true } + }, + { + "echo": true, + "ls": { approve: true, matchCommandLine: true } + } + ); + + strictEqual(getIsDefaultRule('echo hello'), true, 'Boolean format matching - should be default'); + strictEqual(getCommandLineIsDefaultRule('ls -la'), true, 'Object format matching using structural equality - should be default'); + }); + + test('should return undefined for noMatch cases', () => { + setAutoApproveWithDefaults( + { "echo": true }, + { "cat": true } + ); + + strictEqual(getIsDefaultRule('unknown-command'), undefined, 'Command that matches neither user nor default config'); + strictEqual(getCommandLineIsDefaultRule('unknown-command'), undefined, 'Command that matches neither user nor default config'); + }); + + test('should handle empty configurations', () => { + setAutoApproveWithDefaults( + {}, + {} + ); + + strictEqual(getIsDefaultRule('echo hello'), undefined); + strictEqual(getCommandLineIsDefaultRule('echo hello'), undefined); + }); + + test('should handle only default config with no user overrides', () => { + setAutoApproveWithDefaults( + {}, + { "echo": true, "ls": false } + ); + + strictEqual(getIsDefaultRule('echo hello'), true, 'Commands in default config should be marked as default rules even with empty user config'); + strictEqual(getIsDefaultRule('ls -la'), true, 'Commands in default config should be marked as default rules even with empty user config'); + }); + + test('should handle complex nested object rules', () => { + setAutoApproveWithDefaultsCommandLine( + { + "npm": { approve: true, matchCommandLine: true }, + "git": { approve: false, matchCommandLine: false } + }, + { + "npm": { approve: true, matchCommandLine: true }, + "docker": { approve: true, matchCommandLine: true } + } + ); + + strictEqual(getCommandLineIsDefaultRule('npm install'), true, 'npm matches default exactly using structural equality - should be default'); + strictEqual(getCommandLineIsDefaultRule('git status'), undefined, 'git is user-defined - should be user-defined (but won\'t match command line since matchCommandLine is false)'); + }); + + test('should handle PowerShell case-insensitive matching with defaults', () => { + shell = 'pwsh'; + os = OperatingSystem.Windows; + + setAutoApproveWithDefaults( + { "Get-Process": true }, + { "Get-Process": true } + ); + + strictEqual(getIsDefaultRule('Get-Process'), true, 'Case-insensitive PowerShell command matching default'); + strictEqual(getIsDefaultRule('get-process'), true, 'Case-insensitive PowerShell command matching default'); + strictEqual(getIsDefaultRule('GET-PROCESS'), true, 'Case-insensitive PowerShell command matching default'); + }); + + test('should use structural equality for object comparison', () => { + // Test that objects with same content but different instances are treated as equal + const userConfig = { "test": { approve: true, matchCommandLine: true } }; + const defaultConfig = { "test": { approve: true, matchCommandLine: true } }; + + setAutoApproveWithDefaultsCommandLine(userConfig, defaultConfig); + + strictEqual(getCommandLineIsDefaultRule('test command'), true, 'Even though userConfig and defaultConfig are different object instances, they have the same structure and values, so should be considered default'); + }); + + test('should detect structural differences in objects', () => { + const userConfig = { "test": { approve: true, matchCommandLine: true } }; + const defaultConfig = { "test": { approve: true, matchCommandLine: false } }; + + setAutoApproveWithDefaultsCommandLine(userConfig, defaultConfig); + + strictEqual(getCommandLineIsDefaultRule('test command'), false, 'Objects have different matchCommandLine values, so should be user-defined'); + }); + + test('should handle mixed types correctly', () => { + const userConfig = { + "cmd1": true, + "cmd2": { approve: false, matchCommandLine: true } + }; + const defaultConfig = { + "cmd1": true, + "cmd2": { approve: false, matchCommandLine: true } + }; + + setAutoApproveWithDefaultsCommandLine(userConfig, defaultConfig); + + strictEqual(getIsDefaultRule('cmd1 arg'), true, 'Boolean type should match default'); + strictEqual(getCommandLineIsDefaultRule('cmd2 arg'), true, 'Object type should match default using structural equality (even though it\'s a deny rule)'); + }); + }); + suite('environment variable handling', () => { test('should handle environment variable assignments before commands in bash/sh', () => { shell = 'bash'; From 6ab2ae6a3cdc58304eeb8eb34daddb6258aa3825 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Thu, 7 Aug 2025 04:52:02 -0700 Subject: [PATCH 0089/2080] Don't use compact, resolve active group for terminals Fixes #260302 --- .../contrib/terminal/browser/terminalActions.ts | 10 +--------- .../contrib/terminal/browser/terminalMenus.ts | 7 +++++-- .../contrib/terminal/browser/terminalService.ts | 11 +++++++++-- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/vs/workbench/contrib/terminal/browser/terminalActions.ts b/src/vs/workbench/contrib/terminal/browser/terminalActions.ts index 70d4ddeeae07f..1e628b884eb40 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalActions.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalActions.ts @@ -63,7 +63,6 @@ import { killTerminalIcon, newTerminalIcon } from './terminalIcons.js'; import { ITerminalQuickPickItem } from './terminalProfileQuickpick.js'; import { TerminalTabList } from './terminalTabsList.js'; import { ResourceContextKey } from '../../../common/contextkeys.js'; -import { timeout } from '../../../../base/common/async.js'; export const switchTerminalActionViewItemSeparator = '\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500'; export const switchTerminalShowTabsTitle = localize('showTerminalTabs', "Show Tabs"); @@ -361,17 +360,10 @@ export function registerTerminalActions() { run: async (c) => { const instance = await c.service.createTerminal({ location: { - viewColumn: AUX_WINDOW_GROUP, - auxiliary: { compact: true }, + viewColumn: AUX_WINDOW_GROUP }, }); await instance.focusWhenReady(); - // HACK: Since it's a new window it should be unlocked, despite the configuration, this - // is using a timeout as it's auto locked after several events firing in code internal - // to the editor. - await timeout(100); - const g = c.editorService.getInputFromResource(instance.resource).group; - g?.lock(false); } }); diff --git a/src/vs/workbench/contrib/terminal/browser/terminalMenus.ts b/src/vs/workbench/contrib/terminal/browser/terminalMenus.ts index 92009bec53e95..a00daae29bcb3 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalMenus.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalMenus.ts @@ -758,11 +758,14 @@ export function getTerminalActionBarArgs(location: ITerminalLocationOptions, pro const submenuActions: IAction[] = []; const splitLocation = (location === TerminalLocation.Editor || (typeof location === 'object' && 'viewColumn' in location && location.viewColumn === ACTIVE_GROUP)) ? { viewColumn: SIDE_GROUP } : { splitActiveTerminal: true }; + if (location === TerminalLocation.Editor) { + location = { viewColumn: ACTIVE_GROUP }; + } + dropdownActions.push(disposableStore.add(new Action(TerminalCommandId.New, terminalStrings.new, undefined, true, () => terminalService.createAndFocusTerminal()))); dropdownActions.push(disposableStore.add(new Action(TerminalCommandId.NewInNewWindow, terminalStrings.newInNewWindow.value, undefined, true, () => terminalService.createAndFocusTerminal({ location: { - viewColumn: AUX_WINDOW_GROUP, - auxiliary: { compact: true }, + viewColumn: AUX_WINDOW_GROUP } })))); dropdownActions.push(disposableStore.add(new Action(TerminalCommandId.Split, terminalStrings.split.value, undefined, true, () => terminalService.createAndFocusTerminal({ diff --git a/src/vs/workbench/contrib/terminal/browser/terminalService.ts b/src/vs/workbench/contrib/terminal/browser/terminalService.ts index dbdc998617667..b5b89286c413a 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalService.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalService.ts @@ -42,7 +42,7 @@ import { IRemoteTerminalAttachTarget, IStartExtensionTerminalRequest, ITerminalP import { TerminalContextKeys } from '../common/terminalContextKey.js'; import { columnToEditorGroup } from '../../../services/editor/common/editorGroupColumn.js'; import { IEditorGroupsService } from '../../../services/editor/common/editorGroupsService.js'; -import { ACTIVE_GROUP_TYPE, AUX_WINDOW_GROUP, AUX_WINDOW_GROUP_TYPE, IEditorService, SIDE_GROUP, SIDE_GROUP_TYPE } from '../../../services/editor/common/editorService.js'; +import { ACTIVE_GROUP, ACTIVE_GROUP_TYPE, AUX_WINDOW_GROUP, AUX_WINDOW_GROUP_TYPE, IEditorService, SIDE_GROUP, SIDE_GROUP_TYPE } from '../../../services/editor/common/editorService.js'; import { IWorkbenchEnvironmentService } from '../../../services/environment/common/environmentService.js'; import { IExtensionService } from '../../../services/extensions/common/extensions.js'; import { ILifecycleService, ShutdownReason, StartupKind, WillShutdownEvent } from '../../../services/lifecycle/common/lifecycle.js'; @@ -56,8 +56,9 @@ import { mark } from '../../../../base/common/performance.js'; import { DetachedTerminal } from './detachedTerminal.js'; import { ITerminalCapabilityImplMap, TerminalCapability } from '../../../../platform/terminal/common/capabilities/capabilities.js'; import { createInstanceCapabilityEventMultiplexer } from './terminalEvents.js'; -import { mainWindow } from '../../../../base/browser/window.js'; +import { isAuxiliaryWindow, mainWindow } from '../../../../base/browser/window.js'; import { GroupIdentifier } from '../../../common/editor.js'; +import { getActiveWindow } from '../../../../base/browser/dom.js'; export class TerminalService extends Disposable implements ITerminalService { declare _serviceBrand: undefined; @@ -1170,6 +1171,12 @@ export class TerminalService extends Disposable implements ITerminalService { private _getEditorOptions(location?: ITerminalLocationOptions): TerminalEditorLocation | undefined { if (location && typeof location === 'object' && 'viewColumn' in location) { + // Terminal-specific workaround to resolve the active group in auxiliary windows to + // override the locked editor behavior. + if (location.viewColumn === ACTIVE_GROUP && isAuxiliaryWindow(getActiveWindow())) { + location.viewColumn = this._editorGroupsService.activeGroup.id; + return location; + } location.viewColumn = columnToEditorGroup(this._editorGroupsService, this._configurationService, location.viewColumn); return location; } From fad6a96d86f9fc001b692b6f3461f1d907ddc201 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Thu, 7 Aug 2025 05:29:22 -0700 Subject: [PATCH 0090/2080] Bring back timingExecuteMs telemetry property Fixes #260103 --- .../chatAgentTools/browser/tools/runInTerminalTool.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts index b34c8d293961d..3b1c8bbe3a811 100644 --- a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts +++ b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts @@ -694,9 +694,9 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { shellIntegrationQuality: ShellIntegrationQuality; outputLineCount: number; timingConnectMs: number; + timingExecuteMs: number; pollDurationMs?: number; terminalExecutionIdleBeforeTimeout?: boolean; - timingExecuteMs: number; exitCode: number | undefined; inputUserChars: number; inputUserSigint: boolean; @@ -714,6 +714,7 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { nonZeroExitCode: -1 | 0 | 1; timingConnectMs: number; pollDurationMs: number; + timingExecuteMs: number; terminalExecutionIdleBeforeTimeout: boolean; inputUserChars: number; @@ -734,6 +735,7 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { outputLineCount: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'How many lines of output were produced, this is -1 when isBackground is true or if there\'s an error' }; nonZeroExitCode: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'Whether the command exited with a non-zero code (-1=error/unknown, 0=zero exit code, 1=non-zero)' }; timingConnectMs: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'How long the terminal took to start up and connect to' }; + timingExecuteMs: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'How long the terminal took to execute the command' }; pollDurationMs: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'How long the tool polled for output, this is undefined when isBackground is true or if there\'s an error' }; terminalExecutionIdleBeforeTimeout: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; isMeasurement: true; comment: 'Indicates whether a terminal became idle before the run-in-terminal tool timed out or was cancelled by the user. This occurs when no data events are received twice consecutively and the model determines, based on terminal output, that the command has completed.' }; @@ -751,6 +753,7 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { outputLineCount: state.outputLineCount, nonZeroExitCode: state.exitCode === undefined ? -1 : state.exitCode === 0 ? 0 : 1, timingConnectMs: state.timingConnectMs, + timingExecuteMs: state.timingExecuteMs, pollDurationMs: state.pollDurationMs ?? 0, terminalExecutionIdleBeforeTimeout: state.terminalExecutionIdleBeforeTimeout ?? false, From 7c543df0f1c7e3bf67a793f38d9ac8e65262ee7a Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Thu, 7 Aug 2025 05:55:04 -0700 Subject: [PATCH 0091/2080] Fix bad merge --- src/vs/platform/extensions/common/extensionsApiProposals.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/vs/platform/extensions/common/extensionsApiProposals.ts b/src/vs/platform/extensions/common/extensionsApiProposals.ts index 388dd4c34ff64..6292b923b14bf 100644 --- a/src/vs/platform/extensions/common/extensionsApiProposals.ts +++ b/src/vs/platform/extensions/common/extensionsApiProposals.ts @@ -251,6 +251,10 @@ const _allApiProposals = { languageModelSystem: { proposal: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.languageModelSystem.d.ts', }, + languageModelThinkingPart: { + proposal: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.languageModelThinkingPart.d.ts', + version: 1 + }, languageModelToolResultAudience: { proposal: 'https://raw.githubusercontent.com/microsoft/vscode/main/src/vscode-dts/vscode.proposed.languageModelToolResultAudience.d.ts', }, From cdbf66d5adae7983da7a2da52cf9802a3f9de452 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Thu, 7 Aug 2025 05:56:21 -0700 Subject: [PATCH 0092/2080] Get custom actions to show up --- .../toolInvocationParts/chatTerminalToolSubPart.ts | 7 ++++--- .../chatAgentTools/browser/tools/runInTerminalTool.ts | 4 +++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/vs/workbench/contrib/chat/browser/chatContentParts/toolInvocationParts/chatTerminalToolSubPart.ts b/src/vs/workbench/contrib/chat/browser/chatContentParts/toolInvocationParts/chatTerminalToolSubPart.ts index b3ed501118c61..8ba50a87ee862 100644 --- a/src/vs/workbench/contrib/chat/browser/chatContentParts/toolInvocationParts/chatTerminalToolSubPart.ts +++ b/src/vs/workbench/contrib/chat/browser/chatContentParts/toolInvocationParts/chatTerminalToolSubPart.ts @@ -57,7 +57,7 @@ export class TerminalConfirmationWidgetSubPart extends BaseChatToolInvocationSub terminalData = migrateLegacyTerminalToolSpecificData(terminalData); - const { title, message, disclaimer } = toolInvocation.confirmationMessages; + const { title, message, disclaimer, customActions } = toolInvocation.confirmationMessages; const continueLabel = localize('continue', "Continue"); const continueKeybinding = keybindingService.lookupKeybinding(AcceptToolConfirmationActionId)?.getLabel(); const continueTooltip = continueKeybinding ? `${continueLabel} (${continueKeybinding})` : continueLabel; @@ -69,13 +69,14 @@ export class TerminalConfirmationWidgetSubPart extends BaseChatToolInvocationSub { label: continueLabel, data: true, - tooltip: continueTooltip + tooltip: continueTooltip, + moreActions: customActions, }, { label: cancelLabel, data: false, isSecondary: true, - tooltip: cancelTooltip + tooltip: cancelTooltip, }]; const renderedMessage = this._register(this.renderer.render( typeof message === 'string' ? new MarkdownString(message) : message, diff --git a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts index c87bc9536a63c..59b426cf5fbe7 100644 --- a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts +++ b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts @@ -251,13 +251,15 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { disclaimer = new MarkdownString(`$(${Codicon.info.id}) ` + localize('runInTerminal.promptInjectionDisclaimer', 'Web content may contain malicious code or attempt prompt injection attacks.'), { supportThemeIcons: true }); } + const customActions = this._generateAutoApproveActions(args.command); + confirmationMessages = isAutoApproved ? undefined : { title: args.isBackground ? localize('runInTerminal.background', "Run command in background terminal") : localize('runInTerminal.foreground', "Run command in terminal"), message: new MarkdownString(args.explanation), disclaimer, - customActions: this._generateAutoApproveActions(args.command), + customActions, }; } From 7290fb11aa5fdc505b1bd57b60e0b99a6201462e Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Thu, 7 Aug 2025 15:00:28 +0200 Subject: [PATCH 0093/2080] Critical Data Loss Bug in Encoding Handling: Ctrl+Z Causes Permanent Content Corruption (fix #259409) (#260288) --- .../browser/parts/editor/editorStatus.ts | 21 ++++++++++++++++++- .../contrib/scm/browser/quickDiffModel.ts | 4 ++-- .../textfile/common/textFileEditorModel.ts | 4 ++-- .../test/browser/textFileEditorModel.test.ts | 8 +++---- 4 files changed, 27 insertions(+), 10 deletions(-) diff --git a/src/vs/workbench/browser/parts/editor/editorStatus.ts b/src/vs/workbench/browser/parts/editor/editorStatus.ts index 6170eb898081c..89b22ed44ad47 100644 --- a/src/vs/workbench/browser/parts/editor/editorStatus.ts +++ b/src/vs/workbench/browser/parts/editor/editorStatus.ts @@ -57,6 +57,7 @@ import { KeyChord, KeyCode, KeyMod } from '../../../../base/common/keyCodes.js'; import { TabFocus } from '../../../../editor/browser/config/tabFocus.js'; import { IEditorGroupsService, IEditorPart } from '../../../services/editor/common/editorGroupsService.js'; import { InputMode } from '../../../../editor/common/inputMode.js'; +import { IDialogService } from '../../../../platform/dialogs/common/dialogs.js'; class SideBySideEditorEncodingSupport implements IEncodingSupport { constructor(private primary: IEncodingSupport, private secondary: IEncodingSupport) { } @@ -1456,6 +1457,7 @@ export class ChangeEncodingAction extends Action2 { const fileService = accessor.get(IFileService); const textFileService = accessor.get(ITextFileService); const textResourceConfigurationService = accessor.get(ITextResourceConfigurationService); + const dialogService = accessor.get(IDialogService); const activeTextEditorControl = getCodeEditor(editorService.activeTextEditorControl); if (!activeTextEditorControl) { @@ -1577,7 +1579,24 @@ export class ChangeEncodingAction extends Action2 { const activeEncodingSupport = toEditorWithEncodingSupport(editorService.activeEditorPane.input); if (typeof encoding.id !== 'undefined' && activeEncodingSupport) { - await activeEncodingSupport.setEncoding(encoding.id, isReopenWithEncoding ? EncodingMode.Decode : EncodingMode.Encode); // Set new encoding + + // Re-open with encoding does not work on dirty editors, ask to revert + if (isReopenWithEncoding && editorService.activeEditorPane.input.isDirty()) { + const { confirmed } = await dialogService.confirm({ + message: localize('reopenWithEncodingWarning', "Do you want to revert the active text editor and reopen with a different encoding?"), + detail: localize('reopenWithEncodingDetail', "This will discard any unsaved changes."), + primaryButton: localize('reopen', "Discard Changes and Reopen") + }); + + if (!confirmed) { + return; + } + + await editorService.activeEditorPane.input.revert(editorService.activeEditorPane.group.id); + } + + // Set new encoding + await activeEncodingSupport.setEncoding(encoding.id, isReopenWithEncoding ? EncodingMode.Decode : EncodingMode.Encode); } activeTextEditorControl.focus(); diff --git a/src/vs/workbench/contrib/scm/browser/quickDiffModel.ts b/src/vs/workbench/contrib/scm/browser/quickDiffModel.ts index d3cda3b80d6b3..1a5e7a41aad80 100644 --- a/src/vs/workbench/contrib/scm/browser/quickDiffModel.ts +++ b/src/vs/workbench/contrib/scm/browser/quickDiffModel.ts @@ -378,11 +378,11 @@ export class QuickDiffModel extends Disposable { this._originalEditorModels.set(quickDiff.originalResource, ref.object); - if (isTextFileEditorModel(ref.object)) { + if (isTextFileEditorModel(ref.object) && !ref.object.isDirty()) { const encoding = this._model.getEncoding(); if (encoding) { - ref.object.setEncoding(encoding, EncodingMode.Decode); + (ref.object as ITextFileEditorModel).setEncoding(encoding, EncodingMode.Decode); } } diff --git a/src/vs/workbench/services/textfile/common/textFileEditorModel.ts b/src/vs/workbench/services/textfile/common/textFileEditorModel.ts index 2fa6cb383e0b0..8023955b9a952 100644 --- a/src/vs/workbench/services/textfile/common/textFileEditorModel.ts +++ b/src/vs/workbench/services/textfile/common/textFileEditorModel.ts @@ -1151,8 +1151,8 @@ export class TextFileEditorModel extends BaseTextEditorModel implements ITextFil return; // return early if the encoding is already the same } - if (this.isDirty() && !this.inConflictMode) { - await this.save(); + if (this.isDirty()) { + throw new Error('Cannot re-open a dirty text document with different encoding. Save it first.'); } this.updatePreferredEncoding(encoding); diff --git a/src/vs/workbench/services/textfile/test/browser/textFileEditorModel.test.ts b/src/vs/workbench/services/textfile/test/browser/textFileEditorModel.test.ts index cde036203e026..5bdb6860d65ae 100644 --- a/src/vs/workbench/services/textfile/test/browser/textFileEditorModel.test.ts +++ b/src/vs/workbench/services/textfile/test/browser/textFileEditorModel.test.ts @@ -8,7 +8,7 @@ import { IInstantiationService } from '../../../../../platform/instantiation/com import { TextFileEditorModel } from '../../common/textFileEditorModel.js'; import { EncodingMode, TextFileEditorModelState, snapshotToString, isTextFileEditorModel, ITextFileEditorModelSaveEvent } from '../../common/textfiles.js'; import { createFileEditorInput, workbenchInstantiationService, TestServiceAccessor, TestReadonlyTextFileEditorModel, getLastResolvedFileStat } from '../../../../test/browser/workbenchTestServices.js'; -import { ensureNoDisposablesAreLeakedInTestSuite, toResource } from '../../../../../base/test/common/utils.js'; +import { assertThrowsAsync, ensureNoDisposablesAreLeakedInTestSuite, toResource } from '../../../../../base/test/common/utils.js'; import { TextFileEditorModelManager } from '../../common/textFileEditorModelManager.js'; import { FileOperationResult, FileOperationError, NotModifiedSinceFileOperationError } from '../../../../../platform/files/common/files.js'; import { DeferredPromise, timeout } from '../../../../../base/common/async.js'; @@ -318,7 +318,7 @@ suite('Files - TextFileEditorModel', () => { assert.ok(model.isResolved()); // model got resolved due to decoding }); - test('setEncoding - decode dirty file saves first', async function () { + test('setEncoding - decode dirty file throws', async function () { const model: TextFileEditorModel = disposables.add(instantiationService.createInstance(TextFileEditorModel, toResource.call(this, '/path/index_async.txt'), 'utf8', undefined)); accessor.workingCopyService.testUnregisterWorkingCopy(model); // causes issues with subsequent resolves otherwise @@ -327,9 +327,7 @@ suite('Files - TextFileEditorModel', () => { model.updateTextEditorModel(createTextBufferFactory('bar')); assert.strictEqual(model.isDirty(), true); - await model.setEncoding('utf16', EncodingMode.Decode); - - assert.strictEqual(model.isDirty(), false); + assertThrowsAsync(() => model.setEncoding('utf16', EncodingMode.Decode)); }); test('encoding updates with language based configuration', async function () { From 011bf276807145d3f608f82621d38b79e88e362e Mon Sep 17 00:00:00 2001 From: Henning Dieterichs Date: Mon, 4 Aug 2025 10:57:30 +0200 Subject: [PATCH 0094/2080] Adds doc comments to IStatusbarEntry.content --- src/vs/workbench/services/statusbar/browser/statusbar.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/vs/workbench/services/statusbar/browser/statusbar.ts b/src/vs/workbench/services/statusbar/browser/statusbar.ts index 82ddbed0ef16e..ed3a2461801a1 100644 --- a/src/vs/workbench/services/statusbar/browser/statusbar.ts +++ b/src/vs/workbench/services/statusbar/browser/statusbar.ts @@ -215,6 +215,10 @@ export interface IStatusbarEntry { */ readonly extensionId?: string; + /** + * Allows to add content with custom rendering to the status bar entry. + * If possible, use `text` instead. + */ readonly content?: HTMLElement; } From 720bac192b2ce0bcda5ba4749494881ca2fa9413 Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Thu, 7 Aug 2025 15:26:21 +0200 Subject: [PATCH 0095/2080] debt - remove some unused code (#260283) --- src/vs/base/common/async.ts | 26 --------- src/vs/base/common/event.ts | 18 ------ src/vs/base/common/lifecycle.ts | 29 ---------- src/vs/base/common/strings.ts | 28 ---------- src/vs/base/test/common/event.test.ts | 44 +-------------- src/vs/base/test/common/lifecycle.test.ts | 21 +------ src/vs/base/test/common/strings.test.ts | 18 ------ src/vs/platform/progress/common/progress.ts | 55 ------------------- .../progress/test/common/progress.test.ts | 53 ------------------ .../common/editor/editorGroupModel.ts | 17 ------ 10 files changed, 2 insertions(+), 307 deletions(-) delete mode 100644 src/vs/platform/progress/test/common/progress.test.ts diff --git a/src/vs/base/common/async.ts b/src/vs/base/common/async.ts index 613eb22948171..695106a2dbd5e 100644 --- a/src/vs/base/common/async.ts +++ b/src/vs/base/common/async.ts @@ -161,32 +161,6 @@ export function raceTimeout(promise: Promise, timeout: number, onTimeout?: ]); } -export function raceFilter(promises: Promise[], filter: (result: T) => boolean): Promise { - return new Promise((resolve, reject) => { - if (promises.length === 0) { - resolve(undefined); - return; - } - - let resolved = false; - let unresolvedCount = promises.length; - for (const promise of promises) { - promise.then(result => { - unresolvedCount--; - if (!resolved) { - if (filter(result)) { - resolved = true; - resolve(result); - } else if (unresolvedCount === 0) { - // Last one has to resolve the promise - resolve(undefined); - } - } - }).catch(reject); - } - }); -} - export function asPromise(callback: () => T | Thenable): Promise { return new Promise((resolve, reject) => { const item = callback(); diff --git a/src/vs/base/common/event.ts b/src/vs/base/common/event.ts index 5ec4c00022be5..5a33d03fcf14c 100644 --- a/src/vs/base/common/event.ts +++ b/src/vs/base/common/event.ts @@ -611,24 +611,6 @@ export namespace Event { return promise; } - /** - * Creates an event out of a promise that fires once when the promise is - * resolved with the result of the promise or `undefined`. - */ - export function fromPromise(promise: Promise): Event { - const result = new Emitter(); - - promise.then(res => { - result.fire(res); - }, () => { - result.fire(undefined); - }).finally(() => { - result.dispose(); - }); - - return result.event; - } - /** * A convenience function for forwarding an event to another emitter which * improves readability. diff --git a/src/vs/base/common/lifecycle.ts b/src/vs/base/common/lifecycle.ts index 9ef7faaa0a22d..2b4415db3d7a1 100644 --- a/src/vs/base/common/lifecycle.ts +++ b/src/vs/base/common/lifecycle.ts @@ -634,35 +634,6 @@ export class RefCountedDisposable { } } -/** - * A safe disposable can be `unset` so that a leaked reference (listener) - * can be cut-off. - */ -export class SafeDisposable implements IDisposable { - - dispose: () => void = () => { }; - unset: () => void = () => { }; - isset: () => boolean = () => false; - - constructor() { - trackDisposable(this); - } - - set(fn: Function) { - let callback: Function | undefined = fn; - this.unset = () => callback = undefined; - this.isset = () => callback !== undefined; - this.dispose = () => { - if (callback) { - callback(); - callback = undefined; - markAsDisposed(this); - } - }; - return this; - } -} - export interface IReference extends IDisposable { readonly object: T; } diff --git a/src/vs/base/common/strings.ts b/src/vs/base/common/strings.ts index 58f94f52efc5f..a9957139b7b82 100644 --- a/src/vs/base/common/strings.ts +++ b/src/vs/base/common/strings.ts @@ -782,34 +782,6 @@ export function lcut(text: string, n: number, prefix = ''): string { return prefix + trimmed.substring(i).trimStart(); } -/** - * Given a string and a max length returns a shorted version. Shorting - * happens at favorable positions - such as whitespace or punctuation characters. - * The return value can be longer than the given value of `n`. Trailing whitespace is always trimmed. - */ -export function rcut(text: string, n: number, suffix = ''): string { - const trimmed = text.trimEnd(); - - if (trimmed.length < n) { - return trimmed; - } - - const parts = text.split(/\b/); - let result = ''; - for (const part of parts) { - if (result.length > 0 && result.length + part.length > n) { - break; - } - result += part; - } - - if (result === trimmed) { - return result; - } - - return result.trim().replace(/b$/, '') + suffix; -} - // Defacto standard: https://invisible-island.net/xterm/ctlseqs/ctlseqs.html const CSI_SEQUENCE = /(?:\x1b\[|\x9b)[=?>!]?[\d;:]*["$#'* ]?[a-zA-Z@^`{}|~]/; const OSC_SEQUENCE = /(?:\x1b\]|\x9d).*?(?:\x1b\\|\x07|\x9c)/; diff --git a/src/vs/base/test/common/event.test.ts b/src/vs/base/test/common/event.test.ts index 3e39867527297..c081f420c1eff 100644 --- a/src/vs/base/test/common/event.test.ts +++ b/src/vs/base/test/common/event.test.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import assert from 'assert'; import { stub } from 'sinon'; -import { DeferredPromise, timeout } from '../../common/async.js'; +import { timeout } from '../../common/async.js'; import { CancellationToken } from '../../common/cancellation.js'; import { errorHandler, setUnexpectedErrorHandler } from '../../common/errors.js'; import { AsyncEmitter, DebounceEmitter, DynamicListEventMultiplexer, Emitter, Event, EventBufferer, EventMultiplexer, IWaitUntil, ListenerLeakError, ListenerRefusalError, MicrotaskEmitter, PauseableEmitter, Relay, createEventDeliveryQueue } from '../../common/event.js'; @@ -1221,48 +1221,6 @@ suite('Event utils', () => { listener.dispose(); // should not crash }); - suite('fromPromise', () => { - - test('not yet resolved', async function () { - return new Promise(resolve => { - let promise = new DeferredPromise(); - - ds.add(Event.fromPromise(promise.p)(e => { - assert.strictEqual(e, 1); - - promise = new DeferredPromise(); - - ds.add(Event.fromPromise(promise.p)(() => { - resolve(); - })); - - promise.error(undefined); - })); - - promise.complete(1); - }); - }); - - test('already resolved', async function () { - return new Promise(resolve => { - let promise = new DeferredPromise(); - promise.complete(1); - - ds.add(Event.fromPromise(promise.p)(e => { - assert.strictEqual(e, 1); - - promise = new DeferredPromise(); - promise.error(undefined); - - ds.add(Event.fromPromise(promise.p)(() => { - resolve(); - })); - })); - - }); - }); - }); - suite('Relay', () => { test('should input work', () => { const e1 = ds.add(new Emitter()); diff --git a/src/vs/base/test/common/lifecycle.test.ts b/src/vs/base/test/common/lifecycle.test.ts index 6576cab31bdea..33c51b79b90ae 100644 --- a/src/vs/base/test/common/lifecycle.test.ts +++ b/src/vs/base/test/common/lifecycle.test.ts @@ -5,7 +5,7 @@ import assert from 'assert'; import { Emitter } from '../../common/event.js'; -import { DisposableStore, dispose, IDisposable, markAsSingleton, ReferenceCollection, SafeDisposable, thenIfNotDisposed, toDisposable } from '../../common/lifecycle.js'; +import { DisposableStore, dispose, IDisposable, markAsSingleton, ReferenceCollection, thenIfNotDisposed, toDisposable } from '../../common/lifecycle.js'; import { ensureNoDisposablesAreLeakedInTestSuite, throwIfDisposablesAreLeaked } from './utils.js'; class Disposable implements IDisposable { @@ -108,25 +108,6 @@ suite('Lifecycle', () => { const setValues2 = dispose(setValues); assert.ok(setValues === setValues2); }); - - test('SafeDisposable, dispose', function () { - let disposed = 0; - const actual = () => disposed += 1; - const d = new SafeDisposable(); - d.set(actual); - d.dispose(); - assert.strictEqual(disposed, 1); - }); - - test('SafeDisposable, unset', function () { - let disposed = 0; - const actual = () => disposed += 1; - const d = new SafeDisposable(); - d.set(actual); - d.unset(); - d.dispose(); - assert.strictEqual(disposed, 0); - }); }); suite('DisposableStore', () => { diff --git a/src/vs/base/test/common/strings.test.ts b/src/vs/base/test/common/strings.test.ts index 9355afd375dd9..8b7656f4758eb 100644 --- a/src/vs/base/test/common/strings.test.ts +++ b/src/vs/base/test/common/strings.test.ts @@ -155,24 +155,6 @@ suite('Strings', () => { assert.strictEqual(strings.lcut('............a', 10, '…'), '............a'); }); - suite('rcut', () => { - test('basic truncation', () => { - assert.strictEqual(strings.rcut('foo bar', 0), 'foo'); - assert.strictEqual(strings.rcut('foo bar', 1), 'foo'); - assert.strictEqual(strings.rcut('foo bar', 4), 'foo'); - assert.strictEqual(strings.rcut('foo bar', 7), 'foo bar'); - assert.strictEqual(strings.rcut('test string 0.1.2.3', 3), 'test'); - }); - - test('truncation with suffix', () => { - assert.strictEqual(strings.rcut('foo bar', 0, '…'), 'foo…'); - assert.strictEqual(strings.rcut('foo bar', 1, '…'), 'foo…'); - assert.strictEqual(strings.rcut('foo bar', 4, '…'), 'foo…'); - assert.strictEqual(strings.rcut('foo bar', 7, '…'), 'foo bar'); - assert.strictEqual(strings.rcut('test string 0.1.2.3', 3, '…'), 'test…'); - }); - }); - test('escape', () => { assert.strictEqual(strings.escape(''), ''); assert.strictEqual(strings.escape('foo'), 'foo'); diff --git a/src/vs/platform/progress/common/progress.ts b/src/vs/platform/progress/common/progress.ts index 169f9fa6a9be9..5780df6be3266 100644 --- a/src/vs/platform/progress/common/progress.ts +++ b/src/vs/platform/progress/common/progress.ts @@ -123,61 +123,6 @@ export class Progress implements IProgress { } } -export class AsyncProgress implements IProgress { - - private _value?: T; - get value(): T | undefined { return this._value; } - - private _asyncQueue?: T[]; - private _processingAsyncQueue?: boolean; - private _drainListener: (() => void) | undefined; - - constructor(private callback: (data: T) => unknown) { } - - report(item: T) { - if (!this._asyncQueue) { - this._asyncQueue = [item]; - } else { - this._asyncQueue.push(item); - } - this._processAsyncQueue(); - } - - private async _processAsyncQueue() { - if (this._processingAsyncQueue) { - return; - } - try { - this._processingAsyncQueue = true; - - while (this._asyncQueue && this._asyncQueue.length) { - const item = this._asyncQueue.shift()!; - this._value = item; - await this.callback(this._value); - } - - } finally { - this._processingAsyncQueue = false; - const drainListener = this._drainListener; - this._drainListener = undefined; - drainListener?.(); - } - } - - drain(): Promise { - if (this._processingAsyncQueue) { - return new Promise(resolve => { - const prevListener = this._drainListener; - this._drainListener = () => { - prevListener?.(); - resolve(); - }; - }); - } - return Promise.resolve(); - } -} - /** * A helper to show progress during a long running operation. If the operation * is started multiple times, only the last invocation will drive the progress. diff --git a/src/vs/platform/progress/test/common/progress.test.ts b/src/vs/platform/progress/test/common/progress.test.ts deleted file mode 100644 index b3be8cf8064f5..0000000000000 --- a/src/vs/platform/progress/test/common/progress.test.ts +++ /dev/null @@ -1,53 +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 assert from 'assert'; -import { runWithFakedTimers } from '../../../../base/test/common/timeTravelScheduler.js'; -import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'; -import { AsyncProgress } from '../../common/progress.js'; - -suite('Progress', () => { - - ensureNoDisposablesAreLeakedInTestSuite(); - - test('multiple report calls are processed in sequence', async () => { - await runWithFakedTimers({ useFakeTimers: true, maxTaskCount: 100 }, async () => { - const executionOrder: string[] = []; - const timeout = (time: number) => { - return new Promise(resolve => setTimeout(resolve, time)); - }; - const executor = async (value: number) => { - executionOrder.push(`start ${value}`); - if (value === 1) { - // 1 is slowest - await timeout(100); - } else if (value === 2) { - // 2 is also slow - await timeout(50); - } else { - // 3 is fast - await timeout(10); - } - executionOrder.push(`end ${value}`); - }; - const progress = new AsyncProgress(executor); - - progress.report(1); - progress.report(2); - progress.report(3); - - await timeout(1000); - - assert.deepStrictEqual(executionOrder, [ - 'start 1', - 'end 1', - 'start 2', - 'end 2', - 'start 3', - 'end 3', - ]); - }); - }); -}); diff --git a/src/vs/workbench/common/editor/editorGroupModel.ts b/src/vs/workbench/common/editor/editorGroupModel.ts index 4ee4cf9806aa8..f7c03af3c2cda 100644 --- a/src/vs/workbench/common/editor/editorGroupModel.ts +++ b/src/vs/workbench/common/editor/editorGroupModel.ts @@ -55,23 +55,6 @@ export function isSerializedEditorGroupModel(group?: unknown): group is ISeriali return !!(candidate && typeof candidate === 'object' && Array.isArray(candidate.editors) && Array.isArray(candidate.mru)); } -export interface IMatchOptions { - - /** - * Whether to consider a side by side editor as matching. - * By default, side by side editors will not be considered - * as matching, even if the editor is opened in one of the sides. - */ - readonly supportSideBySide?: SideBySideEditor.ANY | SideBySideEditor.BOTH; - - /** - * Only consider an editor to match when the - * `candidate === editor` but not when - * `candidate.matches(editor)`. - */ - readonly strictEquals?: boolean; -} - export interface IGroupModelChangeEvent { /** From 6b88059f6fd2eb8a8cd9f81d93e955b1f805e9fc Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Thu, 7 Aug 2025 06:39:55 -0700 Subject: [PATCH 0096/2080] Get all confirm actions working --- .../chatTerminalToolSubPart.ts | 65 ++++++++++++++++++- .../terminal/terminalContribExports.ts | 3 +- .../browser/tools/runInTerminalTool.ts | 24 ++++++- 3 files changed, 85 insertions(+), 7 deletions(-) diff --git a/src/vs/workbench/contrib/chat/browser/chatContentParts/toolInvocationParts/chatTerminalToolSubPart.ts b/src/vs/workbench/contrib/chat/browser/chatContentParts/toolInvocationParts/chatTerminalToolSubPart.ts index 8ba50a87ee862..bfab7fd029808 100644 --- a/src/vs/workbench/contrib/chat/browser/chatContentParts/toolInvocationParts/chatTerminalToolSubPart.ts +++ b/src/vs/workbench/contrib/chat/browser/chatContentParts/toolInvocationParts/chatTerminalToolSubPart.ts @@ -4,18 +4,23 @@ *--------------------------------------------------------------------------------------------*/ import * as dom from '../../../../../../base/browser/dom.js'; +import { ErrorNoTelemetry } from '../../../../../../base/common/errors.js'; import { MarkdownString, type IMarkdownString } from '../../../../../../base/common/htmlContent.js'; import { thenIfNotDisposed } from '../../../../../../base/common/lifecycle.js'; import { Schemas } from '../../../../../../base/common/network.js'; +import { isObject } from '../../../../../../base/common/types.js'; import { URI } from '../../../../../../base/common/uri.js'; import { generateUuid } from '../../../../../../base/common/uuid.js'; import { MarkdownRenderer } from '../../../../../../editor/browser/widget/markdownRenderer/browser/markdownRenderer.js'; import { ILanguageService } from '../../../../../../editor/common/languages/language.js'; import { IModelService } from '../../../../../../editor/common/services/model.js'; import { localize } from '../../../../../../nls.js'; +import { ConfigurationTarget, IConfigurationService } from '../../../../../../platform/configuration/common/configuration.js'; import { IContextKeyService } from '../../../../../../platform/contextkey/common/contextkey.js'; import { IInstantiationService } from '../../../../../../platform/instantiation/common/instantiation.js'; import { IKeybindingService } from '../../../../../../platform/keybinding/common/keybinding.js'; +import { IPreferencesService } from '../../../../../services/preferences/common/preferences.js'; +import { TerminalContribSettingId } from '../../../../terminal/terminalContribExports.js'; import { migrateLegacyTerminalToolSpecificData } from '../../../common/chat.js'; import { ChatContextKeys } from '../../../common/chatContextKeys.js'; import { IChatToolInvocation, type IChatTerminalToolInvocationData, type ILegacyChatTerminalToolInvocationData } from '../../../common/chatService.js'; @@ -29,6 +34,19 @@ import { IChatContentPartRenderContext } from '../chatContentParts.js'; import { ChatMarkdownContentPart, EditorPool } from '../chatMarkdownContentPart.js'; import { BaseChatToolInvocationSubPart } from './chatToolInvocationSubPart.js'; +export interface ITerminalNewAutoApproveRule { + key: string; + value: boolean | { + approve: boolean; + matchCommandLine?: boolean; + }; +} + +export type TerminalNewAutoApproveButtonData = ( + { type: 'configure' } | + { type: 'newRule'; rule: ITerminalNewAutoApproveRule } +); + export class TerminalConfirmationWidgetSubPart extends BaseChatToolInvocationSubPart { public readonly domNode: HTMLElement; public readonly codeblocks: IChatCodeBlockInfo[] = []; @@ -46,8 +64,10 @@ export class TerminalConfirmationWidgetSubPart extends BaseChatToolInvocationSub @IKeybindingService keybindingService: IKeybindingService, @IModelService private readonly modelService: IModelService, @ILanguageService private readonly languageService: ILanguageService, + @IConfigurationService private readonly configurationService: IConfigurationService, @IContextKeyService private readonly contextKeyService: IContextKeyService, @IChatWidgetService private readonly chatWidgetService: IChatWidgetService, + @IPreferencesService private readonly preferencesService: IPreferencesService, ) { super(toolInvocation); @@ -143,9 +163,48 @@ export class TerminalConfirmationWidgetSubPart extends BaseChatToolInvocationSub } ChatContextKeys.Editing.hasToolConfirmation.bindTo(this.contextKeyService).set(true); - this._register(confirmWidget.onDidClick(button => { - toolInvocation.confirmed.complete(button.data); - this.chatWidgetService.getWidgetBySessionId(this.context.element.sessionId)?.focusInput(); + this._register(confirmWidget.onDidClick(async button => { + let doComplete = true; + const data = button.data as TerminalNewAutoApproveButtonData | boolean; + if (typeof data !== 'boolean') { + switch (data.type) { + case 'newRule': { + const inspect = this.configurationService.inspect(TerminalContribSettingId.AutoApprove); + const oldValue = (inspect.user?.value as Record | undefined) ?? {}; + let newValue: Record; + if (isObject(oldValue)) { + newValue = { + ...oldValue, + [data.rule.key]: data.rule.value + }; + } else { + this.preferencesService.openSettings({ + jsonEditor: true, + target: ConfigurationTarget.USER, + revealSetting: { + key: TerminalContribSettingId.AutoApprove + }, + }); + throw new ErrorNoTelemetry(`Cannot add new rule \`${data.rule.key}\`: \`${JSON.stringify(data.rule.value)}\`, existing setting is unexpected format`); + } + await this.configurationService.updateValue(TerminalContribSettingId.AutoApprove, newValue); + break; + } + case 'configure': { + this.preferencesService.openSettings({ + jsonEditor: false, + target: ConfigurationTarget.USER, + query: `@id:${TerminalContribSettingId.AutoApprove}`, + }); + doComplete = false; + break; + } + } + } + if (doComplete) { + toolInvocation.confirmed.complete(button.data); + this.chatWidgetService.getWidgetBySessionId(this.context.element.sessionId)?.focusInput(); + } })); this._register(confirmWidget.onDidChangeHeight(() => this._onDidChangeHeight.fire())); toolInvocation.confirmed.p.then(() => { diff --git a/src/vs/workbench/contrib/terminal/terminalContribExports.ts b/src/vs/workbench/contrib/terminal/terminalContribExports.ts index d85eb8325573c..e10910b18e694 100644 --- a/src/vs/workbench/contrib/terminal/terminalContribExports.ts +++ b/src/vs/workbench/contrib/terminal/terminalContribExports.ts @@ -8,7 +8,7 @@ import { TerminalAccessibilityCommandId, defaultTerminalAccessibilityCommandsToS import { terminalAccessibilityConfiguration } from '../terminalContrib/accessibility/common/terminalAccessibilityConfiguration.js'; import { terminalAutoRepliesConfiguration } from '../terminalContrib/autoReplies/common/terminalAutoRepliesConfiguration.js'; import { terminalInitialHintConfiguration } from '../terminalContrib/chat/common/terminalInitialHintConfiguration.js'; -import { terminalChatAgentToolsConfiguration } from '../terminalContrib/chatAgentTools/common/terminalChatAgentToolsConfiguration.js'; +import { terminalChatAgentToolsConfiguration, TerminalChatAgentToolsSettingId } from '../terminalContrib/chatAgentTools/common/terminalChatAgentToolsConfiguration.js'; import { terminalCommandGuideConfiguration } from '../terminalContrib/commandGuide/common/terminalCommandGuideConfiguration.js'; import { TerminalDeveloperCommandId } from '../terminalContrib/developer/common/terminal.developer.js'; import { defaultTerminalFindCommandToSkipShell } from '../terminalContrib/find/common/terminal.find.js'; @@ -33,6 +33,7 @@ export const enum TerminalContribCommandId { export const enum TerminalContribSettingId { StickyScrollEnabled = TerminalStickyScrollSettingId.Enabled, SuggestEnabled = TerminalSuggestSettingId.Enabled, + AutoApprove = TerminalChatAgentToolsSettingId.AutoApprove, } // Export configuration schemes from terminalContrib - this is an exception to the eslint rule since diff --git a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts index 59b426cf5fbe7..bbfeaa30b096e 100644 --- a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts +++ b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts @@ -38,6 +38,7 @@ import { isPowerShell } from '../runInTerminalHelpers.js'; import { extractInlineSubCommands, splitCommandLineIntoSubCommands } from '../subCommands.js'; import { ShellIntegrationQuality, ToolTerminalCreator, type IToolTerminal } from '../toolTerminalCreator.js'; import { Codicon } from '../../../../../../base/common/codicons.js'; +import type { TerminalNewAutoApproveButtonData } from '../../../../chat/browser/chatContentParts/toolInvocationParts/chatTerminalToolSubPart.js'; const TERMINAL_SESSION_STORAGE_KEY = 'chat.terminalSessions'; @@ -772,7 +773,16 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { actions.push({ label: localize('autoApprove.exactCommand', 'Always allow `{0}`', command), tooltip: localize('autoApprove.exactCommandTooltip', 'Always allow this exact command to run without confirmation'), - data: { type: 'exact', command } + data: { + type: 'newRule', + rule: { + key: command, + value: { + approve: true, + matchCommandLine: true + } + } + } satisfies TerminalNewAutoApproveButtonData }); // Add action for base command prefix match (only if different from exact and has arguments) @@ -780,7 +790,13 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { actions.push({ label: localize('autoApprove.baseCommand', 'Always allow `{0}` commands', baseCommand), tooltip: localize('autoApprove.baseCommandTooltip', 'Always allow commands starting with `{0}` to run without confirmation', baseCommand), - data: { type: 'prefix', command: baseCommand } + data: { + type: 'newRule', + rule: { + key: baseCommand, + value: true + } + } satisfies TerminalNewAutoApproveButtonData }); } @@ -788,7 +804,9 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { actions.push({ label: localize('autoApprove.configure', 'Configure auto approve...'), tooltip: localize('autoApprove.configureTooltip', 'Open settings to configure terminal command auto approval'), - data: { type: 'configure' } + data: { + type: 'configure' + } satisfies TerminalNewAutoApproveButtonData }); return actions; From 78bbc18fa273a1b096da4d6e72bdebb4d50805ef Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Thu, 7 Aug 2025 06:59:38 -0700 Subject: [PATCH 0097/2080] Improve actions --- .../chatTerminalToolSubPart.ts | 13 ++- .../browser/commandLineAutoApprover.ts | 5 ++ .../browser/tools/runInTerminalTool.ts | 80 ++++++++++--------- 3 files changed, 58 insertions(+), 40 deletions(-) diff --git a/src/vs/workbench/contrib/chat/browser/chatContentParts/toolInvocationParts/chatTerminalToolSubPart.ts b/src/vs/workbench/contrib/chat/browser/chatContentParts/toolInvocationParts/chatTerminalToolSubPart.ts index bfab7fd029808..bd8a283c02d1f 100644 --- a/src/vs/workbench/contrib/chat/browser/chatContentParts/toolInvocationParts/chatTerminalToolSubPart.ts +++ b/src/vs/workbench/contrib/chat/browser/chatContentParts/toolInvocationParts/chatTerminalToolSubPart.ts @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import * as dom from '../../../../../../base/browser/dom.js'; +import { asArray } from '../../../../../../base/common/arrays.js'; import { ErrorNoTelemetry } from '../../../../../../base/common/errors.js'; import { MarkdownString, type IMarkdownString } from '../../../../../../base/common/htmlContent.js'; import { thenIfNotDisposed } from '../../../../../../base/common/lifecycle.js'; @@ -44,7 +45,7 @@ export interface ITerminalNewAutoApproveRule { export type TerminalNewAutoApproveButtonData = ( { type: 'configure' } | - { type: 'newRule'; rule: ITerminalNewAutoApproveRule } + { type: 'newRule'; rule: ITerminalNewAutoApproveRule | ITerminalNewAutoApproveRule[] } ); export class TerminalConfirmationWidgetSubPart extends BaseChatToolInvocationSubPart { @@ -169,13 +170,17 @@ export class TerminalConfirmationWidgetSubPart extends BaseChatToolInvocationSub if (typeof data !== 'boolean') { switch (data.type) { case 'newRule': { + const newRules = asArray(data.rule); const inspect = this.configurationService.inspect(TerminalContribSettingId.AutoApprove); const oldValue = (inspect.user?.value as Record | undefined) ?? {}; let newValue: Record; if (isObject(oldValue)) { + // IMPORTANT: Old value intentionally overwrites the new value here, + // this is because we want to preserve as much as possible and only an + // approval rule should be there if this button action was offered newValue = { - ...oldValue, - [data.rule.key]: data.rule.value + ...newRules, + ...oldValue }; } else { this.preferencesService.openSettings({ @@ -185,7 +190,7 @@ export class TerminalConfirmationWidgetSubPart extends BaseChatToolInvocationSub key: TerminalContribSettingId.AutoApprove }, }); - throw new ErrorNoTelemetry(`Cannot add new rule \`${data.rule.key}\`: \`${JSON.stringify(data.rule.value)}\`, existing setting is unexpected format`); + throw new ErrorNoTelemetry(`Cannot add new rule, existing setting is unexpected format`); } await this.configurationService.updateValue(TerminalContribSettingId.AutoApprove, newValue); break; diff --git a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandLineAutoApprover.ts b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandLineAutoApprover.ts index 0dc300ec42c62..601f4e6363200 100644 --- a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandLineAutoApprover.ts +++ b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandLineAutoApprover.ts @@ -16,6 +16,11 @@ interface IAutoApproveRule { sourceText: string; } +export interface ICommandApprovalResultWithReason { + result: ICommandApprovalResult; + reason: string; +} + export type ICommandApprovalResult = 'approved' | 'denied' | 'noMatch'; const neverMatchRegex = /(?!.*)/; diff --git a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts index bbfeaa30b096e..de06a9cc6980a 100644 --- a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts +++ b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts @@ -29,7 +29,7 @@ import type { XtermTerminal } from '../../../../terminal/browser/xterm/xtermTerm import { ITerminalProfileResolverService } from '../../../../terminal/common/terminal.js'; import { getRecommendedToolsOverRunInTerminal } from '../alternativeRecommendation.js'; import { getOutput, pollForOutputAndIdle, promptForMorePolling, racePollingOrPrompt } from '../bufferOutputPolling.js'; -import { CommandLineAutoApprover } from '../commandLineAutoApprover.js'; +import { CommandLineAutoApprover, type ICommandApprovalResultWithReason } from '../commandLineAutoApprover.js'; import { BasicExecuteStrategy } from '../executeStrategy/basicExecuteStrategy.js'; import type { ITerminalExecuteStrategy } from '../executeStrategy/executeStrategy.js'; import { NoneExecuteStrategy } from '../executeStrategy/noneExecuteStrategy.js'; @@ -252,7 +252,10 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { disclaimer = new MarkdownString(`$(${Codicon.info.id}) ` + localize('runInTerminal.promptInjectionDisclaimer', 'Web content may contain malicious code or attempt prompt injection attacks.'), { supportThemeIcons: true }); } - const customActions = this._generateAutoApproveActions(args.command); + let customActions: IToolConfirmationAction[] | undefined; + if (!isAutoApproved) { + customActions = this._generateAutoApproveActions(args.command, subCommands, { subCommandResults, commandLineResult }); + } confirmationMessages = isAutoApproved ? undefined : { title: args.isBackground @@ -763,51 +766,56 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { }); } - private _generateAutoApproveActions(command: string): IToolConfirmationAction[] { + private _generateAutoApproveActions(command: string, subCommands: string[], autoApproveResult: { subCommandResults: ICommandApprovalResultWithReason[]; commandLineResult: ICommandApprovalResultWithReason }): IToolConfirmationAction[] { const actions: IToolConfirmationAction[] = []; - // Extract the base command (first word/executable) - const baseCommand = command.trim().split(/\s+/)[0]; - - // Add action for exact command match - actions.push({ - label: localize('autoApprove.exactCommand', 'Always allow `{0}`', command), - tooltip: localize('autoApprove.exactCommandTooltip', 'Always allow this exact command to run without confirmation'), - data: { - type: 'newRule', - rule: { - key: command, - value: { - approve: true, - matchCommandLine: true + // We shouldn't offer configuring rules for commands that are explicitly denied since it + // wouldn't get auto approved with a new rule + const canCreateAutoApproval = autoApproveResult.subCommandResults.some(e => e.result !== 'denied') || autoApproveResult.commandLineResult.result === 'denied'; + if (canCreateAutoApproval) { + // Allow exact command line + actions.push({ + label: localize('autoApprove.exactCommand', 'Always allow `{0}`', command), + tooltip: localize('autoApprove.exactCommandTooltip', 'Always allow this exact command to run without confirmation'), + data: { + type: 'newRule', + rule: { + key: command, + value: { + approve: true, + matchCommandLine: true + } } - } - } satisfies TerminalNewAutoApproveButtonData - }); + } satisfies TerminalNewAutoApproveButtonData + }); - // Add action for base command prefix match (only if different from exact and has arguments) - if (baseCommand && baseCommand !== command && command.trim().includes(' ')) { + // Allow all sub-commands + const subCommandsFirstWordOnly = subCommands.map(command => command.split(' ')[0]); + const commandSeparated = subCommandsFirstWordOnly.map(e => `\`${e}\``).join(', '); + // TODO: Only add rules that are needed? actions.push({ - label: localize('autoApprove.baseCommand', 'Always allow `{0}` commands', baseCommand), - tooltip: localize('autoApprove.baseCommandTooltip', 'Always allow commands starting with `{0}` to run without confirmation', baseCommand), + label: localize('autoApprove.baseCommand', 'Always allow {0} commands with any arguments', commandSeparated), + tooltip: localize('autoApprove.baseCommandTooltip', 'Always allow commands starting with `{0}` to run without confirmation', commandSeparated), data: { type: 'newRule', - rule: { - key: baseCommand, + rule: subCommandsFirstWordOnly.map(key => ({ + key, value: true - } + })) } satisfies TerminalNewAutoApproveButtonData }); - } - // Add separator and configure option - actions.push({ - label: localize('autoApprove.configure', 'Configure auto approve...'), - tooltip: localize('autoApprove.configureTooltip', 'Open settings to configure terminal command auto approval'), - data: { - type: 'configure' - } satisfies TerminalNewAutoApproveButtonData - }); + // TODO: Add separator + + // Configure option + actions.push({ + label: localize('autoApprove.configure', 'Configure auto approve...'), + tooltip: localize('autoApprove.configureTooltip', 'Open settings to configure terminal command auto approval'), + data: { + type: 'configure' + } satisfies TerminalNewAutoApproveButtonData + }); + } return actions; } From 1a9e70712cd2758802c1d9231f852a841db8c2f2 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Thu, 7 Aug 2025 07:37:15 -0700 Subject: [PATCH 0098/2080] Polish items --- .../chatTerminalToolSubPart.ts | 11 ++- .../browser/tools/runInTerminalTool.ts | 72 +++++++++++-------- 2 files changed, 45 insertions(+), 38 deletions(-) diff --git a/src/vs/workbench/contrib/chat/browser/chatContentParts/toolInvocationParts/chatTerminalToolSubPart.ts b/src/vs/workbench/contrib/chat/browser/chatContentParts/toolInvocationParts/chatTerminalToolSubPart.ts index bd8a283c02d1f..42b3f650e8b24 100644 --- a/src/vs/workbench/contrib/chat/browser/chatContentParts/toolInvocationParts/chatTerminalToolSubPart.ts +++ b/src/vs/workbench/contrib/chat/browser/chatContentParts/toolInvocationParts/chatTerminalToolSubPart.ts @@ -175,13 +175,10 @@ export class TerminalConfirmationWidgetSubPart extends BaseChatToolInvocationSub const oldValue = (inspect.user?.value as Record | undefined) ?? {}; let newValue: Record; if (isObject(oldValue)) { - // IMPORTANT: Old value intentionally overwrites the new value here, - // this is because we want to preserve as much as possible and only an - // approval rule should be there if this button action was offered - newValue = { - ...newRules, - ...oldValue - }; + newValue = { ...oldValue }; + for (const newRule of newRules) { + newValue[newRule.key] = newRule.value; + } } else { this.preferencesService.openSettings({ jsonEditor: true, diff --git a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts index de06a9cc6980a..46459c365e293 100644 --- a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts +++ b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts @@ -766,36 +766,28 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { }); } - private _generateAutoApproveActions(command: string, subCommands: string[], autoApproveResult: { subCommandResults: ICommandApprovalResultWithReason[]; commandLineResult: ICommandApprovalResultWithReason }): IToolConfirmationAction[] { + private _generateAutoApproveActions(commandLine: string, subCommands: string[], autoApproveResult: { subCommandResults: ICommandApprovalResultWithReason[]; commandLineResult: ICommandApprovalResultWithReason }): IToolConfirmationAction[] { const actions: IToolConfirmationAction[] = []; // We shouldn't offer configuring rules for commands that are explicitly denied since it // wouldn't get auto approved with a new rule const canCreateAutoApproval = autoApproveResult.subCommandResults.some(e => e.result !== 'denied') || autoApproveResult.commandLineResult.result === 'denied'; if (canCreateAutoApproval) { - // Allow exact command line - actions.push({ - label: localize('autoApprove.exactCommand', 'Always allow `{0}`', command), - tooltip: localize('autoApprove.exactCommandTooltip', 'Always allow this exact command to run without confirmation'), - data: { - type: 'newRule', - rule: { - key: command, - value: { - approve: true, - matchCommandLine: true - } - } - } satisfies TerminalNewAutoApproveButtonData - }); - // Allow all sub-commands const subCommandsFirstWordOnly = subCommands.map(command => command.split(' ')[0]); - const commandSeparated = subCommandsFirstWordOnly.map(e => `\`${e}\``).join(', '); - // TODO: Only add rules that are needed? + let subCommandLabel: string; + let subCommandTooltip: string; + if (subCommandsFirstWordOnly.length === 1) { + subCommandLabel = localize('autoApprove.baseCommandSingle', 'Always allow command: {0}', subCommandsFirstWordOnly[0]); + subCommandTooltip = localize('autoApprove.baseCommandSingleTooltip', 'Always allow command starting with `{0}` to run without confirmation', subCommandsFirstWordOnly[0]); + } else { + const commandSeparated = subCommandsFirstWordOnly.join(', '); + subCommandLabel = localize('autoApprove.baseCommand', 'Always allow commands: {0}', commandSeparated); + subCommandTooltip = localize('autoApprove.baseCommandTooltip', 'Always allow commands starting with `{0}` to run without confirmation', commandSeparated); + } actions.push({ - label: localize('autoApprove.baseCommand', 'Always allow {0} commands with any arguments', commandSeparated), - tooltip: localize('autoApprove.baseCommandTooltip', 'Always allow commands starting with `{0}` to run without confirmation', commandSeparated), + label: subCommandLabel, + tooltip: subCommandTooltip, data: { type: 'newRule', rule: subCommandsFirstWordOnly.map(key => ({ @@ -805,18 +797,36 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { } satisfies TerminalNewAutoApproveButtonData }); - // TODO: Add separator - - // Configure option - actions.push({ - label: localize('autoApprove.configure', 'Configure auto approve...'), - tooltip: localize('autoApprove.configureTooltip', 'Open settings to configure terminal command auto approval'), - data: { - type: 'configure' - } satisfies TerminalNewAutoApproveButtonData - }); + // Allow exact command line, don't do this if it's just the first sub-command's first + // word + if (subCommandsFirstWordOnly[0] !== commandLine) { + actions.push({ + // Add an extra & since it's treated as a mnemonic + label: localize('autoApprove.exactCommand', 'Always allow full command line: {0}', commandLine.replaceAll('&&', '&&&')), + tooltip: localize('autoApprove.exactCommandTooltip', 'Always allow this exact command to run without confirmation'), + data: { + type: 'newRule', + rule: { + key: commandLine, + value: { + approve: true, + matchCommandLine: true + } + } + } satisfies TerminalNewAutoApproveButtonData + }); + } } + // Always show configure option + actions.push({ + label: localize('autoApprove.configure', 'Configure auto approve...'), + tooltip: localize('autoApprove.configureTooltip', 'Open settings to configure terminal command auto approval'), + data: { + type: 'configure' + } satisfies TerminalNewAutoApproveButtonData + }); + return actions; } } From 9e91399eaf1fd68097fc85b838ca51a4ddbe57ce Mon Sep 17 00:00:00 2001 From: Benjamin Christopher Simmonds <44439583+benibenj@users.noreply.github.com> Date: Thu, 7 Aug 2025 16:40:10 +0200 Subject: [PATCH 0099/2080] Include provider timings in endoflife event (#260333) --- src/vs/editor/common/languages.ts | 2 ++ .../browser/model/provideInlineCompletions.ts | 18 +++++++++++++++--- src/vs/monaco.d.ts | 2 ++ .../api/browser/mainThreadLanguageFeatures.ts | 6 ++++++ 4 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/vs/editor/common/languages.ts b/src/vs/editor/common/languages.ts index 8794e5e7b9714..b7ecbd68e21d5 100644 --- a/src/vs/editor/common/languages.ts +++ b/src/vs/editor/common/languages.ts @@ -990,6 +990,8 @@ export type LifetimeSummary = { shownDuration: number; shownDurationUncollapsed: number; timeUntilShown: number | undefined; + timeUntilProviderRequest: number; + timeUntilProviderResponse: number; editorType: string; viewKind: string | undefined; error: string | undefined; diff --git a/src/vs/editor/contrib/inlineCompletions/browser/model/provideInlineCompletions.ts b/src/vs/editor/contrib/inlineCompletions/browser/model/provideInlineCompletions.ts index 94b6c6ad171a4..68fef4d316593 100644 --- a/src/vs/editor/contrib/inlineCompletions/browser/model/provideInlineCompletions.ts +++ b/src/vs/editor/contrib/inlineCompletions/browser/model/provideInlineCompletions.ts @@ -87,12 +87,14 @@ export function provideInlineCompletions( } let result: InlineCompletions | null | undefined; + const providerStartTime = Date.now(); try { result = await provider.provideInlineCompletions(model, position, contextWithUuid, cancellationTokenSource.token); } catch (e) { onUnexpectedExternalError(e); return undefined; } + const providerEndTime = Date.now(); if (!result) { return undefined; @@ -109,7 +111,7 @@ export function provideInlineCompletions( } for (const item of result.items) { - data.push(toInlineSuggestData(item, list, defaultReplaceRange, model, languageConfigurationService, contextWithUuid, requestInfo)); + data.push(toInlineSuggestData(item, list, defaultReplaceRange, model, languageConfigurationService, contextWithUuid, requestInfo, { startTime: providerStartTime, endTime: providerEndTime })); } return list; @@ -162,7 +164,8 @@ function toInlineSuggestData( textModel: ITextModel, languageConfigurationService: ILanguageConfigurationService | undefined, context: InlineCompletionContext, - requestInfo: InlineSuggestRequestInfo + requestInfo: InlineSuggestRequestInfo, + providerRequestInfo: InlineSuggestProviderRequestInfo, ): InlineSuggestData { let insertText: string; let snippetInfo: SnippetInfo | undefined; @@ -236,7 +239,8 @@ function toInlineSuggestData( source, context, inlineCompletion.isInlineEdit ?? false, - requestInfo + requestInfo, + providerRequestInfo, ); } @@ -249,6 +253,11 @@ export type InlineSuggestRequestInfo = { typingIntervalCharacterCount: number; }; +export type InlineSuggestProviderRequestInfo = { + startTime: number; + endTime: number; +}; + export type InlineSuggestViewData = { editorType: InlineCompletionEditorType; renderData?: InlineCompletionViewData; @@ -283,6 +292,7 @@ export class InlineSuggestData { public readonly isInlineEdit: boolean, private readonly _requestInfo: InlineSuggestRequestInfo, + private readonly _providerRequestInfo: InlineSuggestProviderRequestInfo, ) { this._viewData = { editorType: _requestInfo.editorType }; } @@ -350,6 +360,8 @@ export class InlineSuggestData { shownDurationUncollapsed: this._showUncollapsedDuration, preceeded: this._isPreceeded, timeUntilShown: this._timeUntilShown, + timeUntilProviderRequest: this._providerRequestInfo.startTime - this._requestInfo.startTime, + timeUntilProviderResponse: this._providerRequestInfo.endTime - this._requestInfo.startTime, editorType: this._viewData.editorType, languageId: this._requestInfo.languageId, requestReason: this._requestInfo.reason, diff --git a/src/vs/monaco.d.ts b/src/vs/monaco.d.ts index c11a47beda996..cad86d5f7b058 100644 --- a/src/vs/monaco.d.ts +++ b/src/vs/monaco.d.ts @@ -7630,6 +7630,8 @@ declare namespace monaco.languages { shownDuration: number; shownDurationUncollapsed: number; timeUntilShown: number | undefined; + timeUntilProviderRequest: number; + timeUntilProviderResponse: number; editorType: string; viewKind: string | undefined; error: string | undefined; diff --git a/src/vs/workbench/api/browser/mainThreadLanguageFeatures.ts b/src/vs/workbench/api/browser/mainThreadLanguageFeatures.ts index a3837f7222d40..5f6cf6c1c57f6 100644 --- a/src/vs/workbench/api/browser/mainThreadLanguageFeatures.ts +++ b/src/vs/workbench/api/browser/mainThreadLanguageFeatures.ts @@ -655,6 +655,8 @@ export class MainThreadLanguageFeatures extends Disposable implements MainThread shownDuration: lifetimeSummary.shownDuration, shownDurationUncollapsed: lifetimeSummary.shownDurationUncollapsed, timeUntilShown: lifetimeSummary.timeUntilShown, + timeUntilProviderRequest: lifetimeSummary.timeUntilProviderRequest, + timeUntilProviderResponse: lifetimeSummary.timeUntilProviderResponse, editorType: lifetimeSummary.editorType, viewKind: lifetimeSummary.viewKind, preceeded: lifetimeSummary.preceeded, @@ -1311,6 +1313,8 @@ type InlineCompletionEndOfLifeEvent = { shownDuration: number; shownDurationUncollapsed: number; timeUntilShown: number | undefined; + timeUntilProviderRequest: number; + timeUntilProviderResponse: number; reason: 'accepted' | 'rejected' | 'ignored'; partiallyAccepted: number; preceeded: boolean; @@ -1342,6 +1346,8 @@ type InlineCompletionsEndOfLifeClassification = { shownDuration: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'The duration for which the inline completion was shown' }; shownDurationUncollapsed: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'The duration for which the inline completion was shown without collapsing' }; timeUntilShown: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'The time it took for the inline completion to be shown after the request' }; + timeUntilProviderRequest: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'The time it took for the inline completion to be requested from the provider' }; + timeUntilProviderResponse: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'The time it took for the inline completion to be shown after the request' }; reason: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'The reason for the inline completion ending' }; partiallyAccepted: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'How often the inline completion was partially accepted by the user' }; preceeded: { classification: 'SystemMetaData'; purpose: 'FeatureInsight'; comment: 'Whether the inline completion was preceeded by another one' }; From 29e9348350698d1b2877ccd7f7d85aacb8e0827f Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Thu, 7 Aug 2025 07:45:51 -0700 Subject: [PATCH 0100/2080] Remove custom actions from regular confirm part --- .../chatTerminalToolSubPart.ts | 4 +- .../chatToolConfirmationSubPart.ts | 64 ++----------------- .../chat/common/languageModelToolsService.ts | 2 +- .../browser/tools/runInTerminalTool.ts | 2 +- .../test/browser/runInTerminalTool.test.ts | 8 +-- 5 files changed, 14 insertions(+), 66 deletions(-) diff --git a/src/vs/workbench/contrib/chat/browser/chatContentParts/toolInvocationParts/chatTerminalToolSubPart.ts b/src/vs/workbench/contrib/chat/browser/chatContentParts/toolInvocationParts/chatTerminalToolSubPart.ts index 42b3f650e8b24..e59affe1d9fcb 100644 --- a/src/vs/workbench/contrib/chat/browser/chatContentParts/toolInvocationParts/chatTerminalToolSubPart.ts +++ b/src/vs/workbench/contrib/chat/browser/chatContentParts/toolInvocationParts/chatTerminalToolSubPart.ts @@ -78,7 +78,7 @@ export class TerminalConfirmationWidgetSubPart extends BaseChatToolInvocationSub terminalData = migrateLegacyTerminalToolSpecificData(terminalData); - const { title, message, disclaimer, customActions } = toolInvocation.confirmationMessages; + const { title, message, disclaimer, terminalCustomActions } = toolInvocation.confirmationMessages; const continueLabel = localize('continue', "Continue"); const continueKeybinding = keybindingService.lookupKeybinding(AcceptToolConfirmationActionId)?.getLabel(); const continueTooltip = continueKeybinding ? `${continueLabel} (${continueKeybinding})` : continueLabel; @@ -91,7 +91,7 @@ export class TerminalConfirmationWidgetSubPart extends BaseChatToolInvocationSub label: continueLabel, data: true, tooltip: continueTooltip, - moreActions: customActions, + moreActions: terminalCustomActions, }, { label: cancelLabel, diff --git a/src/vs/workbench/contrib/chat/browser/chatContentParts/toolInvocationParts/chatToolConfirmationSubPart.ts b/src/vs/workbench/contrib/chat/browser/chatContentParts/toolInvocationParts/chatToolConfirmationSubPart.ts index 49e125c90f60c..fa1e210660b8f 100644 --- a/src/vs/workbench/contrib/chat/browser/chatContentParts/toolInvocationParts/chatToolConfirmationSubPart.ts +++ b/src/vs/workbench/contrib/chat/browser/chatContentParts/toolInvocationParts/chatToolConfirmationSubPart.ts @@ -16,7 +16,6 @@ import { ILanguageService } from '../../../../../../editor/common/languages/lang import { IModelService } from '../../../../../../editor/common/services/model.js'; import { localize } from '../../../../../../nls.js'; import { ICommandService } from '../../../../../../platform/commands/common/commands.js'; -import { IConfigurationService } from '../../../../../../platform/configuration/common/configuration.js'; import { IContextKeyService } from '../../../../../../platform/contextkey/common/contextkey.js'; import { IInstantiationService } from '../../../../../../platform/instantiation/common/instantiation.js'; import { IKeybindingService } from '../../../../../../platform/keybinding/common/keybinding.js'; @@ -61,7 +60,6 @@ export class ToolConfirmationSubPart extends BaseChatToolInvocationSubPart { @IContextKeyService private readonly contextKeyService: IContextKeyService, @IChatWidgetService private readonly chatWidgetService: IChatWidgetService, @ICommandService private readonly commandService: ICommandService, - @IConfigurationService private readonly configurationService: IConfigurationService, @IMarkerService private readonly markerService: IMarkerService, @ILanguageModelToolsService private readonly languageModelToolsService: ILanguageModelToolsService, @IChatMarkdownAnchorService private readonly chatMarkdownAnchorService: IChatMarkdownAnchorService, @@ -71,7 +69,7 @@ export class ToolConfirmationSubPart extends BaseChatToolInvocationSubPart { if (!toolInvocation.confirmationMessages) { throw new Error('Confirmation messages are missing'); } - const { title, message, allowAutoConfirm, disclaimer, customActions } = toolInvocation.confirmationMessages; + const { title, message, allowAutoConfirm, disclaimer } = toolInvocation.confirmationMessages; const continueLabel = localize('continue', "Continue"); const continueKeybinding = keybindingService.lookupKeybinding(AcceptToolConfirmationActionId)?.getLabel(); const continueTooltip = continueKeybinding ? `${continueLabel} (${continueKeybinding})` : continueLabel; @@ -88,30 +86,16 @@ export class ToolConfirmationSubPart extends BaseChatToolInvocationSubPart { CustomAction, } - // Build moreActions based on customActions or default allowAutoConfirm behavior - let moreActions: IChatConfirmationButton[] | undefined; - if (customActions && customActions.length > 0) { - // Use custom actions for terminal commands - moreActions = customActions.map(action => ({ - label: action.label, - data: { outcome: ConfirmationOutcome.CustomAction, customData: action.data }, - tooltip: action.tooltip - })); - } else if (allowAutoConfirm) { - // Use default tool-level auto-confirmation options - moreActions = [ - { label: localize('allowSession', 'Allow in this Session'), data: ConfirmationOutcome.AllowSession, tooltip: localize('allowSesssionTooltip', 'Allow this tool to run in this session without confirmation.') }, - { label: localize('allowWorkspace', 'Allow in this Workspace'), data: ConfirmationOutcome.AllowWorkspace, tooltip: localize('allowWorkspaceTooltip', 'Allow this tool to run in this workspace without confirmation.') }, - { label: localize('allowGlobally', 'Always Allow'), data: ConfirmationOutcome.AllowGlobally, tooltip: localize('allowGloballTooltip', 'Always allow this tool to run without confirmation.') }, - ]; - } - const buttons: IChatConfirmationButton[] = [ { label: continueLabel, data: ConfirmationOutcome.Allow, tooltip: continueTooltip, - moreActions, + moreActions: !allowAutoConfirm ? undefined : [ + { label: localize('allowSession', 'Allow in this Session'), data: ConfirmationOutcome.AllowSession, tooltip: localize('allowSesssionTooltip', 'Allow this tool to run in this session without confirmation.') }, + { label: localize('allowWorkspace', 'Allow in this Workspace'), data: ConfirmationOutcome.AllowWorkspace, tooltip: localize('allowWorkspaceTooltip', 'Allow this tool to run in this workspace without confirmation.') }, + { label: localize('allowGlobally', 'Always Allow'), data: ConfirmationOutcome.AllowGlobally, tooltip: localize('allowGloballTooltip', 'Always allow this tool to run without confirmation.') }, + ], }, { label: localize('cancel', "Cancel"), @@ -299,15 +283,6 @@ export class ToolConfirmationSubPart extends BaseChatToolInvocationSubPart { hasToolConfirmation.set(true); this._register(confirmWidget.onDidClick(button => { - // Handle custom actions (like terminal auto-approve options) - if (typeof button.data === 'object' && button.data.outcome === ConfirmationOutcome.CustomAction) { - this._handleCustomAction(button.data.customData); - toolInvocation.confirmed.complete(true); - this.chatWidgetService.getWidgetBySessionId(this.context.element.sessionId)?.focusInput(); - return; - } - - // Handle standard confirmation outcomes switch (button.data as ConfirmationOutcome) { case ConfirmationOutcome.AllowGlobally: this.languageModelToolsService.setToolAutoConfirmation(toolInvocation.toolId, 'profile', true); @@ -347,31 +322,4 @@ export class ToolConfirmationSubPart extends BaseChatToolInvocationSubPart { this._register(part.onDidChangeHeight(() => this._onDidChangeHeight.fire())); } - - private _handleCustomAction(customData: any): void { - if (!customData || typeof customData !== 'object') { - return; - } - - switch (customData.type) { - case 'exact': - // Add exact command to auto-approve list - this._addToAutoApproveConfig(customData.command, true); - break; - case 'prefix': - // Add command prefix to auto-approve list - this._addToAutoApproveConfig(customData.command, true); - break; - case 'configure': - // Open settings to terminal auto-approve configuration - this.commandService.executeCommand('workbench.action.openSettings', 'chat.tools.terminal.autoApprove'); - break; - } - } - - private _addToAutoApproveConfig(pattern: string, approve: boolean): void { - const currentConfig = this.configurationService.getValue('chat.tools.terminal.autoApprove') as Record || {}; - const newConfig = { ...currentConfig, [pattern]: approve }; - this.configurationService.updateValue('chat.tools.terminal.autoApprove', newConfig); - } } diff --git a/src/vs/workbench/contrib/chat/common/languageModelToolsService.ts b/src/vs/workbench/contrib/chat/common/languageModelToolsService.ts index f6c7ef7e36daf..4b8de734ae065 100644 --- a/src/vs/workbench/contrib/chat/common/languageModelToolsService.ts +++ b/src/vs/workbench/contrib/chat/common/languageModelToolsService.ts @@ -209,7 +209,7 @@ export interface IToolConfirmationMessages { message: string | IMarkdownString; disclaimer?: string | IMarkdownString; allowAutoConfirm?: boolean; - customActions?: IToolConfirmationAction[]; + terminalCustomActions?: IToolConfirmationAction[]; } export interface IToolConfirmationAction { diff --git a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts index 46459c365e293..08832a616a3e5 100644 --- a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts +++ b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts @@ -263,7 +263,7 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { : localize('runInTerminal.foreground', "Run command in terminal"), message: new MarkdownString(args.explanation), disclaimer, - customActions, + terminalCustomActions: customActions, }; } diff --git a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/test/browser/runInTerminalTool.test.ts b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/test/browser/runInTerminalTool.test.ts index 341648caa7cf9..5dd4443366e24 100644 --- a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/test/browser/runInTerminalTool.test.ts +++ b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/test/browser/runInTerminalTool.test.ts @@ -285,9 +285,9 @@ suite('RunInTerminalTool', () => { }); assertConfirmationRequired(result, 'Run command in terminal'); - ok(result!.confirmationMessages!.customActions, 'Expected custom actions to be defined'); + ok(result!.confirmationMessages!.terminalCustomActions, 'Expected custom actions to be defined'); - const customActions = result!.confirmationMessages!.customActions!; + const customActions = result!.confirmationMessages!.terminalCustomActions!; strictEqual(customActions.length, 3, 'Expected 3 custom actions'); // First action should be exact command match @@ -312,9 +312,9 @@ suite('RunInTerminalTool', () => { }); assertConfirmationRequired(result); - ok(result!.confirmationMessages!.customActions, 'Expected custom actions to be defined'); + ok(result!.confirmationMessages!.terminalCustomActions, 'Expected custom actions to be defined'); - const customActions = result!.confirmationMessages!.customActions!; + const customActions = result!.confirmationMessages!.terminalCustomActions!; // For single word commands, exact and prefix should be the same, so we should only get 2 actions strictEqual(customActions.length, 2, 'Expected 2 custom actions for single word command'); From 1045779d6166dc59d7e982e3dc44ed5ddb768bf8 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Thu, 7 Aug 2025 07:52:39 -0700 Subject: [PATCH 0101/2080] Update test expectations --- .../browser/tools/runInTerminalTool.ts | 6 ++-- .../test/browser/runInTerminalTool.test.ts | 31 +++++++------------ 2 files changed, 15 insertions(+), 22 deletions(-) diff --git a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts index 08832a616a3e5..c324afe84215d 100644 --- a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts +++ b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts @@ -778,7 +778,7 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { let subCommandLabel: string; let subCommandTooltip: string; if (subCommandsFirstWordOnly.length === 1) { - subCommandLabel = localize('autoApprove.baseCommandSingle', 'Always allow command: {0}', subCommandsFirstWordOnly[0]); + subCommandLabel = localize('autoApprove.baseCommandSingle', 'Always Allow Command: {0}', subCommandsFirstWordOnly[0]); subCommandTooltip = localize('autoApprove.baseCommandSingleTooltip', 'Always allow command starting with `{0}` to run without confirmation', subCommandsFirstWordOnly[0]); } else { const commandSeparated = subCommandsFirstWordOnly.join(', '); @@ -802,7 +802,7 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { if (subCommandsFirstWordOnly[0] !== commandLine) { actions.push({ // Add an extra & since it's treated as a mnemonic - label: localize('autoApprove.exactCommand', 'Always allow full command line: {0}', commandLine.replaceAll('&&', '&&&')), + label: localize('autoApprove.exactCommand', 'Always Allow Full Command Line: {0}', commandLine.replaceAll('&&', '&&&')), tooltip: localize('autoApprove.exactCommandTooltip', 'Always allow this exact command to run without confirmation'), data: { type: 'newRule', @@ -820,7 +820,7 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { // Always show configure option actions.push({ - label: localize('autoApprove.configure', 'Configure auto approve...'), + label: localize('autoApprove.configure', 'Configure Auto Approve...'), tooltip: localize('autoApprove.configureTooltip', 'Open settings to configure terminal command auto approval'), data: { type: 'configure' diff --git a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/test/browser/runInTerminalTool.test.ts b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/test/browser/runInTerminalTool.test.ts index 5dd4443366e24..f1b55e0f1702a 100644 --- a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/test/browser/runInTerminalTool.test.ts +++ b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/test/browser/runInTerminalTool.test.ts @@ -274,9 +274,8 @@ suite('RunInTerminalTool', () => { suite('prepareToolInvocation - custom actions for dropdown', () => { test('should generate custom actions for non-auto-approved commands', async () => { - // Set up a scenario where the command is not auto-approved setAutoApprove({ - ls: true, // Only ls is approved, not npm + ls: true, }); const result = await executeToolTest({ @@ -290,18 +289,15 @@ suite('RunInTerminalTool', () => { const customActions = result!.confirmationMessages!.terminalCustomActions!; strictEqual(customActions.length, 3, 'Expected 3 custom actions'); - // First action should be exact command match - strictEqual(customActions[0].label, 'Always allow `npm run build`'); - strictEqual(customActions[0].data.type, 'exact'); - strictEqual(customActions[0].data.command, 'npm run build'); + strictEqual(customActions[0].label, 'Always Allow Command: npm'); + strictEqual(customActions[0].data.type, 'newRule'); + ok(Array.isArray(customActions[0].data.rule), 'Expected rule to be an array'); - // Second action should be base command prefix match - strictEqual(customActions[1].label, 'Always allow `npm` commands'); - strictEqual(customActions[1].data.type, 'prefix'); - strictEqual(customActions[1].data.command, 'npm'); + strictEqual(customActions[1].label, 'Always Allow Full Command Line: npm run build'); + strictEqual(customActions[1].data.type, 'newRule'); + ok(!Array.isArray(customActions[1].data.rule), 'Expected rule to be an object'); - // Third action should be configure option - strictEqual(customActions[2].label, 'Configure auto approve...'); + strictEqual(customActions[2].label, 'Configure Auto Approve...'); strictEqual(customActions[2].data.type, 'configure'); }); @@ -316,16 +312,13 @@ suite('RunInTerminalTool', () => { const customActions = result!.confirmationMessages!.terminalCustomActions!; - // For single word commands, exact and prefix should be the same, so we should only get 2 actions strictEqual(customActions.length, 2, 'Expected 2 custom actions for single word command'); - // First action should be exact command match - strictEqual(customActions[0].label, 'Always allow `git`'); - strictEqual(customActions[0].data.type, 'exact'); - strictEqual(customActions[0].data.command, 'git'); + strictEqual(customActions[0].label, 'Always Allow Command: git'); + strictEqual(customActions[0].data.type, 'newRule'); + ok(Array.isArray(customActions[0].data.rule), 'Expected rule to be an array'); - // Second action should be configure option (no separate prefix action since it's the same) - strictEqual(customActions[1].label, 'Configure auto approve...'); + strictEqual(customActions[1].label, 'Configure Auto Approve...'); strictEqual(customActions[1].data.type, 'configure'); }); From 423e5da25fb8e53e07305c24be67c17d331ed93c Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Thu, 7 Aug 2025 16:56:57 +0200 Subject: [PATCH 0102/2080] aux - leave compact mode on certain editor events and restore compact mode for terminals (#260302) (#260335) --- .../browser/parts/editor/auxiliaryEditorPart.ts | 10 ++++++++++ .../contrib/terminal/browser/terminalActions.ts | 3 ++- .../contrib/terminal/browser/terminalMenus.ts | 3 ++- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/vs/workbench/browser/parts/editor/auxiliaryEditorPart.ts b/src/vs/workbench/browser/parts/editor/auxiliaryEditorPart.ts index 81371393a8fab..6125efa23880d 100644 --- a/src/vs/workbench/browser/parts/editor/auxiliaryEditorPart.ts +++ b/src/vs/workbench/browser/parts/editor/auxiliaryEditorPart.ts @@ -303,6 +303,16 @@ export class AuxiliaryEditorPart { } })); + disposables.add(editorPart.onDidAddGroup(() => { + updateCompact(false); // leave compact mode when a group is added + })); + + disposables.add(editorPart.activeGroup.onDidActiveEditorChange(() => { + if (editorPart.activeGroup.count > 1) { + updateCompact(false); // leave compact mode when more than 1 editor is active + } + })); + // Have a scoped instantiation service that is scoped to the auxiliary window const scopedInstantiationService = disposables.add(scopedEditorPartInstantiationService.createChild(new ServiceCollection( [IStatusbarService, this.statusbarService.createScoped(statusbarPart, disposables)] diff --git a/src/vs/workbench/contrib/terminal/browser/terminalActions.ts b/src/vs/workbench/contrib/terminal/browser/terminalActions.ts index 1e628b884eb40..cc2b9dbb55a40 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalActions.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalActions.ts @@ -360,7 +360,8 @@ export function registerTerminalActions() { run: async (c) => { const instance = await c.service.createTerminal({ location: { - viewColumn: AUX_WINDOW_GROUP + viewColumn: AUX_WINDOW_GROUP, + auxiliary: { compact: true }, }, }); await instance.focusWhenReady(); diff --git a/src/vs/workbench/contrib/terminal/browser/terminalMenus.ts b/src/vs/workbench/contrib/terminal/browser/terminalMenus.ts index a00daae29bcb3..02b1cfec7d1a1 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalMenus.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalMenus.ts @@ -765,7 +765,8 @@ export function getTerminalActionBarArgs(location: ITerminalLocationOptions, pro dropdownActions.push(disposableStore.add(new Action(TerminalCommandId.New, terminalStrings.new, undefined, true, () => terminalService.createAndFocusTerminal()))); dropdownActions.push(disposableStore.add(new Action(TerminalCommandId.NewInNewWindow, terminalStrings.newInNewWindow.value, undefined, true, () => terminalService.createAndFocusTerminal({ location: { - viewColumn: AUX_WINDOW_GROUP + viewColumn: AUX_WINDOW_GROUP, + auxiliary: { compact: true }, } })))); dropdownActions.push(disposableStore.add(new Action(TerminalCommandId.Split, terminalStrings.split.value, undefined, true, () => terminalService.createAndFocusTerminal({ From af97d85889d8e7d48a0e0d4d1b7825a44c8a465c Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Thu, 7 Aug 2025 08:30:22 -0700 Subject: [PATCH 0103/2080] Add more auto approve confirm cases --- .../test/browser/runInTerminalTool.test.ts | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/test/browser/runInTerminalTool.test.ts b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/test/browser/runInTerminalTool.test.ts index f1b55e0f1702a..5be425201139d 100644 --- a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/test/browser/runInTerminalTool.test.ts +++ b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/test/browser/runInTerminalTool.test.ts @@ -335,6 +335,48 @@ suite('RunInTerminalTool', () => { assertAutoApproved(result); }); + test('should only generate configure action for explicitly denied commands', async () => { + setAutoApprove({ + npm: { approve: false } + }); + + const result = await executeToolTest({ + command: 'npm run build', + explanation: 'Build the project' + }); + + assertConfirmationRequired(result, 'Run command in terminal'); + ok(result!.confirmationMessages!.terminalCustomActions, 'Expected custom actions to be defined'); + + const customActions = result!.confirmationMessages!.terminalCustomActions!; + strictEqual(customActions.length, 1, 'Expected only 1 custom action for explicitly denied commands'); + + strictEqual(customActions[0].label, 'Configure Auto Approve...'); + strictEqual(customActions[0].data.type, 'configure'); + }); + + test('should handle && in command line labels with proper mnemonic escaping', async () => { + const result = await executeToolTest({ + command: 'npm install && npm run build', + explanation: 'Install dependencies and build' + }); + + assertConfirmationRequired(result, 'Run command in terminal'); + ok(result!.confirmationMessages!.terminalCustomActions, 'Expected custom actions to be defined'); + + const customActions = result!.confirmationMessages!.terminalCustomActions!; + strictEqual(customActions.length, 3, 'Expected 3 custom actions'); + + strictEqual(customActions[0].label, 'Always allow commands: npm, npm'); + strictEqual(customActions[0].data.type, 'newRule'); + + strictEqual(customActions[1].label, 'Always Allow Full Command Line: npm install &&& npm run build'); + strictEqual(customActions[1].data.type, 'newRule'); + + strictEqual(customActions[2].label, 'Configure Auto Approve...'); + strictEqual(customActions[2].data.type, 'configure'); + }); + }); suite('command re-writing', () => { From 7ffbe1141d04ad2c0e8cd291f48c165ad08f72f5 Mon Sep 17 00:00:00 2001 From: Benjamin Christopher Simmonds <44439583+benibenj@users.noreply.github.com> Date: Thu, 7 Aug 2025 17:36:16 +0200 Subject: [PATCH 0104/2080] Only include user typing in typing speed computation (#260339) --- .../browser/model/typingSpeed.ts | 22 ++++++------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/src/vs/editor/contrib/inlineCompletions/browser/model/typingSpeed.ts b/src/vs/editor/contrib/inlineCompletions/browser/model/typingSpeed.ts index 9e42d5db345ce..3378546d421fd 100644 --- a/src/vs/editor/contrib/inlineCompletions/browser/model/typingSpeed.ts +++ b/src/vs/editor/contrib/inlineCompletions/browser/model/typingSpeed.ts @@ -60,7 +60,11 @@ export class TypingInterval extends Disposable { private _updateTypingSpeed(change: IModelContentChangedEvent): void { const now = Date.now(); - const characterCount = this._calculateEffectiveCharacterCount(change); + + if (!this._isUserTyping(change)) { + this._finalizeCurrentSession(); + return; + } // If too much time has passed since last change, start a new session if (this._currentSession && (now - this._lastChangeTime) > TypingInterval.MAX_SESSION_GAP_MS) { @@ -78,24 +82,12 @@ export class TypingInterval extends Disposable { // Update current session this._currentSession.endTime = now; - this._currentSession.characterCount += characterCount; + this._currentSession.characterCount += this._getActualCharacterCount(change); this._lastChangeTime = now; this._cacheInvalidated = true; } - private _calculateEffectiveCharacterCount(change: IModelContentChangedEvent): number { - const actualCharCount = this._getActualCharacterCount(change); - - // If this is actual user typing, count all characters - if (this._isUserTyping(change)) { - return actualCharCount; - } - - // For all other actions (paste, suggestions, etc.), count as 1 regardless of size - return actualCharCount > 0 ? 1 : 0; - } - private _getActualCharacterCount(change: IModelContentChangedEvent): number { let totalChars = 0; for (const c of change.changes) { @@ -108,7 +100,7 @@ export class TypingInterval extends Disposable { private _isUserTyping(change: IModelContentChangedEvent): boolean { // If no detailed reasons, assume user typing if (!change.detailedReasons || change.detailedReasons.length === 0) { - return true; + return false; } // Check if any of the reasons indicate actual user typing From 223c2ae45c6e636d8b11705a217ead054dfbbb7e Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Thu, 7 Aug 2025 08:37:18 -0700 Subject: [PATCH 0105/2080] Tests passing --- .../test/browser/outputMonitor.test.ts | 152 +++++++----------- 1 file changed, 59 insertions(+), 93 deletions(-) diff --git a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/test/browser/outputMonitor.test.ts b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/test/browser/outputMonitor.test.ts index 00d2ed5d87d9b..378935a5f8f04 100644 --- a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/test/browser/outputMonitor.test.ts +++ b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/test/browser/outputMonitor.test.ts @@ -6,24 +6,25 @@ import { strictEqual, deepStrictEqual } from 'assert'; import { timeout } from '../../../../../../base/common/async.js'; import { CancellationTokenSource } from '../../../../../../base/common/cancellation.js'; -import { DisposableStore } from '../../../../../../base/common/lifecycle.js'; import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../../../base/test/common/utils.js'; import { ILanguageModelsService } from '../../../../chat/common/languageModels.js'; import { OutputMonitor, OutputMonitorAction } from '../../browser/outputMonitor.js'; suite('OutputMonitor', () => { - let disposables: DisposableStore; - let mockLanguageModelsService: ILanguageModelsService; + const store = ensureNoDisposablesAreLeakedInTestSuite(); - ensureNoDisposablesAreLeakedInTestSuite(); + let mockLanguageModelsService: ILanguageModelsService; setup(() => { - disposables = new DisposableStore(); - mockLanguageModelsService = {} as ILanguageModelsService; - }); - - teardown(() => { - disposables.dispose(); + mockLanguageModelsService = { + selectLanguageModels: async () => [{ id: 'test-model' } as any], + sendChatRequest: async () => ({ + result: 'Mock assessment result', + stream: (async function* () { + yield { part: { type: 'text', value: 'Mock assessment result' } }; + })() + }) as any + } as unknown as ILanguageModelsService; }); function createMockExecution(outputSequence: string[], isActiveSequence?: boolean[]): { getOutput: () => string; isActive?: () => Promise } { @@ -51,23 +52,23 @@ suite('OutputMonitor', () => { test('should implement IOutputMonitor interface', () => { const execution = createMockExecution(['']); const monitor = new OutputMonitor(execution, mockLanguageModelsService); - disposables.add(monitor); + store.add(monitor); - // Verify interface implementation - strictEqual(typeof monitor.actions, 'object'); + // Verify core interface properties exist strictEqual(Array.isArray(monitor.actions), true); strictEqual(typeof monitor.isIdle, 'boolean'); - strictEqual(typeof monitor.onDidFinishCommand, 'object'); - strictEqual(typeof monitor.onDidIdle, 'object'); - strictEqual(typeof monitor.onDidTimeout, 'object'); - strictEqual(typeof monitor.startMonitoring, 'function'); - strictEqual(typeof monitor.dispose, 'function'); + strictEqual(monitor.onDidFinishCommand !== undefined, true); + strictEqual(monitor.onDidIdle !== undefined, true); + strictEqual(monitor.onDidTimeout !== undefined, true); + strictEqual(monitor.startMonitoring !== undefined, true); + strictEqual(monitor.startMonitoringLegacy !== undefined, true); + strictEqual(monitor.dispose !== undefined, true); }); test('should track actions correctly', async () => { const execution = createMockExecution(['output1', 'output1', 'output1']); // No new output to trigger idle const monitor = new OutputMonitor(execution, mockLanguageModelsService); - disposables.add(monitor); + store.add(monitor); const tokenSource = new CancellationTokenSource(); const result = monitor.startMonitoringLegacy(false, tokenSource.token); @@ -86,32 +87,29 @@ suite('OutputMonitor', () => { test('should detect idle state when no new output', async () => { const execution = createMockExecution(['initial output', 'initial output', 'initial output']); // Same output to trigger idle const monitor = new OutputMonitor(execution, mockLanguageModelsService); - disposables.add(monitor); + store.add(monitor); let idleEventFired = false; let finishEventFired = false; - monitor.onDidIdle(() => { + const idleDisposable = monitor.onDidIdle(() => { idleEventFired = true; }); + store.add(idleDisposable); - monitor.onDidFinishCommand(() => { + const finishDisposable = monitor.onDidFinishCommand(() => { finishEventFired = true; }); + store.add(finishDisposable); const tokenSource = new CancellationTokenSource(); - // Mock the assessment function to return quickly - const originalAssess = require('../../browser/bufferOutputPolling.js').assessOutputForErrors; - require('../../browser/bufferOutputPolling.js').assessOutputForErrors = async () => 'Mock assessment'; - - const result = await monitor.startMonitoringLegacy(false, tokenSource.token); // Restore original function - require('../../browser/bufferOutputPolling.js').assessOutputForErrors = originalAssess; + const result = await monitor.startMonitoringLegacy(false, tokenSource.token); strictEqual(result.terminalExecutionIdleBeforeTimeout, true); strictEqual(typeof result.output, 'string'); strictEqual(typeof result.pollDurationMs, 'number'); - strictEqual(result.modelOutputEvalResponse, 'Mock assessment'); + strictEqual(typeof result.modelOutputEvalResponse, 'string'); strictEqual(monitor.isIdle, true); strictEqual(idleEventFired, true); strictEqual(finishEventFired, true); @@ -123,42 +121,32 @@ suite('OutputMonitor', () => { }); test('should handle timeout correctly', async () => { - const execution = createMockExecution(['changing output 1', 'changing output 2', 'changing output 3']); // Always changing output - const monitor = new OutputMonitor(execution, mockLanguageModelsService); - disposables.add(monitor); + // Create execution that continuously produces new output to prevent idle detection + let outputCounter = 0; + const execution = { + getOutput: () => `changing output ${outputCounter++}`, + isActive: undefined + }; - let timeoutEventFired = false; - monitor.onDidTimeout(() => { - timeoutEventFired = true; - }); + const monitor = new OutputMonitor(execution, mockLanguageModelsService); + store.add(monitor); const tokenSource = new CancellationTokenSource(); - // Mock PollingConsts to use shorter durations for testing - const originalPollingConsts = require('../../browser/bufferOutputPolling.js').PollingConsts; - require('../../browser/bufferOutputPolling.js').PollingConsts = { - ...originalPollingConsts, - FirstPollingMaxDuration: 50, // 50ms timeout for testing - MinPollingDuration: 10 - }; - - const result = await monitor.startMonitoringLegacy(false, tokenSource.token); - - // Restore original constants - require('../../browser/bufferOutputPolling.js').PollingConsts = originalPollingConsts; + // Cancel after a short time to simulate timeout + setTimeout(() => tokenSource.cancel(), 100); - strictEqual(result.terminalExecutionIdleBeforeTimeout, false); - strictEqual(timeoutEventFired, true); + await monitor.startMonitoringLegacy(false, tokenSource.token); const actions = monitor.actions; strictEqual(actions.includes(OutputMonitorAction.PollingStarted), true); - strictEqual(actions.includes(OutputMonitorAction.TimeoutReached), true); - }); + strictEqual(actions.includes(OutputMonitorAction.CancellationRequested), true); + }).timeout(5000); test('should handle cancellation correctly', async () => { const execution = createMockExecution(['output']); const monitor = new OutputMonitor(execution, mockLanguageModelsService); - disposables.add(monitor); + store.add(monitor); const tokenSource = new CancellationTokenSource(); @@ -180,19 +168,12 @@ suite('OutputMonitor', () => { test('should track output received actions', async () => { const execution = createMockExecution(['output1', 'output2', 'output2', 'output2']); // Output changes once then stays same const monitor = new OutputMonitor(execution, mockLanguageModelsService); - disposables.add(monitor); + store.add(monitor); const tokenSource = new CancellationTokenSource(); - // Mock the assessment function to return quickly - const originalAssess = require('../../browser/bufferOutputPolling.js').assessOutputForErrors; - require('../../browser/bufferOutputPolling.js').assessOutputForErrors = async () => 'Mock assessment'; - const result = await monitor.startMonitoringLegacy(false, tokenSource.token); - // Restore original function - require('../../browser/bufferOutputPolling.js').assessOutputForErrors = originalAssess; - strictEqual(result.terminalExecutionIdleBeforeTimeout, true); const actions = monitor.actions; @@ -204,21 +185,14 @@ suite('OutputMonitor', () => { test('should handle extended polling correctly', async () => { const execution = createMockExecution(['output', 'output', 'output']); // Same output to trigger idle quickly const monitor = new OutputMonitor(execution, mockLanguageModelsService); - disposables.add(monitor); + store.add(monitor); const tokenSource = new CancellationTokenSource(); - // Mock the assessment function to return quickly - const originalAssess = require('../../browser/bufferOutputPolling.js').assessOutputForErrors; - require('../../browser/bufferOutputPolling.js').assessOutputForErrors = async () => 'Extended polling assessment'; - const result = await monitor.startMonitoringLegacy(true, tokenSource.token); // Extended polling = true - // Restore original function - require('../../browser/bufferOutputPolling.js').assessOutputForErrors = originalAssess; - strictEqual(result.terminalExecutionIdleBeforeTimeout, true); - strictEqual(result.modelOutputEvalResponse, 'Extended polling assessment'); + strictEqual(typeof result.modelOutputEvalResponse, 'string'); const actions = monitor.actions; strictEqual(actions.includes(OutputMonitorAction.PollingStarted), true); @@ -230,34 +204,31 @@ suite('OutputMonitor', () => { test('should handle isActive check correctly', async () => { const execution = createMockExecution( ['output', 'output', 'output', 'output'], // Same output to trigger no new data - [true, true, false] // Active, then active, then inactive (should trigger idle) + [true, false] // Active once, then inactive (should trigger idle quickly) ); const monitor = new OutputMonitor(execution, mockLanguageModelsService); - disposables.add(monitor); + store.add(monitor); const tokenSource = new CancellationTokenSource(); - // Mock the assessment function to return quickly - const originalAssess = require('../../browser/bufferOutputPolling.js').assessOutputForErrors; - require('../../browser/bufferOutputPolling.js').assessOutputForErrors = async () => 'isActive test assessment'; + // Set a timeout to cancel if it takes too long + setTimeout(() => tokenSource.cancel(), 2000); - const result = await monitor.startMonitoringLegacy(false, tokenSource.token); - - // Restore original function - require('../../browser/bufferOutputPolling.js').assessOutputForErrors = originalAssess; - - strictEqual(result.terminalExecutionIdleBeforeTimeout, true); - strictEqual(monitor.isIdle, true); + await monitor.startMonitoringLegacy(false, tokenSource.token); + // Check that it didn't timeout (either completed successfully or was cancelled) const actions = monitor.actions; strictEqual(actions.includes(OutputMonitorAction.PollingStarted), true); - strictEqual(actions.includes(OutputMonitorAction.IdleDetected), true); - }); + + // Should either be idle or cancelled + const hasIdleOrCancel = actions.includes(OutputMonitorAction.IdleDetected) || actions.includes(OutputMonitorAction.CancellationRequested); + strictEqual(hasIdleOrCancel, true); + }).timeout(5000); test('should return immutable copy of actions', () => { const execution = createMockExecution(['']); const monitor = new OutputMonitor(execution, mockLanguageModelsService); - disposables.add(monitor); + store.add(monitor); const actions1 = monitor.actions; const actions2 = monitor.actions; @@ -279,19 +250,14 @@ suite('OutputMonitor', () => { const monitor = new OutputMonitor(execution, mockLanguageModelsService); let eventFired = false; - monitor.onDidFinishCommand(() => { + const disposable = monitor.onDidFinishCommand(() => { eventFired = true; }); monitor.dispose(); + disposable.dispose(); - // Events should be disposed and not fire - try { - (monitor as any)._onDidFinishCommand.fire(); - } catch { - // Expected - disposed emitter should throw or be no-op - } - + // After disposal, state should be clean strictEqual(eventFired, false); }); }); From 67655690dd85d709de10683d14786d2ac0f884f2 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Thu, 7 Aug 2025 08:45:52 -0700 Subject: [PATCH 0106/2080] Don't run hygiene on built extension files --- build/filters.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/build/filters.js b/build/filters.js index 035bd3ddb911e..85d6eae3b1fea 100644 --- a/build/filters.js +++ b/build/filters.js @@ -24,8 +24,10 @@ module.exports.all = [ 'test/**/*', '!cli/**/*', '!out*/**', + '!extensions/**/out*/**', '!test/**/out/**', '!**/node_modules/**', + '!**/*.js.map', ]; module.exports.unicodeFilter = [ From 1d25e606aa15f0e44f4115b3d7d69ef728785ca1 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Thu, 7 Aug 2025 09:30:13 -0700 Subject: [PATCH 0107/2080] Add auto approve reasoning to UI Fixes #256780 --- .../chatTerminalMarkdownProgressPart.ts | 2 +- .../contrib/chat/common/chatService.ts | 1 + .../browser/commandLineAutoApprover.ts | 14 ++--- .../browser/tools/runInTerminalTool.ts | 61 ++++++++++++++++--- 4 files changed, 62 insertions(+), 16 deletions(-) diff --git a/src/vs/workbench/contrib/chat/browser/chatContentParts/toolInvocationParts/chatTerminalMarkdownProgressPart.ts b/src/vs/workbench/contrib/chat/browser/chatContentParts/toolInvocationParts/chatTerminalMarkdownProgressPart.ts index f4db4bc20d481..a237940efc930 100644 --- a/src/vs/workbench/contrib/chat/browser/chatContentParts/toolInvocationParts/chatTerminalMarkdownProgressPart.ts +++ b/src/vs/workbench/contrib/chat/browser/chatContentParts/toolInvocationParts/chatTerminalMarkdownProgressPart.ts @@ -45,7 +45,7 @@ export class ChatTerminalMarkdownProgressPart extends BaseChatToolInvocationSubP let content = `\`\`\`${terminalData.language}\n${command}\n\`\`\``; if (toolInvocation.pastTenseMessage) { - content += `\n\n$(info) ${typeof toolInvocation.pastTenseMessage === 'string' ? toolInvocation.pastTenseMessage : toolInvocation.pastTenseMessage.value}`; + content += `\n\n${typeof toolInvocation.pastTenseMessage === 'string' ? toolInvocation.pastTenseMessage : toolInvocation.pastTenseMessage.value}`; } const markdownContent = new MarkdownString(content, { supportThemeIcons: true }); const chatMarkdownContent: IChatMarkdownContent = { diff --git a/src/vs/workbench/contrib/chat/common/chatService.ts b/src/vs/workbench/contrib/chat/common/chatService.ts index 40eebf5d8115c..5a864b51c7a7b 100644 --- a/src/vs/workbench/contrib/chat/common/chatService.ts +++ b/src/vs/workbench/contrib/chat/common/chatService.ts @@ -289,6 +289,7 @@ export interface IChatTerminalToolInvocationData { alternativeRecommendation?: string; language: string; terminalToolSessionId?: string; + autoApproveInfo?: IMarkdownString; } /** diff --git a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandLineAutoApprover.ts b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandLineAutoApprover.ts index e9ee727bca463..ef49d3f8c0b76 100644 --- a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandLineAutoApprover.ts +++ b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/commandLineAutoApprover.ts @@ -67,13 +67,13 @@ export class CommandLineAutoApprover extends Disposable { this._denyListCommandLineRules = denyListCommandLineRules; } - isCommandAutoApproved(command: string, shell: string, os: OperatingSystem): { result: ICommandApprovalResult; isDefaultRule: boolean | undefined; reason: string } { + isCommandAutoApproved(command: string, shell: string, os: OperatingSystem): { result: ICommandApprovalResult; rule?: IAutoApproveRule; reason: string } { // Check the deny list to see if this command requires explicit approval for (const rule of this._denyListRules) { if (this._commandMatchesRule(rule, command, shell, os)) { return { result: 'denied', - isDefaultRule: rule.isDefaultRule, + rule, reason: `Command '${command}' is denied by deny list rule: ${rule.sourceText}` }; } @@ -84,7 +84,7 @@ export class CommandLineAutoApprover extends Disposable { if (this._commandMatchesRule(rule, command, shell, os)) { return { result: 'approved', - isDefaultRule: rule.isDefaultRule, + rule, reason: `Command '${command}' is approved by allow list rule: ${rule.sourceText}` }; } @@ -95,18 +95,17 @@ export class CommandLineAutoApprover extends Disposable { // Fallback is always to require approval return { result: 'noMatch', - isDefaultRule: undefined, reason: `Command '${command}' has no matching auto approve entries` }; } - isCommandLineAutoApproved(commandLine: string): { result: ICommandApprovalResult; isDefaultRule: boolean | undefined; reason: string } { + isCommandLineAutoApproved(commandLine: string): { result: ICommandApprovalResult; rule?: IAutoApproveRule; reason: string } { // Check the deny list first to see if this command line requires explicit approval for (const rule of this._denyListCommandLineRules) { if (rule.regex.test(commandLine)) { return { result: 'denied', - isDefaultRule: rule.isDefaultRule, + rule, reason: `Command line '${commandLine}' is denied by deny list rule: ${rule.sourceText}` }; } @@ -117,14 +116,13 @@ export class CommandLineAutoApprover extends Disposable { if (rule.regex.test(commandLine)) { return { result: 'approved', - isDefaultRule: rule.isDefaultRule, + rule, reason: `Command line '${commandLine}' is approved by allow list rule: ${rule.sourceText}` }; } } return { result: 'noMatch', - isDefaultRule: undefined, reason: `Command line '${commandLine}' has no matching auto approve entries` }; } diff --git a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts index 68fe91cfea8ac..17143278598fe 100644 --- a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts +++ b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/browser/tools/runInTerminalTool.ts @@ -202,6 +202,7 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { toolEditedCommand = undefined; } + let autoApproveInfo: IMarkdownString | undefined; let confirmationMessages: IToolConfirmationMessages | undefined; if (alternativeRecommendation) { confirmationMessages = undefined; @@ -226,32 +227,69 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { if (deniedSubCommandResult) { this._logService.info('autoApprove: Sub-command DENIED auto approval'); isDenied = true; - autoApproveDefault = deniedSubCommandResult.isDefaultRule; + autoApproveDefault = deniedSubCommandResult.rule?.isDefaultRule; autoApproveReason = 'subCommand'; } else if (commandLineResult.result === 'denied') { this._logService.info('autoApprove: Command line DENIED auto approval'); isDenied = true; - autoApproveDefault = commandLineResult.isDefaultRule; + autoApproveDefault = commandLineResult.rule?.isDefaultRule; autoApproveReason = 'commandLine'; } else { if (subCommandResults.every(e => e.result === 'approved')) { this._logService.info('autoApprove: All sub-commands auto-approved'); autoApproveReason = 'subCommand'; isAutoApproved = true; - autoApproveDefault = subCommandResults.every(e => e.isDefaultRule); + autoApproveDefault = subCommandResults.every(e => e.rule?.isDefaultRule); } else { this._logService.info('autoApprove: All sub-commands NOT auto-approved'); if (commandLineResult.result === 'approved') { this._logService.info('autoApprove: Command line auto-approved'); autoApproveReason = 'commandLine'; isAutoApproved = true; - autoApproveDefault = commandLineResult.isDefaultRule; + autoApproveDefault = commandLineResult.rule?.isDefaultRule; } else { this._logService.info('autoApprove: Command line NOT auto-approved'); } } } + if (isAutoApproved) { + switch (autoApproveReason) { + case 'commandLine': { + if (commandLineResult.rule) { + autoApproveInfo = new MarkdownString(`_${localize('autoApprove.rule', 'Auto approved by rule {0}', `\`${commandLineResult.rule.sourceText}\``)}_`); + } + break; + } + case 'subCommand': { + if (subCommandResults.length === 1) { + autoApproveInfo = new MarkdownString(`_${localize('autoApprove.rule', 'Auto approved by rule {0}', subCommandResults.map(e => `\`${e.rule!.sourceText}\``).join(', '))}_`); + } else if (subCommandResults.length > 1) { + autoApproveInfo = new MarkdownString(`_${localize('autoApprove.rules', 'Auto approved by rules {0}', subCommandResults.map(e => `\`${e.rule!.sourceText}\``).join(', '))}_`); + } + break; + } + } + } else if (isDenied) { + switch (autoApproveReason) { + case 'commandLine': { + if (commandLineResult.rule) { + autoApproveInfo = new MarkdownString(`_${localize('autoApproveDenied.rule', 'Auto approval denied by rule {0}', `\`${commandLineResult.rule.sourceText}\``)}_`); + } + break; + } + case 'subCommand': { + const deniedRules = subCommandResults.filter(e => e.result === 'denied'); + if (deniedRules.length === 1) { + autoApproveInfo = new MarkdownString(`_${localize('autoApproveDenied.rule', 'Auto approval denied by rule {0}', deniedRules.map(e => `\`${e.rule!.sourceText}\``).join(', '))}_`); + } else if (deniedRules.length > 1) { + autoApproveInfo = new MarkdownString(`_${localize('autoApproveDenied.rules', 'Auto approval denied by rules {0}', deniedRules.map(e => `\`${e.rule!.sourceText}\``).join(', '))}_`); + } + break; + } + } + } + // TODO: Surface reason on tool part https://github.com/microsoft/vscode/issues/256780 for (const reason of autoApproveReasons) { this._logService.info(`- ${reason}`); @@ -297,6 +335,7 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { }, language, alternativeRecommendation, + autoApproveInfo, } }; } @@ -317,7 +356,7 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { const args = invocation.parameters as IRunInTerminalInputParams; this._logService.debug(`RunInTerminalTool: Invoking with options ${JSON.stringify(args)}`); - let toolResultMessage: string | IMarkdownString | undefined; + let toolResultMessage: string | undefined; const chatSessionId = invocation.context?.sessionId ?? 'no-chat-session'; const command = toolSpecificData.commandLine.userEdited ?? toolSpecificData.commandLine.toolEdited ?? toolSpecificData.commandLine.original; @@ -451,7 +490,7 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { switch (toolTerminal.shellIntegrationQuality) { case ShellIntegrationQuality.None: { strategy = this._instantiationService.createInstance(NoneExecuteStrategy, toolTerminal.instance); - toolResultMessage = new MarkdownString('Enable [shell integration](https://code.visualstudio.com/docs/terminal/shell-integration) to improve command detection'); + toolResultMessage = '$(info) Enable [shell integration](https://code.visualstudio.com/docs/terminal/shell-integration) to improve command detection'; break; } case ShellIntegrationQuality.Basic: { @@ -516,8 +555,16 @@ export class RunInTerminalTool extends Disposable implements IToolImpl { } resultText.push(terminalResult); + if (toolSpecificData.autoApproveInfo) { + if (toolResultMessage) { + toolResultMessage = `${toolSpecificData.autoApproveInfo.value}\n\n${toolResultMessage}`; + } else { + toolResultMessage = toolSpecificData.autoApproveInfo.value; + } + } + return { - toolResultMessage, + toolResultMessage: new MarkdownString(toolResultMessage), content: [{ kind: 'text', value: resultText.join(''), From 6f9c100e9ebd350e9be2b6fe0581b4f1e8b6aaaa Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Thu, 7 Aug 2025 09:36:05 -0700 Subject: [PATCH 0108/2080] Fix test expectations --- .../test/browser/commandLineAutoApprover.test.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/test/browser/commandLineAutoApprover.test.ts b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/test/browser/commandLineAutoApprover.test.ts index 534b4dcb609a1..523ab2ed370bc 100644 --- a/src/vs/workbench/contrib/terminalContrib/chatAgentTools/test/browser/commandLineAutoApprover.test.ts +++ b/src/vs/workbench/contrib/terminalContrib/chatAgentTools/test/browser/commandLineAutoApprover.test.ts @@ -703,11 +703,11 @@ suite('CommandLineAutoApprover', () => { suite('isDefaultRule logic', () => { function getIsDefaultRule(command: string): boolean | undefined { - return commandLineAutoApprover.isCommandAutoApproved(command, shell, os).isDefaultRule; + return commandLineAutoApprover.isCommandAutoApproved(command, shell, os).rule?.isDefaultRule; } function getCommandLineIsDefaultRule(commandLine: string): boolean | undefined { - return commandLineAutoApprover.isCommandLineAutoApproved(commandLine).isDefaultRule; + return commandLineAutoApprover.isCommandLineAutoApproved(commandLine).rule?.isDefaultRule; } function setAutoApproveWithDefaults(userConfig: { [key: string]: boolean }, defaultConfig: { [key: string]: boolean }) { @@ -820,7 +820,7 @@ suite('CommandLineAutoApprover', () => { strictEqual(catResult.result, 'approved', 'cat should be approved from default config'); // cat should be marked as default rule since it comes from default config only - strictEqual(catResult.isDefaultRule, true, 'cat is only in default config, not in user config - should be marked as default'); + strictEqual(catResult.rule?.isDefaultRule, true, 'cat is only in default config, not in user config - should be marked as default'); }); test('should handle default rules with different values', () => { From d865a99c496e677f9aec88771ec4be4b238d91b7 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Thu, 7 Aug 2025 09:38:52 -0700 Subject: [PATCH 0109/2080] Clean up some typings in build - Adding ts-check in a few more js files - Switching to use `@types` for a few more packages - Remove some unused code --- build/buildfile.js | 1 + build/eslint.js | 2 +- build/filters.js | 1 + build/gulp-eslint.js | 16 +- build/gulpfile.cli.js | 32 +-- build/gulpfile.extensions.js | 14 +- build/gulpfile.js | 2 +- build/gulpfile.vscode.web.js | 8 + build/gulpfile.vscode.win32.js | 1 - build/hygiene.js | 22 +- build/lib/compilation.js | 2 +- build/lib/compilation.ts | 6 +- build/lib/extensions.ts | 4 +- build/lib/i18n.ts | 8 +- build/lib/inlineMeta.ts | 2 +- build/lib/nls.js | 6 +- build/lib/nls.ts | 12 +- build/lib/typings/github-releases.d.ts | 3 - build/lib/typings/gulp-flatmap.d.ts | 12 -- build/lib/typings/lazy.js.d.ts | 276 ------------------------- build/lib/typings/vinyl.d.ts | 135 ------------ build/lib/util.ts | 6 +- build/package-lock.json | 52 +++++ build/package.json | 6 + build/setup-npm-registry.js | 15 +- build/stylelint.js | 8 +- build/tsconfig.build.json | 3 - 27 files changed, 144 insertions(+), 511 deletions(-) delete mode 100644 build/lib/typings/github-releases.d.ts delete mode 100644 build/lib/typings/gulp-flatmap.d.ts delete mode 100644 build/lib/typings/lazy.js.d.ts delete mode 100644 build/lib/typings/vinyl.d.ts diff --git a/build/buildfile.js b/build/buildfile.js index 3acb1218b99e4..83f84563275b1 100644 --- a/build/buildfile.js +++ b/build/buildfile.js @@ -2,6 +2,7 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check /** * @param {string} name diff --git a/build/eslint.js b/build/eslint.js index 55e11b277d93c..e952c546eecb1 100644 --- a/build/eslint.js +++ b/build/eslint.js @@ -2,7 +2,7 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ - +// @ts-check const es = require('event-stream'); const vfs = require('vinyl-fs'); const { eslintFilter } = require('./filters'); diff --git a/build/filters.js b/build/filters.js index 035bd3ddb911e..4a568ded8b05e 100644 --- a/build/filters.js +++ b/build/filters.js @@ -2,6 +2,7 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check /** * Hygiene works by creating cascading subsets of all our files and diff --git a/build/gulp-eslint.js b/build/gulp-eslint.js index 902c7b47003ed..793c16c2f3012 100644 --- a/build/gulp-eslint.js +++ b/build/gulp-eslint.js @@ -6,24 +6,28 @@ 'use strict'; const { ESLint } = require('eslint'); -const { Transform } = require('stream'); +const { Transform, default: Stream } = require('stream'); const { relative } = require('path'); const fancyLog = require('fancy-log'); /** - * @param {Function} action - A function to handle all ESLint results - * @returns {stream} gulp file stream + * @typedef {ESLint.LintResult[] & { errorCount: number, warningCount: number}} ESLintResults + */ + +/** + * @param {(results: ESLintResults) => void} action - A function to handle all ESLint results */ function eslint(action) { const linter = new ESLint({}); const formatter = linter.loadFormatter('compact'); + /** @type {ESLintResults} results */ const results = []; results.errorCount = 0; results.warningCount = 0; return transform( - async (file, enc, cb) => { + async (file, _enc, cb) => { const filePath = relative(process.cwd(), file.path); if (file.isNull()) { @@ -67,6 +71,10 @@ function eslint(action) { }); } +/** + * @param {Stream.TransformOptions['transform']} transform + * @param {Stream.TransformOptions['flush']} flush + */ function transform(transform, flush) { return new Transform({ objectMode: true, diff --git a/build/gulpfile.cli.js b/build/gulpfile.cli.js index 592fc74516c5e..63e0ae0b84764 100644 --- a/build/gulpfile.cli.js +++ b/build/gulpfile.cli.js @@ -12,7 +12,7 @@ const fancyLog = require('fancy-log'); const ansiColors = require('ansi-colors'); const cp = require('child_process'); const { tmpdir } = require('os'); -const { promises: fs, existsSync, mkdirSync, rmSync } = require('fs'); +const { existsSync, mkdirSync, rmSync } = require('fs'); const task = require('./lib/task'); const watcher = require('./lib/watch'); @@ -58,36 +58,6 @@ const hasLocalRust = (() => { }; })(); -const debounceEsStream = (fn, duration = 100) => { - let handle = undefined; - let pending = []; - const sendAll = (pending) => (event, ...args) => { - for (const stream of pending) { - pending.emit(event, ...args); - } - }; - - return es.map(function (_, callback) { - console.log('defer'); - if (handle !== undefined) { - clearTimeout(handle); - } - - handle = setTimeout(() => { - handle = undefined; - - const previous = pending; - pending = []; - fn() - .on('error', sendAll('error')) - .on('data', sendAll('data')) - .on('end', sendAll('end')); - }, duration); - - pending.push(this); - }); -}; - const compileFromSources = (callback) => { const proc = cp.spawn('cargo', ['--color', 'always', 'build'], { cwd: root, diff --git a/build/gulpfile.extensions.js b/build/gulpfile.extensions.js index 73c227e29ae72..83d4f32179f61 100644 --- a/build/gulpfile.extensions.js +++ b/build/gulpfile.extensions.js @@ -92,16 +92,6 @@ const tasks = compilations.map(function (tsconfigFile) { const out = path.join(srcRoot, 'out'); const baseUrl = getBaseUrl(out); - let headerId, headerOut; - const index = relativeDirname.indexOf('/'); - if (index < 0) { - headerId = 'vscode.' + relativeDirname; - headerOut = 'out'; - } else { - headerId = 'vscode.' + relativeDirname.substr(0, index); - headerOut = relativeDirname.substr(index + 1) + '/out'; - } - function createPipeline(build, emitError, transpileOnly) { const tsb = require('./lib/tsb'); const sourcemaps = require('gulp-sourcemaps'); @@ -248,7 +238,7 @@ const bundleMarketplaceExtensionsBuildTask = task.define('bundle-marketplace-ext */ const compileNonNativeExtensionsBuildTask = task.define('compile-non-native-extensions-build', task.series( bundleMarketplaceExtensionsBuildTask, - task.define('bundle-non-native-extensions-build', () => ext.packageNonNativeLocalExtensionsStream().pipe(gulp.dest('.build'))) + task.define('bundle-non-native-extensions-build', () => ext.packageNonNativeLocalExtensionsStream(false, false).pipe(gulp.dest('.build'))) )); gulp.task(compileNonNativeExtensionsBuildTask); exports.compileNonNativeExtensionsBuildTask = compileNonNativeExtensionsBuildTask; @@ -257,7 +247,7 @@ exports.compileNonNativeExtensionsBuildTask = compileNonNativeExtensionsBuildTas * Compiles the native extensions for the build * @note this does not clean the directory ahead of it. See {@link cleanExtensionsBuildTask} for that. */ -const compileNativeExtensionsBuildTask = task.define('compile-native-extensions-build', () => ext.packageNativeLocalExtensionsStream().pipe(gulp.dest('.build'))); +const compileNativeExtensionsBuildTask = task.define('compile-native-extensions-build', () => ext.packageNativeLocalExtensionsStream(false, false).pipe(gulp.dest('.build'))); gulp.task(compileNativeExtensionsBuildTask); exports.compileNativeExtensionsBuildTask = compileNativeExtensionsBuildTask; diff --git a/build/gulpfile.js b/build/gulpfile.js index 7894398c2ea94..97971eec63e13 100644 --- a/build/gulpfile.js +++ b/build/gulpfile.js @@ -11,7 +11,7 @@ require('events').EventEmitter.defaultMaxListeners = 100; const gulp = require('gulp'); const util = require('./lib/util'); const task = require('./lib/task'); -const { transpileClientSWC, transpileTask, compileTask, watchTask, compileApiProposalNamesTask, watchApiProposalNamesTask } = require('./lib/compilation'); +const { transpileTask, compileTask, watchTask, compileApiProposalNamesTask, watchApiProposalNamesTask } = require('./lib/compilation'); const { monacoTypecheckTask/* , monacoTypecheckWatchTask */ } = require('./gulpfile.editor'); const { compileExtensionsTask, watchExtensionsTask, compileExtensionMediaTask } = require('./gulpfile.extensions'); diff --git a/build/gulpfile.vscode.web.js b/build/gulpfile.vscode.web.js index 08dfcfd0cd915..295a9778d52ba 100644 --- a/build/gulpfile.vscode.web.js +++ b/build/gulpfile.vscode.web.js @@ -93,6 +93,10 @@ const vscodeWebEntryPoints = [ * @param {object} product The parsed product.json file contents */ const createVSCodeWebFileContentMapper = (extensionsRoot, product) => { + /** + * @param {string} path + * @returns {((content: string) => string) | undefined} + */ return path => { if (path.endsWith('vs/platform/product/common/product.js')) { return content => { @@ -138,6 +142,10 @@ const minifyVSCodeWebTask = task.define('minify-vscode-web', task.series( )); gulp.task(minifyVSCodeWebTask); +/** + * @param {string} sourceFolderName + * @param {string} destinationFolderName + */ function packageTask(sourceFolderName, destinationFolderName) { const destination = path.join(BUILD_ROOT, destinationFolderName); diff --git a/build/gulpfile.vscode.win32.js b/build/gulpfile.vscode.win32.js index 0c4dc5226cc87..9207df5a44b7d 100644 --- a/build/gulpfile.vscode.win32.js +++ b/build/gulpfile.vscode.win32.js @@ -2,7 +2,6 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ - 'use strict'; const gulp = require('gulp'); diff --git a/build/hygiene.js b/build/hygiene.js index c844ebd574b4b..961b085e68472 100644 --- a/build/hygiene.js +++ b/build/hygiene.js @@ -2,6 +2,7 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check const filter = require('gulp-filter'); const es = require('event-stream'); @@ -20,6 +21,10 @@ const copyrightHeaderLines = [ ' *--------------------------------------------------------------------------------------------*/', ]; +/** + * @param {string[] | NodeJS.ReadWriteStream} some + * @param {boolean} linting + */ function hygiene(some, linting = true) { const eslint = require('./gulp-eslint'); const gulpstylelint = require('./stylelint'); @@ -39,6 +44,7 @@ function hygiene(some, linting = true) { }); const unicode = es.through(function (file) { + /** @type {string[]} */ const lines = file.contents.toString('utf8').split(/\r\n|\r|\n/); file.__lines = lines; const allowInComments = lines.some(line => /allow-any-unicode-comment-file/.test(line)); @@ -76,6 +82,7 @@ function hygiene(some, linting = true) { }); const indentation = es.through(function (file) { + /** @type {string[]} */ const lines = file.__lines || file.contents.toString('utf8').split(/\r\n|\r|\n/); file.__lines = lines; @@ -125,14 +132,13 @@ function hygiene(some, linting = true) { ); errorCount++; } - cb(null, file); + cb(undefined, file); } catch (err) { cb(err); } }); let input; - if (Array.isArray(some) || typeof some === 'string' || !some) { const options = { base: '.', follow: true, allowEmpty: true }; if (some) { @@ -164,6 +170,7 @@ function hygiene(some, linting = true) { .pipe(filter(copyrightFilter)) .pipe(copyrights); + /** @type {import('stream').Stream[]} */ const streams = [ result.pipe(filter(tsFormattingFilter)).pipe(formatting) ]; @@ -220,6 +227,9 @@ function hygiene(some, linting = true) { module.exports.hygiene = hygiene; +/** + * @param {string[]} paths + */ function createGitIndexVinyls(paths) { const cp = require('child_process'); const repositoryPath = process.cwd(); @@ -294,12 +304,14 @@ if (require.main === module) { createGitIndexVinyls(some) .then( - (vinyls) => - new Promise((c, e) => + (vinyls) => { + /** @type {Promise} */ + return (new Promise((c, e) => hygiene(es.readArray(vinyls).pipe(filter(all))) .on('end', () => c()) .on('error', e) - ) + )) + } ) .catch((err) => { console.error(); diff --git a/build/lib/compilation.js b/build/lib/compilation.js index 7e0927e9d2f3d..fb326dfd2b16a 100644 --- a/build/lib/compilation.js +++ b/build/lib/compilation.js @@ -123,7 +123,7 @@ function createCompile(src, { build, emitError, transpileOnly, preserveEnglish } } function transpileTask(src, out, esbuild) { const task = () => { - const transpile = createCompile(src, { build: false, emitError: true, transpileOnly: { esbuild }, preserveEnglish: false }); + const transpile = createCompile(src, { build: false, emitError: true, transpileOnly: { esbuild: !!esbuild }, preserveEnglish: false }); const srcPipe = gulp_1.default.src(`${src}/**`, { base: `${src}` }); return srcPipe .pipe(transpile()) diff --git a/build/lib/compilation.ts b/build/lib/compilation.ts index a1de9f12dfdf9..aea06e8a24232 100644 --- a/build/lib/compilation.ts +++ b/build/lib/compilation.ts @@ -100,11 +100,11 @@ export function createCompile(src: string, { build, emitError, transpileOnly, pr return pipeline; } -export function transpileTask(src: string, out: string, esbuild: boolean): task.StreamTask { +export function transpileTask(src: string, out: string, esbuild?: boolean): task.StreamTask { const task = () => { - const transpile = createCompile(src, { build: false, emitError: true, transpileOnly: { esbuild }, preserveEnglish: false }); + const transpile = createCompile(src, { build: false, emitError: true, transpileOnly: { esbuild: !!esbuild }, preserveEnglish: false }); const srcPipe = gulp.src(`${src}/**`, { base: `${src}` }); return srcPipe @@ -301,7 +301,7 @@ function generateApiProposalNames() { const proposalName = match[1]; - const contents = f.contents.toString('utf8'); + const contents = f.contents!.toString('utf8'); const versionMatch = versionPattern.exec(contents); const version = versionMatch ? versionMatch[1] : undefined; diff --git a/build/lib/extensions.ts b/build/lib/extensions.ts index b900802ed6a30..1a55acc52cfcf 100644 --- a/build/lib/extensions.ts +++ b/build/lib/extensions.ts @@ -38,7 +38,7 @@ function minifyExtensionResources(input: Stream): Stream { .pipe(buffer()) .pipe(es.mapSync((f: File) => { const errors: jsoncParser.ParseError[] = []; - const value = jsoncParser.parse(f.contents.toString('utf8'), errors, { allowTrailingComma: true }); + const value = jsoncParser.parse(f.contents!.toString('utf8'), errors, { allowTrailingComma: true }); if (errors.length === 0) { // file parsed OK => just stringify to drop whitespace and comments f.contents = Buffer.from(JSON.stringify(value)); @@ -54,7 +54,7 @@ function updateExtensionPackageJSON(input: Stream, update: (data: any) => any): .pipe(packageJsonFilter) .pipe(buffer()) .pipe(es.mapSync((f: File) => { - const data = JSON.parse(f.contents.toString('utf8')); + const data = JSON.parse(f.contents!.toString('utf8')); f.contents = Buffer.from(JSON.stringify(update(data))); return f; })) diff --git a/build/lib/i18n.ts b/build/lib/i18n.ts index 96468033719ca..13cefe51dad6b 100644 --- a/build/lib/i18n.ts +++ b/build/lib/i18n.ts @@ -389,7 +389,7 @@ export function processNlsFiles(opts: { out: string; fileHeader: string; languag const fileName = path.basename(file.path); if (fileName === 'nls.keys.json') { try { - const contents = file.contents.toString('utf8'); + const contents = file.contents!.toString('utf8'); const json = JSON.parse(contents); if (NLSKeysFormat.is(json)) { processCoreBundleFormat(file.base, opts.fileHeader, opts.languages, json, this); @@ -653,7 +653,7 @@ export function createXlfFilesForIsl(): ThroughStream { keys: string[] = [], messages: string[] = []; - const model = new TextModel(file.contents.toString()); + const model = new TextModel(file.contents!.toString()); let inMessageSection = false; model.lines.forEach(line => { if (line.length === 0) { @@ -752,7 +752,7 @@ export function prepareI18nPackFiles(resultingTranslationPaths: TranslationPath[ if (EXTERNAL_EXTENSIONS.find(e => e === resource)) { project = extensionsProject; } - const contents = xlf.contents.toString(); + const contents = xlf.contents!.toString(); log(`Found ${project}: ${resource}`); const parsePromise = getL10nFilesFromXlf(contents); parsePromises.push(parsePromise); @@ -808,7 +808,7 @@ export function prepareIslFiles(language: Language, innoSetupConfig: InnoSetup): return through(function (this: ThroughStream, xlf: File) { const stream = this; - const parsePromise = XLF.parse(xlf.contents.toString()); + const parsePromise = XLF.parse(xlf.contents!.toString()); parsePromises.push(parsePromise); parsePromise.then( resolvedFiles => { diff --git a/build/lib/inlineMeta.ts b/build/lib/inlineMeta.ts index 2a0db13d06e2d..530e1ec30ea5c 100644 --- a/build/lib/inlineMeta.ts +++ b/build/lib/inlineMeta.ts @@ -26,7 +26,7 @@ const packageJsonMarkerId = 'BUILD_INSERT_PACKAGE_CONFIGURATION'; export function inlineMeta(result: NodeJS.ReadWriteStream, ctx: IInlineMetaContext): NodeJS.ReadWriteStream { return result.pipe(es.through(function (file: File) { if (matchesFile(file, ctx)) { - let content = file.contents.toString(); + let content = file.contents!.toString(); let markerFound = false; const packageMarker = `${packageJsonMarkerId}:"${packageJsonMarkerId}"`; // this needs to be the format after esbuild has processed the file (e.g. double quotes) diff --git a/build/lib/nls.js b/build/lib/nls.js index b2fbf88981c28..492dbdae8ce66 100644 --- a/build/lib/nls.js +++ b/build/lib/nls.js @@ -182,7 +182,7 @@ var _nls; .map(d => d.importClause.namedBindings.name) .concat(importEqualsDeclarations.map(d => d.name)) // find read-only references to `nls` - .map(n => service.getReferencesAtPosition(filename, n.pos + 1)) + .map(n => service.getReferencesAtPosition(filename, n.pos + 1) ?? []) .flatten() .filter(r => !r.isWriteAccess) // find the deepest call expressions AST nodes that contain those references @@ -200,13 +200,13 @@ var _nls; // `localize` read-only references const localizeReferences = allLocalizeImportDeclarations .filter(d => d.name.getText() === functionName) - .map(n => service.getReferencesAtPosition(filename, n.pos + 1)) + .map(n => service.getReferencesAtPosition(filename, n.pos + 1) ?? []) .flatten() .filter(r => !r.isWriteAccess); // custom named `localize` read-only references const namedLocalizeReferences = allLocalizeImportDeclarations .filter(d => d.propertyName && d.propertyName.getText() === functionName) - .map(n => service.getReferencesAtPosition(filename, n.name.pos + 1)) + .map(n => service.getReferencesAtPosition(filename, n.name.pos + 1) ?? []) .flatten() .filter(r => !r.isWriteAccess); // find the deepest call expressions AST nodes that contain those references diff --git a/build/lib/nls.ts b/build/lib/nls.ts index ef2afc5d7c8af..a21102b0cccce 100644 --- a/build/lib/nls.ts +++ b/build/lib/nls.ts @@ -11,9 +11,7 @@ import sm from 'source-map'; import path from 'path'; import sort from 'gulp-sort'; -declare class FileSourceMap extends File { - public sourceMap: sm.RawSourceMap; -} +type FileSourceMap = File & { sourceMap: sm.RawSourceMap }; enum CollectStepResult { Yes, @@ -248,7 +246,7 @@ module _nls { .concat(importEqualsDeclarations.map(d => d.name)) // find read-only references to `nls` - .map(n => service.getReferencesAtPosition(filename, n.pos + 1)) + .map(n => service.getReferencesAtPosition(filename, n.pos + 1) ?? []) .flatten() .filter(r => !r.isWriteAccess) @@ -270,14 +268,14 @@ module _nls { // `localize` read-only references const localizeReferences = allLocalizeImportDeclarations .filter(d => d.name.getText() === functionName) - .map(n => service.getReferencesAtPosition(filename, n.pos + 1)) + .map(n => service.getReferencesAtPosition(filename, n.pos + 1) ?? []) .flatten() .filter(r => !r.isWriteAccess); // custom named `localize` read-only references const namedLocalizeReferences = allLocalizeImportDeclarations .filter(d => d.propertyName && d.propertyName.getText() === functionName) - .map(n => service.getReferencesAtPosition(filename, n.name.pos + 1)) + .map(n => service.getReferencesAtPosition(filename, n.name.pos + 1) ?? []) .flatten() .filter(r => !r.isWriteAccess); @@ -504,7 +502,7 @@ module _nls { const { javascript, sourcemap, nlsKeys, nlsMessages } = patch( ts, typescript, - javascriptFile.contents.toString(), + javascriptFile.contents!.toString(), (javascriptFile).sourceMap, options ); diff --git a/build/lib/typings/github-releases.d.ts b/build/lib/typings/github-releases.d.ts deleted file mode 100644 index 5706a86b5e4ba..0000000000000 --- a/build/lib/typings/github-releases.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -declare module 'github-releases' { - -} \ No newline at end of file diff --git a/build/lib/typings/gulp-flatmap.d.ts b/build/lib/typings/gulp-flatmap.d.ts deleted file mode 100644 index c99232c61cca9..0000000000000 --- a/build/lib/typings/gulp-flatmap.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -declare module 'gulp-flatmap' { - import File = require('vinyl'); - function f(fn:(stream:NodeJS.ReadWriteStream, file:File)=>NodeJS.ReadWriteStream): NodeJS.ReadWriteStream; - - /** - * This is required as per: - * https://github.com/microsoft/TypeScript/issues/5073 - */ - namespace f {} - - export = f; -} diff --git a/build/lib/typings/lazy.js.d.ts b/build/lib/typings/lazy.js.d.ts deleted file mode 100644 index f69924b4b1ccf..0000000000000 --- a/build/lib/typings/lazy.js.d.ts +++ /dev/null @@ -1,276 +0,0 @@ -// Type definitions for Lazy.js 0.3.2 -// Project: https://github.com/dtao/lazy.js/ -// Definitions by: Bart van der Schoor -// Definitions: https://github.com/borisyankov/DefinitelyTyped - -declare function Lazy(value: string): Lazy.StringLikeSequence; -declare function Lazy(value: T[]): Lazy.ArrayLikeSequence; -declare function Lazy(value: any[]): Lazy.ArrayLikeSequence; -declare function Lazy(value: Object): Lazy.ObjectLikeSequence; -declare function Lazy(value: Object): Lazy.ObjectLikeSequence; - -declare module Lazy { - function strict(): StrictLazy; - function generate(generatorFn: GeneratorCallback, length?: number): GeneratedSequence; - function range(to: number): GeneratedSequence; - function range(from: number, to: number, step?: number): GeneratedSequence; - function repeat(value: T, count?: number): GeneratedSequence; - function on(eventType: string): Sequence; - function readFile(path: string): StringLikeSequence; - function makeHttpRequest(path: string): StringLikeSequence; - - interface StrictLazy { - (value: string): StringLikeSequence; - (value: T[]): ArrayLikeSequence; - (value: any[]): ArrayLikeSequence; - (value: Object): ObjectLikeSequence; - (value: Object): ObjectLikeSequence; - strict(): StrictLazy; - generate(generatorFn: GeneratorCallback, length?: number): GeneratedSequence; - range(to: number): GeneratedSequence; - range(from: number, to: number, step?: number): GeneratedSequence; - repeat(value: T, count?: number): GeneratedSequence; - on(eventType: string): Sequence; - readFile(path: string): StringLikeSequence; - makeHttpRequest(path: string): StringLikeSequence; - } - - interface ArrayLike { - length: number; - [index: number]: T; - } - - interface Callback { - (): void; - } - - interface ErrorCallback { - (error: any): void; - } - - interface ValueCallback { - (value: T): void; - } - - interface GetKeyCallback { - (value: T): string; - } - - interface TestCallback { - (value: T): boolean; - } - - interface MapCallback { - (value: T): U; - } - - interface MapStringCallback { - (value: string): string; - } - - interface NumberCallback { - (value: T): number; - } - - interface MemoCallback { - (memo: U, value: T): U; - } - - interface GeneratorCallback { - (index: number): T; - } - - interface CompareCallback { - (x: any, y: any): number; - } - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - interface Iterator { - new(sequence: Sequence): Iterator; - current(): T; - moveNext(): boolean; - } - - interface GeneratedSequence extends Sequence { - new(generatorFn: GeneratorCallback, length: number): GeneratedSequence; - length(): number; - } - - interface AsyncSequence extends SequenceBase { - each(callback: ValueCallback): AsyncHandle; - } - - interface AsyncHandle { - cancel(): void; - onComplete(callback: Callback): void; - onError(callback: ErrorCallback): void; - } - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - module Sequence { - function define(methodName: string[], overrides: Object): Function; - } - - interface Sequence extends SequenceBase { - each(eachFn: ValueCallback): Sequence; - } - - interface ArraySequence extends SequenceBase { - flatten(): Sequence; - } - - interface SequenceBase extends SequenceBaser { - first(): any; - first(count: number): Sequence; - indexOf(value: any, startIndex?: number): Sequence; - - last(): any; - last(count: number): Sequence; - lastIndexOf(value: any): Sequence; - - reverse(): Sequence; - } - - interface SequenceBaser { - // TODO improve define() (needs ugly overload) - async(interval: number): AsyncSequence; - chunk(size: number): Sequence; - compact(): Sequence; - concat(var_args: T[]): Sequence; - concat(sequence: Sequence): Sequence; - consecutive(length: number): Sequence; - contains(value: T): boolean; - countBy(keyFn: GetKeyCallback): ObjectLikeSequence; - countBy(propertyName: string): ObjectLikeSequence; - dropWhile(predicateFn: TestCallback): Sequence; - every(predicateFn: TestCallback): boolean; - filter(predicateFn: TestCallback): Sequence; - find(predicateFn: TestCallback): Sequence; - findWhere(properties: Object): Sequence; - - groupBy(keyFn: GetKeyCallback): ObjectLikeSequence; - initial(count?: number): Sequence; - intersection(var_args: T[]): Sequence; - invoke(methodName: string): Sequence; - isEmpty(): boolean; - join(delimiter?: string): string; - map(mapFn: MapCallback): ArraySequence; - map(mapFn: MapCallback): Sequence; - - // TODO: vscode addition to workaround strict null errors - flatten(): Sequence; - - max(valueFn?: NumberCallback): T; - min(valueFn?: NumberCallback): T; - none(valueFn?: TestCallback): boolean; - pluck(propertyName: string): Sequence; - reduce(aggregatorFn: MemoCallback, memo?: U): U; - reduceRight(aggregatorFn: MemoCallback, memo: U): U; - reject(predicateFn: TestCallback): Sequence; - rest(count?: number): Sequence; - shuffle(): Sequence; - some(predicateFn?: TestCallback): boolean; - sort(sortFn?: CompareCallback, descending?: boolean): Sequence; - sortBy(sortFn: string, descending?: boolean): Sequence; - sortBy(sortFn: NumberCallback, descending?: boolean): Sequence; - sortedIndex(value: T): Sequence; - size(): number; - sum(valueFn?: NumberCallback): Sequence; - takeWhile(predicateFn: TestCallback): Sequence; - union(var_args: T[]): Sequence; - uniq(): Sequence; - where(properties: Object): Sequence; - without(...var_args: T[]): Sequence; - without(var_args: T[]): Sequence; - zip(var_args: T[]): ArraySequence; - - toArray(): T[]; - toObject(): Object; - } - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - module ArrayLikeSequence { - function define(methodName: string[], overrides: Object): Function; - } - - interface ArrayLikeSequence extends Sequence { - // define()X; - concat(var_args: T[]): ArrayLikeSequence; - concat(sequence: Sequence): Sequence; - first(count?: number): ArrayLikeSequence; - get(index: number): T; - length(): number; - map(mapFn: MapCallback): ArraySequence; - map(mapFn: MapCallback): ArrayLikeSequence; - pop(): ArrayLikeSequence; - rest(count?: number): ArrayLikeSequence; - reverse(): ArrayLikeSequence; - shift(): ArrayLikeSequence; - slice(begin: number, end?: number): ArrayLikeSequence; - } - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - module ObjectLikeSequence { - function define(methodName: string[], overrides: Object): Function; - } - - interface ObjectLikeSequence extends Sequence { - assign(other: Object): ObjectLikeSequence; - // throws error - //async(): X; - defaults(defaults: Object): ObjectLikeSequence; - functions(): Sequence; - get(property: string): ObjectLikeSequence; - invert(): ObjectLikeSequence; - keys(): Sequence; - omit(properties: string[]): ObjectLikeSequence; - pairs(): Sequence; - pick(properties: string[]): ObjectLikeSequence; - toArray(): T[]; - toObject(): Object; - values(): Sequence; - } - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - module StringLikeSequence { - function define(methodName: string[], overrides: Object): Function; - } - - interface StringLikeSequence extends SequenceBaser { - charAt(index: number): string; - charCodeAt(index: number): number; - contains(value: string): boolean; - endsWith(suffix: string): boolean; - - first(): string; - first(count: number): StringLikeSequence; - - indexOf(substring: string, startIndex?: number): number; - - last(): string; - last(count: number): StringLikeSequence; - - lastIndexOf(substring: string, startIndex?: number): number; - mapString(mapFn: MapStringCallback): StringLikeSequence; - match(pattern: RegExp): StringLikeSequence; - reverse(): StringLikeSequence; - - split(delimiter: string): StringLikeSequence; - split(delimiter: RegExp): StringLikeSequence; - - startsWith(prefix: string): boolean; - substring(start: number, stop?: number): StringLikeSequence; - toLowerCase(): StringLikeSequence; - toUpperCase(): StringLikeSequence; - } -} - -declare module 'lazy.js' { - export = Lazy; -} - diff --git a/build/lib/typings/vinyl.d.ts b/build/lib/typings/vinyl.d.ts deleted file mode 100644 index 5062c5154f600..0000000000000 --- a/build/lib/typings/vinyl.d.ts +++ /dev/null @@ -1,135 +0,0 @@ -// Type definitions for vinyl 0.4.3 -// Project: https://github.com/wearefractal/vinyl -// Definitions by: vvakame , jedmao -// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped - -declare module "vinyl" { - - import fs = require("fs"); - - /** - * A virtual file format. - */ - class File { - constructor(options?: { - /** - * Default: process.cwd() - */ - cwd?: string; - /** - * Used for relative pathing. Typically where a glob starts. - */ - base?: string; - /** - * Full path to the file. - */ - path?: string; - /** - * Path history. Has no effect if options.path is passed. - */ - history?: string[]; - /** - * The result of an fs.stat call. See fs.Stats for more information. - */ - stat?: fs.Stats; - /** - * File contents. - * Type: Buffer, Stream, or null - */ - contents?: Buffer | NodeJS.ReadWriteStream; - }); - - /** - * Default: process.cwd() - */ - public cwd: string; - /** - * Used for relative pathing. Typically where a glob starts. - */ - public base: string; - /** - * Gets and sets the basename of `file.path`. - * - * Throws when `file.path` is not set. - * - * Example: - * - * ```js - * var file = new File({ - * cwd: '/', - * base: '/test/', - * path: '/test/file.js' - * }); - * - * console.log(file.basename); // file.js - * - * file.basename = 'file.txt'; - * - * console.log(file.basename); // file.txt - * console.log(file.path); // /test/file.txt - * ``` - */ - basename: string; - /** - * Full path to the file. - */ - public path: string; - public stat: fs.Stats; - /** - * Type: Buffer|Stream|null (Default: null) - */ - public contents: Buffer | NodeJS.ReadableStream; - /** - * Returns path.relative for the file base and file path. - * Example: - * var file = new File({ - * cwd: "/", - * base: "/test/", - * path: "/test/file.js" - * }); - * console.log(file.relative); // file.js - */ - public relative: string; - - public isBuffer(): boolean; - - public isStream(): boolean; - - public isNull(): boolean; - - public isDirectory(): boolean; - - /** - * Returns a new File object with all attributes cloned. Custom attributes are deep-cloned. - */ - public clone(opts?: { contents?: boolean }): File; - - /** - * If file.contents is a Buffer, it will write it to the stream. - * If file.contents is a Stream, it will pipe it to the stream. - * If file.contents is null, it will do nothing. - */ - public pipe( - stream: T, - opts?: { - /** - * If false, the destination stream will not be ended (same as node core). - */ - end?: boolean; - }): T; - - /** - * Returns a pretty String interpretation of the File. Useful for console.log. - */ - public inspect(): string; - } - - /** - * This is required as per: - * https://github.com/microsoft/TypeScript/issues/5073 - */ - namespace File { } - - export = File; - -} diff --git a/build/lib/util.ts b/build/lib/util.ts index ad81730b3de32..49313429da9ce 100644 --- a/build/lib/util.ts +++ b/build/lib/util.ts @@ -131,7 +131,7 @@ export function setExecutableBit(pattern?: string | string[]): NodeJS.ReadWriteS if (!f.stat) { f.stat = { isFile() { return true; } } as any; } - f.stat.mode = /* 100755 */ 33261; + f.stat!.mode = /* 100755 */ 33261; return f; }); @@ -185,9 +185,7 @@ export function cleanNodeModules(rulePath: string): NodeJS.ReadWriteStream { return es.duplex(input, output); } -declare class FileSourceMap extends VinylFile { - public sourceMap: sm.RawSourceMap; -} +type FileSourceMap = VinylFile & { sourceMap: sm.RawSourceMap }; export function loadSourcemaps(): NodeJS.ReadWriteStream { const input = es.through(); diff --git a/build/package-lock.json b/build/package-lock.json index 55607f7de719f..663a0ea6f1388 100644 --- a/build/package-lock.json +++ b/build/package-lock.json @@ -25,20 +25,26 @@ "@types/glob": "^7.1.1", "@types/gulp": "^4.0.17", "@types/gulp-filter": "^3.0.32", + "@types/gulp-flatmap": "^1.0.0", "@types/gulp-gzip": "^0.0.31", "@types/gulp-json-editor": "^2.2.31", + "@types/gulp-plumber": "^0.0.37", "@types/gulp-rename": "^0.0.33", + "@types/gulp-replace": "^0.0.31", "@types/gulp-sort": "^2.0.4", "@types/gulp-sourcemaps": "^0.0.32", "@types/jws": "^3.2.10", + "@types/lazy.js": "^0.5.9", "@types/mime": "0.0.29", "@types/minimatch": "^3.0.3", "@types/minimist": "^1.2.1", "@types/node": "22.x", + "@types/p-all": "^1.0.0", "@types/pump": "^1.0.1", "@types/rimraf": "^2.0.4", "@types/through": "^0.0.29", "@types/through2": "^2.0.36", + "@types/vinyl": "^2.0.12", "@types/workerpool": "^6.4.0", "@types/xml2js": "0.0.33", "@vscode/iconv-lite-umd": "0.7.0", @@ -1129,6 +1135,17 @@ "@types/vinyl": "*" } }, + "node_modules/@types/gulp-flatmap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/gulp-flatmap/-/gulp-flatmap-1.0.0.tgz", + "integrity": "sha512-GTv0a9BxhbWYkxaPDCqnZFI13pXUUpJ90hBWkhGOQQ76qDDtHWugr0+IEiTEc0KYS0bOs80YszZE7WFNA5ndfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/vinyl": "*" + } + }, "node_modules/@types/gulp-gzip": { "version": "0.0.31", "resolved": "https://registry.npmjs.org/@types/gulp-gzip/-/gulp-gzip-0.0.31.tgz", @@ -1148,6 +1165,16 @@ "@types/node": "*" } }, + "node_modules/@types/gulp-plumber": { + "version": "0.0.37", + "resolved": "https://registry.npmjs.org/@types/gulp-plumber/-/gulp-plumber-0.0.37.tgz", + "integrity": "sha512-U1vFhhwDepAWmJ1ZVl6p+uwk/+rAs8+QLTRlrMLMQQ7KeqPPCvD5vy6JHMeqXwnxMSlbboa2PXQqoMg+ljZIJQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/gulp-rename": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/@types/gulp-rename/-/gulp-rename-0.0.33.tgz", @@ -1157,6 +1184,16 @@ "@types/node": "*" } }, + "node_modules/@types/gulp-replace": { + "version": "0.0.31", + "resolved": "https://registry.npmjs.org/@types/gulp-replace/-/gulp-replace-0.0.31.tgz", + "integrity": "sha512-dbgQ1u0N9ShXrzahBgQfMSu6qUh8nlTLt7whhQ0S0sEUHhV3scysppJ1UX0fl53PJENgAL99ueykddyrCaDt7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/gulp-sort": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/gulp-sort/-/gulp-sort-2.0.4.tgz", @@ -1219,6 +1256,13 @@ "@types/node": "*" } }, + "node_modules/@types/lazy.js": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/@types/lazy.js/-/lazy.js-0.5.9.tgz", + "integrity": "sha512-oO7oF31unBSr3M4yshbgie/PP5VLQTWvopHQqD0OYIQ1ItFHlxBJBBYAn6gOiRK4elQKF0s/nJ45wIJziU4MqQ==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/mime": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-0.0.29.tgz", @@ -1253,6 +1297,13 @@ "undici-types": "~6.20.0" } }, + "node_modules/@types/p-all": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/p-all/-/p-all-1.0.0.tgz", + "integrity": "sha512-ZaM7VBS9kzAcDPB7YkoQWYxujUQyblUsjBmVaSO0igkoO7/Sus+cIoriD8/8RPpCOFnyPU1SfDDB5hH+i4S9Eg==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/pump": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@types/pump/-/pump-1.0.1.tgz", @@ -1321,6 +1372,7 @@ "resolved": "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.12.tgz", "integrity": "sha512-Sr2fYMBUVGYq8kj3UthXFAu5UN6ZW+rYr4NACjZQJvHvj+c8lYv0CahmZ2P/r7iUkN44gGUBwqxZkrKXYPb7cw==", "dev": true, + "license": "MIT", "dependencies": { "@types/expect": "^1.20.4", "@types/node": "*" diff --git a/build/package.json b/build/package.json index 9477b8403cac5..54ada234d79f8 100644 --- a/build/package.json +++ b/build/package.json @@ -19,20 +19,26 @@ "@types/glob": "^7.1.1", "@types/gulp": "^4.0.17", "@types/gulp-filter": "^3.0.32", + "@types/gulp-flatmap": "^1.0.0", "@types/gulp-gzip": "^0.0.31", "@types/gulp-json-editor": "^2.2.31", + "@types/gulp-plumber": "^0.0.37", "@types/gulp-rename": "^0.0.33", + "@types/gulp-replace": "^0.0.31", "@types/gulp-sort": "^2.0.4", "@types/gulp-sourcemaps": "^0.0.32", "@types/jws": "^3.2.10", + "@types/lazy.js": "^0.5.9", "@types/mime": "0.0.29", "@types/minimatch": "^3.0.3", "@types/minimist": "^1.2.1", "@types/node": "22.x", + "@types/p-all": "^1.0.0", "@types/pump": "^1.0.1", "@types/rimraf": "^2.0.4", "@types/through": "^0.0.29", "@types/through2": "^2.0.36", + "@types/vinyl": "^2.0.12", "@types/workerpool": "^6.4.0", "@types/xml2js": "0.0.33", "@vscode/iconv-lite-umd": "0.7.0", diff --git a/build/setup-npm-registry.js b/build/setup-npm-registry.js index 24c850dbb8480..5d637f97632d5 100644 --- a/build/setup-npm-registry.js +++ b/build/setup-npm-registry.js @@ -2,12 +2,17 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ - +// @ts-check 'use strict'; const fs = require('fs').promises; const path = require('path'); +/** + * @param {string} dir + * + * @returns {AsyncGenerator} + */ async function* getPackageLockFiles(dir) { const files = await fs.readdir(dir); @@ -23,12 +28,20 @@ async function* getPackageLockFiles(dir) { } } +/** + * @param {string} url + * @param {string} file + */ async function setup(url, file) { let contents = await fs.readFile(file, 'utf8'); contents = contents.replace(/https:\/\/registry\.[^.]+\.com\//g, url); await fs.writeFile(file, contents); } +/** + * @param {string} url + * @param {string} dir + */ async function main(url, dir) { const root = dir ?? process.cwd(); diff --git a/build/stylelint.js b/build/stylelint.js index 5b1668ea2e488..03c1611c4e075 100644 --- a/build/stylelint.js +++ b/build/stylelint.js @@ -2,6 +2,7 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check const es = require('event-stream'); const vfs = require('vinyl-fs'); @@ -10,11 +11,16 @@ const { getVariableNameValidator } = require('./lib/stylelint/validateVariableNa module.exports = gulpstylelint; -/** use regex on lines */ +/** + * use regex on lines + * + * @param {function(string, boolean):void} reporter + */ function gulpstylelint(reporter) { const variableValidator = getVariableNameValidator(); let errorCount = 0; return es.through(function (file) { + /** @type {string[]} */ const lines = file.__lines || file.contents.toString('utf8').split(/\r\n|\r|\n/); file.__lines = lines; diff --git a/build/tsconfig.build.json b/build/tsconfig.build.json index 4534420208f32..dc3305690bc09 100644 --- a/build/tsconfig.build.json +++ b/build/tsconfig.build.json @@ -8,8 +8,5 @@ }, "include": [ "**/*.ts" - ], - "exclude": [ - "lib/eslint-plugin-vscode/**/*" ] } From fbefb06cae2ebf8209b5c3d77813bcb4325f1764 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20V=C3=B6disch?= <37340862+alexvoedi@users.noreply.github.com> Date: Thu, 7 Aug 2025 18:49:38 +0200 Subject: [PATCH 0110/2080] Fix linkedEditing desync (#242993) --- .../contrib/linkedEditing/browser/linkedEditing.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/vs/editor/contrib/linkedEditing/browser/linkedEditing.ts b/src/vs/editor/contrib/linkedEditing/browser/linkedEditing.ts index 0644fcfff23fb..00073c50f0f43 100644 --- a/src/vs/editor/contrib/linkedEditing/browser/linkedEditing.ts +++ b/src/vs/editor/contrib/linkedEditing/browser/linkedEditing.ts @@ -300,8 +300,15 @@ export class LinkedEditingContribution extends Disposable implements IEditorCont } } - // Clear existing decorations while we compute new ones - this.clearRanges(); + if (!this._currentRequestPosition?.equals(position)) { + // Get the current range of the first decoration (reference range) + const currentRange = this._currentDecorations.getRange(0); + // If there is no current range or the current range does not contain the new position, clear the ranges + if (!currentRange?.containsPosition(position)) { + // Clear existing decorations while we compute new ones + this.clearRanges(); + } + } this._currentRequestPosition = position; this._currentRequestModelVersion = modelVersionId; From 1fbd0ca79aaa443568a977971b621f4e682c9103 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Thu, 7 Aug 2025 09:51:01 -0700 Subject: [PATCH 0111/2080] Make sure we update the height on async rendering Fixes #259796 --- .../chat/browser/chatContentParts/chatMarkdownContentPart.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/vs/workbench/contrib/chat/browser/chatContentParts/chatMarkdownContentPart.ts b/src/vs/workbench/contrib/chat/browser/chatContentParts/chatMarkdownContentPart.ts index 7908a560866e5..a38d8d96a2603 100644 --- a/src/vs/workbench/contrib/chat/browser/chatContentParts/chatMarkdownContentPart.ts +++ b/src/vs/workbench/contrib/chat/browser/chatContentParts/chatMarkdownContentPart.ts @@ -280,6 +280,9 @@ export class ChatMarkdownContentPart extends Disposable implements IChatContentP // Need to load async MarkedKatexSupport.loadExtension(dom.getWindow(context.container)).then(() => { doRenderMarkdown(); + if (!this._isDisposed) { + this._onDidChangeHeight.fire(); + } }); } else { doRenderMarkdown(); From 39e31591e4ccb9332d61f35fd43b5b56c4039a35 Mon Sep 17 00:00:00 2001 From: Connor Peet Date: Thu, 7 Aug 2025 11:08:23 -0700 Subject: [PATCH 0112/2080] mcp: auto-start servers from extensions (#260358) Closes #252228 --- .../base/common/observableInternal/index.ts | 2 +- .../observableInternal/reactions/autorun.ts | 30 +++++++++++++++ .../mcpLanguageModelToolContribution.ts | 38 +++++++++++++++++-- .../contrib/mcp/common/mcpRegistry.ts | 14 ++----- 4 files changed, 69 insertions(+), 15 deletions(-) diff --git a/src/vs/base/common/observableInternal/index.ts b/src/vs/base/common/observableInternal/index.ts index 7f8c6b8c5fa35..a372b4a6acda6 100644 --- a/src/vs/base/common/observableInternal/index.ts +++ b/src/vs/base/common/observableInternal/index.ts @@ -6,7 +6,7 @@ // This is a facade for the observable implementation. Only import from here! export { observableValueOpts } from './observables/observableValueOpts.js'; -export { autorun, autorunDelta, autorunHandleChanges, autorunOpts, autorunWithStore, autorunWithStoreHandleChanges, autorunIterableDelta } from './reactions/autorun.js'; +export { autorun, autorunDelta, autorunHandleChanges, autorunOpts, autorunWithStore, autorunWithStoreHandleChanges, autorunIterableDelta, autorunSelfDisposable } from './reactions/autorun.js'; export { type IObservable, type IObservableWithChange, type IObserver, type IReader, type ISettable, type ISettableObservable, type ITransaction } from './base.js'; export { disposableObservableValue } from './observables/observableValue.js'; export { derived, derivedDisposable, derivedHandleChanges, derivedOpts, derivedWithSetter, derivedWithStore } from './observables/derived.js'; diff --git a/src/vs/base/common/observableInternal/reactions/autorun.ts b/src/vs/base/common/observableInternal/reactions/autorun.ts index c14aa3d718dd2..de97bb6fb2e21 100644 --- a/src/vs/base/common/observableInternal/reactions/autorun.ts +++ b/src/vs/base/common/observableInternal/reactions/autorun.ts @@ -154,3 +154,33 @@ export function autorunIterableDelta( } }); } + +export interface IReaderWithDispose extends IReaderWithStore, IDisposable { } + +/** + * An autorun with a `dispose()` method on its `reader` which cancels the autorun. + * It it safe to call `dispose()` synchronously. + */ +export function autorunSelfDisposable(fn: (reader: IReaderWithDispose) => void, debugLocation = DebugLocation.ofCaller()): IDisposable { + let ar: IDisposable | undefined; + let disposed = false; + + // eslint-disable-next-line prefer-const + ar = autorun(reader => { + fn({ + delayedStore: reader.delayedStore, + store: reader.store, + readObservable: reader.readObservable.bind(reader), + dispose: () => { + ar?.dispose(); + disposed = true; + } + }); + }, debugLocation); + + if (disposed) { + ar.dispose(); + } + + return ar; +} diff --git a/src/vs/workbench/contrib/mcp/common/mcpLanguageModelToolContribution.ts b/src/vs/workbench/contrib/mcp/common/mcpLanguageModelToolContribution.ts index c5b8917ff0c31..fc286167ff43f 100644 --- a/src/vs/workbench/contrib/mcp/common/mcpLanguageModelToolContribution.ts +++ b/src/vs/workbench/contrib/mcp/common/mcpLanguageModelToolContribution.ts @@ -10,10 +10,11 @@ import { MarkdownString } from '../../../../base/common/htmlContent.js'; import { Lazy } from '../../../../base/common/lazy.js'; import { Disposable, DisposableMap, DisposableStore, toDisposable } from '../../../../base/common/lifecycle.js'; import { equals } from '../../../../base/common/objects.js'; -import { autorun } from '../../../../base/common/observable.js'; +import { autorun, autorunSelfDisposable } from '../../../../base/common/observable.js'; import { basename } from '../../../../base/common/resources.js'; import { URI } from '../../../../base/common/uri.js'; import { localize } from '../../../../nls.js'; +import { ExtensionIdentifier } from '../../../../platform/extensions/common/extensions.js'; import { IFileService } from '../../../../platform/files/common/files.js'; import { IImageResizeService } from '../../../../platform/imageResize/common/imageResizeService.js'; import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js'; @@ -23,7 +24,7 @@ import { IWorkbenchContribution } from '../../../common/contributions.js'; import { ChatResponseResource, getAttachableImageExtension } from '../../chat/common/chatModel.js'; import { CountTokensCallback, ILanguageModelToolsService, IPreparedToolInvocation, IToolData, IToolImpl, IToolInvocation, IToolInvocationPreparationContext, IToolResult, IToolResultInputOutputDetails, ToolDataSource, ToolProgress, ToolSet } from '../../chat/common/languageModelToolsService.js'; import { IMcpRegistry } from './mcpRegistryTypes.js'; -import { IMcpServer, IMcpService, IMcpTool, McpResourceURI } from './mcpTypes.js'; +import { IMcpServer, IMcpService, IMcpTool, LazyCollectionState, McpResourceURI, McpServerCacheState } from './mcpTypes.js'; interface ISyncedToolData { toolData: IToolData; @@ -42,6 +43,15 @@ export class McpLanguageModelToolContribution extends Disposable implements IWor ) { super(); + // 1. Auto-discover extensions with new MCP servers + const lazyCollectionState = mcpService.lazyCollectionState.map(s => s.state); + this._register(autorun(reader => { + if (lazyCollectionState.read(reader) === LazyCollectionState.HasUnknown) { + mcpService.activateCollections(); + } + })); + + // 2. Keep tools in sync with the tools service. const previous = this._register(new DisposableMap()); this._register(autorun(reader => { const servers = mcpService.servers.read(reader); @@ -89,6 +99,28 @@ export class McpLanguageModelToolContribution extends Disposable implements IWor private _syncTools(server: IMcpServer, collectionData: Lazy<{ toolSet: ToolSet; source: ToolDataSource }>, store: DisposableStore) { const tools = new Map(); + const collectionObservable = this._mcpRegistry.collections.map(collections => + collections.find(c => c.id === server.collection.id)); + + // If the server is extension-provided and was marked outdated automatically start it + store.add(autorunSelfDisposable(reader => { + const collection = collectionObservable.read(reader); + if (!collection) { + return; + } + + if (!(collection.source instanceof ExtensionIdentifier)) { + reader.dispose(); + return; + } + + const cacheState = server.cacheState.read(reader); + if (cacheState === McpServerCacheState.Unknown || cacheState === McpServerCacheState.Outdated) { + reader.dispose(); + server.start(); + } + })); + store.add(autorun(reader => { const toDelete = new Set(tools.keys()); @@ -101,9 +133,9 @@ export class McpLanguageModelToolContribution extends Disposable implements IWor store.add(collectionData.value.toolSet.addTool(toolData)); }; + const collection = collectionObservable.read(reader); for (const tool of server.tools.read(reader)) { const existing = tools.get(tool.id); - const collection = this._mcpRegistry.collections.get().find(c => c.id === server.collection.id); const toolData: IToolData = { id: tool.id, source: collectionData.value.source, diff --git a/src/vs/workbench/contrib/mcp/common/mcpRegistry.ts b/src/vs/workbench/contrib/mcp/common/mcpRegistry.ts index a147ad02cda4a..1c2229a22ef30 100644 --- a/src/vs/workbench/contrib/mcp/common/mcpRegistry.ts +++ b/src/vs/workbench/contrib/mcp/common/mcpRegistry.ts @@ -10,7 +10,7 @@ import { MarkdownString } from '../../../../base/common/htmlContent.js'; import { Iterable } from '../../../../base/common/iterator.js'; import { Lazy } from '../../../../base/common/lazy.js'; import { Disposable, DisposableStore, IDisposable } from '../../../../base/common/lifecycle.js'; -import { autorun, derived, IObservable, observableValue } from '../../../../base/common/observable.js'; +import { derived, IObservable, observableValue, autorunSelfDisposable } from '../../../../base/common/observable.js'; import { isDefined } from '../../../../base/common/types.js'; import { URI } from '../../../../base/common/uri.js'; import { localize } from '../../../../nls.js'; @@ -259,26 +259,18 @@ export class McpRegistry extends Disposable implements IMcpRegistry { interaction.participants.set(definition.id, { s: 'waiting', definition, collection }); const trustedDefinitionIds = await new Promise(resolve => { - let runner: IDisposable | undefined; - let didRun = false; - // eslint-disable-next-line prefer-const - runner = autorun(reader => { + autorunSelfDisposable(reader => { const map = interaction.participants.observable.read(reader); if (Iterable.some(map.values(), p => p.s === 'unknown')) { return; // wait to gather all calls } - runner?.dispose(); - didRun = true; + reader.dispose(); interaction.choice ??= this._promptForTrustOpenDialog( [...map.values()].map((v) => v.s === 'waiting' ? v : undefined).filter(isDefined), ); resolve(interaction.choice); }); - - if (didRun) { // work around sync disposal - runner.dispose(); - } }); this._logService.trace(`MCP trusted servers:`, trustedDefinitionIds); From da12e8e5c1b7bb3ae29f1a4788541c31c4265e61 Mon Sep 17 00:00:00 2001 From: Joel Verhagen Date: Thu, 7 Aug 2025 14:16:15 -0400 Subject: [PATCH 0113/2080] Add support for a help link when MCP assisted installation fails (#260215) * Add support for a help link * Update src/vs/workbench/contrib/mcp/browser/mcpCommandsAddConfiguration.ts --------- Co-authored-by: Connor Peet --- .../browser/mcpCommandsAddConfiguration.ts | 39 ++++++++++++++----- .../workbench/contrib/mcp/common/mcpServer.ts | 3 ++ 2 files changed, 33 insertions(+), 9 deletions(-) diff --git a/src/vs/workbench/contrib/mcp/browser/mcpCommandsAddConfiguration.ts b/src/vs/workbench/contrib/mcp/browser/mcpCommandsAddConfiguration.ts index ea7800f6280b1..f70d633b18b42 100644 --- a/src/vs/workbench/contrib/mcp/browser/mcpCommandsAddConfiguration.ts +++ b/src/vs/workbench/contrib/mcp/browser/mcpCommandsAddConfiguration.ts @@ -20,6 +20,7 @@ import { IFileService } from '../../../../platform/files/common/files.js'; import { ILabelService } from '../../../../platform/label/common/label.js'; import { IMcpRemoteServerConfiguration, IMcpServerConfiguration, IMcpServerVariable, IMcpStdioServerConfiguration, McpServerType } from '../../../../platform/mcp/common/mcpPlatformTypes.js'; import { INotificationService } from '../../../../platform/notification/common/notification.js'; +import { IOpenerService } from '../../../../platform/opener/common/opener.js'; import { IQuickInputService, IQuickPickItem, QuickPickInput } from '../../../../platform/quickinput/common/quickInput.js'; import { ITelemetryService } from '../../../../platform/telemetry/common/telemetry.js'; import { isWorkspaceFolder, IWorkspaceContextService, IWorkspaceFolder, WorkbenchState } from '../../../../platform/workspace/common/workspace.js'; @@ -87,7 +88,7 @@ const enum AddConfigurationCopilotCommand { type ValidatePackageResult = { state: 'ok'; publisher: string; name?: string; version?: string } - | { state: 'error'; error: string }; + | { state: 'error'; error: string; helpUri?: string; helpUriLabel?: string }; type AddServerData = { packageType: string; @@ -119,7 +120,7 @@ export class McpAddConfigurationCommand { @IWorkbenchEnvironmentService private readonly _environmentService: IWorkbenchEnvironmentService, @ICommandService private readonly _commandService: ICommandService, @IMcpRegistry private readonly _mcpRegistry: IMcpRegistry, - @IEditorService private readonly _openerService: IEditorService, + @IOpenerService private readonly _openerService: IOpenerService, @IEditorService private readonly _editorService: IEditorService, @IFileService private readonly _fileService: IFileService, @INotificationService private readonly _notificationService: INotificationService, @@ -297,11 +298,12 @@ export class McpAddConfigurationCommand { const enum LoadAction { Retry = 'retry', Cancel = 'cancel', - Allow = 'allow' + Allow = 'allow', + OpenUri = 'openUri', } const loadingQuickPickStore = new DisposableStore(); - const loadingQuickPick = loadingQuickPickStore.add(this._quickInputService.createQuickPick()); + const loadingQuickPick = loadingQuickPickStore.add(this._quickInputService.createQuickPick()); loadingQuickPick.title = localize('mcp.loading.title', "Loading package details..."); loadingQuickPick.busy = true; loadingQuickPick.ignoreFocusOut = true; @@ -332,7 +334,23 @@ export class McpAddConfigurationCommand { ).then(result => { if (!result || result.state === 'error') { loadingQuickPick.title = result?.error || 'Unknown error loading package'; - loadingQuickPick.items = [{ id: LoadAction.Retry, label: localize('mcp.error.retry', 'Try a different package') }, { id: LoadAction.Cancel, label: localize('cancel', 'Cancel') }]; + + const items: Array = []; + + if (result?.helpUri) { + items.push({ + id: LoadAction.OpenUri, + label: result.helpUriLabel ?? localize('mcp.error.openHelpUri', 'Open help URL'), + helpUri: URI.parse(result.helpUri), + }); + } + + items.push( + { id: LoadAction.Retry, label: localize('mcp.error.retry', 'Try a different package') }, + { id: LoadAction.Cancel, label: localize('cancel', 'Cancel') }, + ); + + loadingQuickPick.items = items; } else { loadingQuickPick.title = localize( 'mcp.confirmPublish', 'Install {0}{1} from {2}?', @@ -347,15 +365,18 @@ export class McpAddConfigurationCommand { loadingQuickPick.busy = false; }); - const loadingAction = await new Promise(resolve => { - loadingQuickPick.onDidAccept(() => resolve(loadingQuickPick.selectedItems[0]?.id)); + const loadingAction = await new Promise<{ id: LoadAction; helpUri?: URI } | undefined>(resolve => { + loadingQuickPick.onDidAccept(() => resolve(loadingQuickPick.selectedItems[0])); loadingQuickPick.onDidHide(() => resolve(undefined)); loadingQuickPick.show(); }).finally(() => loadingQuickPick.dispose()); - switch (loadingAction) { + switch (loadingAction?.id) { case LoadAction.Retry: return this.getAssistedConfig(type); + case LoadAction.OpenUri: + if (loadingAction.helpUri) { this._openerService.open(loadingAction.helpUri); } + return undefined; case LoadAction.Allow: break; case LoadAction.Cancel: @@ -385,7 +406,7 @@ export class McpAddConfigurationCommand { if (match && server) { if (match.collection.presentation?.origin) { - this._openerService.openEditor({ + this._editorService.openEditor({ resource: match.collection.presentation.origin, options: { selection: match.server.presentation?.origin?.range, diff --git a/src/vs/workbench/contrib/mcp/common/mcpServer.ts b/src/vs/workbench/contrib/mcp/common/mcpServer.ts index 9f33307c120f6..23916b8e40a9a 100644 --- a/src/vs/workbench/contrib/mcp/common/mcpServer.ts +++ b/src/vs/workbench/contrib/mcp/common/mcpServer.ts @@ -599,6 +599,9 @@ export class McpServer extends Disposable implements IMcpServer { case 'dnx': docsLink = `https://aka.ms/vscode-mcp-install/dnx`; break; + case 'dotnet': + docsLink = `https://aka.ms/vscode-mcp-install/dotnet`; + break; } const options: IPromptChoice[] = [{ From 7382e12c49b1f60bbedbd71a10e3f1d8704ed35c Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Thu, 7 Aug 2025 11:18:49 -0700 Subject: [PATCH 0114/2080] Mark most menu options as readonly Debugging an issue and wanted to make sure these options weren't changing --- .../browser/ui/actionbar/actionViewItems.ts | 31 ++++++++++++------- src/vs/base/browser/ui/button/button.ts | 4 +-- src/vs/base/browser/ui/menu/menu.ts | 28 ++++++++--------- .../browser/menuEntryActionViewItem.ts | 22 ++++++------- 4 files changed, 45 insertions(+), 40 deletions(-) diff --git a/src/vs/base/browser/ui/actionbar/actionViewItems.ts b/src/vs/base/browser/ui/actionbar/actionViewItems.ts index ee1959b645e5f..ea705bcaa68b4 100644 --- a/src/vs/base/browser/ui/actionbar/actionViewItems.ts +++ b/src/vs/base/browser/ui/actionbar/actionViewItems.ts @@ -23,11 +23,11 @@ import type { IManagedHover, IManagedHoverContent } from '../hover/hover.js'; import { getBaseLayerHoverDelegate } from '../hover/hoverDelegate2.js'; export interface IBaseActionViewItemOptions { - draggable?: boolean; - isMenu?: boolean; - isTabList?: boolean; - useEventAsContext?: boolean; - hoverDelegate?: IHoverDelegate; + readonly draggable?: boolean; + readonly isMenu?: boolean; + readonly isTabList?: boolean; + readonly useEventAsContext?: boolean; + readonly hoverDelegate?: IHoverDelegate; } export class BaseActionViewItem extends Disposable implements IActionViewItem { @@ -45,7 +45,11 @@ export class BaseActionViewItem extends Disposable implements IActionViewItem { private _actionRunner: IActionRunner | undefined; - constructor(context: unknown, action: IAction, protected options: IBaseActionViewItemOptions = {}) { + constructor( + context: unknown, + action: IAction, + protected readonly options: IBaseActionViewItemOptions = {} + ) { super(); this._context = context || this; @@ -268,24 +272,27 @@ export class BaseActionViewItem extends Disposable implements IActionViewItem { export interface IActionViewItemOptions extends IBaseActionViewItemOptions { icon?: boolean; label?: boolean; - keybinding?: string | null; - keybindingNotRenderedWithLabel?: boolean; - toggleStyles?: IToggleStyles; + readonly keybinding?: string | null; + readonly keybindingNotRenderedWithLabel?: boolean; + readonly toggleStyles?: IToggleStyles; } export class ActionViewItem extends BaseActionViewItem { protected label: HTMLElement | undefined; - protected override options: IActionViewItemOptions; + protected override readonly options: IActionViewItemOptions; private cssClass?: string; constructor(context: unknown, action: IAction, options: IActionViewItemOptions) { + options = { + ...options, + icon: options.icon !== undefined ? options.icon : false, + label: options.label !== undefined ? options.label : true, + }; super(context, action, options); this.options = options; - this.options.icon = options.icon !== undefined ? options.icon : false; - this.options.label = options.label !== undefined ? options.label : true; this.cssClass = ''; } diff --git a/src/vs/base/browser/ui/button/button.ts b/src/vs/base/browser/ui/button/button.ts index 81764fa9960d5..c0a8eec06338e 100644 --- a/src/vs/base/browser/ui/button/button.ts +++ b/src/vs/base/browser/ui/button/button.ts @@ -616,8 +616,8 @@ export class ButtonBar { * This is a Button that supports an icon to the left, and markdown to the right, with proper separation and wrapping the markdown label, which Button doesn't do. */ export class ButtonWithIcon extends Button { - private _iconElement: HTMLElement; - private _mdlabelElement: HTMLElement; + private readonly _iconElement: HTMLElement; + private readonly _mdlabelElement: HTMLElement; public get labelElement() { return this._mdlabelElement; } diff --git a/src/vs/base/browser/ui/menu/menu.ts b/src/vs/base/browser/ui/menu/menu.ts index eb6814c42f448..49ab71fa20f93 100644 --- a/src/vs/base/browser/ui/menu/menu.ts +++ b/src/vs/base/browser/ui/menu/menu.ts @@ -411,17 +411,12 @@ export class Menu extends ActionBar { return menuActionViewItem; } else { - const menuItemOptions: IMenuItemOptions = { enableMnemonics: options.enableMnemonics, useEventAsContext: options.useEventAsContext }; - if (options.getKeyBinding) { - const keybinding = options.getKeyBinding(action); - if (keybinding) { - const keybindingLabel = keybinding.getLabel(); - - if (keybindingLabel) { - menuItemOptions.keybinding = keybindingLabel; - } - } - } + const keybindingLabel = options.getKeyBinding?.(action)?.getLabel(); + const menuItemOptions: IMenuItemOptions = { + enableMnemonics: options.enableMnemonics, + useEventAsContext: options.useEventAsContext, + keybinding: keybindingLabel, + }; const menuActionViewItem = new BaseMenuActionViewItem(options.context, action, menuItemOptions, this.menuStyles); @@ -445,7 +440,7 @@ export class Menu extends ActionBar { } interface IMenuItemOptions extends IActionViewItemOptions { - enableMnemonics?: boolean; + readonly enableMnemonics?: boolean; } class BaseMenuActionViewItem extends BaseActionViewItem { @@ -462,12 +457,15 @@ class BaseMenuActionViewItem extends BaseActionViewItem { private cssClass: string; constructor(ctx: unknown, action: IAction, options: IMenuItemOptions, protected readonly menuStyle: IMenuStyles) { - options.isMenu = true; + options = { + ...options, + isMenu: true, + icon: options.icon !== undefined ? options.icon : false, + label: options.label !== undefined ? options.label : true, + }; super(action, action, options); this.options = options; - this.options.icon = options.icon !== undefined ? options.icon : false; - this.options.label = options.label !== undefined ? options.label : true; this.cssClass = ''; // Set mnemonic diff --git a/src/vs/platform/actions/browser/menuEntryActionViewItem.ts b/src/vs/platform/actions/browser/menuEntryActionViewItem.ts index 807cbbe93f934..316a4d9b9ddf0 100644 --- a/src/vs/platform/actions/browser/menuEntryActionViewItem.ts +++ b/src/vs/platform/actions/browser/menuEntryActionViewItem.ts @@ -168,10 +168,10 @@ function fillInActions( } export interface IMenuEntryActionViewItemOptions { - draggable?: boolean; - keybinding?: string | null; - hoverDelegate?: IHoverDelegate; - keybindingNotRenderedWithLabel?: boolean; + readonly draggable?: boolean; + readonly keybinding?: string | null; + readonly hoverDelegate?: IHoverDelegate; + readonly keybindingNotRenderedWithLabel?: boolean; } export class MenuEntryActionViewItem extends ActionViewItem { @@ -182,12 +182,12 @@ export class MenuEntryActionViewItem { From 000ab0ddd331c25c62d2d3fb7aee82fa868891f3 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Thu, 7 Aug 2025 14:10:24 -0700 Subject: [PATCH 0115/2080] Move `vscode-editor-font-feature-settings` to end of style list Small workaround for #258080 --- src/vs/workbench/contrib/webview/browser/themeing.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/vs/workbench/contrib/webview/browser/themeing.ts b/src/vs/workbench/contrib/webview/browser/themeing.ts index b0714f2eca773..1095cefd6b2ae 100644 --- a/src/vs/workbench/contrib/webview/browser/themeing.ts +++ b/src/vs/workbench/contrib/webview/browser/themeing.ts @@ -74,9 +74,9 @@ export class WebviewThemeDataProvider extends Disposable { 'vscode-editor-font-family': editorFontFamily, 'vscode-editor-font-weight': editorFontWeight, 'vscode-editor-font-size': editorFontSize + 'px', - 'vscode-editor-font-feature-settings': editorFontLigatures, 'text-link-decoration': linkUnderlines ? 'underline' : 'none', - ...exportedColors + ...exportedColors, + 'vscode-editor-font-feature-settings': editorFontLigatures, }; const activeTheme = ApiThemeClassName.fromTheme(theme); From 2d2f91445d19985640bd6ad68197067011ff8108 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Thu, 7 Aug 2025 14:35:46 -0700 Subject: [PATCH 0116/2080] Make activationEventsGenerator a real generator Every time I add a new `activationEventsGenerator`, I wish it supported using a real generator --- .../common/implicitActivationEvents.ts | 4 ++-- src/vs/platform/extensions/common/extensionValidator.ts | 2 +- src/vs/platform/extensions/common/extensions.ts | 2 +- src/vs/workbench/api/browser/viewsExtensionPoint.ts | 4 ++-- .../api/test/common/extHostExtensionActivator.test.ts | 2 +- .../contrib/chat/browser/chatOutputItemRenderer.ts | 4 ++-- .../contrib/chat/browser/chatParticipant.contribution.ts | 4 ++-- .../contrib/chat/browser/chatSessions.contribution.ts | 4 ++-- src/vs/workbench/contrib/chat/common/languageModels.ts | 4 ++-- .../chat/common/tools/languageModelToolsContribution.ts | 4 ++-- .../contrib/customEditor/common/extensionPoint.ts | 4 ++-- src/vs/workbench/contrib/debug/common/debugVisualizers.ts | 4 ++-- src/vs/workbench/contrib/mcp/common/mcpConfiguration.ts | 4 ++-- .../contrib/notebook/browser/notebookExtensionPoint.ts | 8 ++++---- .../contrib/tasks/common/taskDefinitionRegistry.ts | 4 ++-- src/vs/workbench/contrib/terminal/common/terminal.ts | 4 ++-- .../quickFix/browser/terminalQuickFixService.ts | 4 ++-- .../browser/gettingStartedExtensionPoint.ts | 4 ++-- .../services/actions/common/menusExtensionPoint.ts | 4 ++-- .../authentication/browser/authenticationService.ts | 4 ++-- .../test/common/extensionDescriptionRegistry.test.ts | 2 +- .../workbench/services/language/common/languageService.ts | 4 ++-- 22 files changed, 42 insertions(+), 42 deletions(-) diff --git a/src/vs/platform/extensionManagement/common/implicitActivationEvents.ts b/src/vs/platform/extensionManagement/common/implicitActivationEvents.ts index b8a52b5e9aa54..7fdeb16a04bd8 100644 --- a/src/vs/platform/extensionManagement/common/implicitActivationEvents.ts +++ b/src/vs/platform/extensionManagement/common/implicitActivationEvents.ts @@ -7,7 +7,7 @@ import { onUnexpectedError } from '../../../base/common/errors.js'; import { ExtensionIdentifier, IExtensionDescription } from '../../extensions/common/extensions.js'; export interface IActivationEventsGenerator { - (contributions: T[], result: { push(item: string): void }): void; + (contributions: readonly T[]): Iterable; } export class ImplicitActivationEventsImpl { @@ -73,7 +73,7 @@ export class ImplicitActivationEventsImpl { const contrib = (desc.contributes as any)[extPointName]; const contribArr = Array.isArray(contrib) ? contrib : [contrib]; try { - generator(contribArr, activationEvents); + activationEvents.push(...generator(contribArr)); } catch (err) { onUnexpectedError(err); } diff --git a/src/vs/platform/extensions/common/extensionValidator.ts b/src/vs/platform/extensions/common/extensionValidator.ts index 87a9288104de8..0683f680cb7ac 100644 --- a/src/vs/platform/extensions/common/extensionValidator.ts +++ b/src/vs/platform/extensions/common/extensionValidator.ts @@ -417,7 +417,7 @@ function isVersionValid(currentVersion: string, date: ProductDate, requestedVers return true; } -function isStringArray(arr: string[]): boolean { +function isStringArray(arr: readonly string[]): boolean { if (!Array.isArray(arr)) { return false; } diff --git a/src/vs/platform/extensions/common/extensions.ts b/src/vs/platform/extensions/common/extensions.ts index bf4bb31809572..107e54a8dc264 100644 --- a/src/vs/platform/extensions/common/extensions.ts +++ b/src/vs/platform/extensions/common/extensions.ts @@ -299,7 +299,7 @@ export interface IRelaxedExtensionManifest { icon?: string; categories?: string[]; keywords?: string[]; - activationEvents?: string[]; + activationEvents?: readonly string[]; extensionDependencies?: string[]; extensionPack?: string[]; extensionKind?: ExtensionKind | ExtensionKind[]; diff --git a/src/vs/workbench/api/browser/viewsExtensionPoint.ts b/src/vs/workbench/api/browser/viewsExtensionPoint.ts index fdf354d1f5448..c98aada78a2bb 100644 --- a/src/vs/workbench/api/browser/viewsExtensionPoint.ts +++ b/src/vs/workbench/api/browser/viewsExtensionPoint.ts @@ -254,12 +254,12 @@ const viewsExtensionPoint: IExtensionPoint = ExtensionsR extensionPoint: 'views', deps: [viewsContainersExtensionPoint], jsonSchema: viewsContribution, - activationEventsGenerator: (viewExtensionPointTypeArray, result) => { + activationEventsGenerator: function* (viewExtensionPointTypeArray) { for (const viewExtensionPointType of viewExtensionPointTypeArray) { for (const viewDescriptors of Object.values(viewExtensionPointType)) { for (const viewDescriptor of viewDescriptors) { if (viewDescriptor.id) { - result.push(`onView:${viewDescriptor.id}`); + yield `onView:${viewDescriptor.id}`; } } } diff --git a/src/vs/workbench/api/test/common/extHostExtensionActivator.test.ts b/src/vs/workbench/api/test/common/extHostExtensionActivator.test.ts index d7a3c6f68e87e..36ad00f99db09 100644 --- a/src/vs/workbench/api/test/common/extHostExtensionActivator.test.ts +++ b/src/vs/workbench/api/test/common/extHostExtensionActivator.test.ts @@ -279,7 +279,7 @@ suite('ExtensionsActivator', () => { const basicActivationEventsReader: IActivationEventsReader = { readActivationEvents: (extensionDescription: IExtensionDescription): string[] => { - return extensionDescription.activationEvents ?? []; + return extensionDescription.activationEvents?.slice() ?? []; } }; diff --git a/src/vs/workbench/contrib/chat/browser/chatOutputItemRenderer.ts b/src/vs/workbench/contrib/chat/browser/chatOutputItemRenderer.ts index ecf3fea26870f..b6f7ee9ffb6fc 100644 --- a/src/vs/workbench/contrib/chat/browser/chatOutputItemRenderer.ts +++ b/src/vs/workbench/contrib/chat/browser/chatOutputItemRenderer.ts @@ -178,9 +178,9 @@ interface IChatOutputRendererContribution { const chatOutputRenderContributionPoint = ExtensionsRegistry.registerExtensionPoint({ extensionPoint: 'chatOutputRenderers', - activationEventsGenerator: (contributions: IChatOutputRendererContribution[], result) => { + activationEventsGenerator: function* (contributions: readonly IChatOutputRendererContribution[]) { for (const contrib of contributions) { - result.push(`onChatOutputRenderer:${contrib.viewType}`); + yield `onChatOutputRenderer:${contrib.viewType}`; } }, jsonSchema: { diff --git a/src/vs/workbench/contrib/chat/browser/chatParticipant.contribution.ts b/src/vs/workbench/contrib/chat/browser/chatParticipant.contribution.ts index 42d8560ece453..aee5354bb5c09 100644 --- a/src/vs/workbench/contrib/chat/browser/chatParticipant.contribution.ts +++ b/src/vs/workbench/contrib/chat/browser/chatParticipant.contribution.ts @@ -203,9 +203,9 @@ const chatParticipantExtensionPoint = extensionsRegistry.ExtensionsRegistry.regi } } }, - activationEventsGenerator: (contributions: IRawChatParticipantContribution[], result: { push(item: string): void }) => { + activationEventsGenerator: function* (contributions: readonly IRawChatParticipantContribution[]) { for (const contrib of contributions) { - result.push(`onChatParticipant:${contrib.id}`); + yield `onChatParticipant:${contrib.id}`; } }, }); diff --git a/src/vs/workbench/contrib/chat/browser/chatSessions.contribution.ts b/src/vs/workbench/contrib/chat/browser/chatSessions.contribution.ts index a9cb6a93f7f22..69120bd354988 100644 --- a/src/vs/workbench/contrib/chat/browser/chatSessions.contribution.ts +++ b/src/vs/workbench/contrib/chat/browser/chatSessions.contribution.ts @@ -58,9 +58,9 @@ const extensionPoint = ExtensionsRegistry.registerExtensionPoint { + activationEventsGenerator: function* (contribs) { for (const contrib of contribs) { - results.push(`onChatSession:${contrib.type}`); + yield `onChatSession:${contrib.type}`; } } }); diff --git a/src/vs/workbench/contrib/chat/common/languageModels.ts b/src/vs/workbench/contrib/chat/common/languageModels.ts index d467831428462..b325f18c72181 100644 --- a/src/vs/workbench/contrib/chat/common/languageModels.ts +++ b/src/vs/workbench/contrib/chat/common/languageModels.ts @@ -290,9 +290,9 @@ export const languageModelExtensionPoint = ExtensionsRegistry.registerExtensionP } ] }, - activationEventsGenerator: (contribs: IUserFriendlyLanguageModel[], result: { push(item: string): void }) => { + activationEventsGenerator: function* (contribs: readonly IUserFriendlyLanguageModel[]) { for (const contrib of contribs) { - result.push(`onLanguageModelChat:${contrib.vendor}`); + yield `onLanguageModelChat:${contrib.vendor}`; } } }); diff --git a/src/vs/workbench/contrib/chat/common/tools/languageModelToolsContribution.ts b/src/vs/workbench/contrib/chat/common/tools/languageModelToolsContribution.ts index ae6788c7a7e36..c86f7b719f922 100644 --- a/src/vs/workbench/contrib/chat/common/tools/languageModelToolsContribution.ts +++ b/src/vs/workbench/contrib/chat/common/tools/languageModelToolsContribution.ts @@ -39,9 +39,9 @@ export interface IRawToolContribution { const languageModelToolsExtensionPoint = extensionsRegistry.ExtensionsRegistry.registerExtensionPoint({ extensionPoint: 'languageModelTools', - activationEventsGenerator: (contributions: IRawToolContribution[], result) => { + activationEventsGenerator: function* (contributions: readonly IRawToolContribution[]) { for (const contrib of contributions) { - result.push(`onLanguageModelTool:${contrib.name}`); + yield `onLanguageModelTool:${contrib.name}`; } }, jsonSchema: { diff --git a/src/vs/workbench/contrib/customEditor/common/extensionPoint.ts b/src/vs/workbench/contrib/customEditor/common/extensionPoint.ts index d2e06733cfbee..68f480d0f553a 100644 --- a/src/vs/workbench/contrib/customEditor/common/extensionPoint.ts +++ b/src/vs/workbench/contrib/customEditor/common/extensionPoint.ts @@ -96,11 +96,11 @@ export const customEditorsExtensionPoint = ExtensionsRegistry.registerExtensionP extensionPoint: 'customEditors', deps: [languagesExtPoint], jsonSchema: CustomEditorsContribution, - activationEventsGenerator: (contribs: ICustomEditorsExtensionPoint[], result: { push(item: string): void }) => { + activationEventsGenerator: function* (contribs: readonly ICustomEditorsExtensionPoint[]) { for (const contrib of contribs) { const viewType = contrib[Fields.viewType]; if (viewType) { - result.push(`onCustomEditor:${viewType}`); + yield `onCustomEditor:${viewType}`; } } }, diff --git a/src/vs/workbench/contrib/debug/common/debugVisualizers.ts b/src/vs/workbench/contrib/debug/common/debugVisualizers.ts index c607fbe166b7c..f3ae72a270329 100644 --- a/src/vs/workbench/contrib/debug/common/debugVisualizers.ts +++ b/src/vs/workbench/contrib/debug/common/debugVisualizers.ts @@ -291,10 +291,10 @@ const visualizersExtensionPoint = ExtensionsRegistry.registerExtensionPoint<{ id required: ['id', 'when'] } }, - activationEventsGenerator: (contribs, result: { push(item: string): void }) => { + activationEventsGenerator: function* (contribs) { for (const contrib of contribs) { if (contrib.id) { - result.push(`onDebugVisualizer:${contrib.id}`); + yield `onDebugVisualizer:${contrib.id}`; } } } diff --git a/src/vs/workbench/contrib/mcp/common/mcpConfiguration.ts b/src/vs/workbench/contrib/mcp/common/mcpConfiguration.ts index e1af22069c92f..fb06e524c4527 100644 --- a/src/vs/workbench/contrib/mcp/common/mcpConfiguration.ts +++ b/src/vs/workbench/contrib/mcp/common/mcpConfiguration.ts @@ -221,10 +221,10 @@ export const mcpServerSchema: IJSONSchema = { export const mcpContributionPoint: IExtensionPointDescriptor = { extensionPoint: 'mcpServerDefinitionProviders', - activationEventsGenerator(contribs, result) { + activationEventsGenerator: function* (contribs) { for (const contrib of contribs) { if (contrib.id) { - result.push(mcpActivationEvent(contrib.id)); + yield mcpActivationEvent(contrib.id); } } }, diff --git a/src/vs/workbench/contrib/notebook/browser/notebookExtensionPoint.ts b/src/vs/workbench/contrib/notebook/browser/notebookExtensionPoint.ts index 352dea887c8f8..6de1d23298e3f 100644 --- a/src/vs/workbench/contrib/notebook/browser/notebookExtensionPoint.ts +++ b/src/vs/workbench/contrib/notebook/browser/notebookExtensionPoint.ts @@ -245,10 +245,10 @@ const notebookPreloadContribution: IJSONSchema = { export const notebooksExtensionPoint = ExtensionsRegistry.registerExtensionPoint({ extensionPoint: 'notebooks', jsonSchema: notebookProviderContribution, - activationEventsGenerator: (contribs: INotebookEditorContribution[], result: { push(item: string): void }) => { + activationEventsGenerator: function* (contribs: readonly INotebookEditorContribution[]) { for (const contrib of contribs) { if (contrib.type) { - result.push(`onNotebookSerializer:${contrib.type}`); + yield `onNotebookSerializer:${contrib.type}`; } } } @@ -257,10 +257,10 @@ export const notebooksExtensionPoint = ExtensionsRegistry.registerExtensionPoint export const notebookRendererExtensionPoint = ExtensionsRegistry.registerExtensionPoint({ extensionPoint: 'notebookRenderer', jsonSchema: notebookRendererContribution, - activationEventsGenerator: (contribs: INotebookRendererContribution[], result: { push(item: string): void }) => { + activationEventsGenerator: function* (contribs: readonly INotebookRendererContribution[]) { for (const contrib of contribs) { if (contrib.id) { - result.push(`onRenderer:${contrib.id}`); + yield `onRenderer:${contrib.id}`; } } } diff --git a/src/vs/workbench/contrib/tasks/common/taskDefinitionRegistry.ts b/src/vs/workbench/contrib/tasks/common/taskDefinitionRegistry.ts index b44773c7dce1f..1605209c7f1f1 100644 --- a/src/vs/workbench/contrib/tasks/common/taskDefinitionRegistry.ts +++ b/src/vs/workbench/contrib/tasks/common/taskDefinitionRegistry.ts @@ -83,10 +83,10 @@ namespace Configuration { const taskDefinitionsExtPoint = ExtensionsRegistry.registerExtensionPoint({ extensionPoint: 'taskDefinitions', - activationEventsGenerator: (contributions: Configuration.ITaskDefinition[], result: { push(item: string): void }) => { + activationEventsGenerator: function* (contributions: readonly Configuration.ITaskDefinition[]) { for (const task of contributions) { if (task.type) { - result.push(`onTaskType:${task.type}`); + yield `onTaskType:${task.type}`; } } }, diff --git a/src/vs/workbench/contrib/terminal/common/terminal.ts b/src/vs/workbench/contrib/terminal/common/terminal.ts index 36d19fac59c81..d5f17f977edc4 100644 --- a/src/vs/workbench/contrib/terminal/common/terminal.ts +++ b/src/vs/workbench/contrib/terminal/common/terminal.ts @@ -634,10 +634,10 @@ export const DEFAULT_COMMANDS_TO_SKIP_SHELL: string[] = [ export const terminalContributionsDescriptor: IExtensionPointDescriptor = { extensionPoint: 'terminal', defaultExtensionKind: ['workspace'], - activationEventsGenerator: (contribs: ITerminalContributions[], result: { push(item: string): void }) => { + activationEventsGenerator: function* (contribs: readonly ITerminalContributions[]) { for (const contrib of contribs) { for (const profileContrib of (contrib.profiles ?? [])) { - result.push(`onTerminalProfile:${profileContrib.id}`); + yield `onTerminalProfile:${profileContrib.id}`; } } }, diff --git a/src/vs/workbench/contrib/terminalContrib/quickFix/browser/terminalQuickFixService.ts b/src/vs/workbench/contrib/terminalContrib/quickFix/browser/terminalQuickFixService.ts index 4a095d55e762e..f3fed7670419b 100644 --- a/src/vs/workbench/contrib/terminalContrib/quickFix/browser/terminalQuickFixService.ts +++ b/src/vs/workbench/contrib/terminalContrib/quickFix/browser/terminalQuickFixService.ts @@ -94,9 +94,9 @@ export class TerminalQuickFixService implements ITerminalQuickFixService { const quickFixExtensionPoint = ExtensionsRegistry.registerExtensionPoint({ extensionPoint: 'terminalQuickFixes', defaultExtensionKind: ['workspace'], - activationEventsGenerator: (terminalQuickFixes: ITerminalCommandSelector[], result: { push(item: string): void }) => { + activationEventsGenerator: function* (terminalQuickFixes: readonly ITerminalCommandSelector[]) { for (const quickFixContrib of terminalQuickFixes ?? []) { - result.push(`onTerminalQuickFixRequest:${quickFixContrib.id}`); + yield `onTerminalQuickFixRequest:${quickFixContrib.id}`; } }, jsonSchema: { diff --git a/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedExtensionPoint.ts b/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedExtensionPoint.ts index 3f1c09885f980..297598efec241 100644 --- a/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedExtensionPoint.ts +++ b/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStartedExtensionPoint.ts @@ -218,10 +218,10 @@ export const walkthroughsExtensionPoint = ExtensionsRegistry.registerExtensionPo } } }, - activationEventsGenerator: (walkthroughContributions, result) => { + activationEventsGenerator: function* (walkthroughContributions) { for (const walkthroughContribution of walkthroughContributions) { if (walkthroughContribution.id) { - result.push(`onWalkthrough:${walkthroughContribution.id}`); + yield `onWalkthrough:${walkthroughContribution.id}`; } } } diff --git a/src/vs/workbench/services/actions/common/menusExtensionPoint.ts b/src/vs/workbench/services/actions/common/menusExtensionPoint.ts index 9d8ac1dd3e914..30d7fe6252969 100644 --- a/src/vs/workbench/services/actions/common/menusExtensionPoint.ts +++ b/src/vs/workbench/services/actions/common/menusExtensionPoint.ts @@ -805,10 +805,10 @@ const _commandRegistrations = new DisposableStore(); export const commandsExtensionPoint = ExtensionsRegistry.registerExtensionPoint({ extensionPoint: 'commands', jsonSchema: schema.commandsContribution, - activationEventsGenerator: (contribs: schema.IUserFriendlyCommand[], result: { push(item: string): void }) => { + activationEventsGenerator: function* (contribs: readonly schema.IUserFriendlyCommand[]) { for (const contrib of contribs) { if (contrib.command) { - result.push(`onCommand:${contrib.command}`); + yield `onCommand:${contrib.command}`; } } } diff --git a/src/vs/workbench/services/authentication/browser/authenticationService.ts b/src/vs/workbench/services/authentication/browser/authenticationService.ts index fc0dac3399c50..15e117de20ac9 100644 --- a/src/vs/workbench/services/authentication/browser/authenticationService.ts +++ b/src/vs/workbench/services/authentication/browser/authenticationService.ts @@ -81,10 +81,10 @@ const authenticationExtPoint = ExtensionsRegistry.registerExtensionPoint { + activationEventsGenerator: function* (authenticationProviders) { for (const authenticationProvider of authenticationProviders) { if (authenticationProvider.id) { - result.push(`onAuthenticationRequest:${authenticationProvider.id}`); + yield `onAuthenticationRequest:${authenticationProvider.id}`; } } } diff --git a/src/vs/workbench/services/extensions/test/common/extensionDescriptionRegistry.test.ts b/src/vs/workbench/services/extensions/test/common/extensionDescriptionRegistry.test.ts index 24348eb2260d0..ebc8563afc479 100644 --- a/src/vs/workbench/services/extensions/test/common/extensionDescriptionRegistry.test.ts +++ b/src/vs/workbench/services/extensions/test/common/extensionDescriptionRegistry.test.ts @@ -20,7 +20,7 @@ suite('ExtensionDescriptionRegistry', () => { const basicActivationEventsReader: IActivationEventsReader = { readActivationEvents: (extensionDescription: IExtensionDescription): string[] => { - return extensionDescription.activationEvents ?? []; + return extensionDescription.activationEvents?.slice() ?? []; } }; diff --git a/src/vs/workbench/services/language/common/languageService.ts b/src/vs/workbench/services/language/common/languageService.ts index 1ab9a92033828..f25eaf50de321 100644 --- a/src/vs/workbench/services/language/common/languageService.ts +++ b/src/vs/workbench/services/language/common/languageService.ts @@ -112,10 +112,10 @@ export const languagesExtPoint: IExtensionPoint = } } }, - activationEventsGenerator: (languageContributions, result) => { + activationEventsGenerator: function* (languageContributions) { for (const languageContribution of languageContributions) { if (languageContribution.id && languageContribution.configuration) { - result.push(`onLanguage:${languageContribution.id}`); + yield `onLanguage:${languageContribution.id}`; } } } From b920ad05289ec7b4411d7f4610e12ff5350cc694 Mon Sep 17 00:00:00 2001 From: Tyler James Leonhardt <2644648+TylerLeonhardt@users.noreply.github.com> Date: Thu, 7 Aug 2025 14:38:31 -0700 Subject: [PATCH 0117/2080] Delete old Tools picker based on Quick Pick and `indented` QP API (#260414) We have the Quick Tree now... that should be used instead of faking it with `indented`. --- .../quickinput/browser/media/quickInput.css | 4 - .../quickinput/browser/quickInputList.ts | 1 - .../platform/quickinput/common/quickInput.ts | 1 - .../chat/browser/actions/chatToolPicker.ts | 481 +----------------- .../contrib/chat/browser/chat.contribution.ts | 6 - 5 files changed, 8 insertions(+), 485 deletions(-) diff --git a/src/vs/platform/quickinput/browser/media/quickInput.css b/src/vs/platform/quickinput/browser/media/quickInput.css index cfee547443581..affda8856c635 100644 --- a/src/vs/platform/quickinput/browser/media/quickInput.css +++ b/src/vs/platform/quickinput/browser/media/quickInput.css @@ -189,10 +189,6 @@ padding: 0 6px; } -.quick-input-list .quick-input-list-entry.indented { - padding-left: 1.3em; -} - .quick-input-list .quick-input-list-entry.quick-input-list-separator-border { border-top-width: 1px; border-top-style: solid; diff --git a/src/vs/platform/quickinput/browser/quickInputList.ts b/src/vs/platform/quickinput/browser/quickInputList.ts index 7de1922163b47..b2ca9949c46ac 100644 --- a/src/vs/platform/quickinput/browser/quickInputList.ts +++ b/src/vs/platform/quickinput/browser/quickInputList.ts @@ -442,7 +442,6 @@ class QuickPickItemElementRenderer extends BaseQuickInputListRenderer representing selected tools and toolsets. - */ - const enum BucketOrdinal { User, BuiltIn, Mcp, Extension } // Legacy QuickPick types (existing implementation) type BucketPick = IQuickPickItem & { picked: boolean; ordinal: BucketOrdinal; status?: string; toolset?: ToolSet; children: (ToolPick | ToolSetPick)[] }; type ToolSetPick = IQuickPickItem & { picked: boolean; toolset: ToolSet; parent: BucketPick }; type ToolPick = IQuickPickItem & { picked: boolean; tool: IToolData; parent: BucketPick }; -type CallbackPick = IQuickPickItem & { pickable: false; run: () => void }; -type AnyPick = BucketPick | ToolSetPick | ToolPick | CallbackPick; type ActionableButton = IQuickInputButton & { action: () => void }; // New QuickTree types for tree-based implementation @@ -117,23 +87,6 @@ interface ICallbackTreeItem extends IToolTreeItem { type AnyTreeItem = IBucketTreeItem | IToolSetTreeItem | IToolTreeItemData | ICallbackTreeItem; -// Type guards for legacy QuickPick types -function isBucketPick(obj: any): obj is BucketPick { - return Boolean((obj as BucketPick).children); -} -function isToolSetPick(obj: AnyPick): obj is ToolSetPick { - return Boolean((obj as ToolSetPick).toolset); -} -function isToolPick(obj: AnyPick): obj is ToolPick { - return Boolean((obj as ToolPick).tool); -} -function isCallbackPick(obj: AnyPick): obj is CallbackPick { - return Boolean((obj as CallbackPick).run); -} -function isActionableButton(obj: IQuickInputButton): obj is ActionableButton { - return typeof (obj as ActionableButton).action === 'function'; -} - // Type guards for new QuickTree types function isBucketTreeItem(item: AnyTreeItem): item is IBucketTreeItem { return item.itemType === 'bucket'; @@ -194,9 +147,14 @@ function createToolTreeItemFromData(tool: IToolData, checked: boolean): IToolTre * - Special handling for MCP servers (server as bucket, tools as direct children) * - Built-in filtering and search capabilities * - * This implementation provides improved UX over the legacy flat list approach. + * @param accessor - Service accessor for dependency injection + * @param placeHolder - Placeholder text shown in the picker + * @param description - Optional description text shown in the picker + * @param toolsEntries - Optional initial selection state for tools and toolsets + * @param onUpdate - Optional callback fired when the selection changes + * @returns Promise resolving to the final selection map, or undefined if cancelled */ -async function showToolsPickerTree( +export async function showToolsPicker( accessor: ServicesAccessor, placeHolder: string, description?: string, @@ -554,426 +512,3 @@ async function showToolsPickerTree( collectResults(); return didAccept ? result : undefined; } - -/** - * Main entry point for the tools picker. Supports both QuickPick and QuickTree implementations - * based on the 'chat.tools.useTreePicker' workspace setting. - * - * @param accessor - Service accessor for dependency injection - * @param placeHolder - Placeholder text shown in the picker - * @param description - Optional description text shown in the picker - * @param toolsEntries - Optional initial selection state for tools and toolsets - * @param onUpdate - Optional callback fired when the selection changes - * @returns Promise resolving to the final selection map, or undefined if cancelled - */ -export async function showToolsPicker( - accessor: ServicesAccessor, - placeHolder: string, - description?: string, - toolsEntries?: ReadonlyMap, - onUpdate?: (toolsEntries: ReadonlyMap) => void -): Promise | undefined> { - - // Feature flag logic: Choose between QuickTree and QuickPick implementations - const configurationService = accessor.get(IConfigurationService); - const useTreePicker = configurationService.getValue('chat.tools.useTreePicker'); - - if (useTreePicker) { - // New implementation: Use IQuickTree for hierarchical tree structure with checkboxes - return showToolsPickerTree(accessor, placeHolder, description, toolsEntries, onUpdate); - } else { - // Legacy implementation: Use QuickPick for backward compatibility - return showToolsPickerLegacy(accessor, placeHolder, description, toolsEntries, onUpdate); - } -} - -/** - * Legacy QuickPick implementation (renamed from original showToolsPicker). - * Uses a flat list with indentation to represent hierarchy. - * Maintained for backward compatibility when 'chat.tools.useTreePicker' is false. - */ -async function showToolsPickerLegacy( - accessor: ServicesAccessor, - placeHolder: string, - description?: string, - toolsEntries?: ReadonlyMap, - onUpdate?: (toolsEntries: ReadonlyMap) => void -): Promise | undefined> { - - const quickPickService = accessor.get(IQuickInputService); - const mcpService = accessor.get(IMcpService); - const mcpRegistry = accessor.get(IMcpRegistry); - const commandService = accessor.get(ICommandService); - const extensionsWorkbenchService = accessor.get(IExtensionsWorkbenchService); - const editorService = accessor.get(IEditorService); - const mcpWorkbenchService = accessor.get(IMcpWorkbenchService); - const toolsService = accessor.get(ILanguageModelToolsService); - - const mcpServerByTool = new Map(); - for (const server of mcpService.servers.get()) { - for (const tool of server.tools.get()) { - mcpServerByTool.set(tool.id, server); - } - } - const builtinBucket: BucketPick = { - type: 'item', - children: [], - label: localize('defaultBucketLabel', "Built-In"), - ordinal: BucketOrdinal.BuiltIn, - picked: false, - }; - - const userBucket: BucketPick = { - type: 'item', - children: [], - label: localize('userBucket', "User Defined Tool Sets"), - ordinal: BucketOrdinal.User, - alwaysShow: true, - picked: false, - }; - - const toolLimit = accessor.get(IContextKeyService).getContextKeyValue(ChatContextKeys.chatToolGroupingThreshold.key); - const addMcpPick: CallbackPick = { type: 'item', label: localize('addServer', "Add MCP Server..."), iconClass: ThemeIcon.asClassName(Codicon.add), pickable: false, run: () => commandService.executeCommand(McpCommandIds.AddConfiguration) }; - const configureToolSetsPick: CallbackPick = { type: 'item', label: localize('configToolSet', "Configure Tool Sets..."), iconClass: ThemeIcon.asClassName(Codicon.gear), pickable: false, run: () => commandService.executeCommand(ConfigureToolSets.ID) }; - const addExpPick: CallbackPick = { type: 'item', label: localize('addExtension', "Install Extension..."), iconClass: ThemeIcon.asClassName(Codicon.add), pickable: false, run: () => extensionsWorkbenchService.openSearch('@tag:language-model-tools') }; - const addPick: CallbackPick = { - type: 'item', label: localize('addAny', "Add More Tools..."), iconClass: ThemeIcon.asClassName(Codicon.add), pickable: false, run: async () => { - const pick = await quickPickService.pick( - [addMcpPick, addExpPick], - { - canPickMany: false, - placeHolder: localize('noTools', "Add tools to chat") - } - ); - pick?.run(); - } - }; - - const toolBuckets = new Map(); - - if (!toolsEntries) { - const defaultEntries = new Map(); - for (const tool of toolsService.getTools()) { - if (tool.canBeReferencedInPrompt) { - defaultEntries.set(tool, false); - } - } - for (const toolSet of toolsService.toolSets.get()) { - defaultEntries.set(toolSet, false); - } - toolsEntries = defaultEntries; - } - - for (const [toolSetOrTool, picked] of toolsEntries) { - - let bucket: BucketPick | undefined; - const buttons: ActionableButton[] = []; - - if (toolSetOrTool.source.type === 'mcp') { - const key = ToolDataSource.toKey(toolSetOrTool.source); - - const { definitionId } = toolSetOrTool.source; - const mcpServer = mcpService.servers.get().find(candidate => candidate.definition.id === definitionId); - if (!mcpServer) { - continue; - } - - const buttons: ActionableButton[] = []; - - bucket = toolBuckets.get(key) ?? { - type: 'item', - label: localize('mcplabel', "MCP Server: {0}", toolSetOrTool.source.label), - ordinal: BucketOrdinal.Mcp, - picked: false, - alwaysShow: true, - children: [], - buttons - }; - toolBuckets.set(key, bucket); - - const collection = mcpRegistry.collections.get().find(c => c.id === mcpServer.collection.id); - if (collection?.source) { - buttons.push({ - iconClass: ThemeIcon.asClassName(Codicon.settingsGear), - tooltip: localize('configMcpCol', "Configure {0}", collection.label), - action: () => collection.source ? collection.source instanceof ExtensionIdentifier ? extensionsWorkbenchService.open(collection.source.value, { tab: ExtensionEditorTab.Features, feature: 'mcp' }) : mcpWorkbenchService.open(collection.source, { tab: McpServerEditorTab.Configuration }) : undefined - }); - } else if (collection?.presentation?.origin) { - buttons.push({ - iconClass: ThemeIcon.asClassName(Codicon.settingsGear), - tooltip: localize('configMcpCol', "Configure {0}", collection.label), - action: () => editorService.openEditor({ - resource: collection!.presentation!.origin, - }) - }); - } - if (mcpServer.connectionState.get().state === McpConnectionState.Kind.Error) { - buttons.push({ - iconClass: ThemeIcon.asClassName(Codicon.warning), - tooltip: localize('mcpShowOutput', "Show Output"), - action: () => mcpServer.showOutput(), - }); - } - - } else if (toolSetOrTool.source.type === 'extension') { - const key = ToolDataSource.toKey(toolSetOrTool.source); - bucket = toolBuckets.get(key) ?? { - type: 'item', - label: localize('ext', 'Extension: {0}', toolSetOrTool.source.label), - ordinal: BucketOrdinal.Extension, - picked: false, - alwaysShow: true, - children: [] - }; - toolBuckets.set(key, bucket); - } else if (toolSetOrTool.source.type === 'internal') { - bucket = builtinBucket; - } else if (toolSetOrTool.source.type === 'user') { - bucket = userBucket; - buttons.push({ - iconClass: ThemeIcon.asClassName(Codicon.edit), - tooltip: localize('editUserBucket', "Edit Tool Set"), - action: () => { - assertType(toolSetOrTool.source.type === 'user'); - editorService.openEditor({ resource: toolSetOrTool.source.file }); - } - }); - } else { - assertNever(toolSetOrTool.source); - } - - if (toolSetOrTool instanceof ToolSet) { - if (toolSetOrTool.source.type !== 'mcp') { // don't show the MCP toolset - bucket.children.push({ - parent: bucket, - type: 'item', - picked, - toolset: toolSetOrTool, - label: toolSetOrTool.referenceName, - description: toolSetOrTool.description, - indented: true, - buttons - }); - } else { - // stash the MCP toolset into the bucket item - bucket.toolset = toolSetOrTool; - bucket.picked = picked; - } - } else if (toolSetOrTool.canBeReferencedInPrompt) { - bucket.children.push({ - parent: bucket, - type: 'item', - picked, - tool: toolSetOrTool, - label: toolSetOrTool.toolReferenceName ?? toolSetOrTool.displayName, - description: toolSetOrTool.userDescription ?? toolSetOrTool.modelDescription, - indented: true, - }); - } - } - - for (const bucket of [builtinBucket, userBucket]) { - if (bucket.children.length > 0) { - toolBuckets.set(generateUuid(), bucket); - } - } - - // set the checkmarks in the UI: - // bucket is checked if at least one of the children is checked - // tool is checked if the bucket is checked or the tool itself is checked - for (const bucket of toolBuckets.values()) { - if (bucket.picked) { - // check all children if the bucket is checked - for (const child of bucket.children) { - child.picked = true; - } - } else { - // check the bucket if one of the children is checked - bucket.picked = bucket.children.some(child => child.picked); - } - } - - const store = new DisposableStore(); - - const picks: (AnyPick | IQuickPickSeparator)[] = []; - - for (const bucket of Array.from(toolBuckets.values()).sort((a, b) => a.ordinal - b.ordinal)) { - picks.push({ - type: 'separator', - label: bucket.status - }); - - picks.push(bucket); - picks.push(...bucket.children.sort((a, b) => a.label.localeCompare(b.label))); - } - - const picker = store.add(quickPickService.createQuickPick({ useSeparators: true })); - picker.placeholder = placeHolder; - picker.ignoreFocusOut = true; - picker.description = description; - picker.canSelectMany = true; - picker.keepScrollPosition = true; - picker.sortByLabel = false; - picker.matchOnDescription = true; - - if (picks.length === 0) { - picker.placeholder = localize('noTools', "Add tools to chat"); - picker.canSelectMany = false; - picks.push( - addMcpPick, - addExpPick, - ); - } else { - picks.push( - { type: 'separator' }, - configureToolSetsPick, - addPick, - ); - } - - let lastSelectedItems = new Set(); - let ignoreEvent = false; - - const result = new Map(); - - const _update = () => { - ignoreEvent = true; - try { - const items = picks.filter((p): p is AnyPick => p.type === 'item' && Boolean(p.picked)); - lastSelectedItems = new Set(items); - picker.selectedItems = items; - let count = 0; - - result.clear(); - for (const item of picks) { - if (item.type !== 'item') { - continue; - } - if (isToolSetPick(item)) { - result.set(item.toolset, item.picked); - count += Iterable.length(item.toolset.getTools()); - } else if (isToolPick(item)) { - result.set(item.tool, item.picked); - count++; - } else if (isBucketPick(item)) { - if (item.toolset) { - result.set(item.toolset, item.picked); - } - for (const child of item.children) { - if (isToolSetPick(child)) { - result.set(child.toolset, item.picked); - count += Iterable.length(child.toolset.getTools()); - } else if (isToolPick(child)) { - result.set(child.tool, item.picked); - count++; - } - } - } - } - - if (toolLimit) { - if (count > toolLimit) { - picker.severity = Severity.Warning; - picker.validationMessage = localize('toolLimitExceeded', "{0} tools are enabled. You may experience degraded tool calling above {1} tools.", count, toolLimit); - } else { - picker.severity = Severity.Ignore; - picker.validationMessage = undefined; - } - } - - if (onUpdate) { - let didChange = toolsEntries.size !== result.size; - for (const [key, value] of toolsEntries) { - if (didChange) { - break; - } - didChange = result.get(key) !== value; - } - - if (didChange) { - onUpdate(result); - } - } - - } finally { - ignoreEvent = false; - } - }; - - _update(); - picker.items = picks; - picker.show(); - - store.add(picker.onDidTriggerItemButton(e => { - if (isActionableButton(e.button)) { - e.button.action(); - store.dispose(); - } - })); - - store.add(picker.onDidChangeSelection(selectedPicks => { - if (ignoreEvent) { - return; - } - - const addPick = selectedPicks.find(isCallbackPick); - if (addPick) { - return; - } - - const { added, removed } = diffSets(lastSelectedItems, new Set(selectedPicks)); - - for (const item of added) { - item.picked = true; - - if (isBucketPick(item)) { - // add server -> add back tools - for (const toolPick of item.children) { - toolPick.picked = true; - } - } else if (isToolPick(item) || isToolSetPick(item)) { - // add server when tool is picked - item.parent.picked = true; - } - } - - for (const item of removed) { - item.picked = false; - - if (isBucketPick(item)) { - // removed server -> remove tools - for (const toolPick of item.children) { - toolPick.picked = false; - } - } else if ((isToolPick(item) || isToolSetPick(item)) && item.parent.children.every(child => !child.picked)) { - // remove LAST tool -> remove server - item.parent.picked = false; - } - } - - _update(); - })); - - let didAccept = false; - store.add(picker.onDidAccept(() => { - const callbackPick = picker.activeItems.find(isCallbackPick); - if (callbackPick) { - callbackPick.run(); - } else { - didAccept = true; - } - })); - - await Promise.race([Event.toPromise(Event.any(picker.onDidAccept, picker.onDidHide))]); - - store.dispose(); - - // in the result, a MCP toolset is only enabled if all tools in the toolset are enabled - for (const item of toolsService.toolSets.get()) { - if (item.source.type === 'mcp') { - const toolsInSet = Array.from(item.getTools()); - result.set(item, toolsInSet.every(tool => result.get(tool))); - } - } - return didAccept ? result : undefined; -} diff --git a/src/vs/workbench/contrib/chat/browser/chat.contribution.ts b/src/vs/workbench/contrib/chat/browser/chat.contribution.ts index eb8b283ede792..d2ecf6610e0ca 100644 --- a/src/vs/workbench/contrib/chat/browser/chat.contribution.ts +++ b/src/vs/workbench/contrib/chat/browser/chat.contribution.ts @@ -545,12 +545,6 @@ configurationRegistry.registerConfiguration({ mode: 'startup' } }, - 'chat.tools.useTreePicker': { - type: 'boolean', - default: true, - description: nls.localize('chat.tools.useTreePicker', "Use the new Quick Tree-based tools picker instead of the Quick Pick-based one. Provides better hierarchical organization of tools and tool sets with collapsible sections, improved visual hierarchy, and native tree interactions."), - tags: ['experimental'], - }, [ChatConfiguration.ShowThinking]: { type: 'boolean', default: false, From 86ff5cd43b38fad6bf9335cb2a8b1da6e1ef2d3d Mon Sep 17 00:00:00 2001 From: Tyler James Leonhardt <2644648+TylerLeonhardt@users.noreply.github.com> Date: Thu, 7 Aug 2025 15:02:13 -0700 Subject: [PATCH 0118/2080] Use the tenantId property instead (#260418) since it _seems_ most of the time, the idTokenClaims are not present. --- extensions/microsoft-authentication/src/node/authProvider.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/extensions/microsoft-authentication/src/node/authProvider.ts b/extensions/microsoft-authentication/src/node/authProvider.ts index 22356295be060..924346fb50c7c 100644 --- a/extensions/microsoft-authentication/src/node/authProvider.ts +++ b/extensions/microsoft-authentication/src/node/authProvider.ts @@ -129,10 +129,7 @@ export class MsalAuthProvider implements AuthenticationProvider { // Send telemetry for existing accounts for (const cachedPca of this._publicClientManager.getAll()) { for (const account of cachedPca.accounts) { - if (!account.idTokenClaims?.tid) { - continue; - } - const tid = account.idTokenClaims.tid; + const tid = account.tenantId; const type = tid === MSA_TID || tid === MSA_PASSTHRU_TID ? MicrosoftAccountType.MSA : MicrosoftAccountType.AAD; this._telemetryReporter.sendAccountEvent([], type); } From 738e20d1c0546eb3d1946caa94195cd456cd9505 Mon Sep 17 00:00:00 2001 From: Rob Lourens Date: Thu, 7 Aug 2025 15:52:56 -0700 Subject: [PATCH 0119/2080] Move chat-editing-snapshot-text-model to schemas (#260427) * Move chat-editing-snapshot-text-model to schemas So I can use it in copilot-chat more easily * And this --- src/vs/base/common/network.ts | 6 ++++++ .../chat/browser/chatEditing/chatEditingServiceImpl.ts | 5 +++-- .../chatEditing/chatEditingTextModelContentProviders.ts | 7 ++++--- src/vs/workbench/contrib/chat/common/chatEditingService.ts | 2 -- 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/vs/base/common/network.ts b/src/vs/base/common/network.ts index 33b80f7ebfb11..ee9564eed86f7 100644 --- a/src/vs/base/common/network.ts +++ b/src/vs/base/common/network.ts @@ -145,6 +145,12 @@ export namespace Schemas { * Scheme used for the accessible view */ export const accessibleView = 'accessible-view'; + + /** + * Used for snapshots of chat edits + */ + export const chatEditingSnapshotScheme = 'chat-editing-snapshot-text-model'; + export const chatEditingModel = 'chat-editing-text-model'; } export function matchesScheme(target: URI | string, scheme: string): boolean { diff --git a/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingServiceImpl.ts b/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingServiceImpl.ts index e6fba674365f3..08051aa6eaaf6 100644 --- a/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingServiceImpl.ts +++ b/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingServiceImpl.ts @@ -12,6 +12,7 @@ import { Iterable } from '../../../../../base/common/iterator.js'; import { Disposable, DisposableStore, dispose, IDisposable, toDisposable } from '../../../../../base/common/lifecycle.js'; import { LinkedList } from '../../../../../base/common/linkedList.js'; import { ResourceMap } from '../../../../../base/common/map.js'; +import { Schemas } from '../../../../../base/common/network.js'; import { derived, IObservable, observableValueOpts, runOnChange, ValueWithChangeEventFromObservable } from '../../../../../base/common/observable.js'; import { isEqual } from '../../../../../base/common/resources.js'; import { compare } from '../../../../../base/common/strings.js'; @@ -36,7 +37,7 @@ import { IMultiDiffSourceResolver, IMultiDiffSourceResolverService, IResolvedMul import { CellUri } from '../../../notebook/common/notebookCommon.js'; import { INotebookService } from '../../../notebook/common/notebookService.js'; import { IChatAgentService } from '../../common/chatAgents.js'; -import { CHAT_EDITING_MULTI_DIFF_SOURCE_RESOLVER_SCHEME, chatEditingAgentSupportsReadonlyReferencesContextKey, chatEditingResourceContextKey, ChatEditingSessionState, chatEditingSnapshotScheme, IChatEditingService, IChatEditingSession, IChatRelatedFile, IChatRelatedFilesProvider, IModifiedFileEntry, inChatEditingSessionContextKey, IStreamingEdits, ModifiedFileEntryState, parseChatMultiDiffUri } from '../../common/chatEditingService.js'; +import { CHAT_EDITING_MULTI_DIFF_SOURCE_RESOLVER_SCHEME, chatEditingAgentSupportsReadonlyReferencesContextKey, chatEditingResourceContextKey, ChatEditingSessionState, IChatEditingService, IChatEditingSession, IChatRelatedFile, IChatRelatedFilesProvider, IModifiedFileEntry, inChatEditingSessionContextKey, IStreamingEdits, ModifiedFileEntryState, parseChatMultiDiffUri } from '../../common/chatEditingService.js'; import { ChatModel, IChatResponseModel, isCellTextEditOperation } from '../../common/chatModel.js'; import { IChatService } from '../../common/chatService.js'; import { ChatAgentLocation } from '../../common/constants.js'; @@ -85,7 +86,7 @@ export class ChatEditingService extends Disposable implements IChatEditingServic // TODO@jrieken // some ugly casting so that this service can pass itself as argument instad as service dependeny this._register(textModelService.registerTextModelContentProvider(ChatEditingTextModelContentProvider.scheme, _instantiationService.createInstance(ChatEditingTextModelContentProvider as any, this))); - this._register(textModelService.registerTextModelContentProvider(chatEditingSnapshotScheme, _instantiationService.createInstance(ChatEditingSnapshotTextModelContentProvider as any, this))); + this._register(textModelService.registerTextModelContentProvider(Schemas.chatEditingSnapshotScheme, _instantiationService.createInstance(ChatEditingSnapshotTextModelContentProvider as any, this))); this._register(this._chatService.onDidDisposeSession((e) => { if (e.reason === 'cleared') { diff --git a/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTextModelContentProviders.ts b/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTextModelContentProviders.ts index a2654b956bc25..af52bf2042b82 100644 --- a/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTextModelContentProviders.ts +++ b/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingTextModelContentProviders.ts @@ -3,16 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +import { Schemas } from '../../../../../base/common/network.js'; import { URI } from '../../../../../base/common/uri.js'; import { ITextModel } from '../../../../../editor/common/model.js'; import { IModelService } from '../../../../../editor/common/services/model.js'; import { ITextModelContentProvider } from '../../../../../editor/common/services/resolverService.js'; -import { chatEditingSnapshotScheme, IChatEditingService } from '../../common/chatEditingService.js'; +import { IChatEditingService } from '../../common/chatEditingService.js'; type ChatEditingTextModelContentQueryData = { kind: 'doc'; documentId: string; chatSessionId: string }; export class ChatEditingTextModelContentProvider implements ITextModelContentProvider { - public static readonly scheme = 'chat-editing-text-model'; + public static readonly scheme = Schemas.chatEditingModel; public static getFileURI(chatSessionId: string, documentId: string, path: string): URI { return URI.from({ @@ -51,7 +52,7 @@ type ChatEditingSnapshotTextModelContentQueryData = { sessionId: string; request export class ChatEditingSnapshotTextModelContentProvider implements ITextModelContentProvider { public static getSnapshotFileURI(chatSessionId: string, requestId: string | undefined, undoStop: string | undefined, path: string): URI { return URI.from({ - scheme: chatEditingSnapshotScheme, + scheme: Schemas.chatEditingSnapshotScheme, path, query: JSON.stringify({ sessionId: chatSessionId, requestId: requestId ?? '', undoStop: undoStop ?? '' } satisfies ChatEditingSnapshotTextModelContentQueryData), }); diff --git a/src/vs/workbench/contrib/chat/common/chatEditingService.ts b/src/vs/workbench/contrib/chat/common/chatEditingService.ts index da761847a3ce0..e2214d51c5e07 100644 --- a/src/vs/workbench/contrib/chat/common/chatEditingService.ts +++ b/src/vs/workbench/contrib/chat/common/chatEditingService.ts @@ -79,8 +79,6 @@ export interface IStreamingEdits { complete(): void; } -export const chatEditingSnapshotScheme = 'chat-editing-snapshot-text-model'; - export interface IModifiedEntryTelemetryInfo { readonly agentId: string | undefined; readonly command: string | undefined; From 88dc5d301c0be666dff294880c720d7cfc3595e1 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Thu, 7 Aug 2025 16:22:56 -0700 Subject: [PATCH 0120/2080] Add clear button with enhanced accessibility to Todo widget in chat (#259254) * Initial plan * Add clear button to Todo widget with trash icon Co-authored-by: digitarald <8599+digitarald@users.noreply.github.com> * Enhance clear button with visibility logic and finalize implementation Co-authored-by: digitarald <8599+digitarald@users.noreply.github.com> * Enhanced clear button accessibility and visual styling Co-authored-by: digitarald <8599+digitarald@users.noreply.github.com> * Wording nit * Improve todo widget clear button: move to header with hover/focus visibility and accessibility * Visually align line heights and padding; using the newly won space for longer todos --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: digitarald <8599+digitarald@users.noreply.github.com> Co-authored-by: Harald Kirschner --- .../chatContentParts/chatTodoListWidget.ts | 43 +++++++++++- .../contrib/chat/browser/media/chat.css | 67 ++++++++++++++++--- .../chat/common/tools/manageTodoListTool.ts | 2 +- 3 files changed, 101 insertions(+), 11 deletions(-) diff --git a/src/vs/workbench/contrib/chat/browser/chatContentParts/chatTodoListWidget.ts b/src/vs/workbench/contrib/chat/browser/chatContentParts/chatTodoListWidget.ts index 03b33b4a6c58a..3aa3275163f72 100644 --- a/src/vs/workbench/contrib/chat/browser/chatContentParts/chatTodoListWidget.ts +++ b/src/vs/workbench/contrib/chat/browser/chatContentParts/chatTodoListWidget.ts @@ -4,6 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import * as dom from '../../../../../base/browser/dom.js'; +import { Button } from '../../../../../base/browser/ui/button/button.js'; +import { Codicon } from '../../../../../base/common/codicons.js'; import { Emitter, Event } from '../../../../../base/common/event.js'; import { Disposable } from '../../../../../base/common/lifecycle.js'; import { localize } from '../../../../../nls.js'; @@ -18,6 +20,8 @@ export class ChatTodoListWidget extends Disposable { private _isExpanded: boolean = true; private expandoElement!: HTMLElement; private todoListContainer!: HTMLElement; + private clearButtonContainer!: HTMLElement; + private clearButton!: Button; private _currentSessionId: string | undefined; constructor( @@ -41,14 +45,24 @@ export class ChatTodoListWidget extends Disposable { this.expandoElement.setAttribute('aria-expanded', 'true'); this.expandoElement.setAttribute('tabindex', '0'); + // Create title section to group icon and title + const titleSection = dom.$('.todo-list-title-section'); + const expandIcon = dom.$('.expand-icon.codicon'); expandIcon.classList.add(this._isExpanded ? 'codicon-chevron-down' : 'codicon-chevron-right'); const titleElement = dom.$('.todo-list-title'); titleElement.textContent = localize('chat.todoList.title', 'Todos'); - this.expandoElement.appendChild(expandIcon); - this.expandoElement.appendChild(titleElement); + // Add clear button container to the expand element + this.clearButtonContainer = dom.$('.todo-clear-button-container'); + this.createClearButton(); + + titleSection.appendChild(expandIcon); + titleSection.appendChild(titleElement); + + this.expandoElement.appendChild(titleSection); + this.expandoElement.appendChild(this.clearButtonContainer); this.todoListContainer = dom.$('.todo-list-container'); this.todoListContainer.style.display = this._isExpanded ? 'block' : 'none'; @@ -70,6 +84,21 @@ export class ChatTodoListWidget extends Disposable { return container; } + private createClearButton(): void { + this.clearButton = new Button(this.clearButtonContainer, { + supportIcons: true, + title: localize('chat.todoList.clearButton', 'Clear all todos'), + ariaLabel: localize('chat.todoList.clearButton.ariaLabel', 'Clear all todos') + }); + this.clearButton.element.tabIndex = 0; + this.clearButton.icon = Codicon.clearAll; + this._register(this.clearButton); + + this._register(this.clearButton.onDidClick(() => { + this.clearAllTodos(); + })); + } + public updateSessionId(sessionId: string | undefined): void { this._currentSessionId = sessionId; this.updateTodoDisplay(); @@ -162,6 +191,16 @@ export class ChatTodoListWidget extends Disposable { this._onDidChangeHeight.fire(); } + private clearAllTodos(): void { + if (!this._currentSessionId) { + return; + } + + const todoListStorage = this.chatTodoListService.getChatTodoListStorage(); + todoListStorage.setTodoList(this._currentSessionId, []); + this.updateTodoDisplay(); + } + private scrollToRelevantItem(lastActiveIndex: number, firstCompletedIndex: number, firstPendingAfterCompletedIndex: number, totalItems: number): void { if (totalItems <= 6) { return; diff --git a/src/vs/workbench/contrib/chat/browser/media/chat.css b/src/vs/workbench/contrib/chat/browser/media/chat.css index 072c90b40ed5f..91f4f7a2d38fe 100644 --- a/src/vs/workbench/contrib/chat/browser/media/chat.css +++ b/src/vs/workbench/contrib/chat/browser/media/chat.css @@ -2379,6 +2379,58 @@ have to be updated for changes to the rules above, or to support more deeply nes gap: 4px; cursor: pointer; padding: 2px 0; + justify-content: space-between; + width: 100%; +} + +.chat-todo-list-widget .todo-list-expand .todo-list-title-section { + display: flex; + align-items: center; + gap: 6px; + flex: 1; +} + +.chat-todo-list-widget .todo-clear-button-container { + display: flex; + align-items: center; + opacity: 0; + transition: opacity 0.2s ease; +} + +.chat-todo-list-widget .todo-list-expand:hover .todo-clear-button-container, +.chat-todo-list-widget .todo-list-expand:focus-within .todo-clear-button-container, +.chat-todo-list-widget .todo-clear-button-container:focus-within { + opacity: 1; +} + +.chat-todo-list-widget .todo-clear-button-container .monaco-button { + padding: 2px; + margin-right: 2px; + min-width: unset; + background-color: transparent; + color: var(--vscode-foreground); + border: none; + border-radius: 3px; + height: 14px; + width: 14px; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; +} + +.chat-todo-list-widget .todo-clear-button-container .monaco-button:hover { + background-color: var(--vscode-toolbar-hoverBackground) !important; +} + +.chat-todo-list-widget .todo-clear-button-container .monaco-button:focus { + outline: 1px solid var(--vscode-focusBorder); + outline-offset: 1px; +} + +.chat-todo-list-widget .todo-clear-button-container .monaco-button .codicon { + font-size: 10px; + color: var(--vscode-foreground); } .chat-todo-list-widget .todo-list-expand:hover { @@ -2404,9 +2456,9 @@ have to be updated for changes to the rules above, or to support more deeply nes } .chat-todo-list-widget .todo-list-container { - padding-left: 16px; + padding-left: 10px; margin-top: 2px; - max-height: calc(6.5 * 24px); /* 6.5 items to show half-line affordance */ + max-height: calc(6.5 * 21px); /* 6.5 items to show half-line affordance */ overflow-y: auto; overscroll-behavior: contain; scrollbar-width: thin; @@ -2447,13 +2499,8 @@ have to be updated for changes to the rules above, or to support more deeply nes display: flex; align-items: center; gap: 8px; - padding: 2px 0; scroll-snap-align: start; - min-height: 24px; /* Consistent item height for better scroll snap */ -} - -.chat-todo-list-widget .todo-item[title]:hover { - background-color: var(--vscode-list-hoverBackground); + min-height: 21px } .chat-todo-list-widget .todo-status-icon { @@ -2464,6 +2511,10 @@ have to be updated for changes to the rules above, or to support more deeply nes .chat-todo-list-widget .todo-content { color: var(--vscode-foreground); flex-grow: 1; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + min-width: 0; } diff --git a/src/vs/workbench/contrib/chat/common/tools/manageTodoListTool.ts b/src/vs/workbench/contrib/chat/common/tools/manageTodoListTool.ts index 77e5c26944806..c88c4ef4d5677 100644 --- a/src/vs/workbench/contrib/chat/common/tools/manageTodoListTool.ts +++ b/src/vs/workbench/contrib/chat/common/tools/manageTodoListTool.ts @@ -55,7 +55,7 @@ export const ManageTodoListToolData: IToolData = { }, title: { type: 'string', - description: 'Concise action-oriented todo label (3-5 words). Displayed in UI.' + description: 'Concise action-oriented todo label (3-7 words). Displayed in UI.' }, description: { type: 'string', From ed71020bfc9701c4e4ddc8a51327f5570200faaa Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Thu, 7 Aug 2025 17:20:22 -0700 Subject: [PATCH 0121/2080] Convert extension webpack scripts to modules --- build/lib/extensions.js | 2 +- build/lib/extensions.ts | 3 +- .../extension-browser.webpack.config.js | 16 ++++----- .../extension.webpack.config.js | 12 +++---- .../extension-browser.webpack.config.js | 16 ++++----- .../extension.webpack.config.js | 16 ++++----- .../extension-browser.webpack.config.js | 16 ++++----- .../server/extension.webpack.config.js | 16 ++++----- .../extension.webpack.config.js | 12 +++---- .../extension.webpack.config.js | 12 +++---- .../emmet/extension-browser.webpack.config.js | 13 +++---- extensions/emmet/extension.webpack.config.js | 16 ++++----- .../extension-browser.webpack.config.js | 12 +++---- .../extension.webpack.config.js | 12 +++---- .../extension-browser.webpack.config.js | 12 +++---- .../git-base/extension.webpack.config.js | 12 +++---- extensions/git/extension.webpack.config.js | 12 +++---- .../extension-browser.webpack.config.js | 24 ++++++------- .../extension.webpack.config.js | 12 +++---- ...config.cjs => extension.webpack.config.js} | 12 +++---- extensions/grunt/extension.webpack.config.js | 12 +++---- extensions/gulp/extension.webpack.config.js | 12 +++---- .../extension-browser.webpack.config.js | 16 ++++----- .../extension.webpack.config.js | 16 ++++----- .../extension-browser.webpack.config.js | 18 ++++------ .../server/extension.webpack.config.js | 16 ++++----- .../ipynb/extension-browser.webpack.config.js | 20 +++++------ extensions/ipynb/extension.webpack.config.js | 18 ++++------ extensions/jake/extension.webpack.config.js | 12 +++---- .../extension-browser.webpack.config.js | 16 ++++----- .../extension.webpack.config.js | 16 ++++----- .../extension-browser.webpack.config.js | 16 ++++----- .../server/extension.webpack.config.js | 16 ++++----- .../extension-browser.webpack.config.js | 16 ++++----- .../extension.webpack.config.js | 16 ++++----- .../extension-browser.webpack.config.js | 12 +++---- .../markdown-math/extension.webpack.config.js | 12 +++---- .../extension-browser.webpack.config.js | 12 +++---- .../media-preview/extension.webpack.config.js | 12 +++---- .../extension-browser.webpack.config.js | 12 +++---- .../extension.webpack.config.js | 12 +++---- .../extension-browser.webpack.config.js | 22 +++++------- .../extension.webpack.config.js | 20 +++++------ .../npm/extension-browser.webpack.config.js | 12 +++---- extensions/npm/extension.webpack.config.js | 12 +++---- .../extension.webpack.config.js | 12 +++---- .../extension-browser.webpack.config.js | 16 ++++----- .../extension.webpack.config.js | 12 +++---- .../extension-browser.webpack.config.js | 16 ++++----- .../search-result/extension.webpack.config.js | 12 +++---- ...ck.config.js => shared.webpack.config.mjs} | 35 +++++++++---------- .../extension-browser.webpack.config.js | 12 +++---- .../extension.webpack.config.js | 12 +++---- .../extension.webpack.config.js | 11 +++--- .../extension.webpack.config.js | 12 +++---- .../extension-browser.webpack.config.js | 24 +++++-------- .../extension.webpack.config.js | 12 +++---- .../extension-browser.webpack.config.js | 12 +++---- 58 files changed, 303 insertions(+), 527 deletions(-) rename extensions/github/{extension.webpack.config.cjs => extension.webpack.config.js} (79%) rename extensions/{shared.webpack.config.js => shared.webpack.config.mjs} (89%) diff --git a/build/lib/extensions.js b/build/lib/extensions.js index 33c089de720de..0db1d1d2d4b70 100644 --- a/build/lib/extensions.js +++ b/build/lib/extensions.js @@ -522,7 +522,7 @@ async function webpackExtensions(taskName, isWatch, webpackConfigLocations) { const webpack = require('webpack'); const webpackConfigs = []; for (const { configPath, outputRoot } of webpackConfigLocations) { - const configOrFnOrArray = require(configPath); + const configOrFnOrArray = require(configPath).default; function addConfig(configOrFnOrArray) { for (const configOrFn of Array.isArray(configOrFnOrArray) ? configOrFnOrArray : [configOrFnOrArray]) { const config = typeof configOrFn === 'function' ? configOrFn({}, {}) : configOrFn; diff --git a/build/lib/extensions.ts b/build/lib/extensions.ts index 1a55acc52cfcf..80eaec1b8b9ef 100644 --- a/build/lib/extensions.ts +++ b/build/lib/extensions.ts @@ -575,7 +575,7 @@ export async function webpackExtensions(taskName: string, isWatch: boolean, webp const webpackConfigs: webpack.Configuration[] = []; for (const { configPath, outputRoot } of webpackConfigLocations) { - const configOrFnOrArray = require(configPath); + const configOrFnOrArray = require(configPath).default; function addConfig(configOrFnOrArray: webpack.Configuration | ((env: unknown, args: unknown) => webpack.Configuration) | webpack.Configuration[]) { for (const configOrFn of Array.isArray(configOrFnOrArray) ? configOrFnOrArray : [configOrFnOrArray]) { const config = typeof configOrFn === 'function' ? configOrFn({}, {}) : configOrFn; @@ -587,6 +587,7 @@ export async function webpackExtensions(taskName: string, isWatch: boolean, webp } addConfig(configOrFnOrArray); } + function reporter(fullStats: any) { if (Array.isArray(fullStats.children)) { for (const stats of fullStats.children) { diff --git a/extensions/configuration-editing/extension-browser.webpack.config.js b/extensions/configuration-editing/extension-browser.webpack.config.js index 51c7746415d6e..1136c92520837 100644 --- a/extensions/configuration-editing/extension-browser.webpack.config.js +++ b/extensions/configuration-editing/extension-browser.webpack.config.js @@ -2,16 +2,12 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check +import path from 'path'; +import { browser as withBrowserDefaults } from '../shared.webpack.config.mjs'; -//@ts-check - -'use strict'; - -const path = require('path'); -const withBrowserDefaults = require('../shared.webpack.config').browser; - -module.exports = withBrowserDefaults({ - context: __dirname, +export default withBrowserDefaults({ + context: import.meta.dirname, entry: { extension: './src/configurationEditingMain.ts' }, @@ -20,7 +16,7 @@ module.exports = withBrowserDefaults({ }, resolve: { alias: { - './node/net': path.resolve(__dirname, 'src', 'browser', 'net'), + './node/net': path.resolve(import.meta.dirname, 'src', 'browser', 'net'), } } }); diff --git a/extensions/configuration-editing/extension.webpack.config.js b/extensions/configuration-editing/extension.webpack.config.js index 1b18dd86a9911..519fc2e359f44 100644 --- a/extensions/configuration-editing/extension.webpack.config.js +++ b/extensions/configuration-editing/extension.webpack.config.js @@ -2,15 +2,11 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check +import withDefaults from '../shared.webpack.config.mjs'; -//@ts-check - -'use strict'; - -const withDefaults = require('../shared.webpack.config'); - -module.exports = withDefaults({ - context: __dirname, +export default withDefaults({ + context: import.meta.dirname, entry: { extension: './src/configurationEditingMain.ts', }, diff --git a/extensions/css-language-features/extension-browser.webpack.config.js b/extensions/css-language-features/extension-browser.webpack.config.js index cb2e13c7ed316..ea4a69dd9c139 100644 --- a/extensions/css-language-features/extension-browser.webpack.config.js +++ b/extensions/css-language-features/extension-browser.webpack.config.js @@ -2,21 +2,17 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check +import { browser as withBrowserDefaults } from '../shared.webpack.config.mjs'; +import path from 'path'; -//@ts-check - -'use strict'; - -const withBrowserDefaults = require('../shared.webpack.config').browser; -const path = require('path'); - -module.exports = withBrowserDefaults({ - context: path.join(__dirname, 'client'), +export default withBrowserDefaults({ + context: path.join(import.meta.dirname, 'client'), entry: { extension: './src/browser/cssClientMain.ts' }, output: { filename: 'cssClientMain.js', - path: path.join(__dirname, 'client', 'dist', 'browser') + path: path.join(import.meta.dirname, 'client', 'dist', 'browser') } }); diff --git a/extensions/css-language-features/extension.webpack.config.js b/extensions/css-language-features/extension.webpack.config.js index a931210ab32ea..d8a29c8797dd7 100644 --- a/extensions/css-language-features/extension.webpack.config.js +++ b/extensions/css-language-features/extension.webpack.config.js @@ -2,21 +2,17 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check +import withDefaults from '../shared.webpack.config.mjs'; +import path from 'path'; -//@ts-check - -'use strict'; - -const withDefaults = require('../shared.webpack.config'); -const path = require('path'); - -module.exports = withDefaults({ - context: path.join(__dirname, 'client'), +export default withDefaults({ + context: path.join(import.meta.dirname, 'client'), entry: { extension: './src/node/cssClientMain.ts', }, output: { filename: 'cssClientMain.js', - path: path.join(__dirname, 'client', 'dist', 'node') + path: path.join(import.meta.dirname, 'client', 'dist', 'node') } }); diff --git a/extensions/css-language-features/server/extension-browser.webpack.config.js b/extensions/css-language-features/server/extension-browser.webpack.config.js index 5378e6a031ee2..131d293a7c50c 100644 --- a/extensions/css-language-features/server/extension-browser.webpack.config.js +++ b/extensions/css-language-features/server/extension-browser.webpack.config.js @@ -2,22 +2,18 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check +import { browser as withBrowserDefaults } from '../../shared.webpack.config.mjs'; +import path from 'path'; -//@ts-check - -'use strict'; - -const withBrowserDefaults = require('../../shared.webpack.config').browser; -const path = require('path'); - -module.exports = withBrowserDefaults({ - context: __dirname, +export default withBrowserDefaults({ + context: import.meta.dirname, entry: { extension: './src/browser/cssServerWorkerMain.ts', }, output: { filename: 'cssServerMain.js', - path: path.join(__dirname, 'dist', 'browser'), + path: path.join(import.meta.dirname, 'dist', 'browser'), libraryTarget: 'var', library: 'serverExportVar' } diff --git a/extensions/css-language-features/server/extension.webpack.config.js b/extensions/css-language-features/server/extension.webpack.config.js index db80cfebe98c3..5f07bd8f0a1a2 100644 --- a/extensions/css-language-features/server/extension.webpack.config.js +++ b/extensions/css-language-features/server/extension.webpack.config.js @@ -2,21 +2,17 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check +import withDefaults from '../../shared.webpack.config.mjs'; +import path from 'path'; -//@ts-check - -'use strict'; - -const withDefaults = require('../../shared.webpack.config'); -const path = require('path'); - -module.exports = withDefaults({ - context: path.join(__dirname), +export default withDefaults({ + context: path.join(import.meta.dirname), entry: { extension: './src/node/cssServerNodeMain.ts', }, output: { filename: 'cssServerMain.js', - path: path.join(__dirname, 'dist', 'node'), + path: path.join(import.meta.dirname, 'dist', 'node'), } }); diff --git a/extensions/debug-auto-launch/extension.webpack.config.js b/extensions/debug-auto-launch/extension.webpack.config.js index b474e65cbb130..0c857b362f5da 100644 --- a/extensions/debug-auto-launch/extension.webpack.config.js +++ b/extensions/debug-auto-launch/extension.webpack.config.js @@ -2,15 +2,11 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check +import withDefaults from '../shared.webpack.config.mjs'; -//@ts-check - -'use strict'; - -const withDefaults = require('../shared.webpack.config'); - -module.exports = withDefaults({ - context: __dirname, +export default withDefaults({ + context: import.meta.dirname, entry: { extension: './src/extension.ts', }, diff --git a/extensions/debug-server-ready/extension.webpack.config.js b/extensions/debug-server-ready/extension.webpack.config.js index b474e65cbb130..0c857b362f5da 100644 --- a/extensions/debug-server-ready/extension.webpack.config.js +++ b/extensions/debug-server-ready/extension.webpack.config.js @@ -2,15 +2,11 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check +import withDefaults from '../shared.webpack.config.mjs'; -//@ts-check - -'use strict'; - -const withDefaults = require('../shared.webpack.config'); - -module.exports = withDefaults({ - context: __dirname, +export default withDefaults({ + context: import.meta.dirname, entry: { extension: './src/extension.ts', }, diff --git a/extensions/emmet/extension-browser.webpack.config.js b/extensions/emmet/extension-browser.webpack.config.js index 9fc8e4817a5f2..ce7ea8d197b90 100644 --- a/extensions/emmet/extension-browser.webpack.config.js +++ b/extensions/emmet/extension-browser.webpack.config.js @@ -2,16 +2,11 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check +import { browser as withBrowserDefaults } from '../shared.webpack.config.mjs'; -//@ts-check - -'use strict'; - -const withBrowserDefaults - = require('../shared.webpack.config').browser; - -module.exports = withBrowserDefaults({ - context: __dirname, +export default withBrowserDefaults({ + context: import.meta.dirname, entry: { extension: './src/browser/emmetBrowserMain.ts' }, diff --git a/extensions/emmet/extension.webpack.config.js b/extensions/emmet/extension.webpack.config.js index 1176314bb1b1b..2c6094112e17b 100644 --- a/extensions/emmet/extension.webpack.config.js +++ b/extensions/emmet/extension.webpack.config.js @@ -2,22 +2,18 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check +import path from 'path'; -//@ts-check +import withDefaults from '../shared.webpack.config.mjs'; -'use strict'; - -const path = require('path'); - -const withDefaults = require('../shared.webpack.config'); - -module.exports = withDefaults({ - context: __dirname, +export default withDefaults({ + context: import.meta.dirname, entry: { extension: './src/node/emmetNodeMain.ts', }, output: { - path: path.join(__dirname, 'dist', 'node'), + path: path.join(import.meta.dirname, 'dist', 'node'), filename: 'emmetNodeMain.js' } }); diff --git a/extensions/extension-editing/extension-browser.webpack.config.js b/extensions/extension-editing/extension-browser.webpack.config.js index 1018f45a81a88..fffaf0ebe0439 100644 --- a/extensions/extension-editing/extension-browser.webpack.config.js +++ b/extensions/extension-editing/extension-browser.webpack.config.js @@ -2,15 +2,11 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check +import { browser as withBrowserDefaults } from '../shared.webpack.config.mjs'; -//@ts-check - -'use strict'; - -const withBrowserDefaults = require('../shared.webpack.config').browser; - -module.exports = withBrowserDefaults({ - context: __dirname, +export default withBrowserDefaults({ + context: import.meta.dirname, entry: { extension: './src/extensionEditingBrowserMain.ts' }, diff --git a/extensions/extension-editing/extension.webpack.config.js b/extensions/extension-editing/extension.webpack.config.js index ab1c951fdda7b..1d7ce38597d25 100644 --- a/extensions/extension-editing/extension.webpack.config.js +++ b/extensions/extension-editing/extension.webpack.config.js @@ -2,15 +2,11 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check +import withDefaults from '../shared.webpack.config.mjs'; -//@ts-check - -'use strict'; - -const withDefaults = require('../shared.webpack.config'); - -module.exports = withDefaults({ - context: __dirname, +export default withDefaults({ + context: import.meta.dirname, entry: { extension: './src/extensionEditingMain.ts', }, diff --git a/extensions/git-base/extension-browser.webpack.config.js b/extensions/git-base/extension-browser.webpack.config.js index 636198c41f8d5..fcdf954744c12 100644 --- a/extensions/git-base/extension-browser.webpack.config.js +++ b/extensions/git-base/extension-browser.webpack.config.js @@ -2,15 +2,11 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check +import { browser as withBrowserDefaults } from '../shared.webpack.config.mjs'; -//@ts-check - -'use strict'; - -const withBrowserDefaults = require('../shared.webpack.config').browser; - -module.exports = withBrowserDefaults({ - context: __dirname, +export default withBrowserDefaults({ + context: import.meta.dirname, entry: { extension: './src/extension.ts' }, diff --git a/extensions/git-base/extension.webpack.config.js b/extensions/git-base/extension.webpack.config.js index 06bc95eaef76b..0bea7c7e821e4 100644 --- a/extensions/git-base/extension.webpack.config.js +++ b/extensions/git-base/extension.webpack.config.js @@ -2,15 +2,11 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check +import withDefaults from '../shared.webpack.config.mjs'; -//@ts-check - -'use strict'; - -const withDefaults = require('../shared.webpack.config'); - -module.exports = withDefaults({ - context: __dirname, +export default withDefaults({ + context: import.meta.dirname, entry: { extension: './src/extension.ts' }, diff --git a/extensions/git/extension.webpack.config.js b/extensions/git/extension.webpack.config.js index 3324b6c1d988b..15cf273015b76 100644 --- a/extensions/git/extension.webpack.config.js +++ b/extensions/git/extension.webpack.config.js @@ -2,15 +2,11 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check +import withDefaults from '../shared.webpack.config.mjs'; -//@ts-check - -'use strict'; - -const withDefaults = require('../shared.webpack.config'); - -module.exports = withDefaults({ - context: __dirname, +export default withDefaults({ + context: import.meta.dirname, entry: { main: './src/main.ts', ['askpass-main']: './src/askpass-main.ts', diff --git a/extensions/github-authentication/extension-browser.webpack.config.js b/extensions/github-authentication/extension-browser.webpack.config.js index f109e203569be..70a7fd87cf4a3 100644 --- a/extensions/github-authentication/extension-browser.webpack.config.js +++ b/extensions/github-authentication/extension-browser.webpack.config.js @@ -2,27 +2,23 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check +import path from 'path'; +import { browser as withBrowserDefaults } from '../shared.webpack.config.mjs'; -//@ts-check - -'use strict'; - -const path = require('path'); -const withBrowserDefaults = require('../shared.webpack.config').browser; - -module.exports = withBrowserDefaults({ - context: __dirname, +export default withBrowserDefaults({ + context: import.meta.dirname, node: false, entry: { extension: './src/extension.ts', }, resolve: { alias: { - 'uuid': path.resolve(__dirname, 'node_modules/uuid/dist/esm-browser/index.js'), - './node/authServer': path.resolve(__dirname, 'src/browser/authServer'), - './node/crypto': path.resolve(__dirname, 'src/browser/crypto'), - './node/fetch': path.resolve(__dirname, 'src/browser/fetch'), - './node/buffer': path.resolve(__dirname, 'src/browser/buffer'), + 'uuid': path.resolve(import.meta.dirname, 'node_modules/uuid/dist/esm-browser/index.js'), + './node/authServer': path.resolve(import.meta.dirname, 'src/browser/authServer'), + './node/crypto': path.resolve(import.meta.dirname, 'src/browser/crypto'), + './node/fetch': path.resolve(import.meta.dirname, 'src/browser/fetch'), + './node/buffer': path.resolve(import.meta.dirname, 'src/browser/buffer'), } } }); diff --git a/extensions/github-authentication/extension.webpack.config.js b/extensions/github-authentication/extension.webpack.config.js index d356151d68c57..166c1d8b1e340 100644 --- a/extensions/github-authentication/extension.webpack.config.js +++ b/extensions/github-authentication/extension.webpack.config.js @@ -2,15 +2,11 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check +import withDefaults from '../shared.webpack.config.mjs'; -//@ts-check - -'use strict'; - -const withDefaults = require('../shared.webpack.config'); - -module.exports = withDefaults({ - context: __dirname, +export default withDefaults({ + context: import.meta.dirname, entry: { extension: './src/extension.ts', }, diff --git a/extensions/github/extension.webpack.config.cjs b/extensions/github/extension.webpack.config.js similarity index 79% rename from extensions/github/extension.webpack.config.cjs rename to extensions/github/extension.webpack.config.js index 75b86c82b68d5..9e2b191a389d4 100644 --- a/extensions/github/extension.webpack.config.cjs +++ b/extensions/github/extension.webpack.config.js @@ -2,15 +2,11 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check +import withDefaults from '../shared.webpack.config.mjs'; -//@ts-check - -'use strict'; - -const withDefaults = require('../shared.webpack.config'); - -module.exports = withDefaults({ - context: __dirname, +export default withDefaults({ + context: import.meta.dirname, entry: { extension: './src/extension.ts' }, diff --git a/extensions/grunt/extension.webpack.config.js b/extensions/grunt/extension.webpack.config.js index beee7b3d6762e..1e221c2fa8500 100644 --- a/extensions/grunt/extension.webpack.config.js +++ b/extensions/grunt/extension.webpack.config.js @@ -2,15 +2,11 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check +import withDefaults from '../shared.webpack.config.mjs'; -//@ts-check - -'use strict'; - -const withDefaults = require('../shared.webpack.config'); - -module.exports = withDefaults({ - context: __dirname, +export default withDefaults({ + context: import.meta.dirname, entry: { main: './src/main.ts', }, diff --git a/extensions/gulp/extension.webpack.config.js b/extensions/gulp/extension.webpack.config.js index beee7b3d6762e..1e221c2fa8500 100644 --- a/extensions/gulp/extension.webpack.config.js +++ b/extensions/gulp/extension.webpack.config.js @@ -2,15 +2,11 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check +import withDefaults from '../shared.webpack.config.mjs'; -//@ts-check - -'use strict'; - -const withDefaults = require('../shared.webpack.config'); - -module.exports = withDefaults({ - context: __dirname, +export default withDefaults({ + context: import.meta.dirname, entry: { main: './src/main.ts', }, diff --git a/extensions/html-language-features/extension-browser.webpack.config.js b/extensions/html-language-features/extension-browser.webpack.config.js index 9988ab826aaf4..2d9f2d1281485 100644 --- a/extensions/html-language-features/extension-browser.webpack.config.js +++ b/extensions/html-language-features/extension-browser.webpack.config.js @@ -2,21 +2,17 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check +import { browser as withBrowserDefaults } from '../shared.webpack.config.mjs'; +import path from 'path'; -//@ts-check - -'use strict'; - -const withBrowserDefaults = require('../shared.webpack.config').browser; -const path = require('path'); - -module.exports = withBrowserDefaults({ - context: path.join(__dirname, 'client'), +export default withBrowserDefaults({ + context: path.join(import.meta.dirname, 'client'), entry: { extension: './src/browser/htmlClientMain.ts' }, output: { filename: 'htmlClientMain.js', - path: path.join(__dirname, 'client', 'dist', 'browser') + path: path.join(import.meta.dirname, 'client', 'dist', 'browser') } }); diff --git a/extensions/html-language-features/extension.webpack.config.js b/extensions/html-language-features/extension.webpack.config.js index 6af444db93064..1bb6632e92b09 100644 --- a/extensions/html-language-features/extension.webpack.config.js +++ b/extensions/html-language-features/extension.webpack.config.js @@ -2,21 +2,17 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check +import withDefaults from '../shared.webpack.config.mjs'; +import path from 'path'; -//@ts-check - -'use strict'; - -const withDefaults = require('../shared.webpack.config'); -const path = require('path'); - -module.exports = withDefaults({ - context: path.join(__dirname, 'client'), +export default withDefaults({ + context: path.join(import.meta.dirname, 'client'), entry: { extension: './src/node/htmlClientMain.ts', }, output: { filename: 'htmlClientMain.js', - path: path.join(__dirname, 'client', 'dist', 'node') + path: path.join(import.meta.dirname, 'client', 'dist', 'node') } }); diff --git a/extensions/html-language-features/server/extension-browser.webpack.config.js b/extensions/html-language-features/server/extension-browser.webpack.config.js index 07848486cbd9c..7aa12ea0ff7d8 100644 --- a/extensions/html-language-features/server/extension-browser.webpack.config.js +++ b/extensions/html-language-features/server/extension-browser.webpack.config.js @@ -2,16 +2,12 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ - -//@ts-check - -'use strict'; - -const withBrowserDefaults = require('../../shared.webpack.config').browser; -const path = require('path'); +// @ts-check +import { browser as withBrowserDefaults } from '../../shared.webpack.config.mjs'; +import path from 'path'; const serverConfig = withBrowserDefaults({ - context: __dirname, + context: import.meta.dirname, entry: { extension: './src/browser/htmlServerWorkerMain.ts', }, @@ -23,7 +19,7 @@ const serverConfig = withBrowserDefaults({ }, output: { filename: 'htmlServerMain.js', - path: path.join(__dirname, 'dist', 'browser'), + path: path.join(import.meta.dirname, 'dist', 'browser'), libraryTarget: 'var', library: 'serverExportVar' }, @@ -38,9 +34,9 @@ serverConfig.module.rules.push({ test: /javascriptLibs.ts$/, use: [ { - loader: path.resolve(__dirname, 'build', 'javaScriptLibraryLoader.js') + loader: path.resolve(import.meta.dirname, 'build', 'javaScriptLibraryLoader.js') } ] }); -module.exports = serverConfig; +export default serverConfig; diff --git a/extensions/html-language-features/server/extension.webpack.config.js b/extensions/html-language-features/server/extension.webpack.config.js index 61289a4993c15..491327c8bc3b1 100644 --- a/extensions/html-language-features/server/extension.webpack.config.js +++ b/extensions/html-language-features/server/extension.webpack.config.js @@ -2,22 +2,18 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check +import withDefaults from '../../shared.webpack.config.mjs'; +import path from 'path'; -//@ts-check - -'use strict'; - -const withDefaults = require('../../shared.webpack.config'); -const path = require('path'); - -module.exports = withDefaults({ - context: path.join(__dirname), +export default withDefaults({ + context: path.join(import.meta.dirname), entry: { extension: './src/node/htmlServerNodeMain.ts', }, output: { filename: 'htmlServerMain.js', - path: path.join(__dirname, 'dist', 'node'), + path: path.join(import.meta.dirname, 'dist', 'node'), }, externals: { 'typescript': 'commonjs typescript' diff --git a/extensions/ipynb/extension-browser.webpack.config.js b/extensions/ipynb/extension-browser.webpack.config.js index 32fc7de8ee482..08a0edc8ad03e 100644 --- a/extensions/ipynb/extension-browser.webpack.config.js +++ b/extensions/ipynb/extension-browser.webpack.config.js @@ -2,37 +2,33 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ - -//@ts-check - -'use strict'; - -const withBrowserDefaults = require('../shared.webpack.config').browser; -const path = require('path'); +// @ts-check +import { browser as withBrowserDefaults } from '../shared.webpack.config.mjs'; +import path from 'path'; const mainConfig = withBrowserDefaults({ - context: __dirname, + context: import.meta.dirname, entry: { extension: './src/ipynbMain.browser.ts' }, output: { filename: 'ipynbMain.browser.js', - path: path.join(__dirname, 'dist', 'browser') + path: path.join(import.meta.dirname, 'dist', 'browser') } }); const workerConfig = withBrowserDefaults({ - context: __dirname, + context: import.meta.dirname, entry: { notebookSerializerWorker: './src/notebookSerializerWorker.web.ts', }, output: { filename: 'notebookSerializerWorker.js', - path: path.join(__dirname, 'dist', 'browser'), + path: path.join(import.meta.dirname, 'dist', 'browser'), libraryTarget: 'var', library: 'serverExportVar' }, }); -module.exports = [mainConfig, workerConfig]; +export default [mainConfig, workerConfig]; diff --git a/extensions/ipynb/extension.webpack.config.js b/extensions/ipynb/extension.webpack.config.js index aad5f55845a96..2bfea01dd914f 100644 --- a/extensions/ipynb/extension.webpack.config.js +++ b/extensions/ipynb/extension.webpack.config.js @@ -2,25 +2,21 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check +import withDefaults, { nodePlugins } from '../shared.webpack.config.mjs'; +import path from 'path'; -//@ts-check - -'use strict'; - -const withDefaults = require('../shared.webpack.config'); -const path = require('path'); - -module.exports = withDefaults({ - context: __dirname, +export default withDefaults({ + context: import.meta.dirname, entry: { ['ipynbMain.node']: './src/ipynbMain.node.ts', notebookSerializerWorker: './src/notebookSerializerWorker.ts', }, output: { - path: path.resolve(__dirname, 'dist'), + path: path.resolve(import.meta.dirname, 'dist'), filename: '[name].js' }, plugins: [ - ...withDefaults.nodePlugins(__dirname), // add plugins, don't replace inherited + ...nodePlugins(import.meta.dirname), // add plugins, don't replace inherited ] }); diff --git a/extensions/jake/extension.webpack.config.js b/extensions/jake/extension.webpack.config.js index beee7b3d6762e..1e221c2fa8500 100644 --- a/extensions/jake/extension.webpack.config.js +++ b/extensions/jake/extension.webpack.config.js @@ -2,15 +2,11 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check +import withDefaults from '../shared.webpack.config.mjs'; -//@ts-check - -'use strict'; - -const withDefaults = require('../shared.webpack.config'); - -module.exports = withDefaults({ - context: __dirname, +export default withDefaults({ + context: import.meta.dirname, entry: { main: './src/main.ts', }, diff --git a/extensions/json-language-features/extension-browser.webpack.config.js b/extensions/json-language-features/extension-browser.webpack.config.js index 900ef6a3b1243..30ddd34eb32c4 100644 --- a/extensions/json-language-features/extension-browser.webpack.config.js +++ b/extensions/json-language-features/extension-browser.webpack.config.js @@ -2,22 +2,18 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check +import { browser as withBrowserDefaults } from '../shared.webpack.config.mjs'; +import path from 'path'; -//@ts-check - -'use strict'; - -const withBrowserDefaults = require('../shared.webpack.config').browser; -const path = require('path'); - -module.exports = withBrowserDefaults({ +export default withBrowserDefaults({ target: 'webworker', - context: path.join(__dirname, 'client'), + context: path.join(import.meta.dirname, 'client'), entry: { extension: './src/browser/jsonClientMain.ts' }, output: { filename: 'jsonClientMain.js', - path: path.join(__dirname, 'client', 'dist', 'browser') + path: path.join(import.meta.dirname, 'client', 'dist', 'browser') } }); diff --git a/extensions/json-language-features/extension.webpack.config.js b/extensions/json-language-features/extension.webpack.config.js index 20b8550c447ff..afc9a5b6d18a2 100644 --- a/extensions/json-language-features/extension.webpack.config.js +++ b/extensions/json-language-features/extension.webpack.config.js @@ -2,24 +2,20 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ - -//@ts-check - -'use strict'; - -const withDefaults = require('../shared.webpack.config'); -const path = require('path'); +// @ts-check +import withDefaults from '../shared.webpack.config.mjs'; +import path from 'path'; const config = withDefaults({ - context: path.join(__dirname, 'client'), + context: path.join(import.meta.dirname, 'client'), entry: { extension: './src/node/jsonClientMain.ts' }, output: { filename: 'jsonClientMain.js', - path: path.join(__dirname, 'client', 'dist', 'node') + path: path.join(import.meta.dirname, 'client', 'dist', 'node') } }); -module.exports = config; +export default config; diff --git a/extensions/json-language-features/server/extension-browser.webpack.config.js b/extensions/json-language-features/server/extension-browser.webpack.config.js index 31c3b9b4316dd..8b967a3de7183 100644 --- a/extensions/json-language-features/server/extension-browser.webpack.config.js +++ b/extensions/json-language-features/server/extension-browser.webpack.config.js @@ -2,22 +2,18 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check +import { browser as withBrowserDefaults } from '../../shared.webpack.config.mjs'; +import path from 'path'; -//@ts-check - -'use strict'; - -const withBrowserDefaults = require('../../shared.webpack.config').browser; -const path = require('path'); - -module.exports = withBrowserDefaults({ - context: __dirname, +export default withBrowserDefaults({ + context: import.meta.dirname, entry: { extension: './src/browser/jsonServerWorkerMain.ts', }, output: { filename: 'jsonServerMain.js', - path: path.join(__dirname, 'dist', 'browser'), + path: path.join(import.meta.dirname, 'dist', 'browser'), libraryTarget: 'var', library: 'serverExportVar' } diff --git a/extensions/json-language-features/server/extension.webpack.config.js b/extensions/json-language-features/server/extension.webpack.config.js index cda72a264d257..1880c1e7b827a 100644 --- a/extensions/json-language-features/server/extension.webpack.config.js +++ b/extensions/json-language-features/server/extension.webpack.config.js @@ -2,23 +2,19 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ - -//@ts-check - -'use strict'; - -const withDefaults = require('../../shared.webpack.config'); -const path = require('path'); +// @ts-check +import withDefaults from '../../shared.webpack.config.mjs'; +import path from 'path'; const config = withDefaults({ - context: path.join(__dirname), + context: path.join(import.meta.dirname), entry: { extension: './src/node/jsonServerNodeMain.ts', }, output: { filename: 'jsonServerMain.js', - path: path.join(__dirname, 'dist', 'node'), + path: path.join(import.meta.dirname, 'dist', 'node'), } }); -module.exports = config; +export default config; diff --git a/extensions/markdown-language-features/extension-browser.webpack.config.js b/extensions/markdown-language-features/extension-browser.webpack.config.js index 47f50aa5e8f8e..5471319a4c48e 100644 --- a/extensions/markdown-language-features/extension-browser.webpack.config.js +++ b/extensions/markdown-language-features/extension-browser.webpack.config.js @@ -2,21 +2,17 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check +import CopyPlugin from 'copy-webpack-plugin'; +import { browser, browserPlugins } from '../shared.webpack.config.mjs'; -//@ts-check - -'use strict'; - -const CopyPlugin = require('copy-webpack-plugin'); -const { browserPlugins, browser } = require('../shared.webpack.config'); - -module.exports = browser({ - context: __dirname, +export default browser({ + context: import.meta.dirname, entry: { extension: './src/extension.browser.ts' }, plugins: [ - ...browserPlugins(__dirname), // add plugins, don't replace inherited + ...browserPlugins(import.meta.dirname), // add plugins, don't replace inherited new CopyPlugin({ patterns: [ { diff --git a/extensions/markdown-language-features/extension.webpack.config.js b/extensions/markdown-language-features/extension.webpack.config.js index 588d0632fd21b..51c9912f9afe0 100644 --- a/extensions/markdown-language-features/extension.webpack.config.js +++ b/extensions/markdown-language-features/extension.webpack.config.js @@ -2,16 +2,12 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check +import CopyPlugin from 'copy-webpack-plugin'; +import withDefaults, { nodePlugins } from '../shared.webpack.config.mjs'; -//@ts-check - -'use strict'; - -const CopyPlugin = require('copy-webpack-plugin'); -const withDefaults = require('../shared.webpack.config'); - -module.exports = withDefaults({ - context: __dirname, +export default withDefaults({ + context: import.meta.dirname, resolve: { mainFields: ['module', 'main'] }, @@ -19,7 +15,7 @@ module.exports = withDefaults({ extension: './src/extension.ts', }, plugins: [ - ...withDefaults.nodePlugins(__dirname), // add plugins, don't replace inherited + ...nodePlugins(import.meta.dirname), // add plugins, don't replace inherited new CopyPlugin({ patterns: [ { diff --git a/extensions/markdown-math/extension-browser.webpack.config.js b/extensions/markdown-math/extension-browser.webpack.config.js index 7fcc53a728b4f..b758f2d8155a3 100644 --- a/extensions/markdown-math/extension-browser.webpack.config.js +++ b/extensions/markdown-math/extension-browser.webpack.config.js @@ -2,15 +2,11 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check +import { browser as withBrowserDefaults } from '../shared.webpack.config.mjs'; -//@ts-check - -'use strict'; - -const withBrowserDefaults = require('../shared.webpack.config').browser; - -module.exports = withBrowserDefaults({ - context: __dirname, +export default withBrowserDefaults({ + context: import.meta.dirname, entry: { extension: './src/extension.ts' } diff --git a/extensions/markdown-math/extension.webpack.config.js b/extensions/markdown-math/extension.webpack.config.js index de88398eca0d3..4928186ae556c 100644 --- a/extensions/markdown-math/extension.webpack.config.js +++ b/extensions/markdown-math/extension.webpack.config.js @@ -2,15 +2,11 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check +import withDefaults from '../shared.webpack.config.mjs'; -//@ts-check - -'use strict'; - -const withDefaults = require('../shared.webpack.config'); - -module.exports = withDefaults({ - context: __dirname, +export default withDefaults({ + context: import.meta.dirname, resolve: { mainFields: ['module', 'main'] }, diff --git a/extensions/media-preview/extension-browser.webpack.config.js b/extensions/media-preview/extension-browser.webpack.config.js index 9a1bb4d3c8e8c..6c86474b4e52f 100644 --- a/extensions/media-preview/extension-browser.webpack.config.js +++ b/extensions/media-preview/extension-browser.webpack.config.js @@ -2,15 +2,11 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check +import { browser as withBrowserDefaults } from '../shared.webpack.config.mjs'; -//@ts-check - -'use strict'; - -const withBrowserDefaults = require('../shared.webpack.config').browser; - -module.exports = withBrowserDefaults({ - context: __dirname, +export default withBrowserDefaults({ + context: import.meta.dirname, entry: { extension: './src/extension.ts' }, diff --git a/extensions/media-preview/extension.webpack.config.js b/extensions/media-preview/extension.webpack.config.js index de88398eca0d3..4928186ae556c 100644 --- a/extensions/media-preview/extension.webpack.config.js +++ b/extensions/media-preview/extension.webpack.config.js @@ -2,15 +2,11 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check +import withDefaults from '../shared.webpack.config.mjs'; -//@ts-check - -'use strict'; - -const withDefaults = require('../shared.webpack.config'); - -module.exports = withDefaults({ - context: __dirname, +export default withDefaults({ + context: import.meta.dirname, resolve: { mainFields: ['module', 'main'] }, diff --git a/extensions/merge-conflict/extension-browser.webpack.config.js b/extensions/merge-conflict/extension-browser.webpack.config.js index e4171bed927ea..7054f22b86803 100644 --- a/extensions/merge-conflict/extension-browser.webpack.config.js +++ b/extensions/merge-conflict/extension-browser.webpack.config.js @@ -2,15 +2,11 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check +import { browser as withBrowserDefaults } from '../shared.webpack.config.mjs'; -//@ts-check - -'use strict'; - -const withBrowserDefaults = require('../shared.webpack.config').browser; - -module.exports = withBrowserDefaults({ - context: __dirname, +export default withBrowserDefaults({ + context: import.meta.dirname, entry: { extension: './src/mergeConflictMain.ts' }, diff --git a/extensions/merge-conflict/extension.webpack.config.js b/extensions/merge-conflict/extension.webpack.config.js index 7a04ca98e973b..c927dcaf3719e 100644 --- a/extensions/merge-conflict/extension.webpack.config.js +++ b/extensions/merge-conflict/extension.webpack.config.js @@ -2,15 +2,11 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check +import withDefaults from '../shared.webpack.config.mjs'; -//@ts-check - -'use strict'; - -const withDefaults = require('../shared.webpack.config'); - -module.exports = withDefaults({ - context: __dirname, +export default withDefaults({ + context: import.meta.dirname, entry: { extension: './src/mergeConflictMain.ts' }, diff --git a/extensions/microsoft-authentication/extension-browser.webpack.config.js b/extensions/microsoft-authentication/extension-browser.webpack.config.js index 1590cef5e5f12..daf3fdf8447ba 100644 --- a/extensions/microsoft-authentication/extension-browser.webpack.config.js +++ b/extensions/microsoft-authentication/extension-browser.webpack.config.js @@ -2,16 +2,12 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check +import path from 'path'; +import { browser as withBrowserDefaults } from '../shared.webpack.config.mjs'; -//@ts-check - -'use strict'; - -const path = require('path'); -const withBrowserDefaults = require('../shared.webpack.config').browser; - -module.exports = withBrowserDefaults({ - context: __dirname, +export default withBrowserDefaults({ + context: import.meta.dirname, node: { global: true, __filename: false, @@ -22,10 +18,10 @@ module.exports = withBrowserDefaults({ }, resolve: { alias: { - './node/authServer': path.resolve(__dirname, 'src/browser/authServer'), - './node/buffer': path.resolve(__dirname, 'src/browser/buffer'), - './node/fetch': path.resolve(__dirname, 'src/browser/fetch'), - './node/authProvider': path.resolve(__dirname, 'src/browser/authProvider'), + './node/authServer': path.resolve(import.meta.dirname, 'src/browser/authServer'), + './node/buffer': path.resolve(import.meta.dirname, 'src/browser/buffer'), + './node/fetch': path.resolve(import.meta.dirname, 'src/browser/fetch'), + './node/authProvider': path.resolve(import.meta.dirname, 'src/browser/authProvider'), } } }); diff --git a/extensions/microsoft-authentication/extension.webpack.config.js b/extensions/microsoft-authentication/extension.webpack.config.js index 395c011b1dba1..78a8f9935c017 100644 --- a/extensions/microsoft-authentication/extension.webpack.config.js +++ b/extensions/microsoft-authentication/extension.webpack.config.js @@ -2,19 +2,15 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ - -//@ts-check - -'use strict'; - -const withDefaults = require('../shared.webpack.config'); -const CopyWebpackPlugin = require('copy-webpack-plugin'); -const path = require('path'); +// @ts-check +import withDefaults, { nodePlugins } from '../shared.webpack.config.mjs'; +import CopyWebpackPlugin from 'copy-webpack-plugin'; +import path from 'path'; const isWindows = process.platform === 'win32'; -module.exports = withDefaults({ - context: __dirname, +export default withDefaults({ + context: import.meta.dirname, entry: { extension: './src/extension.ts' }, @@ -26,11 +22,11 @@ module.exports = withDefaults({ }, resolve: { alias: { - 'keytar': path.resolve(__dirname, 'packageMocks', 'keytar', 'index.js') + 'keytar': path.resolve(import.meta.dirname, 'packageMocks', 'keytar', 'index.js') } }, plugins: [ - ...withDefaults.nodePlugins(__dirname), + ...nodePlugins(import.meta.dirname), new CopyWebpackPlugin({ patterns: [ { diff --git a/extensions/npm/extension-browser.webpack.config.js b/extensions/npm/extension-browser.webpack.config.js index ec1313ebf260d..6ec242a87a221 100644 --- a/extensions/npm/extension-browser.webpack.config.js +++ b/extensions/npm/extension-browser.webpack.config.js @@ -2,15 +2,11 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ - -//@ts-check - -'use strict'; - -const withBrowserDefaults = require('../shared.webpack.config').browser; +// @ts-check +import { browser as withBrowserDefaults } from '../shared.webpack.config.mjs'; const config = withBrowserDefaults({ - context: __dirname, + context: import.meta.dirname, entry: { extension: './src/npmBrowserMain.ts' }, @@ -24,4 +20,4 @@ const config = withBrowserDefaults({ } }); -module.exports = config; +export default config; diff --git a/extensions/npm/extension.webpack.config.js b/extensions/npm/extension.webpack.config.js index 320956abe3d09..0dcad6f8b143f 100644 --- a/extensions/npm/extension.webpack.config.js +++ b/extensions/npm/extension.webpack.config.js @@ -2,15 +2,11 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check +import withDefaults from '../shared.webpack.config.mjs'; -//@ts-check - -'use strict'; - -const withDefaults = require('../shared.webpack.config'); - -module.exports = withDefaults({ - context: __dirname, +export default withDefaults({ + context: import.meta.dirname, entry: { extension: './src/npmMain.ts', }, diff --git a/extensions/php-language-features/extension.webpack.config.js b/extensions/php-language-features/extension.webpack.config.js index a44fc8e56be85..81e71e442ec5a 100644 --- a/extensions/php-language-features/extension.webpack.config.js +++ b/extensions/php-language-features/extension.webpack.config.js @@ -2,15 +2,11 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check +import withDefaults from '../shared.webpack.config.mjs'; -//@ts-check - -'use strict'; - -const withDefaults = require('../shared.webpack.config'); - -module.exports = withDefaults({ - context: __dirname, +export default withDefaults({ + context: import.meta.dirname, entry: { extension: './src/phpMain.ts', }, diff --git a/extensions/references-view/extension-browser.webpack.config.js b/extensions/references-view/extension-browser.webpack.config.js index 10c0a19e356c8..1e0caad7e7297 100644 --- a/extensions/references-view/extension-browser.webpack.config.js +++ b/extensions/references-view/extension-browser.webpack.config.js @@ -2,21 +2,17 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check +import { browser as withBrowserDefaults } from '../shared.webpack.config.mjs'; +import path from 'path'; -//@ts-check - -'use strict'; - -const withBrowserDefaults = require('../shared.webpack.config').browser; -const path = require('path'); - -module.exports = withBrowserDefaults({ - context: __dirname, +export default withBrowserDefaults({ + context: import.meta.dirname, entry: { extension: './src/extension.ts' }, output: { filename: 'extension.js', - path: path.join(__dirname, 'dist') + path: path.join(import.meta.dirname, 'dist') } }); diff --git a/extensions/references-view/extension.webpack.config.js b/extensions/references-view/extension.webpack.config.js index de88398eca0d3..4928186ae556c 100644 --- a/extensions/references-view/extension.webpack.config.js +++ b/extensions/references-view/extension.webpack.config.js @@ -2,15 +2,11 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check +import withDefaults from '../shared.webpack.config.mjs'; -//@ts-check - -'use strict'; - -const withDefaults = require('../shared.webpack.config'); - -module.exports = withDefaults({ - context: __dirname, +export default withDefaults({ + context: import.meta.dirname, resolve: { mainFields: ['module', 'main'] }, diff --git a/extensions/search-result/extension-browser.webpack.config.js b/extensions/search-result/extension-browser.webpack.config.js index 10c0a19e356c8..1e0caad7e7297 100644 --- a/extensions/search-result/extension-browser.webpack.config.js +++ b/extensions/search-result/extension-browser.webpack.config.js @@ -2,21 +2,17 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check +import { browser as withBrowserDefaults } from '../shared.webpack.config.mjs'; +import path from 'path'; -//@ts-check - -'use strict'; - -const withBrowserDefaults = require('../shared.webpack.config').browser; -const path = require('path'); - -module.exports = withBrowserDefaults({ - context: __dirname, +export default withBrowserDefaults({ + context: import.meta.dirname, entry: { extension: './src/extension.ts' }, output: { filename: 'extension.js', - path: path.join(__dirname, 'dist') + path: path.join(import.meta.dirname, 'dist') } }); diff --git a/extensions/search-result/extension.webpack.config.js b/extensions/search-result/extension.webpack.config.js index de88398eca0d3..4928186ae556c 100644 --- a/extensions/search-result/extension.webpack.config.js +++ b/extensions/search-result/extension.webpack.config.js @@ -2,15 +2,11 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check +import withDefaults from '../shared.webpack.config.mjs'; -//@ts-check - -'use strict'; - -const withDefaults = require('../shared.webpack.config'); - -module.exports = withDefaults({ - context: __dirname, +export default withDefaults({ + context: import.meta.dirname, resolve: { mainFields: ['module', 'main'] }, diff --git a/extensions/shared.webpack.config.js b/extensions/shared.webpack.config.mjs similarity index 89% rename from extensions/shared.webpack.config.js rename to extensions/shared.webpack.config.mjs index 097234e24b281..f54499dc2272c 100644 --- a/extensions/shared.webpack.config.js +++ b/extensions/shared.webpack.config.mjs @@ -2,17 +2,17 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check +import path from 'node:path'; +import fs from 'node:fs'; +import merge from 'merge-options'; +import CopyWebpackPlugin from 'copy-webpack-plugin'; +import webpack from 'webpack'; +import { createRequire } from 'node:module'; -//@ts-check /** @typedef {import('webpack').Configuration} WebpackConfig **/ -'use strict'; - -const path = require('path'); -const fs = require('fs'); -const merge = require('merge-options'); -const CopyWebpackPlugin = require('copy-webpack-plugin'); -const { DefinePlugin, optimize } = require('webpack'); +const require = createRequire(import.meta.url); const tsLoaderOptions = { compilerOptions: { @@ -48,7 +48,7 @@ function withNodeDefaults(/**@type WebpackConfig & { context: string }*/extConfi loader: 'ts-loader', options: tsLoaderOptions }, { - loader: path.resolve(__dirname, 'mangle-loader.js'), + loader: path.resolve(import.meta.dirname, 'mangle-loader.js'), options: { configFile: path.join(extConfig.context, 'tsconfig.json') }, @@ -85,8 +85,8 @@ function withNodeDefaults(/**@type WebpackConfig & { context: string }*/extConfi */ function nodePlugins(context) { // Need to find the top-most `package.json` file - const folderName = path.relative(__dirname, context).split(/[\\\/]/)[0]; - const pkgPath = path.join(__dirname, folderName, 'package.json'); + const folderName = path.relative(import.meta.dirname, context).split(/[\\\/]/)[0]; + const pkgPath = path.join(import.meta.dirname, folderName, 'package.json'); const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8')); const id = `${pkg.publisher}.${pkg.name}`; return [ @@ -136,7 +136,7 @@ function withBrowserDefaults(/**@type WebpackConfig & { context: string }*/extCo } }, { - loader: path.resolve(__dirname, 'mangle-loader.js'), + loader: path.resolve(import.meta.dirname, 'mangle-loader.js'), options: { configFile: path.join(extConfig.context, additionalOptions?.configFile ?? 'tsconfig.json') }, @@ -184,7 +184,7 @@ function browserPlugins(context) { // const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8')); // const id = `${pkg.publisher}.${pkg.name}`; return [ - new optimize.LimitChunkCountPlugin({ + new webpack.optimize.LimitChunkCountPlugin({ maxChunks: 1 }), new CopyWebpackPlugin({ @@ -192,7 +192,7 @@ function browserPlugins(context) { { from: 'src', to: '.', globOptions: { ignore: ['**/test/**', '**/*.ts'] }, noErrorOnMissing: true } ] }), - new DefinePlugin({ + new webpack.DefinePlugin({ 'process.platform': JSON.stringify('web'), 'process.env': JSON.stringify({}), 'process.env.BROWSER_ENV': JSON.stringify('true') @@ -200,8 +200,5 @@ function browserPlugins(context) { ]; } -module.exports = withNodeDefaults; -module.exports.node = withNodeDefaults; -module.exports.browser = withBrowserDefaults; -module.exports.nodePlugins = nodePlugins; -module.exports.browserPlugins = browserPlugins; +export default withNodeDefaults; +export { withNodeDefaults as node, withBrowserDefaults as browser, nodePlugins, browserPlugins }; diff --git a/extensions/simple-browser/extension-browser.webpack.config.js b/extensions/simple-browser/extension-browser.webpack.config.js index 7fcc53a728b4f..b758f2d8155a3 100644 --- a/extensions/simple-browser/extension-browser.webpack.config.js +++ b/extensions/simple-browser/extension-browser.webpack.config.js @@ -2,15 +2,11 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check +import { browser as withBrowserDefaults } from '../shared.webpack.config.mjs'; -//@ts-check - -'use strict'; - -const withBrowserDefaults = require('../shared.webpack.config').browser; - -module.exports = withBrowserDefaults({ - context: __dirname, +export default withBrowserDefaults({ + context: import.meta.dirname, entry: { extension: './src/extension.ts' } diff --git a/extensions/simple-browser/extension.webpack.config.js b/extensions/simple-browser/extension.webpack.config.js index de88398eca0d3..4928186ae556c 100644 --- a/extensions/simple-browser/extension.webpack.config.js +++ b/extensions/simple-browser/extension.webpack.config.js @@ -2,15 +2,11 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check +import withDefaults from '../shared.webpack.config.mjs'; -//@ts-check - -'use strict'; - -const withDefaults = require('../shared.webpack.config'); - -module.exports = withDefaults({ - context: __dirname, +export default withDefaults({ + context: import.meta.dirname, resolve: { mainFields: ['module', 'main'] }, diff --git a/extensions/terminal-suggest/extension.webpack.config.js b/extensions/terminal-suggest/extension.webpack.config.js index 89f3ea28d8747..8ac2b3abb22d2 100644 --- a/extensions/terminal-suggest/extension.webpack.config.js +++ b/extensions/terminal-suggest/extension.webpack.config.js @@ -2,14 +2,11 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check +import withDefaults from '../shared.webpack.config.mjs'; -//@ts-check -'use strict'; - -const withDefaults = require('../shared.webpack.config'); - -module.exports = withDefaults({ - context: __dirname, +export default withDefaults({ + context: import.meta.dirname, entry: { extension: './src/terminalSuggestMain.ts' }, diff --git a/extensions/tunnel-forwarding/extension.webpack.config.js b/extensions/tunnel-forwarding/extension.webpack.config.js index b474e65cbb130..0c857b362f5da 100644 --- a/extensions/tunnel-forwarding/extension.webpack.config.js +++ b/extensions/tunnel-forwarding/extension.webpack.config.js @@ -2,15 +2,11 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check +import withDefaults from '../shared.webpack.config.mjs'; -//@ts-check - -'use strict'; - -const withDefaults = require('../shared.webpack.config'); - -module.exports = withDefaults({ - context: __dirname, +export default withDefaults({ + context: import.meta.dirname, entry: { extension: './src/extension.ts', }, diff --git a/extensions/typescript-language-features/extension-browser.webpack.config.js b/extensions/typescript-language-features/extension-browser.webpack.config.js index 8c44bfc9713e9..86733dfd1ee30 100644 --- a/extensions/typescript-language-features/extension-browser.webpack.config.js +++ b/extensions/typescript-language-features/extension-browser.webpack.config.js @@ -2,16 +2,10 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ - -//@ts-check - -'use strict'; -const CopyPlugin = require('copy-webpack-plugin'); -const path = require('path'); - -const defaultConfig = require('../shared.webpack.config'); -const withBrowserDefaults = defaultConfig.browser; -const browserPlugins = defaultConfig.browserPlugins; +// @ts-check +import CopyPlugin from 'copy-webpack-plugin'; +import path from 'path'; +import defaultConfig, { browser as withBrowserDefaults, browserPlugins } from '../shared.webpack.config.mjs'; const languages = [ 'zh-tw', @@ -28,13 +22,13 @@ const languages = [ 'tr', 'zh-cn', ]; -module.exports = [withBrowserDefaults({ - context: __dirname, +export default [withBrowserDefaults({ + context: import.meta.dirname, entry: { extension: './src/extension.browser.ts', }, plugins: [ - ...browserPlugins(__dirname), // add plugins, don't replace inherited + ...browserPlugins(import.meta.dirname), // add plugins, don't replace inherited // @ts-ignore new CopyPlugin({ @@ -63,7 +57,7 @@ module.exports = [withBrowserDefaults({ }), ], }), withBrowserDefaults({ - context: __dirname, + context: import.meta.dirname, entry: { 'typescript/tsserver.web': './web/src/webServer.ts' }, @@ -75,7 +69,7 @@ module.exports = [withBrowserDefaults({ // all output goes into `dist`. // packaging depends on that and this must always be like it filename: '[name].js', - path: path.join(__dirname, 'dist', 'browser'), + path: path.join(import.meta.dirname, 'dist', 'browser'), libraryTarget: undefined, }, externals: { diff --git a/extensions/typescript-language-features/extension.webpack.config.js b/extensions/typescript-language-features/extension.webpack.config.js index de88398eca0d3..4928186ae556c 100644 --- a/extensions/typescript-language-features/extension.webpack.config.js +++ b/extensions/typescript-language-features/extension.webpack.config.js @@ -2,15 +2,11 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check +import withDefaults from '../shared.webpack.config.mjs'; -//@ts-check - -'use strict'; - -const withDefaults = require('../shared.webpack.config'); - -module.exports = withDefaults({ - context: __dirname, +export default withDefaults({ + context: import.meta.dirname, resolve: { mainFields: ['module', 'main'] }, diff --git a/extensions/vscode-test-resolver/extension-browser.webpack.config.js b/extensions/vscode-test-resolver/extension-browser.webpack.config.js index ff7972a1aee6e..9aeb636997b86 100644 --- a/extensions/vscode-test-resolver/extension-browser.webpack.config.js +++ b/extensions/vscode-test-resolver/extension-browser.webpack.config.js @@ -2,15 +2,11 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +// @ts-check +import { browser as withBrowserDefaults } from '../shared.webpack.config.mjs'; -//@ts-check - -'use strict'; - -const withBrowserDefaults = require('../shared.webpack.config').browser; - -module.exports = withBrowserDefaults({ - context: __dirname, +export default withBrowserDefaults({ + context: import.meta.dirname, entry: { extension: './src/extension.browser.ts' }, From bad96b4abbe6eaa04957e353d0a264668cf548ee Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Thu, 7 Aug 2025 19:40:47 -0700 Subject: [PATCH 0122/2080] Also update desktop webpack gulp --- build/lib/extensions.js | 4 ++-- build/lib/extensions.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/build/lib/extensions.js b/build/lib/extensions.js index 0db1d1d2d4b70..eb73cc9f8830f 100644 --- a/build/lib/extensions.js +++ b/build/lib/extensions.js @@ -133,7 +133,7 @@ function fromLocalWebpack(extensionPath, webpackConfigFileName, disableMangle) { const packagedDependencies = []; const packageJsonConfig = require(path_1.default.join(extensionPath, 'package.json')); if (packageJsonConfig.dependencies) { - const webpackRootConfig = require(path_1.default.join(extensionPath, webpackConfigFileName)); + const webpackRootConfig = require(path_1.default.join(extensionPath, webpackConfigFileName)).default; for (const key in webpackRootConfig.externals) { if (key in packageJsonConfig.dependencies) { packagedDependencies.push(key); @@ -171,7 +171,7 @@ function fromLocalWebpack(extensionPath, webpackConfigFileName, disableMangle) { result.emit('error', compilation.warnings.join('\n')); } }; - const exportedConfig = require(webpackConfigPath); + const exportedConfig = require(webpackConfigPath).default; return (Array.isArray(exportedConfig) ? exportedConfig : [exportedConfig]).map(config => { const webpackConfig = { ...config, diff --git a/build/lib/extensions.ts b/build/lib/extensions.ts index 80eaec1b8b9ef..50255d874d817 100644 --- a/build/lib/extensions.ts +++ b/build/lib/extensions.ts @@ -99,7 +99,7 @@ function fromLocalWebpack(extensionPath: string, webpackConfigFileName: string, const packagedDependencies: string[] = []; const packageJsonConfig = require(path.join(extensionPath, 'package.json')); if (packageJsonConfig.dependencies) { - const webpackRootConfig = require(path.join(extensionPath, webpackConfigFileName)); + const webpackRootConfig = require(path.join(extensionPath, webpackConfigFileName)).default; for (const key in webpackRootConfig.externals) { if (key in packageJsonConfig.dependencies) { packagedDependencies.push(key); @@ -145,7 +145,7 @@ function fromLocalWebpack(extensionPath: string, webpackConfigFileName: string, } }; - const exportedConfig = require(webpackConfigPath); + const exportedConfig = require(webpackConfigPath).default; return (Array.isArray(exportedConfig) ? exportedConfig : [exportedConfig]).map(config => { const webpackConfig = { ...config, From f272e51947457c5bda28d2ebf658d6b8b61a663e Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Thu, 7 Aug 2025 20:04:44 -0700 Subject: [PATCH 0123/2080] Convert esbuild scripts to modules Planning to convert to typescript but want to do it in a few smaller steps --- eslint.config.js | 3 +-- extensions/esbuild-webview-common.js | 13 +++++-------- extensions/ipynb/{esbuild.js => esbuild.mjs} | 12 ++++++------ extensions/ipynb/package.json | 2 +- .../esbuild-notebook.mjs} | 9 +++++---- .../{esbuild-preview.js => esbuild-preview.mjs} | 9 +++++---- .../markdown-language-features/package.json | 6 +++--- .../markdown-math/{esbuild.js => esbuild.mjs} | 15 ++++++++------- extensions/markdown-math/package.json | 2 +- .../esbuild.mjs} | 9 +++++---- extensions/notebook-renderers/package.json | 2 +- extensions/package.json | 1 + .../{esbuild-preview.js => esbuild-preview.mjs} | 11 ++++++----- extensions/simple-browser/package.json | 2 +- 14 files changed, 49 insertions(+), 47 deletions(-) rename extensions/ipynb/{esbuild.js => esbuild.mjs} (67%) rename extensions/{notebook-renderers/esbuild.js => markdown-language-features/esbuild-notebook.mjs} (69%) rename extensions/markdown-language-features/{esbuild-preview.js => esbuild-preview.mjs} (70%) rename extensions/markdown-math/{esbuild.js => esbuild.mjs} (67%) rename extensions/{markdown-language-features/esbuild-notebook.js => notebook-renderers/esbuild.mjs} (69%) rename extensions/simple-browser/{esbuild-preview.js => esbuild-preview.mjs} (63%) diff --git a/eslint.config.js b/eslint.config.js index b1e83f734e8bb..b3c8970f03411 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -15,8 +15,7 @@ import pluginJsdoc from 'eslint-plugin-jsdoc'; import pluginHeader from 'eslint-plugin-header'; pluginHeader.rules.header.meta.schema = false; -const __dirname = path.dirname(fileURLToPath(import.meta.url)); -const ignores = fs.readFileSync(path.join(__dirname, '.eslint-ignore'), 'utf8') +const ignores = fs.readFileSync(path.join(import.meta.dirname, '.eslint-ignore'), 'utf8') .toString() .split(/\r\n|\n/) .filter(line => line && !line.startsWith('#')); diff --git a/extensions/esbuild-webview-common.js b/extensions/esbuild-webview-common.js index 12cd1c58875d3..76d03abad7dfe 100644 --- a/extensions/esbuild-webview-common.js +++ b/extensions/esbuild-webview-common.js @@ -3,13 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ // @ts-check - /** * @fileoverview Common build script for extension scripts used in in webviews. */ - -const path = require('path'); -const esbuild = require('esbuild'); +import path from 'node:path'; +import esbuild from 'esbuild'; /** * @typedef {Partial & { @@ -62,7 +60,7 @@ async function tryBuild(options, didBuild) { * @param {string[]} args * @param {(outDir: string) => unknown} [didBuild] */ -module.exports.run = async function (config, args, didBuild) { +export async function run(config, args, didBuild) { let outdir = config.outdir; const outputRootIndex = args.indexOf('--outputRoot'); if (outputRootIndex >= 0) { @@ -84,10 +82,9 @@ module.exports.run = async function (config, args, didBuild) { const isWatch = args.indexOf('--watch') >= 0; if (isWatch) { await tryBuild(resolvedOptions, didBuild); - - const watcher = require('@parcel/watcher'); + const watcher = await import('@parcel/watcher'); watcher.subscribe(config.srcDir, () => tryBuild(resolvedOptions, didBuild)); } else { return build(resolvedOptions, didBuild).catch(() => process.exit(1)); } -}; +} diff --git a/extensions/ipynb/esbuild.js b/extensions/ipynb/esbuild.mjs similarity index 67% rename from extensions/ipynb/esbuild.js rename to extensions/ipynb/esbuild.mjs index 64b58109fecc7..e7e270c826509 100644 --- a/extensions/ipynb/esbuild.js +++ b/extensions/ipynb/esbuild.mjs @@ -2,14 +2,14 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -//@ts-check +// @ts-check +import path from 'node:path'; +import { run } from '../esbuild-webview-common.js'; -const path = require('path'); +const srcDir = path.join(import.meta.dirname, 'notebook-src'); +const outDir = path.join(import.meta.dirname, 'notebook-out'); -const srcDir = path.join(__dirname, 'notebook-src'); -const outDir = path.join(__dirname, 'notebook-out'); - -require('../esbuild-webview-common').run({ +run({ entryPoints: [ path.join(srcDir, 'cellAttachmentRenderer.ts'), ], diff --git a/extensions/ipynb/package.json b/extensions/ipynb/package.json index beb65118eb775..69f458bc7d479 100644 --- a/extensions/ipynb/package.json +++ b/extensions/ipynb/package.json @@ -158,7 +158,7 @@ "scripts": { "compile": "npx gulp compile-extension:ipynb && npm run build-notebook", "watch": "npx gulp watch-extension:ipynb", - "build-notebook": "node ./esbuild" + "build-notebook": "node ./esbuild.mjs" }, "dependencies": { "@enonic/fnv-plus": "^1.3.0", diff --git a/extensions/notebook-renderers/esbuild.js b/extensions/markdown-language-features/esbuild-notebook.mjs similarity index 69% rename from extensions/notebook-renderers/esbuild.js rename to extensions/markdown-language-features/esbuild-notebook.mjs index 55d462f8bc37c..837673ad32246 100644 --- a/extensions/notebook-renderers/esbuild.js +++ b/extensions/markdown-language-features/esbuild-notebook.mjs @@ -3,12 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ // @ts-check -const path = require('path'); +import path from 'path'; +import { run } from '../esbuild-webview-common.js'; -const srcDir = path.join(__dirname, 'src'); -const outDir = path.join(__dirname, 'renderer-out'); +const srcDir = path.join(import.meta.dirname, 'notebook'); +const outDir = path.join(import.meta.dirname, 'notebook-out'); -require('../esbuild-webview-common').run({ +run({ entryPoints: [ path.join(srcDir, 'index.ts'), ], diff --git a/extensions/markdown-language-features/esbuild-preview.js b/extensions/markdown-language-features/esbuild-preview.mjs similarity index 70% rename from extensions/markdown-language-features/esbuild-preview.js rename to extensions/markdown-language-features/esbuild-preview.mjs index 5a2e51cca09e0..0e1ccd93762a1 100644 --- a/extensions/markdown-language-features/esbuild-preview.js +++ b/extensions/markdown-language-features/esbuild-preview.mjs @@ -3,12 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ // @ts-check -const path = require('path'); +import path from 'path'; +import { run } from '../esbuild-webview-common.js'; -const srcDir = path.join(__dirname, 'preview-src'); -const outDir = path.join(__dirname, 'media'); +const srcDir = path.join(import.meta.dirname, 'preview-src'); +const outDir = path.join(import.meta.dirname, 'media'); -require('../esbuild-webview-common').run({ +run({ entryPoints: [ path.join(srcDir, 'index.ts'), path.join(srcDir, 'pre'), diff --git a/extensions/markdown-language-features/package.json b/extensions/markdown-language-features/package.json index da79dca2a4dd1..922fe087af543 100644 --- a/extensions/markdown-language-features/package.json +++ b/extensions/markdown-language-features/package.json @@ -760,10 +760,10 @@ "watch": "npm run build-preview && gulp watch-extension:markdown-language-features watch-extension:markdown-language-features-languageService", "vscode:prepublish": "npm run build-ext && npm run build-preview", "build-ext": "node ../../node_modules/gulp/bin/gulp.js --gulpfile ../../build/gulpfile.extensions.js compile-extension:markdown-language-features ./tsconfig.json", - "build-notebook": "node ./esbuild-notebook", - "build-preview": "node ./esbuild-preview", + "build-notebook": "node ./esbuild-notebook.mjs", + "build-preview": "node ./esbuild-preview.mjs", "compile-web": "npx webpack-cli --config extension-browser.webpack.config --mode none", - "watch-web": "npx webpack-cli --config extension-browser.webpack.config --mode none --watch --info-verbosity verbose" + "watch-web": "npx webpack-cli --config extension-browser.webpack.config --mode none --watch" }, "dependencies": { "@vscode/extension-telemetry": "^0.9.8", diff --git a/extensions/markdown-math/esbuild.js b/extensions/markdown-math/esbuild.mjs similarity index 67% rename from extensions/markdown-math/esbuild.js rename to extensions/markdown-math/esbuild.mjs index f8196075a69e2..408cf8e057f47 100644 --- a/extensions/markdown-math/esbuild.js +++ b/extensions/markdown-math/esbuild.mjs @@ -4,20 +4,21 @@ *--------------------------------------------------------------------------------------------*/ //@ts-check -const path = require('path'); -const fse = require('fs-extra'); +import path from 'path'; +import fse from 'fs-extra'; +import { run } from '../esbuild-webview-common.js'; const args = process.argv.slice(2); -const srcDir = path.join(__dirname, 'notebook'); -const outDir = path.join(__dirname, 'notebook-out'); +const srcDir = path.join(import.meta.dirname, 'notebook'); +const outDir = path.join(import.meta.dirname, 'notebook-out'); function postBuild(outDir) { fse.copySync( - path.join(__dirname, 'node_modules', 'katex', 'dist', 'katex.min.css'), + path.join(import.meta.dirname, 'node_modules', 'katex', 'dist', 'katex.min.css'), path.join(outDir, 'katex.min.css')); - const fontsDir = path.join(__dirname, 'node_modules', 'katex', 'dist', 'fonts'); + const fontsDir = path.join(import.meta.dirname, 'node_modules', 'katex', 'dist', 'fonts'); const fontsOutDir = path.join(outDir, 'fonts/'); fse.mkdirSync(fontsOutDir, { recursive: true }); @@ -29,7 +30,7 @@ function postBuild(outDir) { } } -require('../esbuild-webview-common').run({ +run({ entryPoints: [ path.join(srcDir, 'katex.ts'), ], diff --git a/extensions/markdown-math/package.json b/extensions/markdown-math/package.json index 27b5047527fa7..5af72e0b51331 100644 --- a/extensions/markdown-math/package.json +++ b/extensions/markdown-math/package.json @@ -108,7 +108,7 @@ "scripts": { "compile": "npm run build-notebook", "watch": "npm run build-notebook", - "build-notebook": "node ./esbuild" + "build-notebook": "node ./esbuild.mjs" }, "devDependencies": { "@types/markdown-it": "^0.0.0", diff --git a/extensions/markdown-language-features/esbuild-notebook.js b/extensions/notebook-renderers/esbuild.mjs similarity index 69% rename from extensions/markdown-language-features/esbuild-notebook.js rename to extensions/notebook-renderers/esbuild.mjs index 87275940f4ca6..de4e9572b9d4f 100644 --- a/extensions/markdown-language-features/esbuild-notebook.js +++ b/extensions/notebook-renderers/esbuild.mjs @@ -3,12 +3,13 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ // @ts-check -const path = require('path'); +import path from 'path'; +import { run } from '../esbuild-webview-common.js'; -const srcDir = path.join(__dirname, 'notebook'); -const outDir = path.join(__dirname, 'notebook-out'); +const srcDir = path.join(import.meta.dirname, 'src'); +const outDir = path.join(import.meta.dirname, 'renderer-out'); -require('../esbuild-webview-common').run({ +run({ entryPoints: [ path.join(srcDir, 'index.ts'), ], diff --git a/extensions/notebook-renderers/package.json b/extensions/notebook-renderers/package.json index d6ece35af1127..b4a5236f7d801 100644 --- a/extensions/notebook-renderers/package.json +++ b/extensions/notebook-renderers/package.json @@ -44,7 +44,7 @@ "scripts": { "compile": "npx gulp compile-extension:notebook-renderers && npm run build-notebook", "watch": "npx gulp compile-watch:notebook-renderers", - "build-notebook": "node ./esbuild" + "build-notebook": "node ./esbuild.mjs" }, "dependencies": {}, "devDependencies": { diff --git a/extensions/package.json b/extensions/package.json index f0d7f2818de6a..e89178c1e7313 100644 --- a/extensions/package.json +++ b/extensions/package.json @@ -1,6 +1,7 @@ { "name": "vscode-extensions", "version": "0.0.1", + "type": "module", "license": "MIT", "description": "Dependencies shared by all extensions", "dependencies": { diff --git a/extensions/simple-browser/esbuild-preview.js b/extensions/simple-browser/esbuild-preview.mjs similarity index 63% rename from extensions/simple-browser/esbuild-preview.js rename to extensions/simple-browser/esbuild-preview.mjs index 9c94a67d56ffe..25f8504af1487 100644 --- a/extensions/simple-browser/esbuild-preview.js +++ b/extensions/simple-browser/esbuild-preview.mjs @@ -3,15 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ // @ts-check -const path = require('path'); +import path from 'path'; +import { run } from '../esbuild-webview-common.js'; -const srcDir = path.join(__dirname, 'preview-src'); -const outDir = path.join(__dirname, 'media'); +const srcDir = path.join(import.meta.dirname, 'preview-src'); +const outDir = path.join(import.meta.dirname, 'media'); -require('../esbuild-webview-common').run({ +run({ entryPoints: { 'index': path.join(srcDir, 'index.ts'), - 'codicon': path.join(__dirname, 'node_modules', '@vscode', 'codicons', 'dist', 'codicon.css'), + 'codicon': path.join(import.meta.dirname, 'node_modules', '@vscode', 'codicons', 'dist', 'codicon.css'), }, srcDir, outdir: outDir, diff --git a/extensions/simple-browser/package.json b/extensions/simple-browser/package.json index 9aba9ad25036a..789de38deb33c 100644 --- a/extensions/simple-browser/package.json +++ b/extensions/simple-browser/package.json @@ -61,7 +61,7 @@ "watch": "npm run build-preview && gulp watch-extension:markdown-language-features", "vscode:prepublish": "npm run build-ext && npm run build-preview", "build-ext": "node ../../node_modules/gulp/bin/gulp.js --gulpfile ../../build/gulpfile.extensions.js compile-extension:markdown-language-features ./tsconfig.json", - "build-preview": "node ./esbuild-preview", + "build-preview": "node ./esbuild-preview.mjs", "compile-web": "npx webpack-cli --config extension-browser.webpack.config --mode none", "watch-web": "npx webpack-cli --config extension-browser.webpack.config --mode none --watch --info-verbosity verbose" }, From 8a4be882d837e2ea1870cbd77b52ddb6184f73b2 Mon Sep 17 00:00:00 2001 From: Rob Lourens Date: Thu, 7 Aug 2025 20:05:52 -0700 Subject: [PATCH 0124/2080] Remove obsolete experiment tags (#260450) --- .../workbench/contrib/chat/browser/chat.contribution.ts | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/vs/workbench/contrib/chat/browser/chat.contribution.ts b/src/vs/workbench/contrib/chat/browser/chat.contribution.ts index d2ecf6610e0ca..30b7c70745de3 100644 --- a/src/vs/workbench/contrib/chat/browser/chat.contribution.ts +++ b/src/vs/workbench/contrib/chat/browser/chat.contribution.ts @@ -357,10 +357,7 @@ configurationRegistry.registerConfiguration({ [ChatConfiguration.Edits2Enabled]: { type: 'boolean', description: nls.localize('chat.edits2Enabled', "Enable the new Edits mode that is based on tool-calling. When this is enabled, models that don't support tool-calling are unavailable for Edits mode."), - default: true, - experiment: { - mode: 'startup' - } + default: false, }, [ChatConfiguration.ExtensionToolsEnabled]: { type: 'boolean', @@ -376,9 +373,6 @@ configurationRegistry.registerConfiguration({ type: 'boolean', description: nls.localize('chat.agent.enabled.description', "Enable agent mode for {0}. When this is enabled, agent mode can be activated via the dropdown in the view.", 'Copilot Chat'), default: true, - experiment: { - mode: 'startup' - }, policy: { name: 'ChatAgentMode', minimumVersion: '1.99', From 99c256c7dff551c3cfbb1abd4735244c6cce20de Mon Sep 17 00:00:00 2001 From: Rob Lourens Date: Thu, 7 Aug 2025 20:06:10 -0700 Subject: [PATCH 0125/2080] Fix strange NPE (#260445) Fix #237782 --- .../workbench/contrib/chat/common/codeBlockModelCollection.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/vs/workbench/contrib/chat/common/codeBlockModelCollection.ts b/src/vs/workbench/contrib/chat/common/codeBlockModelCollection.ts index 1099dca6e3943..07c60f82f0a80 100644 --- a/src/vs/workbench/contrib/chat/common/codeBlockModelCollection.ts +++ b/src/vs/workbench/contrib/chat/common/codeBlockModelCollection.ts @@ -156,7 +156,8 @@ export class CodeBlockModelCollection extends Disposable { } const textModel = await entry.model; - if (textModel.isDisposed()) { + if (!textModel || textModel.isDisposed()) { + // Somehow we get an undefined textModel sometimes - #237782 return entry; } From 7bf1ab9dbe861f2b357a234785390878c602e866 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Thu, 7 Aug 2025 20:07:03 -0700 Subject: [PATCH 0126/2080] Also change common file extension --- .../{esbuild-webview-common.js => esbuild-webview-common.mjs} | 0 extensions/ipynb/esbuild.mjs | 2 +- extensions/markdown-language-features/esbuild-notebook.mjs | 2 +- extensions/markdown-language-features/esbuild-preview.mjs | 2 +- extensions/markdown-math/esbuild.mjs | 2 +- extensions/notebook-renderers/esbuild.mjs | 2 +- extensions/package.json | 1 - extensions/simple-browser/esbuild-preview.mjs | 2 +- 8 files changed, 6 insertions(+), 7 deletions(-) rename extensions/{esbuild-webview-common.js => esbuild-webview-common.mjs} (100%) diff --git a/extensions/esbuild-webview-common.js b/extensions/esbuild-webview-common.mjs similarity index 100% rename from extensions/esbuild-webview-common.js rename to extensions/esbuild-webview-common.mjs diff --git a/extensions/ipynb/esbuild.mjs b/extensions/ipynb/esbuild.mjs index e7e270c826509..3003959c1eb45 100644 --- a/extensions/ipynb/esbuild.mjs +++ b/extensions/ipynb/esbuild.mjs @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // @ts-check import path from 'node:path'; -import { run } from '../esbuild-webview-common.js'; +import { run } from '../esbuild-webview-common.mjs'; const srcDir = path.join(import.meta.dirname, 'notebook-src'); const outDir = path.join(import.meta.dirname, 'notebook-out'); diff --git a/extensions/markdown-language-features/esbuild-notebook.mjs b/extensions/markdown-language-features/esbuild-notebook.mjs index 837673ad32246..933e77d21a553 100644 --- a/extensions/markdown-language-features/esbuild-notebook.mjs +++ b/extensions/markdown-language-features/esbuild-notebook.mjs @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // @ts-check import path from 'path'; -import { run } from '../esbuild-webview-common.js'; +import { run } from '../esbuild-webview-common.mjs'; const srcDir = path.join(import.meta.dirname, 'notebook'); const outDir = path.join(import.meta.dirname, 'notebook-out'); diff --git a/extensions/markdown-language-features/esbuild-preview.mjs b/extensions/markdown-language-features/esbuild-preview.mjs index 0e1ccd93762a1..1d3fc48b9bc66 100644 --- a/extensions/markdown-language-features/esbuild-preview.mjs +++ b/extensions/markdown-language-features/esbuild-preview.mjs @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // @ts-check import path from 'path'; -import { run } from '../esbuild-webview-common.js'; +import { run } from '../esbuild-webview-common.mjs'; const srcDir = path.join(import.meta.dirname, 'preview-src'); const outDir = path.join(import.meta.dirname, 'media'); diff --git a/extensions/markdown-math/esbuild.mjs b/extensions/markdown-math/esbuild.mjs index 408cf8e057f47..910acbb06a844 100644 --- a/extensions/markdown-math/esbuild.mjs +++ b/extensions/markdown-math/esbuild.mjs @@ -6,7 +6,7 @@ import path from 'path'; import fse from 'fs-extra'; -import { run } from '../esbuild-webview-common.js'; +import { run } from '../esbuild-webview-common.mjs'; const args = process.argv.slice(2); diff --git a/extensions/notebook-renderers/esbuild.mjs b/extensions/notebook-renderers/esbuild.mjs index de4e9572b9d4f..890aacd19bf35 100644 --- a/extensions/notebook-renderers/esbuild.mjs +++ b/extensions/notebook-renderers/esbuild.mjs @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // @ts-check import path from 'path'; -import { run } from '../esbuild-webview-common.js'; +import { run } from '../esbuild-webview-common.mjs'; const srcDir = path.join(import.meta.dirname, 'src'); const outDir = path.join(import.meta.dirname, 'renderer-out'); diff --git a/extensions/package.json b/extensions/package.json index e89178c1e7313..f0d7f2818de6a 100644 --- a/extensions/package.json +++ b/extensions/package.json @@ -1,7 +1,6 @@ { "name": "vscode-extensions", "version": "0.0.1", - "type": "module", "license": "MIT", "description": "Dependencies shared by all extensions", "dependencies": { diff --git a/extensions/simple-browser/esbuild-preview.mjs b/extensions/simple-browser/esbuild-preview.mjs index 25f8504af1487..3ce58360a30d2 100644 --- a/extensions/simple-browser/esbuild-preview.mjs +++ b/extensions/simple-browser/esbuild-preview.mjs @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ // @ts-check import path from 'path'; -import { run } from '../esbuild-webview-common.js'; +import { run } from '../esbuild-webview-common.mjs'; const srcDir = path.join(import.meta.dirname, 'preview-src'); const outDir = path.join(import.meta.dirname, 'media'); From 2be4120c2a6564240e35631e4e57f893cd53e61d Mon Sep 17 00:00:00 2001 From: Rob Lourens Date: Thu, 7 Aug 2025 20:07:04 -0700 Subject: [PATCH 0127/2080] Some /help cleanup (#260454) Fix #246520 --- .../api/common/extHostChatAgents2.ts | 11 ---------- .../contrib/chat/browser/chat.contribution.ts | 21 +------------------ .../contrib/chat/common/chatAgents.ts | 1 - ...scode.proposed.defaultChatParticipant.d.ts | 5 ----- 4 files changed, 1 insertion(+), 37 deletions(-) diff --git a/src/vs/workbench/api/common/extHostChatAgents2.ts b/src/vs/workbench/api/common/extHostChatAgents2.ts index 56fe0163e45b7..cbbcd0957a1f5 100644 --- a/src/vs/workbench/api/common/extHostChatAgents2.ts +++ b/src/vs/workbench/api/common/extHostChatAgents2.ts @@ -823,7 +823,6 @@ class ExtHostChatAgent { private _followupProvider: vscode.ChatFollowupProvider | undefined; private _iconPath: vscode.Uri | { light: vscode.Uri; dark: vscode.Uri } | vscode.ThemeIcon | undefined; private _helpTextPrefix: string | vscode.MarkdownString | undefined; - private _helpTextVariablesPrefix: string | vscode.MarkdownString | undefined; private _helpTextPostfix: string | vscode.MarkdownString | undefined; private _onDidReceiveFeedback = new Emitter(); private _onDidPerformAction = new Emitter(); @@ -918,7 +917,6 @@ class ExtHostChatAgent { themeIcon: this._iconPath instanceof extHostTypes.ThemeIcon ? this._iconPath : undefined, hasFollowups: this._followupProvider !== undefined, helpTextPrefix: (!this._helpTextPrefix || typeof this._helpTextPrefix === 'string') ? this._helpTextPrefix : typeConvert.MarkdownString.from(this._helpTextPrefix), - helpTextVariablesPrefix: (!this._helpTextVariablesPrefix || typeof this._helpTextVariablesPrefix === 'string') ? this._helpTextVariablesPrefix : typeConvert.MarkdownString.from(this._helpTextVariablesPrefix), helpTextPostfix: (!this._helpTextPostfix || typeof this._helpTextPostfix === 'string') ? this._helpTextPostfix : typeConvert.MarkdownString.from(this._helpTextPostfix), supportIssueReporting: this._supportIssueReporting, requester: this._requester, @@ -963,15 +961,6 @@ class ExtHostChatAgent { that._helpTextPrefix = v; updateMetadataSoon(); }, - get helpTextVariablesPrefix() { - checkProposedApiEnabled(that.extension, 'defaultChatParticipant'); - return that._helpTextVariablesPrefix; - }, - set helpTextVariablesPrefix(v) { - checkProposedApiEnabled(that.extension, 'defaultChatParticipant'); - that._helpTextVariablesPrefix = v; - updateMetadataSoon(); - }, get helpTextPostfix() { checkProposedApiEnabled(that.extension, 'defaultChatParticipant'); return that._helpTextPostfix; diff --git a/src/vs/workbench/contrib/chat/browser/chat.contribution.ts b/src/vs/workbench/contrib/chat/browser/chat.contribution.ts index 30b7c70745de3..7feb5e8085947 100644 --- a/src/vs/workbench/contrib/chat/browser/chat.contribution.ts +++ b/src/vs/workbench/contrib/chat/browser/chat.contribution.ts @@ -36,7 +36,6 @@ import '../common/chatColors.js'; import { IChatEditingService } from '../common/chatEditingService.js'; import { ChatEntitlement, ChatEntitlementService, IChatEntitlementService } from '../common/chatEntitlementService.js'; import { ChatModeService, IChatModeService } from '../common/chatModes.js'; -import { chatVariableLeader } from '../common/chatParserTypes.js'; import { ChatResponseResourceFileSystemProvider } from '../common/chatResponseResourceFileSystemProvider.js'; import { IChatService } from '../common/chatService.js'; import { ChatService } from '../common/chatServiceImpl.js'; @@ -716,7 +715,7 @@ class ChatSlashStaticSlashCommandsContribution extends Disposable { // Report agent list const agentText = (await Promise.all(agents - .filter(a => a.id !== defaultAgent?.id && !a.isCore) + .filter(a => !a.isDefault && !a.isCore) .filter(a => a.locations.includes(ChatAgentLocation.Panel)) .map(async a => { const description = a.description ? `- ${a.description}` : ''; @@ -731,24 +730,6 @@ class ChatSlashStaticSlashCommandsContribution extends Disposable { }))).join('\n'); progress.report({ content: new MarkdownString(agentText, { isTrusted: { enabledCommands: [ChatSubmitAction.ID] } }), kind: 'markdownContent' }); - // Report variables - if (defaultAgent?.metadata.helpTextVariablesPrefix) { - progress.report({ content: new MarkdownString('\n\n'), kind: 'markdownContent' }); - if (isMarkdownString(defaultAgent.metadata.helpTextVariablesPrefix)) { - progress.report({ content: defaultAgent.metadata.helpTextVariablesPrefix, kind: 'markdownContent' }); - } else { - progress.report({ content: new MarkdownString(defaultAgent.metadata.helpTextVariablesPrefix), kind: 'markdownContent' }); - } - - const variables = [ - { name: 'file', description: nls.localize('file', "Choose a file in the workspace") } - ]; - const variableText = variables - .map(v => `* \`${chatVariableLeader}${v.name}\` - ${v.description}`) - .join('\n'); - progress.report({ content: new MarkdownString('\n' + variableText), kind: 'markdownContent' }); - } - // Report help text ending if (defaultAgent?.metadata.helpTextPostfix) { progress.report({ content: new MarkdownString('\n\n'), kind: 'markdownContent' }); diff --git a/src/vs/workbench/contrib/chat/common/chatAgents.ts b/src/vs/workbench/contrib/chat/common/chatAgents.ts index 30f533452b12c..e8257c41feb87 100644 --- a/src/vs/workbench/contrib/chat/common/chatAgents.ts +++ b/src/vs/workbench/contrib/chat/common/chatAgents.ts @@ -112,7 +112,6 @@ export interface IChatRequesterInformation { export interface IChatAgentMetadata { helpTextPrefix?: string | IMarkdownString; - helpTextVariablesPrefix?: string | IMarkdownString; helpTextPostfix?: string | IMarkdownString; icon?: URI; iconDark?: URI; diff --git a/src/vscode-dts/vscode.proposed.defaultChatParticipant.d.ts b/src/vscode-dts/vscode.proposed.defaultChatParticipant.d.ts index 402a8e3e14fa8..bdc36d07b19b2 100644 --- a/src/vscode-dts/vscode.proposed.defaultChatParticipant.d.ts +++ b/src/vscode-dts/vscode.proposed.defaultChatParticipant.d.ts @@ -39,11 +39,6 @@ declare module 'vscode' { */ helpTextPrefix?: string | MarkdownString; - /** - * A string that will be added before the listing of chat variables in `/help`. - */ - helpTextVariablesPrefix?: string | MarkdownString; - /** * A string that will be appended after the listing of chat participants in `/help`. */ From e4f9730eae59968012a71a3ec85197ed96db239a Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Thu, 7 Aug 2025 20:15:04 -0700 Subject: [PATCH 0128/2080] Also update gulp --- build/lib/extensions.js | 12 ++++++------ build/lib/extensions.ts | 12 ++++++------ extensions/ipynb/.vscodeignore | 2 +- extensions/markdown-math/.vscodeignore | 2 +- extensions/notebook-renderers/.vscodeignore | 2 +- 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/build/lib/extensions.js b/build/lib/extensions.js index 33c089de720de..638ff16732c76 100644 --- a/build/lib/extensions.js +++ b/build/lib/extensions.js @@ -511,12 +511,12 @@ function translatePackageJSON(packageJSON, packageNLSPath) { const extensionsPath = path_1.default.join(root, 'extensions'); // Additional projects to run esbuild on. These typically build code for webviews const esbuildMediaScripts = [ - 'markdown-language-features/esbuild-notebook.js', - 'markdown-language-features/esbuild-preview.js', - 'markdown-math/esbuild.js', - 'notebook-renderers/esbuild.js', - 'ipynb/esbuild.js', - 'simple-browser/esbuild-preview.js', + 'markdown-language-features/esbuild-notebook.mjs', + 'markdown-language-features/esbuild-preview.mjs', + 'markdown-math/esbuild.mjs', + 'notebook-renderers/esbuild.mjs', + 'ipynb/esbuild.mjs', + 'simple-browser/esbuild-preview.mjs', ]; async function webpackExtensions(taskName, isWatch, webpackConfigLocations) { const webpack = require('webpack'); diff --git a/build/lib/extensions.ts b/build/lib/extensions.ts index 1a55acc52cfcf..d23e74720605b 100644 --- a/build/lib/extensions.ts +++ b/build/lib/extensions.ts @@ -561,12 +561,12 @@ const extensionsPath = path.join(root, 'extensions'); // Additional projects to run esbuild on. These typically build code for webviews const esbuildMediaScripts = [ - 'markdown-language-features/esbuild-notebook.js', - 'markdown-language-features/esbuild-preview.js', - 'markdown-math/esbuild.js', - 'notebook-renderers/esbuild.js', - 'ipynb/esbuild.js', - 'simple-browser/esbuild-preview.js', + 'markdown-language-features/esbuild-notebook.mjs', + 'markdown-language-features/esbuild-preview.mjs', + 'markdown-math/esbuild.mjs', + 'notebook-renderers/esbuild.mjs', + 'ipynb/esbuild.mjs', + 'simple-browser/esbuild-preview.mjs', ]; export async function webpackExtensions(taskName: string, isWatch: boolean, webpackConfigLocations: { configPath: string; outputRoot?: string }[]) { diff --git a/extensions/ipynb/.vscodeignore b/extensions/ipynb/.vscodeignore index 2d13f5a0c2264..543420a2de021 100644 --- a/extensions/ipynb/.vscodeignore +++ b/extensions/ipynb/.vscodeignore @@ -7,4 +7,4 @@ extension.webpack.config.js extension-browser.webpack.config.js package-lock.json .gitignore -esbuild.js +esbuild.* diff --git a/extensions/markdown-math/.vscodeignore b/extensions/markdown-math/.vscodeignore index 85f550b7d7b7f..5df4a1cb8abf1 100644 --- a/extensions/markdown-math/.vscodeignore +++ b/extensions/markdown-math/.vscodeignore @@ -2,7 +2,7 @@ src/** notebook/** extension-browser.webpack.config.js extension.webpack.config.js -esbuild.js +esbuild.* cgmanifest.json package-lock.json webpack.config.js diff --git a/extensions/notebook-renderers/.vscodeignore b/extensions/notebook-renderers/.vscodeignore index e168400f68e81..d8277ac1813a4 100644 --- a/extensions/notebook-renderers/.vscodeignore +++ b/extensions/notebook-renderers/.vscodeignore @@ -2,5 +2,5 @@ src/** notebook/** tsconfig.json .gitignore -esbuild.js +esbuild.* src/** From 0d39d30c97b20518d9e615086f65e4ff41803834 Mon Sep 17 00:00:00 2001 From: Matt Bierner Date: Thu, 7 Aug 2025 20:50:44 -0700 Subject: [PATCH 0129/2080] One more ignore --- extensions/simple-browser/.vscodeignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/simple-browser/.vscodeignore b/extensions/simple-browser/.vscodeignore index c69acedcc2473..ef5dc0365fa33 100644 --- a/extensions/simple-browser/.vscodeignore +++ b/extensions/simple-browser/.vscodeignore @@ -11,4 +11,4 @@ cgmanifest.json package-lock.json preview-src/** webpack.config.js -esbuild-preview.js +esbuild-* From bcc333b8fe3d505ad92770fb13f94e3b241e71f9 Mon Sep 17 00:00:00 2001 From: Tyler James Leonhardt <2644648+TylerLeonhardt@users.noreply.github.com> Date: Thu, 7 Aug 2025 21:57:20 -0700 Subject: [PATCH 0130/2080] Support `disabled` and get rid of `tooltip` and `picked` in Quick Tree Item (#260441) * Support `disabled` and get rid of `tooltip` and `picked` in Quick Tree Item ref https://github.com/microsoft/vscode/issues/258657 * remove properties that shouldn't be used --- .../browser/tree/quickInputTreeController.ts | 3 + .../browser/tree/quickInputTreeRenderer.ts | 20 +++--- .../platform/quickinput/common/quickInput.ts | 62 ++++++++++++++----- .../chat/browser/actions/chatToolPicker.ts | 2 - 4 files changed, 61 insertions(+), 26 deletions(-) diff --git a/src/vs/platform/quickinput/browser/tree/quickInputTreeController.ts b/src/vs/platform/quickinput/browser/tree/quickInputTreeController.ts index b3b9a73aebcde..6d5d4dceb3a83 100644 --- a/src/vs/platform/quickinput/browser/tree/quickInputTreeController.ts +++ b/src/vs/platform/quickinput/browser/tree/quickInputTreeController.ts @@ -251,6 +251,9 @@ export class QuickInputTreeController extends Disposable { if (!item) { return; } + if (item.disabled) { + return; + } const newState = item.checked !== true; if ((item.checked ?? false) === newState) { diff --git a/src/vs/platform/quickinput/browser/tree/quickInputTreeRenderer.ts b/src/vs/platform/quickinput/browser/tree/quickInputTreeRenderer.ts index 4e7c5493c724f..53becfa4ae02d 100644 --- a/src/vs/platform/quickinput/browser/tree/quickInputTreeRenderer.ts +++ b/src/vs/platform/quickinput/browser/tree/quickInputTreeRenderer.ts @@ -95,6 +95,9 @@ export class QuickInputTreeRenderer extends Disposable templateData.checkbox.domNode.style.display = ''; templateData.checkbox.checked = quickTreeItem.checked ?? false; store.add(Event.filter(this.onCheckedEvent, e => e.item === quickTreeItem)(e => templateData.checkbox.checked = e.checked)); + if (quickTreeItem.disabled) { + templateData.checkbox.disable(); + } // Icon if (quickTreeItem.iconPath) { @@ -139,17 +142,14 @@ export class QuickInputTreeRenderer extends Disposable if (!quickTreeItem.detail) { templateData.detail.element.style.display = 'none'; } else { - let title: IManagedHoverTooltipMarkdownString | undefined; // If we have a tooltip, we want that to be shown and not any other hover - if (!quickTreeItem.tooltip) { - title = { - markdown: { - value: escape(quickTreeItem.detail), - supportThemeIcons: true - }, - markdownNotSupportedFallback: quickTreeItem.detail - }; - } + const title = { + markdown: { + value: escape(quickTreeItem.detail), + supportThemeIcons: true + }, + markdownNotSupportedFallback: quickTreeItem.detail + }; templateData.detail.setLabel( quickTreeItem.detail, undefined, diff --git a/src/vs/platform/quickinput/common/quickInput.ts b/src/vs/platform/quickinput/common/quickInput.ts index b2e2b7c3c5656..7fd7daf209821 100644 --- a/src/vs/platform/quickinput/common/quickInput.ts +++ b/src/vs/platform/quickinput/common/quickInput.ts @@ -24,38 +24,73 @@ export interface IQuickPickItemHighlights { export type QuickPickItem = IQuickPickSeparator | IQuickPickItem; -export interface IQuickPickItem { - type?: 'item'; +/** + * Base properties for a quick pick and quick tree item. + */ +export interface IQuickItem { id?: string; label: string; ariaLabel?: string; description?: string; + /** + * The detail text of the quick pick item. Shown as the second line. + */ detail?: string; - tooltip?: string | IMarkdownString; /** - * Allows to show a keybinding next to the item to indicate - * how the item can be triggered outside of the picker using - * keyboard shortcut. + * Whether the item is displayed in italics. */ - keybinding?: ResolvedKeybinding; + italic?: boolean; + /** + * Whether the item is displayed with a strikethrough. + */ + strikethrough?: boolean; iconClasses?: readonly string[]; iconPath?: { dark: URI; light?: URI }; iconClass?: string; - italic?: boolean; - strikethrough?: boolean; highlights?: IQuickPickItemHighlights; buttons?: readonly IQuickInputButton[]; - picked?: boolean; /** * Used when we're in multi-select mode. Renders a disabled checkbox. */ disabled?: boolean; +} + +/** + * Represents a quick pick item used in the quick pick UI. + */ +export interface IQuickPickItem extends IQuickItem { + /** + * The type of the quick pick item. Used to distinguish between 'item' and 'separator' + */ + type?: 'item'; + /** + * The tooltip for the quick pick item. + */ + tooltip?: string | IMarkdownString; + /** + * Allows to show a keybinding next to the item to indicate + * how the item can be triggered outside of the picker using + * keyboard shortcut. + */ + keybinding?: ResolvedKeybinding; + /** + * Whether the item is picked by default when the Quick Pick is shown. + */ + picked?: boolean; + /** + * Whether the item is always shown in the Quick Pick regardless of filtering. + */ alwaysShow?: boolean; - /** Defauls to true with `IQuickPick.canSelectMany`, can be false to disable picks for a single item */ + /** + * Defaults to true with `IQuickPick.canSelectMany`, can be false to disable picks for a single item + */ pickable?: boolean; } export interface IQuickPickSeparator { + /** + * The type of the quick pick item. Used to distinguish between 'item' and 'separator' + */ type: 'separator'; id?: string; label?: string; @@ -1110,7 +1145,7 @@ export interface IQuickTree extends IQuickInput { /** * Represents a tree item in the quick tree. */ -export interface IQuickTreeItem extends IQuickPickItem { +export interface IQuickTreeItem extends IQuickItem { /** * The checked state of the item. Can be true, false, or 'partial' for tri-state. * When canSelectMany is false, this is ignored and the item is treated as a single selection. @@ -1120,10 +1155,9 @@ export interface IQuickTreeItem extends IQuickPickItem { checked?: boolean | 'partial'; /** - * TODO:@TylerLeonhardt Bring this back. + * TODO: Bring this back */ detail?: undefined; - picked?: undefined; /** * The collapsible state of the tree item. Defaults to 'Expanded' if children are present. diff --git a/src/vs/workbench/contrib/chat/browser/actions/chatToolPicker.ts b/src/vs/workbench/contrib/chat/browser/actions/chatToolPicker.ts index 87609091de5ac..d5e2a51207376 100644 --- a/src/vs/workbench/contrib/chat/browser/actions/chatToolPicker.ts +++ b/src/vs/workbench/contrib/chat/browser/actions/chatToolPicker.ts @@ -245,7 +245,6 @@ export async function showToolsPicker( collapsed: true, children: [], buttons, - alwaysShow: true, iconClass: ThemeIcon.asClassName(Codicon.mcp) }; bucketMap.set(key, bucketItem); @@ -310,7 +309,6 @@ export async function showToolsPicker( children: [], buttons, collapsed, - alwaysShow: true, ...iconProps }; bucketMap.set(key, bucketItem); From 6c23f96205aeaf2f26e9d0303e20bc786021daeb Mon Sep 17 00:00:00 2001 From: Justin Chen <54879025+justschen@users.noreply.github.com> Date: Thu, 7 Aug 2025 22:05:03 -0700 Subject: [PATCH 0131/2080] BUMP DISTRO (#260479) bump distro --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 92c93b6024c7c..04723e97eaf58 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "code-oss-dev", "version": "1.104.0", - "distro": "b904906218b11808bcccad9ca29ac4f372a2ad96", + "distro": "1dc7c0e96002d6354d0d6e2a90cfd7d23c6ba6f3", "author": { "name": "Microsoft Corporation" }, From 8123e6477430d33ec62babbef3d06c32a52a2951 Mon Sep 17 00:00:00 2001 From: Tyler James Leonhardt <2644648+TylerLeonhardt@users.noreply.github.com> Date: Thu, 7 Aug 2025 23:58:36 -0700 Subject: [PATCH 0132/2080] Remove concept of `detail` in Quick Tree (#260486) I played around with enabling this but with the twisties, checkbox, icon and all that, I didn't think it looked good. We'll keep `detail` as a Quick Pick feature. fixes https://github.com/microsoft/vscode/issues/258657 --- .../quickinput/browser/media/quickInput.css | 17 ++++----- .../browser/tree/quickInputDelegate.ts | 4 +-- .../quickinput/browser/tree/quickInputTree.ts | 1 - .../quickInputTreeAccessibilityProvider.ts | 2 +- .../browser/tree/quickInputTreeController.ts | 17 +-------- .../browser/tree/quickInputTreeFilter.ts | 9 ++--- .../browser/tree/quickInputTreeRenderer.ts | 36 ++----------------- .../quickinput/browser/tree/quickTree.ts | 7 +--- .../platform/quickinput/common/quickInput.ts | 26 ++++++-------- 9 files changed, 29 insertions(+), 90 deletions(-) diff --git a/src/vs/platform/quickinput/browser/media/quickInput.css b/src/vs/platform/quickinput/browser/media/quickInput.css index affda8856c635..946adf7d8b3d1 100644 --- a/src/vs/platform/quickinput/browser/media/quickInput.css +++ b/src/vs/platform/quickinput/browser/media/quickInput.css @@ -94,6 +94,10 @@ margin: 0; } +.quick-input-widget .quick-input-header .monaco-checkbox { + margin-top: 6px; +} + .quick-input-filter { flex-grow: 1; display: flex; @@ -211,7 +215,11 @@ .quick-input-widget .monaco-checkbox { margin-right: 0; - align-self: center; +} + +.quick-input-widget .quick-input-list .monaco-checkbox, +.quick-input-widget .quick-input-tree .monaco-checkbox { + margin-top: 4px; } .quick-input-list .quick-input-list-icon { @@ -432,13 +440,6 @@ opacity: 1; } -.quick-input-tree .quick-input-tree-detail { - opacity: 0.7; - line-height: normal; - text-overflow: ellipsis; - overflow: hidden; -} - .quick-input-tree .quick-input-tree-entry-action-bar { display: flex; flex: 0; diff --git a/src/vs/platform/quickinput/browser/tree/quickInputDelegate.ts b/src/vs/platform/quickinput/browser/tree/quickInputDelegate.ts index 3617f356dcd27..328285f022287 100644 --- a/src/vs/platform/quickinput/browser/tree/quickInputDelegate.ts +++ b/src/vs/platform/quickinput/browser/tree/quickInputDelegate.ts @@ -11,8 +11,8 @@ import { QuickInputTreeRenderer } from './quickInputTreeRenderer.js'; * Delegate for QuickInputTree that provides height and template information. */ export class QuickInputTreeDelegate implements IListVirtualDelegate { - getHeight(element: T): number { - return element.detail ? 44 : 22; // 22 for single line, 44 for two lines + getHeight(_element: T): number { + return 22; } getTemplateId(_element: T): string { diff --git a/src/vs/platform/quickinput/browser/tree/quickInputTree.ts b/src/vs/platform/quickinput/browser/tree/quickInputTree.ts index cd430c6cfa1a6..b8eaec2c2ac10 100644 --- a/src/vs/platform/quickinput/browser/tree/quickInputTree.ts +++ b/src/vs/platform/quickinput/browser/tree/quickInputTree.ts @@ -10,7 +10,6 @@ import { IObjectTreeElement, ITreeNode } from '../../../../base/browser/ui/tree/ export interface IQuickTreeFilterData { readonly labelHighlights?: IMatch[]; readonly descriptionHighlights?: IMatch[]; - readonly detailHighlights?: IMatch[]; } export function getParentNodeState(parentChildren: ITreeNode[] | IObjectTreeElement[]): boolean | 'partial' { diff --git a/src/vs/platform/quickinput/browser/tree/quickInputTreeAccessibilityProvider.ts b/src/vs/platform/quickinput/browser/tree/quickInputTreeAccessibilityProvider.ts index 879cec5a9c41b..51dfbc018e28c 100644 --- a/src/vs/platform/quickinput/browser/tree/quickInputTreeAccessibilityProvider.ts +++ b/src/vs/platform/quickinput/browser/tree/quickInputTreeAccessibilityProvider.ts @@ -20,7 +20,7 @@ export class QuickTreeAccessibilityProvider implements } getAriaLabel(element: T): string { - return element.ariaLabel || [element.label, element.description, element.detail] + return element.ariaLabel || [element.label, element.description] .map(s => getCodiconAriaLabel(s)) .filter(s => !!s) .join(', '); diff --git a/src/vs/platform/quickinput/browser/tree/quickInputTreeController.ts b/src/vs/platform/quickinput/browser/tree/quickInputTreeController.ts index 6d5d4dceb3a83..2ec3e112662e5 100644 --- a/src/vs/platform/quickinput/browser/tree/quickInputTreeController.ts +++ b/src/vs/platform/quickinput/browser/tree/quickInputTreeController.ts @@ -75,7 +75,7 @@ export class QuickInputTreeController extends Disposable { } else if (a.label > b.label) { return 1; } - // use description and then detail to break ties + // use description to break ties if (a.description && b.description) { if (a.description < b.description) { return -1; @@ -87,17 +87,6 @@ export class QuickInputTreeController extends Disposable { } else if (b.description) { return 1; } - if (a.detail && b.detail) { - if (a.detail < b.detail) { - return -1; - } else if (a.detail > b.detail) { - return 1; - } - } else if (a.detail) { - return -1; - } else if (b.detail) { - return 1; - } return 0; } }, @@ -135,7 +124,6 @@ export class QuickInputTreeController extends Disposable { updateFilterOptions(options: { matchOnLabel?: boolean; matchOnDescription?: boolean; - matchOnDetail?: boolean; }): void { if (options.matchOnLabel !== undefined) { this._filter.matchOnLabel = options.matchOnLabel; @@ -143,9 +131,6 @@ export class QuickInputTreeController extends Disposable { if (options.matchOnDescription !== undefined) { this._filter.matchOnDescription = options.matchOnDescription; } - if (options.matchOnDetail !== undefined) { - this._filter.matchOnDetail = options.matchOnDetail; - } this._tree.refilter(); } diff --git a/src/vs/platform/quickinput/browser/tree/quickInputTreeFilter.ts b/src/vs/platform/quickinput/browser/tree/quickInputTreeFilter.ts index 4cd2e971feeae..b1cf0de44f448 100644 --- a/src/vs/platform/quickinput/browser/tree/quickInputTreeFilter.ts +++ b/src/vs/platform/quickinput/browser/tree/quickInputTreeFilter.ts @@ -12,10 +12,9 @@ export class QuickInputTreeFilter implements ITreeFilter { - if (!this.filterValue || !(this.matchOnLabel || this.matchOnDescription || this.matchOnDetail)) { + if (!this.filterValue || !(this.matchOnLabel || this.matchOnDescription)) { return element.children ? { visibility: TreeVisibility.Recurse, data: {} } : { visibility: TreeVisibility.Visible, data: {} }; @@ -23,13 +22,12 @@ export class QuickInputTreeFilter implements ITreeFilter