diff --git a/.configurations/configuration.dsc.yaml b/.configurations/configuration.dsc.yaml
index 780b1dfa959..c41f115aff9 100644
--- a/.configurations/configuration.dsc.yaml
+++ b/.configurations/configuration.dsc.yaml
@@ -18,17 +18,6 @@ properties:
id: OpenJS.NodeJS.LTS
version: "20.14.0"
source: winget
- - resource: NpmDsc/NpmPackage
- id: yarn
- dependsOn:
- - npm
- directives:
- description: Install Yarn
- allowPrerelease: true
- settings:
- Name: 'yarn'
- Global: true
- PackageDirectory: '${WinGetConfigRoot}\..\'
- resource: Microsoft.WinGet.DSC/WinGetPackage
directives:
description: Install Python 3.10
@@ -56,7 +45,7 @@ properties:
includeRecommended: true
components:
- Microsoft.VisualStudio.Workload.VCTools
- - resource: YarnDsc/YarnInstall
+ - resource: NpmDsc/NpmInstall
dependsOn:
- npm
directives:
diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile
index bc30d7dbe3b..9be15a6afa1 100644
--- a/.devcontainer/Dockerfile
+++ b/.devcontainer/Dockerfile
@@ -7,8 +7,8 @@ RUN git config --system codespaces-theme.hide-status 1
USER node
RUN npm install -g node-gyp
-RUN YARN_CACHE="$(yarn cache dir)" && rm -rf "$YARN_CACHE" && ln -s /vscode-dev/yarn-cache "$YARN_CACHE"
+RUN NPM_CACHE="$(npm config get cache)" && rm -rf "$NPM_CACHE" && ln -s /vscode-dev/npm-cache "$NPM_CACHE"
RUN echo 'export DISPLAY="${DISPLAY:-:1}"' | tee -a ~/.bashrc >> ~/.zshrc
USER root
-CMD chown node:node /vscode-dev && sudo -u node mkdir -p /vscode-dev/yarn-cache && sleep inf
+CMD chown node:node /vscode-dev && sudo -u node mkdir -p /vscode-dev/npm-cache && sleep inf
diff --git a/.devcontainer/README.md b/.devcontainer/README.md
index 44965693380..5f6e1cd99f3 100644
--- a/.devcontainer/README.md
+++ b/.devcontainer/README.md
@@ -24,7 +24,7 @@ If you already have VS Code and Docker installed, you can click the badge above
4. Press Ctrl/Cmd + Shift + P or F1 and select **Dev Containers: Clone Repository in Container Volume...**.
- > **Tip:** While you can use your local source tree instead, operations like `yarn install` can be slow on macOS or when using the Hyper-V engine on Windows. We recommend using the WSL filesystem on Windows or the "clone repository in container" approach on Windows and macOS instead since it uses "named volume" rather than the local filesystem.
+ > **Tip:** While you can use your local source tree instead, operations like `npm i` can be slow on macOS or when using the Hyper-V engine on Windows. We recommend using the WSL filesystem on Windows or the "clone repository in container" approach on Windows and macOS instead since it uses "named volume" rather than the local filesystem.
5. Type `https://github.com/microsoft/vscode` (or a branch or PR URL) in the input box and press Enter.
@@ -85,7 +85,7 @@ To start working with Code - OSS, follow these steps:
1. In your local VS Code client, open a terminal (Ctrl/Cmd + Shift + \`) and type the following commands:
```bash
- yarn install
+ npm i
bash scripts/code.sh
```
diff --git a/.devcontainer/post-create.sh b/.devcontainer/post-create.sh
index 5b2deee6674..4e39a71c49d 100755
--- a/.devcontainer/post-create.sh
+++ b/.devcontainer/post-create.sh
@@ -1,4 +1,4 @@
#!/bin/sh
-yarn install --network-timeout 180000
-yarn electron
+npm i
+npm run electron
diff --git a/.eslintignore b/.eslint-ignore
similarity index 87%
rename from .eslintignore
rename to .eslint-ignore
index 4e877467ae2..ee4f64ddedf 100644
--- a/.eslintignore
+++ b/.eslint-ignore
@@ -34,15 +34,7 @@
**/src/vs/*/**/*.d.ts
**/src/vs/base/test/common/filters.perf.data.js
**/src/vs/loader.js
-**/src2/**/dompurify.js
-**/src2/**/marked.js
-**/src2/**/semver.js
-**/src2/typings/**/*.d.ts
-**/src2/vs/*/**/*.d.ts
-**/src2/vs/base/test/common/filters.perf.data.js
-**/src2/vs/loader.js
**/test/unit/assert.js
-**/test/unit/assert-esm.js
**/test/automation/out/**
**/typings/**
**/src/react.js
diff --git a/.eslintplugin/code-amd-node-module.ts b/.eslint-plugin-local/code-amd-node-module.ts
similarity index 98%
rename from .eslintplugin/code-amd-node-module.ts
rename to .eslint-plugin-local/code-amd-node-module.ts
index 35c89dcb219..ff7ef6ab33b 100644
--- a/.eslintplugin/code-amd-node-module.ts
+++ b/.eslint-plugin-local/code-amd-node-module.ts
@@ -12,7 +12,8 @@ export = new class ApiProviderNaming implements eslint.Rule.RuleModule {
readonly meta: eslint.Rule.RuleMetaData = {
messages: {
amdX: 'Use `import type` for import declarations, use `amdX#importAMDNodeModule` for import expressions'
- }
+ },
+ schema: false,
};
create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
diff --git a/.eslintplugin/code-declare-service-brand.ts b/.eslint-plugin-local/code-declare-service-brand.ts
similarity index 96%
rename from .eslintplugin/code-declare-service-brand.ts
rename to .eslint-plugin-local/code-declare-service-brand.ts
index 402d3638e7a..f2d28bbfc01 100644
--- a/.eslintplugin/code-declare-service-brand.ts
+++ b/.eslint-plugin-local/code-declare-service-brand.ts
@@ -8,7 +8,8 @@ import * as eslint from 'eslint';
export = new class DeclareServiceBrand implements eslint.Rule.RuleModule {
readonly meta: eslint.Rule.RuleMetaData = {
- fixable: 'code'
+ fixable: 'code',
+ schema: false,
};
create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
diff --git a/.eslintplugin/code-ensure-no-disposables-leak-in-test.ts b/.eslint-plugin-local/code-ensure-no-disposables-leak-in-test.ts
similarity index 97%
rename from .eslintplugin/code-ensure-no-disposables-leak-in-test.ts
rename to .eslint-plugin-local/code-ensure-no-disposables-leak-in-test.ts
index 9d3044f50f4..56a1d4a70ad 100644
--- a/.eslintplugin/code-ensure-no-disposables-leak-in-test.ts
+++ b/.eslint-plugin-local/code-ensure-no-disposables-leak-in-test.ts
@@ -13,7 +13,8 @@ export = new class EnsureNoDisposablesAreLeakedInTestSuite implements eslint.Rul
messages: {
ensure: 'Suites should include a call to `ensureNoDisposablesAreLeakedInTestSuite()` to ensure no disposables are leaked in tests.'
},
- fixable: 'code'
+ fixable: 'code',
+ schema: false,
};
create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
diff --git a/.eslintplugin/code-import-patterns.ts b/.eslint-plugin-local/code-import-patterns.ts
similarity index 82%
rename from .eslintplugin/code-import-patterns.ts
rename to .eslint-plugin-local/code-import-patterns.ts
index 1f08bb4a4e8..e4fe52412e6 100644
--- a/.eslintplugin/code-import-patterns.ts
+++ b/.eslint-plugin-local/code-import-patterns.ts
@@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/
import * as eslint from 'eslint';
-import { TSESTree } from '@typescript-eslint/experimental-utils';
+import { TSESTree } from '@typescript-eslint/utils';
import * as path from 'path';
import minimatch from 'minimatch';
import { createImportRuleListener } from './utils';
@@ -12,19 +12,19 @@ import { createImportRuleListener } from './utils';
const REPO_ROOT = path.normalize(path.join(__dirname, '../'));
interface ConditionalPattern {
- when?: 'hasBrowser' | 'hasNode' | 'test';
+ when?: 'hasBrowser' | 'hasNode' | 'hasElectron' | 'test';
pattern: string;
}
interface RawImportPatternsConfig {
target: string;
- layer?: 'common' | 'worker' | 'browser' | 'electron-sandbox' | 'node' | 'electron-main';
+ layer?: 'common' | 'worker' | 'browser' | 'electron-sandbox' | 'node' | 'electron-utility' | 'electron-main';
test?: boolean;
restrictions: string | (string | ConditionalPattern)[];
}
interface LayerAllowRule {
- when: 'hasBrowser' | 'hasNode' | 'test';
+ when: 'hasBrowser' | 'hasNode' | 'hasElectron' | 'test';
allow: string[];
}
@@ -44,11 +44,14 @@ export = new class implements eslint.Rule.RuleModule {
readonly meta: eslint.Rule.RuleMetaData = {
messages: {
badImport: 'Imports violates \'{{restrictions}}\' restrictions. See https://github.com/microsoft/vscode/wiki/Source-Code-Organization',
- badFilename: 'Missing definition in `code-import-patterns` for this file. Define rules at https://github.com/microsoft/vscode/blob/main/.eslintrc.json'
+ badFilename: 'Missing definition in `code-import-patterns` for this file. Define rules at https://github.com/microsoft/vscode/blob/main/.eslintrc.json',
+ badAbsolute: 'Imports have to be relative to support ESM',
+ badExtension: 'Imports have to end with `.js` or `.css` to support ESM',
},
docs: {
url: 'https://github.com/microsoft/vscode/wiki/Source-Code-Organization'
- }
+ },
+ schema: false,
};
create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
@@ -77,13 +80,14 @@ export = new class implements eslint.Rule.RuleModule {
return this._optionsCache.get(options)!;
}
- type Layer = 'common' | 'worker' | 'browser' | 'electron-sandbox' | 'node' | 'electron-main';
+ type Layer = 'common' | 'worker' | 'browser' | 'electron-sandbox' | 'node' | 'electron-utility' | 'electron-main';
interface ILayerRule {
layer: Layer;
deps: string;
isBrowser?: boolean;
isNode?: boolean;
+ isElectron?: boolean;
}
function orSegment(variants: Layer[]): string {
@@ -96,11 +100,13 @@ export = new class implements eslint.Rule.RuleModule {
{ layer: 'browser', deps: orSegment(['common', 'browser']), isBrowser: true },
{ layer: 'electron-sandbox', deps: orSegment(['common', 'browser', 'electron-sandbox']), isBrowser: true },
{ layer: 'node', deps: orSegment(['common', 'node']), isNode: true },
- { layer: 'electron-main', deps: orSegment(['common', 'node', 'electron-main']), isNode: true },
+ { layer: 'electron-utility', deps: orSegment(['common', 'node', 'electron-utility']), isNode: true, isElectron: true },
+ { layer: 'electron-main', deps: orSegment(['common', 'node', 'electron-utility', 'electron-main']), isNode: true, isElectron: true },
];
let browserAllow: string[] = [];
let nodeAllow: string[] = [];
+ let electronAllow: string[] = [];
let testAllow: string[] = [];
for (const option of options) {
if (isLayerAllowRule(option)) {
@@ -108,6 +114,8 @@ export = new class implements eslint.Rule.RuleModule {
browserAllow = option.allow.slice(0);
} else if (option.when === 'hasNode') {
nodeAllow = option.allow.slice(0);
+ } else if (option.when === 'hasElectron') {
+ electronAllow = option.allow.slice(0);
} else if (option.when === 'test') {
testAllow = option.allow.slice(0);
}
@@ -135,9 +143,13 @@ export = new class implements eslint.Rule.RuleModule {
restrictions.push(...nodeAllow);
}
+ if (layerRule.isElectron) {
+ restrictions.push(...electronAllow);
+ }
+
for (const rawRestriction of rawRestrictions) {
let importPattern: string;
- let when: 'hasBrowser' | 'hasNode' | 'test' | undefined = undefined;
+ let when: 'hasBrowser' | 'hasNode' | 'hasElectron' | 'test' | undefined = undefined;
if (typeof rawRestriction === 'string') {
importPattern = rawRestriction;
} else {
@@ -147,6 +159,7 @@ export = new class implements eslint.Rule.RuleModule {
if (typeof when === 'undefined'
|| (when === 'hasBrowser' && layerRule.isBrowser)
|| (when === 'hasNode' && layerRule.isNode)
+ || (when === 'hasElectron' && layerRule.isElectron)
) {
restrictions.push(importPattern.replace(/\/\~$/, `/${layerRule.deps}/**`));
testRestrictions.push(importPattern.replace(/\/\~$/, `/test/${layerRule.deps}/**`));
@@ -181,8 +194,8 @@ export = new class implements eslint.Rule.RuleModule {
if (targetIsVS) {
// Always add "vs/nls" and "vs/amdX"
- restrictions.push('vs/nls');
- restrictions.push('vs/amdX'); // TODO@jrieken remove after ESM is real
+ restrictions.push('vs/nls.js');
+ restrictions.push('vs/amdX.js'); // TODO@jrieken remove after ESM is real
}
if (targetIsVS && option.layer) {
@@ -212,13 +225,32 @@ export = new class implements eslint.Rule.RuleModule {
}
private _checkImport(context: eslint.Rule.RuleContext, config: ImportPatternsConfig, node: TSESTree.Node, importPath: string) {
+ const targetIsVS = /^src\/vs\//.test(getRelativeFilename(context));
+ if (targetIsVS) {
+
+ // ESM: check for import ending with ".js" or ".css"
+ if (importPath[0] === '.' && !importPath.endsWith('.js') && !importPath.endsWith('.css')) {
+ context.report({
+ loc: node.loc,
+ messageId: 'badExtension',
+ });
+ }
+
+ // check for import being relative
+ if (importPath.startsWith('vs/')) {
+ context.report({
+ loc: node.loc,
+ messageId: 'badAbsolute',
+ });
+ }
+ }
// resolve relative paths
if (importPath[0] === '.') {
const relativeFilename = getRelativeFilename(context);
importPath = path.posix.join(path.posix.dirname(relativeFilename), importPath);
if (/^src\/vs\//.test(importPath)) {
- // resolve using AMD base url
+ // resolve using base url
importPath = importPath.substring('src/'.length);
}
}
diff --git a/.eslintplugin/code-layering.ts b/.eslint-plugin-local/code-layering.ts
similarity index 93%
rename from .eslintplugin/code-layering.ts
rename to .eslint-plugin-local/code-layering.ts
index cca72eeec71..f8b769a1bf6 100644
--- a/.eslintplugin/code-layering.ts
+++ b/.eslint-plugin-local/code-layering.ts
@@ -20,7 +20,18 @@ export = new class implements eslint.Rule.RuleModule {
},
docs: {
url: 'https://github.com/microsoft/vscode/wiki/Source-Code-Organization'
- }
+ },
+ schema: [
+ {
+ type: 'object',
+ additionalProperties: {
+ type: 'array',
+ items: {
+ type: 'string'
+ }
+ }
+ }
+ ]
};
create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
diff --git a/.eslint-plugin-local/code-limited-top-functions.ts b/.eslint-plugin-local/code-limited-top-functions.ts
new file mode 100644
index 00000000000..97eef9a6e9d
--- /dev/null
+++ b/.eslint-plugin-local/code-limited-top-functions.ts
@@ -0,0 +1,70 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+import * as eslint from 'eslint';
+import { dirname, relative } from 'path';
+import minimatch from 'minimatch';
+
+export = new class implements eslint.Rule.RuleModule {
+
+ readonly meta: eslint.Rule.RuleMetaData = {
+ messages: {
+ layerbreaker: 'You are only allowed to define limited top level functions.'
+ },
+ schema: {
+ type: "array",
+ items: {
+ type: "object",
+ additionalProperties: {
+ type: "array",
+ items: {
+ type: "string"
+ }
+ }
+ }
+ }
+ };
+
+ create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
+ let fileRelativePath = relative(dirname(__dirname), context.getFilename());
+ if (!fileRelativePath.endsWith('/')) {
+ fileRelativePath += '/';
+ }
+ const ruleArgs = >context.options[0];
+
+ const matchingKey = Object.keys(ruleArgs).find(key => fileRelativePath.startsWith(key) || minimatch(fileRelativePath, key));
+ if (!matchingKey) {
+ // nothing
+ return {};
+ }
+
+ const restrictedFunctions = ruleArgs[matchingKey];
+
+ return {
+ FunctionDeclaration: (node: any) => {
+ const isTopLevel = node.parent.type === 'Program';
+ const functionName = node.id.name;
+ if (isTopLevel && !restrictedFunctions.includes(node.id.name)) {
+ context.report({
+ node,
+ message: `Top-level function '${functionName}' is restricted in this file. Allowed functions are: ${restrictedFunctions.join(', ')}.`
+ });
+ }
+ },
+ ExportNamedDeclaration(node: any) {
+ if (node.declaration && node.declaration.type === 'FunctionDeclaration') {
+ const functionName = node.declaration.id.name;
+ const isTopLevel = node.parent.type === 'Program';
+ if (isTopLevel && !restrictedFunctions.includes(node.declaration.id.name)) {
+ context.report({
+ node,
+ message: `Top-level function '${functionName}' is restricted in this file. Allowed functions are: ${restrictedFunctions.join(', ')}.`
+ });
+ }
+ }
+ }
+ }
+ }
+};
diff --git a/.eslintplugin/code-must-use-result.ts b/.eslint-plugin-local/code-must-use-result.ts
similarity index 91%
rename from .eslintplugin/code-must-use-result.ts
rename to .eslint-plugin-local/code-must-use-result.ts
index 2127206f8c4..e59b1920f2e 100644
--- a/.eslintplugin/code-must-use-result.ts
+++ b/.eslint-plugin-local/code-must-use-result.ts
@@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/
import * as eslint from 'eslint';
-import { TSESTree } from '@typescript-eslint/experimental-utils';
+import { TSESTree } from '@typescript-eslint/utils';
const VALID_USES = new Set([
TSESTree.AST_NODE_TYPES.AwaitExpression,
@@ -12,6 +12,9 @@ const VALID_USES = new Set([
]);
export = new class MustUseResults implements eslint.Rule.RuleModule {
+ readonly meta: eslint.Rule.RuleMetaData = {
+ schema: false
+ }
create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
diff --git a/.eslintplugin/code-must-use-super-dispose.ts b/.eslint-plugin-local/code-must-use-super-dispose.ts
similarity index 100%
rename from .eslintplugin/code-must-use-super-dispose.ts
rename to .eslint-plugin-local/code-must-use-super-dispose.ts
diff --git a/.eslintplugin/code-no-dangerous-type-assertions.ts b/.eslint-plugin-local/code-no-dangerous-type-assertions.ts
similarity index 95%
rename from .eslintplugin/code-no-dangerous-type-assertions.ts
rename to .eslint-plugin-local/code-no-dangerous-type-assertions.ts
index eecd4048e43..233fae02c82 100644
--- a/.eslintplugin/code-no-dangerous-type-assertions.ts
+++ b/.eslint-plugin-local/code-no-dangerous-type-assertions.ts
@@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/
import * as eslint from 'eslint';
-import { TSESTree } from '@typescript-eslint/experimental-utils';
+import { TSESTree } from '@typescript-eslint/utils';
export = new class NoDangerousTypeAssertions implements eslint.Rule.RuleModule {
diff --git a/.eslintplugin/code-no-global-document-listener.ts b/.eslint-plugin-local/code-no-global-document-listener.ts
similarity index 100%
rename from .eslintplugin/code-no-global-document-listener.ts
rename to .eslint-plugin-local/code-no-global-document-listener.ts
diff --git a/.eslintplugin/code-no-native-private.ts b/.eslint-plugin-local/code-no-native-private.ts
similarity index 98%
rename from .eslintplugin/code-no-native-private.ts
rename to .eslint-plugin-local/code-no-native-private.ts
index 4d6be23b8f3..e2d20694ca8 100644
--- a/.eslintplugin/code-no-native-private.ts
+++ b/.eslint-plugin-local/code-no-native-private.ts
@@ -10,7 +10,8 @@ export = new class ApiProviderNaming implements eslint.Rule.RuleModule {
readonly meta: eslint.Rule.RuleMetaData = {
messages: {
slow: 'Native private fields are much slower and should only be used when needed. Ignore this warning if you know what you are doing, use compile-time private otherwise. See https://github.com/microsoft/vscode/issues/185991#issuecomment-1614468158 for details',
- }
+ },
+ schema: false,
};
create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
diff --git a/.eslintplugin/code-no-nls-in-standalone-editor.ts b/.eslint-plugin-local/code-no-nls-in-standalone-editor.ts
similarity index 98%
rename from .eslintplugin/code-no-nls-in-standalone-editor.ts
rename to .eslint-plugin-local/code-no-nls-in-standalone-editor.ts
index 90c80dee70c..19ad65ee871 100644
--- a/.eslintplugin/code-no-nls-in-standalone-editor.ts
+++ b/.eslint-plugin-local/code-no-nls-in-standalone-editor.ts
@@ -12,7 +12,8 @@ export = new class NoNlsInStandaloneEditorRule implements eslint.Rule.RuleModule
readonly meta: eslint.Rule.RuleMetaData = {
messages: {
noNls: 'Not allowed to import vs/nls in standalone editor modules. Use standaloneStrings.ts'
- }
+ },
+ schema: false,
};
create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
diff --git a/.eslintplugin/code-no-potentially-unsafe-disposables.ts b/.eslint-plugin-local/code-no-potentially-unsafe-disposables.ts
similarity index 100%
rename from .eslintplugin/code-no-potentially-unsafe-disposables.ts
rename to .eslint-plugin-local/code-no-potentially-unsafe-disposables.ts
diff --git a/.eslintplugin/code-no-runtime-import.ts b/.eslint-plugin-local/code-no-runtime-import.ts
similarity index 100%
rename from .eslintplugin/code-no-runtime-import.ts
rename to .eslint-plugin-local/code-no-runtime-import.ts
diff --git a/.eslintplugin/code-no-standalone-editor.ts b/.eslint-plugin-local/code-no-standalone-editor.ts
similarity index 98%
rename from .eslintplugin/code-no-standalone-editor.ts
rename to .eslint-plugin-local/code-no-standalone-editor.ts
index 898886d17d2..3fad6719581 100644
--- a/.eslintplugin/code-no-standalone-editor.ts
+++ b/.eslint-plugin-local/code-no-standalone-editor.ts
@@ -15,7 +15,8 @@ export = new class NoNlsInStandaloneEditorRule implements eslint.Rule.RuleModule
},
docs: {
url: 'https://github.com/microsoft/vscode/wiki/Source-Code-Organization'
- }
+ },
+ schema: false,
};
create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
diff --git a/.eslintplugin/code-no-static-self-ref.ts b/.eslint-plugin-local/code-no-static-self-ref.ts
similarity index 86%
rename from .eslintplugin/code-no-static-self-ref.ts
rename to .eslint-plugin-local/code-no-static-self-ref.ts
index 7c6e13032ae..52edfb254f6 100644
--- a/.eslintplugin/code-no-static-self-ref.ts
+++ b/.eslint-plugin-local/code-no-static-self-ref.ts
@@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/
import * as eslint from 'eslint';
-import { TSESTree } from '@typescript-eslint/experimental-utils';
+import { TSESTree } from '@typescript-eslint/utils';
/**
* WORKAROUND for https://github.com/evanw/esbuild/issues/3823
@@ -15,7 +15,7 @@ export = new class implements eslint.Rule.RuleModule {
function checkProperty(inNode: any) {
- const classDeclaration = context.getAncestors().find(node => node.type === 'ClassDeclaration');
+ const classDeclaration = context.sourceCode.getAncestors(inNode).find(node => node.type === 'ClassDeclaration');
const propertyDefinition = inNode;
if (!classDeclaration || !classDeclaration.id?.name) {
@@ -33,7 +33,7 @@ export = new class implements eslint.Rule.RuleModule {
}
const name = classDeclaration.id.name;
- const valueText = context.getSourceCode().getText(propertyDefinition.value)
+ const valueText = context.sourceCode.getText(propertyDefinition.value)
if (valueText.includes(name + '.')) {
diff --git a/.eslintplugin/code-no-test-async-suite.ts b/.eslint-plugin-local/code-no-test-async-suite.ts
similarity index 94%
rename from .eslintplugin/code-no-test-async-suite.ts
rename to .eslint-plugin-local/code-no-test-async-suite.ts
index 41d15d28636..7d5fadfad0d 100644
--- a/.eslintplugin/code-no-test-async-suite.ts
+++ b/.eslint-plugin-local/code-no-test-async-suite.ts
@@ -3,7 +3,7 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
-import { TSESTree } from '@typescript-eslint/experimental-utils';
+import { TSESTree } from '@typescript-eslint/utils';
import * as eslint from 'eslint';
function isCallExpression(node: TSESTree.Node): node is TSESTree.CallExpression {
diff --git a/.eslintplugin/code-no-test-only.ts b/.eslint-plugin-local/code-no-test-only.ts
similarity index 100%
rename from .eslintplugin/code-no-test-only.ts
rename to .eslint-plugin-local/code-no-test-only.ts
diff --git a/.eslintplugin/code-no-unexternalized-strings.ts b/.eslint-plugin-local/code-no-unexternalized-strings.ts
similarity index 98%
rename from .eslintplugin/code-no-unexternalized-strings.ts
rename to .eslint-plugin-local/code-no-unexternalized-strings.ts
index 17a8f900efd..abb3980eb54 100644
--- a/.eslintplugin/code-no-unexternalized-strings.ts
+++ b/.eslint-plugin-local/code-no-unexternalized-strings.ts
@@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/
import * as eslint from 'eslint';
-import { TSESTree, AST_NODE_TYPES } from '@typescript-eslint/experimental-utils';
+import { TSESTree, AST_NODE_TYPES } from '@typescript-eslint/utils';
function isStringLiteral(node: TSESTree.Node | null | undefined): node is TSESTree.StringLiteral {
return !!node && node.type === AST_NODE_TYPES.Literal && typeof node.value === 'string';
@@ -24,7 +24,8 @@ export = new class NoUnexternalizedStrings implements eslint.Rule.RuleModule {
badKey: 'The key \'{{key}}\' doesn\'t conform to a valid localize identifier.',
duplicateKey: 'Duplicate key \'{{key}}\' with different message value.',
badMessage: 'Message argument to \'{{message}}\' must be a string literal.'
- }
+ },
+ schema: false,
};
create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
diff --git a/.eslintplugin/code-no-unused-expressions.ts b/.eslint-plugin-local/code-no-unused-expressions.ts
similarity index 97%
rename from .eslintplugin/code-no-unused-expressions.ts
rename to .eslint-plugin-local/code-no-unused-expressions.ts
index 450365de2c6..14f2f53d47f 100644
--- a/.eslintplugin/code-no-unused-expressions.ts
+++ b/.eslint-plugin-local/code-no-unused-expressions.ts
@@ -12,7 +12,7 @@
*/
import * as eslint from 'eslint';
-import { TSESTree } from '@typescript-eslint/experimental-utils';
+import { TSESTree } from '@typescript-eslint/utils';
import * as ESTree from 'estree';
//------------------------------------------------------------------------------
@@ -141,7 +141,7 @@ module.exports = {
return {
ExpressionStatement(node: TSESTree.ExpressionStatement) {
- if (!isValidExpression(node.expression) && !isDirective(node, context.getAncestors())) {
+ if (!isValidExpression(node.expression) && !isDirective(node, context.sourceCode.getAncestors(node))) {
context.report({ node: node, message: `Expected an assignment or function call and instead saw an expression. ${node.expression}` });
}
}
diff --git a/.eslintplugin/code-parameter-properties-must-have-explicit-accessibility.ts b/.eslint-plugin-local/code-parameter-properties-must-have-explicit-accessibility.ts
similarity index 95%
rename from .eslintplugin/code-parameter-properties-must-have-explicit-accessibility.ts
rename to .eslint-plugin-local/code-parameter-properties-must-have-explicit-accessibility.ts
index 458afd5b0ba..c9837052fa5 100644
--- a/.eslintplugin/code-parameter-properties-must-have-explicit-accessibility.ts
+++ b/.eslint-plugin-local/code-parameter-properties-must-have-explicit-accessibility.ts
@@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/
import * as eslint from 'eslint';
-import { TSESTree } from '@typescript-eslint/experimental-utils';
+import { TSESTree } from '@typescript-eslint/utils';
/**
* Enforces that all parameter properties have an explicit access modifier (public, protected, private).
diff --git a/.eslintplugin/code-translation-remind.ts b/.eslint-plugin-local/code-translation-remind.ts
similarity index 96%
rename from .eslintplugin/code-translation-remind.ts
rename to .eslint-plugin-local/code-translation-remind.ts
index 1ce01107a72..cceaba4c419 100644
--- a/.eslintplugin/code-translation-remind.ts
+++ b/.eslint-plugin-local/code-translation-remind.ts
@@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/
import * as eslint from 'eslint';
-import { TSESTree } from '@typescript-eslint/experimental-utils';
+import { TSESTree } from '@typescript-eslint/utils';
import { readFileSync } from 'fs';
import { createImportRuleListener } from './utils';
@@ -16,7 +16,8 @@ export = new class TranslationRemind implements eslint.Rule.RuleModule {
readonly meta: eslint.Rule.RuleMetaData = {
messages: {
missing: 'Please add \'{{resource}}\' to ./build/lib/i18n.resources.json file to use translations here.'
- }
+ },
+ schema: false,
};
create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
diff --git a/.eslintplugin/index.js b/.eslint-plugin-local/index.js
similarity index 100%
rename from .eslintplugin/index.js
rename to .eslint-plugin-local/index.js
diff --git a/.eslint-plugin-local/package.json b/.eslint-plugin-local/package.json
new file mode 100644
index 00000000000..a0df0c86778
--- /dev/null
+++ b/.eslint-plugin-local/package.json
@@ -0,0 +1,3 @@
+{
+ "type": "commonjs"
+}
diff --git a/.eslintplugin/tsconfig.json b/.eslint-plugin-local/tsconfig.json
similarity index 100%
rename from .eslintplugin/tsconfig.json
rename to .eslint-plugin-local/tsconfig.json
diff --git a/.eslintplugin/utils.ts b/.eslint-plugin-local/utils.ts
similarity index 95%
rename from .eslintplugin/utils.ts
rename to .eslint-plugin-local/utils.ts
index 428832e9cf9..b7457884f85 100644
--- a/.eslintplugin/utils.ts
+++ b/.eslint-plugin-local/utils.ts
@@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/
import * as eslint from 'eslint';
-import { TSESTree } from '@typescript-eslint/experimental-utils';
+import { TSESTree } from '@typescript-eslint/utils';
export function createImportRuleListener(validateImport: (node: TSESTree.Literal, value: string) => any): eslint.Rule.RuleListener {
diff --git a/.eslintplugin/vscode-dts-cancellation.ts b/.eslint-plugin-local/vscode-dts-cancellation.ts
similarity index 92%
rename from .eslintplugin/vscode-dts-cancellation.ts
rename to .eslint-plugin-local/vscode-dts-cancellation.ts
index 6e253a898ca..5e8e875af21 100644
--- a/.eslintplugin/vscode-dts-cancellation.ts
+++ b/.eslint-plugin-local/vscode-dts-cancellation.ts
@@ -4,14 +4,15 @@
*--------------------------------------------------------------------------------------------*/
import * as eslint from 'eslint';
-import { AST_NODE_TYPES, TSESTree } from '@typescript-eslint/experimental-utils';
+import { AST_NODE_TYPES, TSESTree } from '@typescript-eslint/utils';
export = new class ApiProviderNaming implements eslint.Rule.RuleModule {
readonly meta: eslint.Rule.RuleMetaData = {
messages: {
noToken: 'Function lacks a cancellation token, preferable as last argument',
- }
+ },
+ schema: false,
};
create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
diff --git a/.eslintplugin/vscode-dts-create-func.ts b/.eslint-plugin-local/vscode-dts-create-func.ts
similarity index 91%
rename from .eslintplugin/vscode-dts-create-func.ts
rename to .eslint-plugin-local/vscode-dts-create-func.ts
index 295d099da7c..01db244ce76 100644
--- a/.eslintplugin/vscode-dts-create-func.ts
+++ b/.eslint-plugin-local/vscode-dts-create-func.ts
@@ -4,13 +4,14 @@
*--------------------------------------------------------------------------------------------*/
import * as eslint from 'eslint';
-import { TSESTree, AST_NODE_TYPES } from '@typescript-eslint/experimental-utils';
+import { TSESTree, AST_NODE_TYPES } from '@typescript-eslint/utils';
export = new class ApiLiteralOrTypes implements eslint.Rule.RuleModule {
readonly meta: eslint.Rule.RuleMetaData = {
docs: { url: 'https://github.com/microsoft/vscode/wiki/Extension-API-guidelines#creating-objects' },
- messages: { sync: '`createXYZ`-functions are constructor-replacements and therefore must return sync', }
+ messages: { sync: '`createXYZ`-functions are constructor-replacements and therefore must return sync', },
+ schema: false,
};
create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
diff --git a/.eslintplugin/vscode-dts-event-naming.ts b/.eslint-plugin-local/vscode-dts-event-naming.ts
similarity index 96%
rename from .eslintplugin/vscode-dts-event-naming.ts
rename to .eslint-plugin-local/vscode-dts-event-naming.ts
index 5e767c6e257..c27d934f4f9 100644
--- a/.eslintplugin/vscode-dts-event-naming.ts
+++ b/.eslint-plugin-local/vscode-dts-event-naming.ts
@@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/
import * as eslint from 'eslint';
-import { TSESTree, AST_NODE_TYPES } from '@typescript-eslint/experimental-utils';
+import { TSESTree, AST_NODE_TYPES } from '@typescript-eslint/utils';
export = new class ApiEventNaming implements eslint.Rule.RuleModule {
@@ -19,7 +19,8 @@ export = new class ApiEventNaming implements eslint.Rule.RuleModule {
verb: 'Unknown verb \'{{verb}}\' - is this really a verb? Iff so, then add this verb to the configuration',
subject: 'Unknown subject \'{{subject}}\' - This subject has not been used before but it should refer to something in the API',
unknown: 'UNKNOWN event declaration, lint-rule needs tweaking'
- }
+ },
+ schema: false,
};
create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
diff --git a/.eslintplugin/vscode-dts-interface-naming.ts b/.eslint-plugin-local/vscode-dts-interface-naming.ts
similarity index 92%
rename from .eslintplugin/vscode-dts-interface-naming.ts
rename to .eslint-plugin-local/vscode-dts-interface-naming.ts
index 59112bcb29d..6b33f9c5343 100644
--- a/.eslintplugin/vscode-dts-interface-naming.ts
+++ b/.eslint-plugin-local/vscode-dts-interface-naming.ts
@@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/
import * as eslint from 'eslint';
-import { TSESTree } from '@typescript-eslint/experimental-utils';
+import { TSESTree } from '@typescript-eslint/utils';
export = new class ApiInterfaceNaming implements eslint.Rule.RuleModule {
@@ -13,7 +13,8 @@ export = new class ApiInterfaceNaming implements eslint.Rule.RuleModule {
readonly meta: eslint.Rule.RuleMetaData = {
messages: {
naming: 'Interfaces must not be prefixed with uppercase `I`',
- }
+ },
+ schema: false,
};
create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
diff --git a/.eslintplugin/vscode-dts-literal-or-types.ts b/.eslint-plugin-local/vscode-dts-literal-or-types.ts
similarity index 87%
rename from .eslintplugin/vscode-dts-literal-or-types.ts
rename to .eslint-plugin-local/vscode-dts-literal-or-types.ts
index 01d1d1d8586..44ef0fd2a7c 100644
--- a/.eslintplugin/vscode-dts-literal-or-types.ts
+++ b/.eslint-plugin-local/vscode-dts-literal-or-types.ts
@@ -4,13 +4,14 @@
*--------------------------------------------------------------------------------------------*/
import * as eslint from 'eslint';
-import { TSESTree } from '@typescript-eslint/experimental-utils';
+import { TSESTree } from '@typescript-eslint/utils';
export = new class ApiLiteralOrTypes implements eslint.Rule.RuleModule {
readonly meta: eslint.Rule.RuleMetaData = {
docs: { url: 'https://github.com/microsoft/vscode/wiki/Extension-API-guidelines#enums' },
- messages: { useEnum: 'Use enums, not literal-or-types', }
+ messages: { useEnum: 'Use enums, not literal-or-types', },
+ schema: false,
};
create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
diff --git a/.eslintplugin/vscode-dts-provider-naming.ts b/.eslint-plugin-local/vscode-dts-provider-naming.ts
similarity index 94%
rename from .eslintplugin/vscode-dts-provider-naming.ts
rename to .eslint-plugin-local/vscode-dts-provider-naming.ts
index 284f123420f..db8350dd9bc 100644
--- a/.eslintplugin/vscode-dts-provider-naming.ts
+++ b/.eslint-plugin-local/vscode-dts-provider-naming.ts
@@ -4,14 +4,15 @@
*--------------------------------------------------------------------------------------------*/
import * as eslint from 'eslint';
-import { TSESTree } from '@typescript-eslint/experimental-utils';
+import { TSESTree } from '@typescript-eslint/utils';
export = new class ApiProviderNaming implements eslint.Rule.RuleModule {
readonly meta: eslint.Rule.RuleMetaData = {
messages: {
naming: 'A provider should only have functions like provideXYZ or resolveXYZ',
- }
+ },
+ schema: false,
};
private static _providerFunctionNames = /^(provide|resolve|prepare).+/;
diff --git a/.eslintplugin/vscode-dts-region-comments.ts b/.eslint-plugin-local/vscode-dts-region-comments.ts
similarity index 98%
rename from .eslintplugin/vscode-dts-region-comments.ts
rename to .eslint-plugin-local/vscode-dts-region-comments.ts
index 63139a50e3b..b08dc6357bb 100644
--- a/.eslintplugin/vscode-dts-region-comments.ts
+++ b/.eslint-plugin-local/vscode-dts-region-comments.ts
@@ -10,7 +10,8 @@ export = new class ApiEventNaming implements eslint.Rule.RuleModule {
readonly meta: eslint.Rule.RuleMetaData = {
messages: {
comment: 'region comments should start with a camel case identifier, `:`, then either a GH issue link or owner, e.g #region myProposalName: https://github.com/microsoft/vscode/issues/',
- }
+ },
+ schema: false,
};
create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
diff --git a/.eslintplugin/vscode-dts-string-type-literals.ts b/.eslint-plugin-local/vscode-dts-string-type-literals.ts
similarity index 79%
rename from .eslintplugin/vscode-dts-string-type-literals.ts
rename to .eslint-plugin-local/vscode-dts-string-type-literals.ts
index 8c3ead14427..bca084c4af6 100644
--- a/.eslintplugin/vscode-dts-string-type-literals.ts
+++ b/.eslint-plugin-local/vscode-dts-string-type-literals.ts
@@ -4,21 +4,21 @@
*--------------------------------------------------------------------------------------------*/
import * as eslint from 'eslint';
-import { TSESTree } from '@typescript-eslint/experimental-utils';
+import { TSESTree } from '@typescript-eslint/utils';
export = new class ApiTypeDiscrimination implements eslint.Rule.RuleModule {
readonly meta: eslint.Rule.RuleMetaData = {
docs: { url: 'https://github.com/microsoft/vscode/wiki/Extension-API-guidelines' },
messages: {
- noTypeDiscrimination: 'Do not use type descrimination properties'
- }
+ noTypeDiscrimination: 'Do not use type discrimination properties'
+ },
+ schema: false,
};
create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
return {
- ['TSPropertySignature[optional=undefined] TSTypeAnnotation TSLiteralType Literal']: (node: any) => {
-
+ ['TSPropertySignature[optional=false] TSTypeAnnotation TSLiteralType Literal']: (node: any) => {
const raw = String((node).raw)
if (/^('|").*\1$/.test(raw)) {
diff --git a/.eslintplugin/vscode-dts-use-thenable.ts b/.eslint-plugin-local/vscode-dts-use-thenable.ts
similarity index 97%
rename from .eslintplugin/vscode-dts-use-thenable.ts
rename to .eslint-plugin-local/vscode-dts-use-thenable.ts
index 51112482099..683394ad115 100644
--- a/.eslintplugin/vscode-dts-use-thenable.ts
+++ b/.eslint-plugin-local/vscode-dts-use-thenable.ts
@@ -10,7 +10,8 @@ export = new class ApiEventNaming implements eslint.Rule.RuleModule {
readonly meta: eslint.Rule.RuleMetaData = {
messages: {
usage: 'Use the Thenable-type instead of the Promise type',
- }
+ },
+ schema: false,
};
create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
diff --git a/.eslintplugin/vscode-dts-vscode-in-comments.ts b/.eslint-plugin-local/vscode-dts-vscode-in-comments.ts
similarity index 98%
rename from .eslintplugin/vscode-dts-vscode-in-comments.ts
rename to .eslint-plugin-local/vscode-dts-vscode-in-comments.ts
index 8ced8eb25fd..80d3b7003d7 100644
--- a/.eslintplugin/vscode-dts-vscode-in-comments.ts
+++ b/.eslint-plugin-local/vscode-dts-vscode-in-comments.ts
@@ -11,7 +11,8 @@ export = new class ApiVsCodeInComments implements eslint.Rule.RuleModule {
readonly meta: eslint.Rule.RuleMetaData = {
messages: {
comment: `Don't use the term 'vs code' in comments`
- }
+ },
+ schema: false,
};
create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
diff --git a/.eslintplugin/code-no-look-behind-regex.ts b/.eslintplugin/code-no-look-behind-regex.ts
deleted file mode 100644
index 800b59b6479..00000000000
--- a/.eslintplugin/code-no-look-behind-regex.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 * as eslint from 'eslint';
-import { TSESTree } from '@typescript-eslint/experimental-utils';
-import * as ESTree from 'estree';
-
-//------------------------------------------------------------------------------
-// Rule Definition
-//------------------------------------------------------------------------------
-
-const _positiveLookBehind = /\(\?<=.+/;
-const _negativeLookBehind = /\(\? {
- type RegexLiteral = TSESTree.Literal & { regex: { pattern: string; flags: string } };
- const pattern = (node).regex?.pattern;
- if (_containsLookBehind(pattern)) {
- context.report({
- node,
- message: 'Look behind assertions are not yet supported in all browsers'
- });
- }
- },
- // new Regex("...")
- ['NewExpression[callee.name="RegExp"] Literal']: (node: ESTree.Literal) => {
- if (_containsLookBehind(node.value)) {
- context.report({
- node,
- message: 'Look behind assertions are not yet supported in all browsers'
- });
- }
- }
- };
- }
-};
diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs
index c0c9a544148..203e213b629 100644
--- a/.git-blame-ignore-revs
+++ b/.git-blame-ignore-revs
@@ -26,3 +26,6 @@ ee1655a82ebdfd38bf8792088a6602c69f7bbd94
# jrieken: new eslint-rule
4a130c40ed876644ed8af2943809d08221375408
+
+# bpasero: ESM migration
+6b924c51528e663dda5091a1493229a361676aca
diff --git a/.github/actions/cache-multi-paths/action.yml b/.github/actions/cache-multi-paths/action.yml
index 1026a3419d3..898c88cf06e 100644
--- a/.github/actions/cache-multi-paths/action.yml
+++ b/.github/actions/cache-multi-paths/action.yml
@@ -8,39 +8,39 @@ runs:
uses: actions/cache@v4
with:
path: ./node_modules
- key: cache-root-v4-${{ runner.os }}-${{ hashFiles('./yarn.lock') }}
+ key: cache-root-v4-${{ runner.os }}-${{ hashFiles('./package-lock.json') }}
- name: Cache build
id: cache-build
uses: actions/cache@v4
with:
path: ./build/node_modules
- key: cache-build-v4-${{ runner.os }}-${{ hashFiles('build/yarn.lock') }}
+ key: cache-build-v4-${{ runner.os }}-${{ hashFiles('build/package-lock.json') }}
- name: Cache extensions
id: cache-extensions
uses: actions/cache@v4
with:
path: ./extensions/node_modules
- key: cache-extensions-v4-${{ runner.os }}-${{ hashFiles('extensions/yarn.lock') }}
+ key: cache-extensions-v4-${{ runner.os }}-${{ hashFiles('extensions/package-lock.json') }}
- name: Cache nested extensions
id: cache-nested-extensions
uses: actions/cache@v4
with:
path: ./extensions/**/node_modules
- key: cache-nested-extensions-v4-${{ runner.os }}-${{ hashFiles('extensions/**/yarn.lock') }}
+ key: cache-nested-extensions-v4-${{ runner.os }}-${{ hashFiles('extensions/**/package-lock.json') }}
- name: Cache remote
id: cache-remote
uses: actions/cache@v4
with:
path: ./remote/node_modules
- key: cache-remote-v4-${{ runner.os }}-${{ hashFiles('remote/yarn.lock') }}
+ key: cache-remote-v4-${{ runner.os }}-${{ hashFiles('remote/package-lock.json') }}
- name: Cache nested remote
id: cache-nested-remote
uses: actions/cache@v4
with:
path: ./remote/**/node_modules
- key: cache-nested-remote-v4-${{ runner.os }}-${{ hashFiles('remote/**/yarn.lock') }}
+ key: cache-nested-remote-v4-${{ runner.os }}-${{ hashFiles('remote/**/package-lock.json') }}
diff --git a/.github/actions/setup-build-env/action.yml b/.github/actions/setup-build-env/action.yml
index 479db7bf045..df699d574ac 100644
--- a/.github/actions/setup-build-env/action.yml
+++ b/.github/actions/setup-build-env/action.yml
@@ -13,29 +13,25 @@ runs:
libgtk-3-0 libgbm1 libnss3 libnspr4 libasound2 libkrb5-dev libcairo-dev \
libsdl-pango-dev libjpeg-dev libgif-dev pandoc
- - name: Execute yarn
+ - name: Install Node packages
shell: bash
env:
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
ELECTRON_SKIP_BINARY_DOWNLOAD: 1
POSITRON_GITHUB_PAT: ${{ github.token }}
run: |
- # Enable corepack (for yarn)
- corepack enable
+ # Install node-gyp; this is required by some packages
+ npm i --global node-gyp
- # Install node-gyp; this is required by some packages, and yarn
- # sometimes fails to automatically install it.
- yarn global add node-gyp
-
- # Perform the main yarn command; this installs all Node packages and
+ # Perform the main npm command; this installs all Node packages and
# dependencies
- yarn --immutable --network-timeout 120000
- yarn --cwd test/automation install --frozen-lockfile
- yarn --cwd test/e2e install --frozen-lockfile
+ npm ci --fetch-timeout 120000
+ npm --prefix test/automation ci
+ npm --prefix test/e2e ci
- name: Compile and Download
shell: bash
- run: yarn npm-run-all --max_old_space_size=4095 -lp compile "electron x64" playwright-install download-builtin-extensions
+ run: npm exec -- npm-run-all --max_old_space_size=4095 -lp compile "electron x64" playwright-install download-builtin-extensions
# Although not directly part of the build environment, this configuration is essential for running unit, integration, and e2e tests.
- name: Configure xvfb Service
diff --git a/.github/actions/setup-test-env/action.yml b/.github/actions/setup-test-env/action.yml
index c7b3294beea..950922fce48 100644
--- a/.github/actions/setup-test-env/action.yml
+++ b/.github/actions/setup-test-env/action.yml
@@ -16,7 +16,7 @@ runs:
steps:
- name: Compile E2E Tests
shell: bash
- run: yarn --cwd test/automation compile && yarn --cwd test/e2e compile
+ run: npm --prefix test/automation run compile && npm --prefix test/e2e run compile
- name: Setup AWS S3 Access
uses: aws-actions/configure-aws-credentials@v4
diff --git a/.github/actions/setup-unit-test-env/action.yml b/.github/actions/setup-unit-test-env/action.yml
new file mode 100644
index 00000000000..27782447b7b
--- /dev/null
+++ b/.github/actions/setup-unit-test-env/action.yml
@@ -0,0 +1,27 @@
+name: "Setup Unit Test Environment"
+description: "Installs necessary system dependencies."
+runs:
+ using: "composite"
+ steps:
+ - name: Install Unit Test Dependencies
+ shell: bash
+ run: |
+ sudo apt-get update
+ sudo apt-get install -y \
+ libwoff1 \
+ libvpx7 \
+ libevent-2.1-7 \
+ libgstreamer-plugins-base1.0-0 \
+ libgstreamer1.0-0 \
+ libflite1 \
+ libavif13 \
+ libhyphen0 \
+ libmanette-0.2-0 \
+ libgl1-mesa-glx \
+ libx264-dev \
+ libgstreamer-gl1.0-0 \
+ gstreamer1.0-plugins-base \
+ gstreamer1.0-plugins-good \
+ gstreamer1.0-plugins-bad \
+ libgles2-mesa
+
diff --git a/.github/classifier.json b/.github/classifier.json
index d0a2c778997..5f322e25edd 100644
--- a/.github/classifier.json
+++ b/.github/classifier.json
@@ -124,7 +124,7 @@
"languages-basic": {"assign": ["aeschli"]},
"languages-diagnostics": {"assign": ["jrieken"]},
"languages-guessing": {"assign": ["TylerLeonhardt"]},
- "layout": {"assign": ["sbatten"]},
+ "layout": {"assign": ["benibenj"]},
"lcd-text-rendering": {"assign": []},
"list-widget": {"assign": ["joaomoreno"]},
"live-preview": {"assign": ["andreamah"]},
@@ -249,7 +249,7 @@
"timeline": {"assign": ["lramos15"]},
"timeline-git": {"assign": ["lszomoru"]},
"timeline-local-history": {"assign": ["bpasero"]},
- "titlebar": {"assign": ["sbatten"]},
+ "titlebar": {"assign": ["benibenj"]},
"tokenization": {"assign": ["alexdima"]},
"touch/pointer": {"assign": []},
"trackpad/scroll": {"assign": []},
@@ -278,7 +278,7 @@
"workbench-cli": {"assign": ["bpasero"]},
"workbench-diagnostics": {"assign": ["Tyriar"]},
"workbench-dnd": {"assign": ["bpasero"]},
- "workbench-editor-grid": {"assign": ["sbatten"]},
+ "workbench-editor-grid": {"assign": ["benibenj"]},
"workbench-editor-groups": {"assign": ["bpasero"]},
"workbench-editor-resolver": {"assign": ["lramos15"]},
"workbench-editors": {"assign": ["bpasero"]},
@@ -299,11 +299,11 @@
"workbench-tabs": {"assign": ["benibenj"]},
"workbench-touchbar": {"assign": ["bpasero"]},
"workbench-untitled-editors": {"assign": ["bpasero"]},
- "workbench-views": {"assign": ["sbatten"]},
+ "workbench-views": {"assign": ["benibenj"]},
"workbench-welcome": {"assign": ["lramos15"]},
"workbench-window": {"assign": ["bpasero"]},
"workbench-workspace": {"assign": []},
- "workbench-zen": {"assign": ["sbatten"]},
+ "workbench-zen": {"assign": ["benibenj"]},
"workspace-edit": {"assign": ["jrieken"]},
"workspace-symbols": {"assign": []},
"workspace-trust": {"assign": ["lszomoru", "sbatten"]},
diff --git a/.github/workflows/basic.yml b/.github/workflows/basic.yml
index 8448d05c3b8..d5f166a4aae 100644
--- a/.github/workflows/basic.yml
+++ b/.github/workflows/basic.yml
@@ -42,26 +42,26 @@ jobs:
with:
path: "**/node_modules"
key: ${{ runner.os }}-cacheNodeModulesLinux-${{ steps.nodeModulesCacheKey.outputs.value }}
- - name: Get yarn cache directory path
- id: yarnCacheDirPath
+ - name: Get npm cache directory path
+ id: npmCacheDirPath
if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' }}
- run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT
- - name: Cache yarn directory
+ run: echo "dir=$(npm config get cache)" >> $GITHUB_OUTPUT
+ - name: Cache npm directory
if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' }}
uses: actions/cache@v4
with:
- path: ${{ steps.yarnCacheDirPath.outputs.dir }}
- key: ${{ runner.os }}-yarnCacheDir-${{ steps.nodeModulesCacheKey.outputs.value }}
- restore-keys: ${{ runner.os }}-yarnCacheDir-
- - name: Execute yarn
+ path: ${{ steps.npmCacheDirPath.outputs.dir }}
+ key: ${{ runner.os }}-npmCacheDir-${{ steps.nodeModulesCacheKey.outputs.value }}
+ restore-keys: ${{ runner.os }}-npmCacheDir-
+ - name: Execute npm
if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' }}
env:
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
ELECTRON_SKIP_BINARY_DOWNLOAD: 1
- run: yarn --frozen-lockfile --network-timeout 180000
+ run: npm ci
- name: Compile and Download
- run: yarn npm-run-all --max-old-space-size=4095 -lp compile "electron x64"
+ run: npm exec -- npm-run-all -lp compile "electron x64"
- name: Run Unit Tests
id: electron-unit-tests
@@ -94,44 +94,45 @@ jobs:
with:
path: "**/node_modules"
key: ${{ runner.os }}-cacheNodeModulesLinux-${{ steps.nodeModulesCacheKey.outputs.value }}
- - name: Get yarn cache directory path
- id: yarnCacheDirPath
+ - name: Get npm cache directory path
+ id: npmCacheDirPath
if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' }}
- run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT
- - name: Cache yarn directory
+ run: echo "dir=$(npm config get cache)" >> $GITHUB_OUTPUT
+ - name: Cache npm directory
if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' }}
uses: actions/cache@v4
with:
- path: ${{ steps.yarnCacheDirPath.outputs.dir }}
- key: ${{ runner.os }}-yarnCacheDir-${{ steps.nodeModulesCacheKey.outputs.value }}
- restore-keys: ${{ runner.os }}-yarnCacheDir-
- - name: Execute yarn
+ path: ${{ steps.npmCacheDirPath.outputs.dir }}
+ key: ${{ runner.os }}-npmCacheDir-${{ steps.nodeModulesCacheKey.outputs.value }}
+ restore-keys: ${{ runner.os }}-npmCacheDir-
+ - name: Execute npm
if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' }}
env:
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
ELECTRON_SKIP_BINARY_DOWNLOAD: 1
- run: yarn --frozen-lockfile --network-timeout 180000
+ run: npm ci
- name: Run Hygiene Checks
- run: yarn gulp hygiene
+ run: npm run gulp hygiene
- name: Run Valid Layers Checks
- run: yarn valid-layers-check
+ run: npm run valid-layers-check
- name: Compile /build/
- run: yarn --cwd build compile
+ run: npm run compile
+ working-directory: build
- name: Check clean git state
run: ./.github/workflows/check-clean-git-state.sh
- name: Run eslint
- run: yarn eslint
+ run: npm run eslint
- name: Run vscode-dts Compile Checks
- run: yarn vscode-dts-compile-check
+ run: npm run vscode-dts-compile-check
- name: Run Trusted Types Checks
- run: yarn tsec-compile-check
+ run: npm run tsec-compile-check
warm-cache:
name: Warm up node modules cache
@@ -156,20 +157,20 @@ jobs:
with:
path: "**/node_modules"
key: ${{ runner.os }}-cacheNodeModulesLinux-${{ steps.nodeModulesCacheKey.outputs.value }}
- - name: Get yarn cache directory path
- id: yarnCacheDirPath
+ - name: Get npm cache directory path
+ id: npmCacheDirPath
if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' }}
- run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT
- - name: Cache yarn directory
+ run: echo "dir=$(npm config get cache)" >> $GITHUB_OUTPUT
+ - name: Cache npm directory
if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' }}
uses: actions/cache@v4
with:
- path: ${{ steps.yarnCacheDirPath.outputs.dir }}
- key: ${{ runner.os }}-yarnCacheDir-${{ steps.nodeModulesCacheKey.outputs.value }}
- restore-keys: ${{ runner.os }}-yarnCacheDir-
- - name: Execute yarn
+ path: ${{ steps.npmCacheDirPath.outputs.dir }}
+ key: ${{ runner.os }}-npmCacheDir-${{ steps.nodeModulesCacheKey.outputs.value }}
+ restore-keys: ${{ runner.os }}-npmCacheDir-
+ - name: Execute npm
if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' }}
env:
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
ELECTRON_SKIP_BINARY_DOWNLOAD: 1
- run: yarn --frozen-lockfile --network-timeout 180000
+ run: npm ci
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 097bdcf8c2c..4cd97c13b77 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -18,7 +18,6 @@ jobs:
runs-on: windows-2022
timeout-minutes: 60
env:
- CHILD_CONCURRENCY: "1"
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- uses: actions/checkout@v4
@@ -29,7 +28,7 @@ jobs:
- uses: actions/setup-python@v5
with:
- python-version: "2.x"
+ python-version: "3.x"
- name: Compute node modules cache key
id: nodeModulesCacheKey
@@ -43,23 +42,24 @@ jobs:
- name: Extract node_modules archive
if: ${{ steps.cacheNodeModules.outputs.cache-hit == 'true' }}
run: 7z.exe x .build/node_modules_cache/cache.7z -aos
- - name: Get yarn cache directory path
- id: yarnCacheDirPath
+ - name: Get npm cache directory path
+ id: npmCacheDirPath
if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' }}
- run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT
- - name: Cache yarn directory
+ run: echo "dir=$(npm config get cache)" >> $GITHUB_OUTPUT
+ - name: Cache npm directory
if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' }}
uses: actions/cache@v4
with:
- path: ${{ steps.yarnCacheDirPath.outputs.dir }}
- key: ${{ runner.os }}-yarnCacheDir-${{ steps.nodeModulesCacheKey.outputs.value }}
- restore-keys: ${{ runner.os }}-yarnCacheDir-
- - name: Execute yarn
+ path: ${{ steps.npmCacheDirPath.outputs.dir }}
+ key: ${{ runner.os }}-npmCacheDir-${{ steps.nodeModulesCacheKey.outputs.value }}
+ restore-keys: ${{ runner.os }}-npmCacheDir-
+ - name: Execute npm
if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' }}
env:
+ npm_config_foreground_scripts: "true"
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
ELECTRON_SKIP_BINARY_DOWNLOAD: 1
- run: yarn --frozen-lockfile --network-timeout 180000
+ run: npm ci
- name: Create node_modules archive
if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' }}
run: |
@@ -69,19 +69,20 @@ jobs:
7z.exe a .build/node_modules_cache/cache.7z -mx3 `@.build/node_modules_list.txt
- name: Compile and Download
- run: yarn npm-run-all --max-old-space-size=4095 -lp compile "electron x64" playwright-install download-builtin-extensions
+ run: npm exec -- npm-run-all -lp compile "electron x64" playwright-install download-builtin-extensions
- name: Compile Integration Tests
- run: yarn --cwd test/integration/browser compile
+ run: npm run compile
+ working-directory: test/integration/browser
- name: Run Unit Tests (Electron)
run: .\scripts\test.bat
- name: Run Unit Tests (node.js)
- run: yarn test-node
+ run: npm run test-node
- name: Run Unit Tests (Browser, Chromium)
- run: yarn test-browser-no-install --browser chromium
+ run: npm run test-browser-no-install -- --browser chromium
- name: Run Integration Tests (Electron)
run: .\scripts\test-integration.bat
@@ -126,29 +127,33 @@ jobs:
with:
path: "**/node_modules"
key: ${{ runner.os }}-cacheNodeModulesLinux-${{ steps.nodeModulesCacheKey.outputs.value }}
- - name: Get yarn cache directory path
- id: yarnCacheDirPath
+ - name: Get npm cache directory path
+ id: npmCacheDirPath
if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' }}
- run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT
- - name: Cache yarn directory
+ run: echo "dir=$(npm config get cache)" >> $GITHUB_OUTPUT
+ - name: Cache npm directory
if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' }}
uses: actions/cache@v4
with:
- path: ${{ steps.yarnCacheDirPath.outputs.dir }}
- key: ${{ runner.os }}-yarnCacheDir-${{ steps.nodeModulesCacheKey.outputs.value }}
- restore-keys: ${{ runner.os }}-yarnCacheDir-
- - name: Execute yarn
+ path: ${{ steps.npmCacheDirPath.outputs.dir }}
+ key: ${{ runner.os }}-npmCacheDir-${{ steps.nodeModulesCacheKey.outputs.value }}
+ restore-keys: ${{ runner.os }}-npmCacheDir-
+ - name: Execute npm
if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' }}
env:
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
ELECTRON_SKIP_BINARY_DOWNLOAD: 1
- run: yarn --frozen-lockfile --network-timeout 180000
+ run: npm ci
- name: Compile and Download
- run: yarn npm-run-all --max-old-space-size=4095 -lp compile "electron x64" playwright-install download-builtin-extensions
+ run: npm exec -- npm-run-all -lp compile "electron x64" playwright-install download-builtin-extensions
- name: Compile Integration Tests
- run: yarn --cwd test/integration/browser compile
+ run: npm run compile
+ working-directory: test/integration/browser
+
+ - name: Install Unit Test Dependencies
+ uses: ./.github/actions/setup-unit-test-env
- name: Run Unit Tests (Electron)
id: electron-unit-tests
@@ -156,11 +161,11 @@ jobs:
- name: Run Unit Tests (node.js)
id: nodejs-unit-tests
- run: yarn test-node
+ run: npm run test-node
- name: Run Unit Tests (Browser, Chromium)
id: browser-unit-tests
- run: DISPLAY=:10 yarn test-browser-no-install --browser chromium
+ run: DISPLAY=:10 npm run test-browser-no-install -- --browser chromium
- name: Run Integration Tests (Electron)
id: electron-integration-tests
@@ -197,29 +202,30 @@ jobs:
with:
path: "**/node_modules"
key: ${{ runner.os }}-cacheNodeModulesMacOS-${{ steps.nodeModulesCacheKey.outputs.value }}
- - name: Get yarn cache directory path
- id: yarnCacheDirPath
+ - name: Get npm cache directory path
+ id: npmCacheDirPath
if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' }}
- run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT
- - name: Cache yarn directory
+ run: echo "dir=$(npm config get cache)" >> $GITHUB_OUTPUT
+ - name: Cache npm directory
if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' }}
uses: actions/cache@v4
with:
- path: ${{ steps.yarnCacheDirPath.outputs.dir }}
- key: ${{ runner.os }}-yarnCacheDir-${{ steps.nodeModulesCacheKey.outputs.value }}
- restore-keys: ${{ runner.os }}-yarnCacheDir-
- - name: Execute yarn
+ path: ${{ steps.npmCacheDirPath.outputs.dir }}
+ key: ${{ runner.os }}-npmCacheDir-${{ steps.nodeModulesCacheKey.outputs.value }}
+ restore-keys: ${{ runner.os }}-npmCacheDir-
+ - name: Execute npm
if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' }}
env:
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
ELECTRON_SKIP_BINARY_DOWNLOAD: 1
- run: yarn --frozen-lockfile --network-timeout 180000
+ run: npm ci
- name: Compile and Download
- run: yarn npm-run-all --max-old-space-size=4095 -lp compile "electron x64" playwright-install download-builtin-extensions
+ run: npm exec -- npm-run-all -lp compile "electron x64" playwright-install download-builtin-extensions
- name: Compile Integration Tests
- run: yarn --cwd test/integration/browser compile
+ run: npm run compile
+ working-directory: test/integration/browser
# This is required for SecretStorage unittests
- name: Create temporary keychain
@@ -232,10 +238,10 @@ jobs:
run: DISPLAY=:10 ./scripts/test.sh
- name: Run Unit Tests (node.js)
- run: yarn test-node
+ run: npm run test-node
- name: Run Unit Tests (Browser, Chromium)
- run: DISPLAY=:10 yarn test-browser-no-install --browser chromium
+ run: DISPLAY=:10 npm run test-browser-no-install -- --browser chromium
- name: Run Integration Tests (Electron)
run: DISPLAY=:10 ./scripts/test-integration.sh
@@ -269,44 +275,45 @@ jobs:
with:
path: "**/node_modules"
key: ${{ runner.os }}-cacheNodeModulesLinux-${{ steps.nodeModulesCacheKey.outputs.value }}
- - name: Get yarn cache directory path
- id: yarnCacheDirPath
+ - name: Get npm cache directory path
+ id: npmCacheDirPath
if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' }}
- run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT
- - name: Cache yarn directory
+ run: echo "dir=$(npm config get cache)" >> $GITHUB_OUTPUT
+ - name: Cache npm directory
if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' }}
uses: actions/cache@v4
with:
- path: ${{ steps.yarnCacheDirPath.outputs.dir }}
- key: ${{ runner.os }}-yarnCacheDir-${{ steps.nodeModulesCacheKey.outputs.value }}
- restore-keys: ${{ runner.os }}-yarnCacheDir-
- - name: Execute yarn
+ path: ${{ steps.npmCacheDirPath.outputs.dir }}
+ key: ${{ runner.os }}-npmCacheDir-${{ steps.nodeModulesCacheKey.outputs.value }}
+ restore-keys: ${{ runner.os }}-npmCacheDir-
+ - name: Execute npm
if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' }}
env:
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
ELECTRON_SKIP_BINARY_DOWNLOAD: 1
- run: yarn --frozen-lockfile --network-timeout 180000
+ run: npm ci
- name: Download Playwright
- run: yarn playwright-install
+ run: npm run playwright-install
- name: Run Hygiene Checks
- run: yarn gulp hygiene
+ run: npm run gulp hygiene
- name: Run Valid Layers Checks
- run: yarn valid-layers-check
+ run: npm run valid-layers-check
- name: Compile /build/
- run: yarn --cwd build compile
+ run: npm run compile
+ working-directory: build
- name: Check clean git state
run: ./.github/workflows/check-clean-git-state.sh
- name: Run eslint
- run: yarn eslint
+ run: npm run eslint
- name: Run vscode-dts Compile Checks
- run: yarn vscode-dts-compile-check
+ run: npm run vscode-dts-compile-check
- name: Run Trusted Types Checks
- run: yarn tsec-compile-check
+ run: npm run tsec-compile-check
diff --git a/.github/workflows/monaco-editor.yml b/.github/workflows/monaco-editor.yml
index 8c8ae7b743d..426999ce43b 100644
--- a/.github/workflows/monaco-editor.yml
+++ b/.github/workflows/monaco-editor.yml
@@ -34,43 +34,42 @@ jobs:
path: "**/node_modules"
key: ${{ runner.os }}-cacheNodeModules20-${{ steps.nodeModulesCacheKey.outputs.value }}
restore-keys: ${{ runner.os }}-cacheNodeModules20-
- - name: Get yarn cache directory path
- id: yarnCacheDirPath
+ - name: Get npm cache directory path
+ id: npmCacheDirPath
if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' }}
- run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT
- - name: Cache yarn directory
+ run: echo "dir=$(npm config get cache)" >> $GITHUB_OUTPUT
+ - name: Cache npm directory
if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' }}
uses: actions/cache@v4
with:
- path: ${{ steps.yarnCacheDirPath.outputs.dir }}
- key: ${{ runner.os }}-yarnCacheDir-${{ steps.nodeModulesCacheKey.outputs.value }}
- restore-keys: ${{ runner.os }}-yarnCacheDir-
+ path: ${{ steps.npmCacheDirPath.outputs.dir }}
+ key: ${{ runner.os }}-npmCacheDir-${{ steps.nodeModulesCacheKey.outputs.value }}
+ restore-keys: ${{ runner.os }}-npmCacheDir-
- name: Install libkrb5-dev
if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' }}
run: |
sudo apt update
sudo apt install -y libkrb5-dev
- - name: Execute yarn
+ - name: Execute npm
if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' }}
env:
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
ELECTRON_SKIP_BINARY_DOWNLOAD: 1
run: |
- npm i -g node-gyp@9.4.0
- yarn --frozen-lockfile --network-timeout 180000
+ npm ci
- name: Download Playwright
- run: yarn playwright-install
+ run: npm run playwright-install
- name: Run Monaco Editor Checks
- run: yarn monaco-compile-check
+ run: npm run monaco-compile-check
- name: Editor Distro & ESM
- run: yarn gulp editor-esm
+ run: npm run gulp editor-esm
- name: Editor ESM sources check
working-directory: ./test/monaco
- run: yarn run esm-check
+ run: npm run esm-check
- name: Typings validation prep
run: |
@@ -79,20 +78,20 @@ jobs:
- name: Typings validation
working-directory: ./typings-test
run: |
- yarn init -yp
+ npm init -yp
../node_modules/.bin/tsc --init
echo "import '../out-monaco-editor-core';" > a.ts
../node_modules/.bin/tsc --noEmit
- name: Package Editor with Webpack
working-directory: ./test/monaco
- run: yarn run bundle-webpack
+ run: npm run bundle-webpack
- name: Compile Editor Tests
working-directory: ./test/monaco
- run: yarn run compile
+ run: npm run compile
- name: Run Editor Tests
timeout-minutes: 5
working-directory: ./test/monaco
- run: yarn test
+ run: npm run test
diff --git a/.github/workflows/no-package-lock-changes.yml b/.github/workflows/no-package-lock-changes.yml
new file mode 100644
index 00000000000..45d5d17407b
--- /dev/null
+++ b/.github/workflows/no-package-lock-changes.yml
@@ -0,0 +1,31 @@
+name: Prevent package-lock.json changes in PRs
+on: [pull_request]
+
+jobs:
+ main:
+ name: Prevent package-lock.json changes in PRs
+ runs-on: ubuntu-latest
+ steps:
+ - uses: octokit/request-action@v2.x
+ id: get_permissions
+ with:
+ route: GET /repos/microsoft/vscode/collaborators/{username}/permission
+ username: ${{ github.event.pull_request.user.login }}
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ - name: Set control output variable
+ id: control
+ run: |
+ echo "user: ${{ github.event.pull_request.user.login }}"
+ echo "role: ${{ fromJson(steps.get_permissions.outputs.data).permission }}"
+ echo "is dependabot: ${{ github.event.pull_request.user.login == 'dependabot[bot]' }}"
+ echo "should_run: ${{ !contains(fromJson('["admin", "maintain", "write"]'), fromJson(steps.get_permissions.outputs.data).permission) }}"
+ echo "should_run=${{ !contains(fromJson('["admin", "maintain", "write"]'), fromJson(steps.get_permissions.outputs.data).permission) && github.event.pull_request.user.login != 'dependabot[bot]' }}" >> $GITHUB_OUTPUT
+ - name: Get file changes
+ uses: trilom/file-changes-action@ce38c8ce2459ca3c303415eec8cb0409857b4272
+ if: ${{ steps.control.outputs.should_run == 'true' }}
+ - name: Check for lockfile changes
+ if: ${{ steps.control.outputs.should_run == 'true' }}
+ run: |
+ cat $HOME/files.json | jq -e 'any(test("package-lock\\.json$|Cargo\\.lock$")) | not' \
+ || (echo "Changes to package-lock.json/Cargo.lock files aren't allowed in PRs." && exit 1)
diff --git a/.github/workflows/positron-python-ci.yml b/.github/workflows/positron-python-ci.yml
index 9fea51f0c16..5321e453a15 100644
--- a/.github/workflows/positron-python-ci.yml
+++ b/.github/workflows/positron-python-ci.yml
@@ -40,11 +40,8 @@ jobs:
- name: Install Node ${{ env.NODE_VERSION }}
uses: actions/setup-node@v3
with:
+ cache: 'npm'
node-version: ${{ env.NODE_VERSION }}
- cache: 'yarn'
-
- - name: Install Yarn
- run: npm install -g yarn
- name: Install Python ${{ env.PYTHON_VERSION }}
uses: actions/setup-python@v5
@@ -53,19 +50,19 @@ jobs:
cache: 'pip'
- name: Install Node dependencies
- run: yarn --immutable --network-timeout 120000
+ run: npm ci --fetch-timeout 120000
- name: Run `gulp prePublishNonBundle`
- run: yarn prePublish
+ run: npm run prePublish
- name: Check dependencies
- run: yarn checkDependencies
+ run: npm run checkDependencies
- name: Lint TypeScript code
- run: yarn lint
+ run: npm run lint
- name: Check TypeScript format
- run: yarn format-check
+ run: npm run format-check
- name: Lint and Check Formatting with Ruff
run: |
@@ -207,7 +204,7 @@ jobs:
python -m pip install nox
- name: Run tests
- run: yarn positron:testMinimumPythonReqs
+ run: npm run positron:testMinimumPythonReqs
typescript-tests:
name: Test TypeScript
@@ -250,11 +247,8 @@ jobs:
uses: actions/setup-node@v3
with:
node-version: ${{ env.NODE_VERSION }}
- cache: 'yarn'
- cache-dependency-path: ${{ env.special-working-directory-relative }}/${{ env.PROJECT_DIR }}/yarn.lock
-
- - name: Install Yarn
- run: npm install -g yarn
+ cache: 'npm'
+ cache-dependency-path: ${{ env.special-working-directory-relative }}/${{ env.PROJECT_DIR }}/package-lock.json
- name: Use Python ${{ matrix.python }}
uses: actions/setup-python@v5
@@ -263,10 +257,10 @@ jobs:
cache: 'pip'
- name: Install Node dependencies
- run: yarn --immutable --network-timeout 120000
+ run: npm ci --fetch-timeout 120000
- name: Run `gulp prePublishNonBundle`
- run: yarn prePublish
+ run: npm run prePublish
- name: Localization
run: npx @vscode/l10n-dev@latest export ./src
@@ -353,7 +347,7 @@ jobs:
& $condaExecPath init --all
- name: Prepare VSIX for smoke tests
- run: yarn package --allow-star-activation
+ run: npm run package --allow-star-activation
if: matrix.test-suite == 'smoke'
- name: Set CI_PYTHON_PATH and CI_DISABLE_AUTO_SELECTION
@@ -365,7 +359,7 @@ jobs:
# Run TypeScript unit tests only for Python 3.X.
- name: Run TypeScript unit tests
- run: yarn test:unittests
+ run: npm run test:unittests
if: matrix.test-suite == 'ts-unit' && startsWith(matrix.python, 3.)
# The virtual environment based tests use the `testSingleWorkspace` set of tests
@@ -381,7 +375,7 @@ jobs:
POSITRON_GITHUB_PAT: ${{ github.token }}
uses: GabrielBB/xvfb-action@v1.6
with:
- run: yarn testSingleWorkspace
+ run: npm run testSingleWorkspace
working-directory: ${{ env.special-working-directory }}/${{ env.PROJECT_DIR }}
if: matrix.test-suite == 'venv'
@@ -391,7 +385,7 @@ jobs:
POSITRON_GITHUB_PAT: ${{ github.token }}
uses: GabrielBB/xvfb-action@v1.6
with:
- run: yarn testSingleWorkspace
+ run: npm run testSingleWorkspace
working-directory: ${{ env.special-working-directory }}/${{ env.PROJECT_DIR }}
if: matrix.test-suite == 'single-workspace'
@@ -401,16 +395,16 @@ jobs:
POSITRON_GITHUB_PAT: ${{ github.token }}
uses: GabrielBB/xvfb-action@v1.6
with:
- run: yarn testDebugger
+ run: npm run testDebugger
working-directory: ${{ env.special-working-directory }}/${{ env.PROJECT_DIR }}
if: matrix.test-suite == 'debugger'
- name: Run TypeScript functional tests
- run: yarn test:functional
+ run: npm run test:functional
if: matrix.test-suite == 'functional'
- name: Run smoke tests
env:
POSITRON_GITHUB_PAT: ${{ github.token }}
- run: yarn tsc && node ./out/test/smokeTest.js
+ run: npx tsc && node ./out/test/smokeTest.js
if: matrix.test-suite == 'smoke'
diff --git a/.github/workflows/rich-navigation.yml.off b/.github/workflows/rich-navigation.yml.off
index abfed7783fa..7850fed14cf 100644
--- a/.github/workflows/rich-navigation.yml.off
+++ b/.github/workflows/rich-navigation.yml.off
@@ -11,14 +11,14 @@ jobs:
richnav:
runs-on: windows-2022
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@v3
- uses: actions/cache@v3
id: caching-stage
name: Cache VS Code dependencies
with:
path: node_modules
- key: ${{ runner.os }}-dependencies-${{ hashfiles('yarn.lock') }}
+ key: ${{ runner.os }}-dependencies-${{ hashfiles('package-lock.json') }}
restore-keys: ${{ runner.os }}-dependencies-
- uses: actions/setup-node@v3
@@ -27,9 +27,9 @@ jobs:
- name: Install dependencies
if: steps.caching-stage.outputs.cache-hit != 'true'
- run: yarn --frozen-lockfile
+ run: npm ci
env:
- CHILD_CONCURRENCY: 1
+ npm_config_foreground_scripts: "true"
- uses: microsoft/RichCodeNavIndexer@v0.1
with:
diff --git a/.github/workflows/test-e2e-linux.yml b/.github/workflows/test-e2e-linux.yml
index 7590b33da10..80207eaa298 100644
--- a/.github/workflows/test-e2e-linux.yml
+++ b/.github/workflows/test-e2e-linux.yml
@@ -100,7 +100,7 @@ jobs:
# any parallel processes start, preventing runtime conflicts
- name: Preload Node.js Binary
if: ${{ inputs.project == 'e2e-browser' }}
- run: yarn gulp node
+ run: npm run gulp node
- name: Send Results to GH Summary
uses: ./.github/actions/gen-report-dir
diff --git a/.github/workflows/test-e2e-release.yml b/.github/workflows/test-e2e-release.yml
index 97d7e26ba4e..33804008745 100644
--- a/.github/workflows/test-e2e-release.yml
+++ b/.github/workflows/test-e2e-release.yml
@@ -44,13 +44,11 @@ jobs:
- name: Compile tests
run: |
- corepack enable
- yarn global add node-gyp
- yarn install
- yarn --cwd test/automation install
- yarn --cwd test/e2e install
- yarn --cwd test/automation compile
- yarn --cwd test/e2e compile
+ npm install
+ npm --prefix test/automation install
+ npm --prefix test/e2e install
+ npm --prefix test/automation run compile
+ npm --prefix test/e2e run compile
- name: Get & install latest release
id: get_latest_release
diff --git a/.github/workflows/test-e2e-windows.yml b/.github/workflows/test-e2e-windows.yml
index b517cd4de03..4269b724ca6 100644
--- a/.github/workflows/test-e2e-windows.yml
+++ b/.github/workflows/test-e2e-windows.yml
@@ -73,7 +73,7 @@ jobs:
- name: Cache node_modules, build, extensions, and remote
uses: ./.github/actions/cache-multi-paths
- - name: Install node dependencies with yarn
+ - name: Install node dependencies
env:
npm_config_arch: x64
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
@@ -89,17 +89,17 @@ jobs:
# see https://github.com/posit-dev/positron/issues/3481
run: |
corepack enable
- .\scripts\run-with-retry.ps1 -maxAttempts 3 -command "yarn --network-timeout 120000"
- yarn --cwd test/automation install --frozen-lockfile
- yarn --cwd test/e2e install --frozen-lockfile
+ .\scripts\run-with-retry.ps1 -maxAttempts 3 -command "npm install --fetch-timeout 120000"
+ npm --prefix test/automation ci
+ npm --prefix test/e2e ci
- name: Compile and Download
- run: yarn npm-run-all --max-old-space-size=4095 -lp compile "electron x64" playwright-install download-builtin-extensions
+ run: npm exec -- npm-run-all --max-old-space-size=4095 -lp compile "electron x64" playwright-install download-builtin-extensions
- name: Compile E2E Tests
run: |
- yarn --cwd test/automation compile
- yarn --cwd test/e2e compile
+ npm --prefix test/automation run compile
+ npm --prefix test/e2e run compile
- name: Install python dependencies
run: |
diff --git a/.github/workflows/test-integration.yml b/.github/workflows/test-integration.yml
index cc9b866aa35..ff607a0e8f9 100644
--- a/.github/workflows/test-integration.yml
+++ b/.github/workflows/test-integration.yml
@@ -45,7 +45,7 @@ jobs:
version: "4.4.0"
- name: Compile Integration Tests
- run: yarn --cwd test/integration/browser compile
+ run: npm run --prefix test/integration/browser compile
- name: Run Integration Tests (Electron)
id: electron-integration-tests
diff --git a/.github/workflows/test-unit.yml b/.github/workflows/test-unit.yml
index 0810de85333..4a20d264e19 100644
--- a/.github/workflows/test-unit.yml
+++ b/.github/workflows/test-unit.yml
@@ -50,8 +50,12 @@ jobs:
- name: Run Unit Tests (node.js)
id: nodejs-unit-tests
- run: yarn test-node
+ run: npm run test-node
+
+ - name: Install Unit Test Dependencies
+ uses: ./.github/actions/setup-unit-test-env
- name: Run Unit Tests (Browser, Chromium)
id: browser-unit-tests
- run: DISPLAY=:10 yarn test-browser-no-install --browser chromium
+ run: DISPLAY=:10 npm run test-browser-no-install --browser chromium
+
diff --git a/.gitignore b/.gitignore
index c505ff7d92e..e7f4602b24c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,7 +13,7 @@ coverage/
tags
test_data/
test-results/
-yarn-error.log
+test-results.xml
vscode.lsif
vscode.db
/.profile-oss
diff --git a/.npmrc b/.npmrc
new file mode 100644
index 00000000000..e3a35cce683
--- /dev/null
+++ b/.npmrc
@@ -0,0 +1,7 @@
+disturl="https://electronjs.org/headers"
+target="32.2.1"
+ms_build_id="10427718"
+runtime="electron"
+build_from_source="true"
+legacy-peer-deps="true"
+timeout=180000
diff --git a/.nvmrc b/.nvmrc
index 48b14e6b2b5..2a393af592b 100644
--- a/.nvmrc
+++ b/.nvmrc
@@ -1 +1 @@
-20.14.0
+20.18.0
diff --git a/.vscode-test.js b/.vscode-test.js
index f8eb94a41dc..b0761491a0b 100644
--- a/.vscode-test.js
+++ b/.vscode-test.js
@@ -5,9 +5,15 @@
//@ts-check
-const path = require('path');
+import { createRequire } from 'node:module';
+import { fileURLToPath } from 'url';
+import * as path from 'path';
+import * as os from 'os';
+
+const require = createRequire(import.meta.url);
+const __dirname = path.dirname(fileURLToPath(import.meta.url));
+
const { defineConfig } = require('@vscode/test-cli');
-const os = require('os');
/**
* A list of extension folders who have opted into tests, or configuration objects.
@@ -99,7 +105,7 @@ const defaultLaunchArgs = process.env.API_TESTS_EXTRA_ARGS?.split(' ') || [
'--disable-telemetry', '--skip-welcome', '--skip-release-notes', `--crash-reporter-directory=${__dirname}/.build/crashes`, `--logsPath=${__dirname}/.build/logs/integration-tests`, '--no-cached-data', '--disable-updates', '--use-inmemory-secretstorage', '--disable-extensions', '--disable-workspace-trust'
];
-module.exports = defineConfig(extensions.map(extension => {
+const config = defineConfig(extensions.map(extension => {
/** @type {import('@vscode/test-cli').TestConfiguration} */
const config = typeof extension === 'object'
? { files: `extensions/${extension.label}/out/**/*.test.js`, ...extension }
@@ -141,3 +147,5 @@ module.exports = defineConfig(extensions.map(extension => {
return config;
}));
+
+export default config;
diff --git a/.vscode/extensions/vscode-selfhost-import-aid/.vscode/launch.json b/.vscode/extensions/vscode-selfhost-import-aid/.vscode/launch.json
new file mode 100644
index 00000000000..50b8aedaf72
--- /dev/null
+++ b/.vscode/extensions/vscode-selfhost-import-aid/.vscode/launch.json
@@ -0,0 +1,16 @@
+{
+ "configurations": [
+ {
+ "args": [
+ "--extensionDevelopmentPath=${workspaceFolder}",
+ "--enable-proposed-api=ms-vscode.vscode-selfhost-import-aid"
+ ],
+ "name": "Launch Extension",
+ "outFiles": [
+ "${workspaceFolder}/out/**/*.js"
+ ],
+ "request": "launch",
+ "type": "extensionHost"
+ }
+ ]
+}
diff --git a/.vscode/extensions/vscode-selfhost-import-aid/.vscode/settings.json b/.vscode/extensions/vscode-selfhost-import-aid/.vscode/settings.json
new file mode 100644
index 00000000000..e4429caeee4
--- /dev/null
+++ b/.vscode/extensions/vscode-selfhost-import-aid/.vscode/settings.json
@@ -0,0 +1,7 @@
+{
+ "editor.formatOnSave": true,
+ "editor.defaultFormatter": "vscode.typescript-language-features",
+ "editor.codeActionsOnSave": {
+ "source.organizeImports": "always"
+ }
+}
diff --git a/.vscode/extensions/vscode-selfhost-import-aid/package-lock.json b/.vscode/extensions/vscode-selfhost-import-aid/package-lock.json
new file mode 100644
index 00000000000..5f526aca3e9
--- /dev/null
+++ b/.vscode/extensions/vscode-selfhost-import-aid/package-lock.json
@@ -0,0 +1,31 @@
+{
+ "name": "vscode-selfhost-import-aid",
+ "version": "0.0.1",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "vscode-selfhost-import-aid",
+ "version": "0.0.1",
+ "license": "MIT",
+ "dependencies": {
+ "typescript": "5.5.4"
+ },
+ "engines": {
+ "vscode": "^1.88.0"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "5.5.4",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz",
+ "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ }
+ }
+}
diff --git a/.vscode/extensions/vscode-selfhost-import-aid/package.json b/.vscode/extensions/vscode-selfhost-import-aid/package.json
new file mode 100644
index 00000000000..30f09f9c8e5
--- /dev/null
+++ b/.vscode/extensions/vscode-selfhost-import-aid/package.json
@@ -0,0 +1,29 @@
+{
+ "name": "vscode-selfhost-import-aid",
+ "displayName": "VS Code Selfhost Import Aid",
+ "description": "Util to improve dealing with imports",
+ "engines": {
+ "vscode": "^1.88.0"
+ },
+ "version": "0.0.1",
+ "publisher": "ms-vscode",
+ "categories": [
+ "Other"
+ ],
+ "activationEvents": [
+ "onLanguage:typescript"
+ ],
+ "main": "./out/extension.js",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/microsoft/vscode.git"
+ },
+ "license": "MIT",
+ "scripts": {
+ "compile": "gulp compile-extension:vscode-selfhost-import-aid",
+ "watch": "gulp watch-extension:vscode-selfhost-import-aid"
+ },
+ "dependencies": {
+ "typescript": "5.5.4"
+ }
+}
diff --git a/.vscode/extensions/vscode-selfhost-import-aid/src/extension.ts b/.vscode/extensions/vscode-selfhost-import-aid/src/extension.ts
new file mode 100644
index 00000000000..91627e69f34
--- /dev/null
+++ b/.vscode/extensions/vscode-selfhost-import-aid/src/extension.ts
@@ -0,0 +1,234 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+import * as vscode from 'vscode';
+import * as ts from 'typescript';
+import * as path from 'path';
+
+export async function activate(context: vscode.ExtensionContext) {
+
+ const fileIndex = new class {
+
+ private _currentRun?: Thenable;
+
+ private _disposables: vscode.Disposable[] = [];
+
+ private readonly _index = new Map();
+
+ constructor() {
+ const watcher = vscode.workspace.createFileSystemWatcher('**/*.ts', false, true, false);
+ this._disposables.push(watcher.onDidChange(e => { this._index.set(e.toString(), e); }));
+ this._disposables.push(watcher.onDidDelete(e => { this._index.delete(e.toString()); }));
+ this._disposables.push(watcher);
+
+ this._refresh(false);
+ }
+
+ dispose(): void {
+ for (const disposable of this._disposables) {
+ disposable.dispose();
+ }
+ this._disposables = [];
+ this._index.clear();
+ }
+
+ async all(token: vscode.CancellationToken) {
+
+ await Promise.race([this._currentRun, new Promise(resolve => token.onCancellationRequested(resolve))]);
+
+ if (token.isCancellationRequested) {
+ return undefined;
+ }
+
+ return Array.from(this._index.values());
+ }
+
+ private _refresh(clear: boolean) {
+ // TODO@jrieken LATEST API! findFiles2New
+ this._currentRun = vscode.workspace.findFiles('src/vs/**/*.ts', '{**/node_modules/**,**/extensions/**}').then(all => {
+ if (clear) {
+ this._index.clear();
+ }
+ for (const item of all) {
+ this._index.set(item.toString(), item);
+ }
+ });
+ }
+ };
+
+ const selector: vscode.DocumentSelector = 'typescript';
+
+ function findNodeAtPosition(document: vscode.TextDocument, node: ts.Node, position: vscode.Position): ts.Node | undefined {
+ if (node.getStart() <= document.offsetAt(position) && node.getEnd() >= document.offsetAt(position)) {
+ return ts.forEachChild(node, child => findNodeAtPosition(document, child, position)) || node;
+ }
+ return undefined;
+ }
+
+ function findImportAt(document: vscode.TextDocument, position: vscode.Position): ts.ImportDeclaration | undefined {
+ const sourceFile = ts.createSourceFile(document.fileName, document.getText(), ts.ScriptTarget.Latest, true);
+ const node = findNodeAtPosition(document, sourceFile, position);
+ if (node && ts.isStringLiteral(node) && ts.isImportDeclaration(node.parent)) {
+ return node.parent;
+ }
+ return undefined;
+ }
+
+ const completionProvider = new class implements vscode.CompletionItemProvider {
+ async provideCompletionItems(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken): Promise {
+
+ const index = document.getText().lastIndexOf(' from \'');
+ if (index < 0 || document.positionAt(index).line < position.line) {
+ // line after last import is before position
+ // -> no completion, safe a parse call
+ return undefined;
+ }
+
+ const node = findImportAt(document, position);
+ if (!node) {
+ return undefined;
+ }
+
+ const range = new vscode.Range(document.positionAt(node.moduleSpecifier.pos), document.positionAt(node.moduleSpecifier.end));
+ const uris = await fileIndex.all(token);
+
+ if (!uris) {
+ return undefined;
+ }
+
+ const result = new vscode.CompletionList();
+ result.isIncomplete = true;
+
+ for (const item of uris) {
+
+ if (!item.path.endsWith('.ts')) {
+ continue;
+ }
+
+ let relativePath = path.relative(path.dirname(document.uri.path), item.path);
+ relativePath = relativePath.startsWith('.') ? relativePath : `./${relativePath}`;
+
+ const label = path.basename(item.path, path.extname(item.path));
+ const insertText = ` '${relativePath.replace(/\.ts$/, '.js')}'`;
+ const filterText = ` '${label}'`;
+
+ const completion = new vscode.CompletionItem({
+ label: label,
+ description: vscode.workspace.asRelativePath(item),
+ });
+ completion.kind = vscode.CompletionItemKind.File;
+ completion.insertText = insertText;
+ completion.filterText = filterText;
+ completion.range = range;
+
+ result.items.push(completion);
+ }
+
+ return result;
+ }
+ };
+
+ class ImportCodeActions implements vscode.CodeActionProvider {
+
+ static FixKind = vscode.CodeActionKind.QuickFix.append('esmImport');
+
+ static SourceKind = vscode.CodeActionKind.SourceFixAll.append('esmImport');
+
+ async provideCodeActions(document: vscode.TextDocument, range: vscode.Range | vscode.Selection, context: vscode.CodeActionContext, token: vscode.CancellationToken): Promise {
+
+ if (context.only && ImportCodeActions.SourceKind.intersects(context.only)) {
+ return this._provideFixAll(document, context, token);
+ }
+
+ return this._provideFix(document, range, context, token);
+ }
+
+ private async _provideFixAll(document: vscode.TextDocument, context: vscode.CodeActionContext, token: vscode.CancellationToken): Promise {
+
+ const diagnostics = context.diagnostics
+ .filter(d => d.code === 2307)
+ .sort((a, b) => b.range.start.compareTo(a.range.start));
+
+ if (diagnostics.length === 0) {
+ return undefined;
+ }
+
+ const uris = await fileIndex.all(token);
+ if (!uris) {
+ return undefined;
+ }
+
+ const result = new vscode.CodeAction(`Fix All ESM Imports`, ImportCodeActions.SourceKind);
+ result.edit = new vscode.WorkspaceEdit();
+ result.diagnostics = [];
+
+ for (const diag of diagnostics) {
+
+ const actions = this._provideFixesForDiag(document, diag, uris);
+
+ if (actions.length === 0) {
+ console.log(`ESM: no fixes for "${diag.message}"`);
+ continue;
+ }
+
+ if (actions.length > 1) {
+ console.log(`ESM: more than one fix for "${diag.message}", taking first`);
+ console.log(actions);
+ }
+
+ const [first] = actions;
+ result.diagnostics.push(diag);
+
+ for (const [uri, edits] of first.edit!.entries()) {
+ result.edit.set(uri, edits);
+ }
+ }
+ // console.log(result.edit.get(document.uri));
+ return [result];
+ }
+
+ private async _provideFix(document: vscode.TextDocument, range: vscode.Range | vscode.Selection, context: vscode.CodeActionContext, token: vscode.CancellationToken): Promise {
+ const uris = await fileIndex.all(token);
+ if (!uris) {
+ return [];
+ }
+
+ const diag = context.diagnostics.find(d => d.code === 2307 && d.range.intersection(range));
+ return diag && this._provideFixesForDiag(document, diag, uris);
+ }
+
+ private _provideFixesForDiag(document: vscode.TextDocument, diag: vscode.Diagnostic, uris: Iterable): vscode.CodeAction[] {
+
+ const node = findImportAt(document, diag.range.start)?.moduleSpecifier;
+ if (!node || !ts.isStringLiteral(node)) {
+ return [];
+ }
+
+ const nodeRange = new vscode.Range(document.positionAt(node.pos), document.positionAt(node.end));
+ const name = path.basename(node.text, path.extname(node.text));
+
+ const result: vscode.CodeAction[] = [];
+
+ for (const item of uris) {
+ if (path.basename(item.path, path.extname(item.path)) === name) {
+ let relativePath = path.relative(path.dirname(document.uri.path), item.path).replace(/\.ts$/, '.js');
+ relativePath = relativePath.startsWith('.') ? relativePath : `./${relativePath}`;
+
+ const action = new vscode.CodeAction(`Fix to '${relativePath}'`, ImportCodeActions.FixKind);
+ action.edit = new vscode.WorkspaceEdit();
+ action.edit.replace(document.uri, nodeRange, ` '${relativePath}'`);
+ action.diagnostics = [diag];
+ result.push(action);
+ }
+ }
+
+ return result;
+ }
+ }
+
+ context.subscriptions.push(fileIndex);
+ context.subscriptions.push(vscode.languages.registerCompletionItemProvider(selector, completionProvider));
+ context.subscriptions.push(vscode.languages.registerCodeActionsProvider(selector, new ImportCodeActions(), { providedCodeActionKinds: [ImportCodeActions.FixKind, ImportCodeActions.SourceKind] }));
+}
diff --git a/.vscode/extensions/vscode-selfhost-import-aid/tsconfig.json b/.vscode/extensions/vscode-selfhost-import-aid/tsconfig.json
new file mode 100644
index 00000000000..bbca76708ca
--- /dev/null
+++ b/.vscode/extensions/vscode-selfhost-import-aid/tsconfig.json
@@ -0,0 +1,14 @@
+{
+ "extends": "../../../extensions/tsconfig.base.json",
+ "compilerOptions": {
+ "outDir": "./out",
+ "types": [
+ "node",
+ "mocha",
+ ]
+ },
+ "include": [
+ "src/**/*",
+ "../../../src/vscode-dts/vscode.d.ts"
+ ]
+}
diff --git a/.vscode/extensions/vscode-selfhost-test-provider/package-lock.json b/.vscode/extensions/vscode-selfhost-test-provider/package-lock.json
new file mode 100644
index 00000000000..a71a68e4e36
--- /dev/null
+++ b/.vscode/extensions/vscode-selfhost-test-provider/package-lock.json
@@ -0,0 +1,101 @@
+{
+ "name": "vscode-selfhost-test-provider",
+ "version": "0.4.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "vscode-selfhost-test-provider",
+ "version": "0.4.0",
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/trace-mapping": "^0.3.25",
+ "ansi-styles": "^5.2.0",
+ "cockatiel": "^3.1.3",
+ "istanbul-to-vscode": "^2.0.1"
+ },
+ "devDependencies": {
+ "@types/mocha": "^10.0.6",
+ "@types/node": "20.x"
+ },
+ "engines": {
+ "vscode": "^1.88.0"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.4.15",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
+ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
+ },
+ "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==",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@types/istanbul-lib-coverage": {
+ "version": "2.0.6",
+ "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=="
+ },
+ "node_modules/@types/mocha": {
+ "version": "10.0.6",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.6.tgz",
+ "integrity": "sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==",
+ "dev": true
+ },
+ "node_modules/@types/node": {
+ "version": "20.12.11",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.11.tgz",
+ "integrity": "sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==",
+ "dev": true,
+ "dependencies": {
+ "undici-types": "~5.26.4"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/cockatiel": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/cockatiel/-/cockatiel-3.1.3.tgz",
+ "integrity": "sha512-xC759TpZ69d7HhfDp8m2WkRwEUiCkxY8Ee2OQH/3H6zmy2D/5Sm+zSTbPRa+V2QyjDtpMvjOIAOVjA2gp6N1kQ==",
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/istanbul-to-vscode": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/istanbul-to-vscode/-/istanbul-to-vscode-2.0.1.tgz",
+ "integrity": "sha512-V9Hhr7kX3UvkvkaT1lK3AmCRPkaIAIogQBrduTpNiLTkp1eVsybnJhWiDSVeCQap/3aGeZ2019oIivhX9MNsCQ==",
+ "dependencies": {
+ "@types/istanbul-lib-coverage": "^2.0.6"
+ }
+ },
+ "node_modules/undici-types": {
+ "version": "5.26.5",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
+ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
+ "dev": true
+ }
+ }
+}
diff --git a/.vscode/extensions/vscode-selfhost-test-provider/src/sourceUtils.ts b/.vscode/extensions/vscode-selfhost-test-provider/src/sourceUtils.ts
index 56b26cafda8..3ed21cf5810 100644
--- a/.vscode/extensions/vscode-selfhost-test-provider/src/sourceUtils.ts
+++ b/.vscode/extensions/vscode-selfhost-test-provider/src/sourceUtils.ts
@@ -8,6 +8,7 @@ import * as vscode from 'vscode';
import { TestCase, TestConstruct, TestSuite, VSCodeTest } from './testTree';
const suiteNames = new Set(['suite', 'flakySuite']);
+const testNames = new Set(['test']);
export const enum Action {
Skip,
@@ -19,22 +20,19 @@ export const extractTestFromNode = (src: ts.SourceFile, node: ts.Node, parent: V
return Action.Recurse;
}
- let lhs = node.expression;
- if (isSkipCall(lhs)) {
+ const asSuite = identifyCall(node.expression, suiteNames);
+ const asTest = identifyCall(node.expression, testNames);
+ const either = asSuite || asTest;
+ if (either === IdentifiedCall.Skipped) {
return Action.Skip;
}
-
- if (isPropertyCall(lhs) && lhs.name.text === 'only') {
- lhs = lhs.expression;
+ if (either === IdentifiedCall.Nothing) {
+ return Action.Recurse;
}
const name = node.arguments[0];
const func = node.arguments[1];
- if (!name || !ts.isIdentifier(lhs) || !ts.isStringLiteralLike(name)) {
- return Action.Recurse;
- }
-
- if (!func) {
+ if (!name || !ts.isStringLiteralLike(name) || !func) {
return Action.Recurse;
}
@@ -46,23 +44,45 @@ export const extractTestFromNode = (src: ts.SourceFile, node: ts.Node, parent: V
);
const cparent = parent instanceof TestConstruct ? parent : undefined;
- if (lhs.escapedText === 'test') {
+
+ // we know this is either a suite or a test because we checked for skipped/nothing above
+
+ if (asTest) {
return new TestCase(name.text, range, cparent);
}
- if (suiteNames.has(lhs.escapedText.toString())) {
+ if (asSuite) {
return new TestSuite(name.text, range, cparent);
}
- return Action.Recurse;
+ throw new Error('unreachable');
+};
+
+const enum IdentifiedCall {
+ Nothing,
+ Skipped,
+ IsThing,
+}
+
+const identifyCall = (lhs: ts.Node, needles: ReadonlySet): IdentifiedCall => {
+ if (ts.isIdentifier(lhs)) {
+ return needles.has(lhs.escapedText || lhs.text) ? IdentifiedCall.IsThing : IdentifiedCall.Nothing;
+ }
+
+ if (isPropertyCall(lhs) && lhs.name.text === 'skip') {
+ return needles.has(lhs.expression.text) ? IdentifiedCall.Skipped : IdentifiedCall.Nothing;
+ }
+
+ if (ts.isParenthesizedExpression(lhs) && ts.isConditionalExpression(lhs.expression)) {
+ return Math.max(identifyCall(lhs.expression.whenTrue, needles), identifyCall(lhs.expression.whenFalse, needles));
+ }
+
+ return IdentifiedCall.Nothing;
};
const isPropertyCall = (
- lhs: ts.LeftHandSideExpression
+ lhs: ts.Node
): lhs is ts.PropertyAccessExpression & { expression: ts.Identifier; name: ts.Identifier } =>
ts.isPropertyAccessExpression(lhs) &&
ts.isIdentifier(lhs.expression) &&
ts.isIdentifier(lhs.name);
-
-const isSkipCall = (lhs: ts.LeftHandSideExpression) =>
- isPropertyCall(lhs) && suiteNames.has(lhs.expression.text) && lhs.name.text === 'skip';
diff --git a/.vscode/extensions/vscode-selfhost-test-provider/src/vscodeTestRunner.ts b/.vscode/extensions/vscode-selfhost-test-provider/src/vscodeTestRunner.ts
index 954b847f4a8..b5ffd440b33 100644
--- a/.vscode/extensions/vscode-selfhost-test-provider/src/vscodeTestRunner.ts
+++ b/.vscode/extensions/vscode-selfhost-test-provider/src/vscodeTestRunner.ts
@@ -63,7 +63,7 @@ export abstract class VSCodeTestRunner {
const cp = spawn(await this.binaryPath(), args, {
cwd: this.repoLocation.uri.fsPath,
stdio: 'pipe',
- env: this.getEnvironment(),
+ env: this.getEnvironment(port),
});
// Register a descriptor factory that signals the server when any
@@ -139,7 +139,7 @@ export abstract class VSCodeTestRunner {
});
}
- protected getEnvironment(): NodeJS.ProcessEnv {
+ protected getEnvironment(_remoteDebugPort?: number): NodeJS.ProcessEnv {
return {
...process.env,
ELECTRON_RUN_AS_NODE: undefined,
@@ -261,9 +261,10 @@ export class BrowserTestRunner extends VSCodeTestRunner {
}
/** @override */
- protected override getEnvironment() {
+ protected override getEnvironment(remoteDebugPort?: number) {
return {
- ...super.getEnvironment(),
+ ...super.getEnvironment(remoteDebugPort),
+ PLAYWRIGHT_CHROMIUM_DEBUG_PORT: remoteDebugPort ? String(remoteDebugPort) : undefined,
ELECTRON_RUN_AS_NODE: '1',
};
}
diff --git a/.vscode/extensions/vscode-selfhost-test-provider/yarn.lock b/.vscode/extensions/vscode-selfhost-test-provider/yarn.lock
deleted file mode 100644
index 5dd9568bc9c..00000000000
--- a/.vscode/extensions/vscode-selfhost-test-provider/yarn.lock
+++ /dev/null
@@ -1,60 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
-"@jridgewell/resolve-uri@^3.1.0":
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6"
- integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==
-
-"@jridgewell/sourcemap-codec@^1.4.14":
- version "1.4.15"
- resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
- integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
-
-"@jridgewell/trace-mapping@^0.3.25":
- version "0.3.25"
- resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0"
- integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==
- dependencies:
- "@jridgewell/resolve-uri" "^3.1.0"
- "@jridgewell/sourcemap-codec" "^1.4.14"
-
-"@types/istanbul-lib-coverage@^2.0.6":
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7"
- integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==
-
-"@types/mocha@^10.0.6":
- version "10.0.6"
- resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.6.tgz#818551d39113081048bdddbef96701b4e8bb9d1b"
- integrity sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==
-
-"@types/node@20.x":
- version "20.12.11"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.11.tgz#c4ef00d3507000d17690643278a60dc55a9dc9be"
- integrity sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==
- dependencies:
- undici-types "~5.26.4"
-
-ansi-styles@^5.2.0:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b"
- integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==
-
-cockatiel@^3.1.3:
- version "3.1.3"
- resolved "https://registry.yarnpkg.com/cockatiel/-/cockatiel-3.1.3.tgz#bb1774a498a17e739dd994d56610dc6538b02858"
- integrity sha512-xC759TpZ69d7HhfDp8m2WkRwEUiCkxY8Ee2OQH/3H6zmy2D/5Sm+zSTbPRa+V2QyjDtpMvjOIAOVjA2gp6N1kQ==
-
-istanbul-to-vscode@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/istanbul-to-vscode/-/istanbul-to-vscode-2.0.1.tgz#84994d06e604b68cac7301840f338b1e74eb888b"
- integrity sha512-V9Hhr7kX3UvkvkaT1lK3AmCRPkaIAIogQBrduTpNiLTkp1eVsybnJhWiDSVeCQap/3aGeZ2019oIivhX9MNsCQ==
- dependencies:
- "@types/istanbul-lib-coverage" "^2.0.6"
-
-undici-types@~5.26.4:
- version "5.26.5"
- resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
- integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
diff --git a/.vscode/notebooks/api.github-issues b/.vscode/notebooks/api.github-issues
index c402cca3836..35ea9042ef5 100644
--- a/.vscode/notebooks/api.github-issues
+++ b/.vscode/notebooks/api.github-issues
@@ -7,7 +7,7 @@
{
"kind": 2,
"language": "github-issues",
- "value": "$REPO=repo:microsoft/vscode\n$MILESTONE=milestone:\"August 2024\""
+ "value": "$REPO=repo:microsoft/vscode\n$MILESTONE=milestone:\"October 2024\""
},
{
"kind": 1,
diff --git a/.vscode/notebooks/endgame.github-issues b/.vscode/notebooks/endgame.github-issues
index 450ba41835f..c152f3ad6c6 100644
--- a/.vscode/notebooks/endgame.github-issues
+++ b/.vscode/notebooks/endgame.github-issues
@@ -7,7 +7,7 @@
{
"kind": 2,
"language": "github-issues",
- "value": "$REPOS=repo:microsoft/lsprotocol repo:microsoft/monaco-editor repo:microsoft/vscode repo:microsoft/vscode-anycode repo:microsoft/vscode-autopep8 repo:microsoft/vscode-black-formatter repo:microsoft/vscode-copilot repo:microsoft/vscode-copilot-release repo:microsoft/vscode-dev repo:microsoft/vscode-dev-chrome-launcher repo:microsoft/vscode-emmet-helper repo:microsoft/vscode-extension-telemetry repo:microsoft/vscode-flake8 repo:microsoft/vscode-github-issue-notebooks repo:microsoft/vscode-hexeditor repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-isort repo:microsoft/vscode-js-debug repo:microsoft/vscode-jupyter repo:microsoft/vscode-jupyter-internal repo:microsoft/vscode-l10n repo:microsoft/vscode-livepreview repo:microsoft/vscode-markdown-languageservice repo:microsoft/vscode-markdown-tm-grammar repo:microsoft/vscode-mypy repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-pylint repo:microsoft/vscode-python repo:microsoft/vscode-python-debugger repo:microsoft/vscode-python-tools-extension-template repo:microsoft/vscode-references-view repo:microsoft/vscode-remote-release repo:microsoft/vscode-remote-repositories-github repo:microsoft/vscode-remote-tunnels repo:microsoft/vscode-remotehub repo:microsoft/vscode-settings-sync-server repo:microsoft/vscode-unpkg repo:microsoft/vscode-vsce\n\n$MILESTONE=milestone:\"August 2024\""
+ "value": "$REPOS=repo:microsoft/lsprotocol repo:microsoft/monaco-editor repo:microsoft/vscode repo:microsoft/vscode-anycode repo:microsoft/vscode-autopep8 repo:microsoft/vscode-black-formatter repo:microsoft/vscode-copilot repo:microsoft/vscode-copilot-release repo:microsoft/vscode-dev repo:microsoft/vscode-dev-chrome-launcher repo:microsoft/vscode-emmet-helper repo:microsoft/vscode-extension-telemetry repo:microsoft/vscode-flake8 repo:microsoft/vscode-github-issue-notebooks repo:microsoft/vscode-hexeditor repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-isort repo:microsoft/vscode-js-debug repo:microsoft/vscode-jupyter repo:microsoft/vscode-jupyter-internal repo:microsoft/vscode-l10n repo:microsoft/vscode-livepreview repo:microsoft/vscode-markdown-languageservice repo:microsoft/vscode-markdown-tm-grammar repo:microsoft/vscode-mypy repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-pylint repo:microsoft/vscode-python repo:microsoft/vscode-python-debugger repo:microsoft/vscode-python-tools-extension-template repo:microsoft/vscode-references-view repo:microsoft/vscode-remote-release repo:microsoft/vscode-remote-repositories-github repo:microsoft/vscode-remote-tunnels repo:microsoft/vscode-remotehub repo:microsoft/vscode-settings-sync-server repo:microsoft/vscode-unpkg repo:microsoft/vscode-vsce\n\n$MILESTONE=milestone:\"October 2024\""
},
{
"kind": 1,
diff --git a/.vscode/notebooks/my-endgame.github-issues b/.vscode/notebooks/my-endgame.github-issues
index df0f8a92998..0b0725741fd 100644
--- a/.vscode/notebooks/my-endgame.github-issues
+++ b/.vscode/notebooks/my-endgame.github-issues
@@ -7,7 +7,7 @@
{
"kind": 2,
"language": "github-issues",
- "value": "$REPOS=repo:microsoft/lsprotocol repo:microsoft/monaco-editor repo:microsoft/vscode repo:microsoft/vscode-anycode repo:microsoft/vscode-autopep8 repo:microsoft/vscode-black-formatter repo:microsoft/vscode-copilot repo:microsoft/vscode-copilot-release repo:microsoft/vscode-dev repo:microsoft/vscode-dev-chrome-launcher repo:microsoft/vscode-emmet-helper repo:microsoft/vscode-extension-telemetry repo:microsoft/vscode-flake8 repo:microsoft/vscode-github-issue-notebooks repo:microsoft/vscode-hexeditor repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-isort repo:microsoft/vscode-js-debug repo:microsoft/vscode-jupyter repo:microsoft/vscode-jupyter-internal repo:microsoft/vscode-l10n repo:microsoft/vscode-livepreview repo:microsoft/vscode-markdown-languageservice repo:microsoft/vscode-markdown-tm-grammar repo:microsoft/vscode-mypy repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-pylint repo:microsoft/vscode-python repo:microsoft/vscode-python-debugger repo:microsoft/vscode-python-tools-extension-template repo:microsoft/vscode-references-view repo:microsoft/vscode-remote-release repo:microsoft/vscode-remote-repositories-github repo:microsoft/vscode-remote-tunnels repo:microsoft/vscode-remotehub repo:microsoft/vscode-settings-sync-server repo:microsoft/vscode-unpkg repo:microsoft/vscode-vsce\n\n$MILESTONE=milestone:\"August 2024\"\n\n$MINE=assignee:@me"
+ "value": "$REPOS=repo:microsoft/lsprotocol repo:microsoft/monaco-editor repo:microsoft/vscode repo:microsoft/vscode-anycode repo:microsoft/vscode-autopep8 repo:microsoft/vscode-black-formatter repo:microsoft/vscode-copilot repo:microsoft/vscode-copilot-release repo:microsoft/vscode-dev repo:microsoft/vscode-dev-chrome-launcher repo:microsoft/vscode-emmet-helper repo:microsoft/vscode-extension-telemetry repo:microsoft/vscode-flake8 repo:microsoft/vscode-github-issue-notebooks repo:microsoft/vscode-hexeditor repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-isort repo:microsoft/vscode-js-debug repo:microsoft/vscode-jupyter repo:microsoft/vscode-jupyter-internal repo:microsoft/vscode-l10n repo:microsoft/vscode-livepreview repo:microsoft/vscode-markdown-languageservice repo:microsoft/vscode-markdown-tm-grammar repo:microsoft/vscode-mypy repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-pylint repo:microsoft/vscode-python repo:microsoft/vscode-python-debugger repo:microsoft/vscode-python-tools-extension-template repo:microsoft/vscode-references-view repo:microsoft/vscode-remote-release repo:microsoft/vscode-remote-repositories-github repo:microsoft/vscode-remote-tunnels repo:microsoft/vscode-remotehub repo:microsoft/vscode-settings-sync-server repo:microsoft/vscode-unpkg repo:microsoft/vscode-vsce\n\n$MILESTONE=milestone:\"October 2024\"\n\n$MINE=assignee:@me"
},
{
"kind": 1,
diff --git a/.vscode/notebooks/my-work.github-issues b/.vscode/notebooks/my-work.github-issues
index 979180e758a..c58ceae0d01 100644
--- a/.vscode/notebooks/my-work.github-issues
+++ b/.vscode/notebooks/my-work.github-issues
@@ -7,7 +7,7 @@
{
"kind": 2,
"language": "github-issues",
- "value": "// list of repos we work in\n$REPOS=repo:microsoft/lsprotocol repo:microsoft/monaco-editor repo:microsoft/vscode repo:microsoft/vscode-anycode repo:microsoft/vscode-autopep8 repo:microsoft/vscode-black-formatter repo:microsoft/vscode-copilot repo:microsoft/vscode-copilot-release repo:microsoft/vscode-dev repo:microsoft/vscode-dev-chrome-launcher repo:microsoft/vscode-emmet-helper repo:microsoft/vscode-extension-telemetry repo:microsoft/vscode-flake8 repo:microsoft/vscode-github-issue-notebooks repo:microsoft/vscode-hexeditor repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-isort repo:microsoft/vscode-js-debug repo:microsoft/vscode-jupyter repo:microsoft/vscode-jupyter-internal repo:microsoft/vscode-l10n repo:microsoft/vscode-livepreview repo:microsoft/vscode-markdown-languageservice repo:microsoft/vscode-markdown-tm-grammar repo:microsoft/vscode-mypy repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-pylint repo:microsoft/vscode-python repo:microsoft/vscode-python-debugger repo:microsoft/vscode-python-tools-extension-template repo:microsoft/vscode-references-view repo:microsoft/vscode-remote-release repo:microsoft/vscode-remote-repositories-github repo:microsoft/vscode-remote-tunnels repo:microsoft/vscode-remotehub repo:microsoft/vscode-settings-sync-server repo:microsoft/vscode-unpkg repo:microsoft/vscode-vsce\n\n// current milestone name\n$MILESTONE=milestone:\"August 2024\"\n"
+ "value": "// list of repos we work in\n$REPOS=repo:microsoft/lsprotocol repo:microsoft/monaco-editor repo:microsoft/vscode repo:microsoft/vscode-anycode repo:microsoft/vscode-autopep8 repo:microsoft/vscode-black-formatter repo:microsoft/vscode-copilot repo:microsoft/vscode-copilot-release repo:microsoft/vscode-dev repo:microsoft/vscode-dev-chrome-launcher repo:microsoft/vscode-emmet-helper repo:microsoft/vscode-extension-telemetry repo:microsoft/vscode-flake8 repo:microsoft/vscode-github-issue-notebooks repo:microsoft/vscode-hexeditor repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-isort repo:microsoft/vscode-js-debug repo:microsoft/vscode-jupyter repo:microsoft/vscode-jupyter-internal repo:microsoft/vscode-l10n repo:microsoft/vscode-livepreview repo:microsoft/vscode-markdown-languageservice repo:microsoft/vscode-markdown-tm-grammar repo:microsoft/vscode-mypy repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-pylint repo:microsoft/vscode-python repo:microsoft/vscode-python-debugger repo:microsoft/vscode-python-tools-extension-template repo:microsoft/vscode-references-view repo:microsoft/vscode-remote-release repo:microsoft/vscode-remote-repositories-github repo:microsoft/vscode-remote-tunnels repo:microsoft/vscode-remotehub repo:microsoft/vscode-settings-sync-server repo:microsoft/vscode-unpkg repo:microsoft/vscode-vsce\n\n// current milestone name\n$MILESTONE=milestone:\"October 2024\"\n"
},
{
"kind": 1,
diff --git a/.vscode/settings.json b/.vscode/settings.json
index a4bf1451ca9..425ed146f25 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -8,6 +8,7 @@
"**/.DS_Store": true,
".vscode-test": true,
"cli/target": true,
+ "build/**/*.js.map": true,
"build/**/*.js": {
"when": "$(basename).ts"
}
@@ -35,13 +36,13 @@
"src/vs/workbench/api/test/browser/extHostDocumentData.test.perf-data.ts": true,
"src/vs/base/test/node/uri.test.data.txt": true,
"src/vs/editor/test/node/diffing/fixtures/**": true,
+ "build/loader.min": true
},
"files.readonlyInclude": {
"**/node_modules/**/*.*": true,
"**/yarn.lock": true,
+ "**/package-lock.json": true,
"**/Cargo.lock": true,
- "src/vs/workbench/workbench.web.main.css": true,
- "src/vs/workbench/workbench.desktop.main.css": true,
"build/**/*.js": true,
"out/**": true,
"out-build/**": true,
@@ -51,8 +52,7 @@
"extensions/**/out/**": true,
"test/smoke/out/**": true,
"test/automation/out/**": true,
- "test/integration/browser/out/**": true,
- "src2/**": true,
+ "test/integration/browser/out/**": true
},
"files.readonlyExclude": {
"build/builtin/*.js": true,
@@ -75,9 +75,8 @@
],
"typescript.tsdk": "node_modules/typescript/lib",
"npm.exclude": "**/extensions/**",
- "npm.packageManager": "yarn",
"emmet.excludeLanguages": [],
- "typescript.preferences.importModuleSpecifier": "non-relative",
+ "typescript.preferences.importModuleSpecifier": "relative",
"typescript.preferences.quoteStyle": "single",
"json.schemas": [
{
@@ -166,7 +165,7 @@
"@xterm/headless",
"node-pty",
"vscode-notebook-renderer",
- "src/vs/workbench/workbench.web.main.ts"
+ "src/vs/workbench/workbench.web.main.internal.ts"
],
"[github-issues]": {
"editor.wordWrap": "on"
@@ -176,5 +175,5 @@
100
],
"typescript.enablePromptUseWorkspaceTsdk": true,
- "inlineChat.experimental.onlyZoneWidget": true
+ "eslint.useFlatConfig": true
}
diff --git a/.vscode/shared.code-snippets b/.vscode/shared.code-snippets
index a6f462b79f2..c30e9160b0e 100644
--- a/.vscode/shared.code-snippets
+++ b/.vscode/shared.code-snippets
@@ -49,23 +49,5 @@
"private readonly _onDid$1 = new Emitter<$2>();",
"readonly onDid$1: Event<$2> = this._onDid$1.event;"
],
- },
- "esm-comment": {
- "scope": "typescript,javascript",
- "prefix": "esm-comment",
- "body": [
- "// ESM-comment-begin",
- "$SELECTION$0",
- "// ESM-comment-end",
- ]
- },
- "esm-uncomment": {
- "scope": "typescript,javascript",
- "prefix": "esm-uncomment",
- "body": [
- "// ESM-uncomment-begin",
- "// $SELECTION$0",
- "// ESM-uncomment-end",
- ]
}
}
diff --git a/.vscode/tasks.json b/.vscode/tasks.json
index d8f1cb35dc8..f64e71481ae 100644
--- a/.vscode/tasks.json
+++ b/.vscode/tasks.json
@@ -155,7 +155,7 @@
"problemMatcher": []
},
{
- "label": "Kill VS Code - Build, Yarn, VS Code - Build",
+ "label": "Kill VS Code - Build, Npm, VS Code - Build",
"dependsOn": [
"Kill VS Code - Build",
"npm: install",
diff --git a/.yarnrc b/.yarnrc
deleted file mode 100644
index 94e494ee938..00000000000
--- a/.yarnrc
+++ /dev/null
@@ -1,5 +0,0 @@
-disturl "https://electronjs.org/headers"
-target "30.4.0"
-ms_build_id "10073054"
-runtime "electron"
-build_from_source "true"
diff --git a/ThirdPartyNotices.txt b/ThirdPartyNotices.txt
index 4bcdcc47c9e..1ec3cb94992 100644
--- a/ThirdPartyNotices.txt
+++ b/ThirdPartyNotices.txt
@@ -545,7 +545,7 @@ to the base-name name of the original file, and an extension of txt, html, or si
---------------------------------------------------------
-go-syntax 0.7.5 - MIT
+go-syntax 0.7.7 - MIT
https://github.com/worlpaker/go-syntax
MIT License
@@ -861,7 +861,7 @@ SOFTWARE.
---------------------------------------------------------
-jlelong/vscode-latex-basics 1.9.0 - MIT
+jlelong/vscode-latex-basics 1.7.0 - MIT
https://github.com/jlelong/vscode-latex-basics
Copyright (c) vscode-latex-basics authors
@@ -1562,22 +1562,6 @@ SOFTWARE.
---------------------------------------------------------
-RedCMD/YAML-Syntax-Highlighter 1.1.1 - MIT
-https://github.com/RedCMD/YAML-Syntax-Highlighter
-
-MIT License
-
-Copyright 2024 RedCMD
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
----------------------------------------------------------
-
----------------------------------------------------------
-
redhat-developer/vscode-java 1.26.0 - MIT
https://github.com/redhat-developer/vscode-java
@@ -1618,7 +1602,7 @@ suitability for any purpose.
---------------------------------------------------------
-REditorSupport/vscode-R 2.8.1 - MIT
+REditorSupport/vscode-R 2.8.4 - MIT
https://github.com/REditorSupport/vscode-R
MIT License
@@ -2000,6 +1984,31 @@ to the base-name name of the original file, and an extension of txt, html, or si
---------------------------------------------------------
+textmate/yaml.tmbundle 0.0.0 - TextMate Bundle License
+https://github.com/textmate/yaml.tmbundle
+
+Copyright (c) 2015 FichteFoll
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+---------------------------------------------------------
+
+---------------------------------------------------------
+
trond-snekvik/vscode-rst 1.5.3 - MIT
https://github.com/trond-snekvik/vscode-rst
diff --git a/build/.cachesalt b/build/.cachesalt
index 58a1efc1632..3c6029dc2f4 100644
--- a/build/.cachesalt
+++ b/build/.cachesalt
@@ -1 +1 @@
-2024-08-14T18:12:43.548Z
+2024-09-04T10:21:29.952Z
diff --git a/build/.gitignore b/build/.gitignore
index 7cc357379e5..61cf49cb9a1 100644
--- a/build/.gitignore
+++ b/build/.gitignore
@@ -1,2 +1 @@
-.yarnrc
*.js.map
diff --git a/build/.moduleignore b/build/.moduleignore
index e103872345c..0608dffb4ac 100644
--- a/build/.moduleignore
+++ b/build/.moduleignore
@@ -110,15 +110,13 @@ node-pty/third_party/**
@parcel/watcher/src/**
!@parcel/watcher/build/Release/*.node
-vsda/build/**
-vsda/ci/**
-vsda/src/**
-vsda/.gitignore
-vsda/binding.gyp
-vsda/README.md
-vsda/SECURITY.md
-vsda/targets
+vsda/**
+!vsda/index.js
+!vsda/index.d.ts
+!vsda/package.json
!vsda/build/Release/vsda.node
+!vsda/rust/web/**
+!vsda/rust/bundler/**
@vscode/policy-watcher/build/**
@vscode/policy-watcher/.husky/**
@@ -166,7 +164,7 @@ typescript/lib/tsserverlibrary.js
jschardet/index.js
jschardet/src/**
-# TODO@esm uncomment when we can use jschardet.min.js again jschardet/dist/jschardet.js
+jschardet/dist/jschardet.js
es6-promise/lib/**
diff --git a/build/.npmrc b/build/.npmrc
new file mode 100644
index 00000000000..1b073e71a83
--- /dev/null
+++ b/build/.npmrc
@@ -0,0 +1,5 @@
+disturl="https://nodejs.org/dist"
+runtime="node"
+build_from_source="true"
+legacy-peer-deps="true"
+timeout=180000
diff --git a/build/.webignore b/build/.webignore
index 837366b67f7..d42f9775ba9 100644
--- a/build/.webignore
+++ b/build/.webignore
@@ -14,7 +14,7 @@
jschardet/index.js
jschardet/src/**
-# TODO@esm uncomment when we can use jschardet.min.js again jschardet/dist/jschardet.js
+jschardet/dist/jschardet.js
vscode-textmate/webpack.config.js
diff --git a/build/azure-pipelines/alpine/cli-build-alpine.yml b/build/azure-pipelines/alpine/cli-build-alpine.yml
index a6442dfe290..07321ebcd97 100644
--- a/build/azure-pipelines/alpine/cli-build-alpine.yml
+++ b/build/azure-pipelines/alpine/cli-build-alpine.yml
@@ -19,17 +19,9 @@ steps:
nodejsMirror: https://github.com/joaomoreno/node-mirror/releases/download
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- # Install yarn as the ARM64 build agent is using vanilla Ubuntu
- - ${{ if eq(parameters.VSCODE_BUILD_ALPINE_ARM64, true) }}:
- - task: Npm@1
- displayName: Install yarn
- inputs:
- command: custom
- customCommand: install --global yarn
-
- script: |
set -e
- yarn --frozen-lockfile --ignore-optional
+ npm ci
workingDirectory: build
displayName: Install pipeline build
diff --git a/build/azure-pipelines/alpine/product-build-alpine.yml b/build/azure-pipelines/alpine/product-build-alpine.yml
index b1308555e10..d95d537b359 100644
--- a/build/azure-pipelines/alpine/product-build-alpine.yml
+++ b/build/azure-pipelines/alpine/product-build-alpine.yml
@@ -15,7 +15,7 @@ steps:
- template: ../distro/download-distro.yml@self
- - task: AzureKeyVault@1
+ - task: AzureKeyVault@2
displayName: "Azure Key Vault: Get Secrets"
inputs:
azureSubscription: "vscode-builds-subscription"
@@ -35,12 +35,12 @@ steps:
condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))
displayName: Setup NPM Registry
- - script: mkdir -p .build && node build/azure-pipelines/common/computeNodeModulesCacheKey.js alpine $VSCODE_ARCH > .build/yarnlockhash
+ - script: mkdir -p .build && node build/azure-pipelines/common/computeNodeModulesCacheKey.js alpine $VSCODE_ARCH > .build/packagelockhash
displayName: Prepare node_modules cache key
- task: Cache@2
inputs:
- key: '"node_modules" | .build/yarnlockhash'
+ key: '"node_modules" | .build/packagelockhash'
path: .build/node_modules_cache
cacheHitVar: NODE_MODULES_RESTORED
displayName: Restore node_modules cache
@@ -51,18 +51,17 @@ steps:
- script: |
set -e
- npm config set registry "$NPM_REGISTRY" --location=project
- # npm >v7 deprecated the `always-auth` config option, refs npm/cli@72a7eeb
- # following is a workaround for yarn to send authorization header
- # for GET requests to the registry.
- echo "always-auth=true" >> .npmrc
- yarn config set registry "$NPM_REGISTRY"
+ # Set the private NPM registry to the global npmrc file
+ # so that authentication works for subfolders like build/, remote/, extensions/ etc
+ # which does not have their own .npmrc file
+ npm config set registry "$NPM_REGISTRY"
+ echo "##vso[task.setvariable variable=NPMRC_PATH]$(npm config get userconfig)"
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))
- displayName: Setup NPM & Yarn
+ displayName: Setup NPM
- task: npmAuthenticate@0
inputs:
- workingFile: .npmrc
+ workingFile: $(NPMRC_PATH)
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))
displayName: Setup NPM Authentication
@@ -82,13 +81,14 @@ steps:
- script: |
set -e
+
for i in {1..5}; do # try 5 times
- yarn --frozen-lockfile --check-files && break
- if [ $i -eq 3 ]; then
- echo "Yarn failed too many times" >&2
+ npm ci && break
+ if [ $i -eq 5 ]; then
+ echo "Npm install failed too many times" >&2
exit 1
fi
- echo "Yarn failed $i, trying again..."
+ echo "Npm install failed $i, trying again..."
done
env:
npm_config_arch: $(NPM_ARCH)
@@ -123,7 +123,7 @@ steps:
- script: |
set -e
TARGET=$([ "$VSCODE_ARCH" == "x64" ] && echo "linux-alpine" || echo "alpine-arm64") # TODO@joaomoreno
- yarn gulp vscode-reh-$TARGET-min-ci
+ npm run gulp vscode-reh-$TARGET-min-ci
(cd .. && mv vscode-reh-$TARGET vscode-server-$TARGET) # TODO@joaomoreno
ARCHIVE_PATH=".build/linux/server/vscode-server-$TARGET.tar.gz"
DIR_PATH="$(realpath ../vscode-server-$TARGET)"
@@ -138,7 +138,7 @@ steps:
- script: |
set -e
TARGET=$([ "$VSCODE_ARCH" == "x64" ] && echo "linux-alpine" || echo "alpine-arm64")
- yarn gulp vscode-reh-web-$TARGET-min-ci
+ npm run gulp vscode-reh-web-$TARGET-min-ci
(cd .. && mv vscode-reh-web-$TARGET vscode-server-$TARGET-web) # TODO@joaomoreno
ARCHIVE_PATH=".build/linux/web/vscode-server-$TARGET-web.tar.gz"
DIR_PATH="$(realpath ../vscode-server-$TARGET-web)"
diff --git a/build/azure-pipelines/cli/cli-compile.yml b/build/azure-pipelines/cli/cli-compile.yml
index e77ba78a999..09380b4c834 100644
--- a/build/azure-pipelines/cli/cli-compile.yml
+++ b/build/azure-pipelines/cli/cli-compile.yml
@@ -108,6 +108,31 @@ steps:
${{ pair.key }}: ${{ pair.value }}
- ${{ if contains(parameters.VSCODE_CLI_TARGET, '-windows-') }}:
+ - task: PublishSymbols@2
+ inputs:
+ IndexSources: false
+ SymbolsFolder: $(Build.SourcesDirectory)/cli/target/${{ parameters.VSCODE_CLI_TARGET }}/release
+ SearchPattern: 'code.pdb'
+ SymbolServerType: TeamServices
+ SymbolsProduct: 'code'
+ displayName: Publish Symbols
+
+ - task: CopyFiles@2
+ inputs:
+ SourceFolder: $(Build.SourcesDirectory)/cli/target/${{ parameters.VSCODE_CLI_TARGET }}/release
+ Contents: 'code.*'
+ TargetFolder: $(Agent.TempDirectory)/binskim-cli
+ displayName: Copy files for BinSkim
+
+ - task: BinSkim@4
+ inputs:
+ InputType: Basic
+ Function: analyze
+ TargetPattern: guardianGlob
+ AnalyzeTargetGlob: $(Agent.TempDirectory)/binskim-cli/*.*
+ AnalyzeSymPath: $(Agent.TempDirectory)/binskim-cli
+ displayName: Run BinSkim
+
- powershell: |
. build/azure-pipelines/win32/exec.ps1
$ErrorActionPreference = "Stop"
diff --git a/build/azure-pipelines/cli/cli-darwin-sign.yml b/build/azure-pipelines/cli/cli-darwin-sign.yml
index 75a8235ff3a..b6dc424d690 100644
--- a/build/azure-pipelines/cli/cli-darwin-sign.yml
+++ b/build/azure-pipelines/cli/cli-darwin-sign.yml
@@ -4,7 +4,7 @@ parameters:
default: []
steps:
- - task: AzureKeyVault@1
+ - task: AzureKeyVault@2
displayName: "Azure Key Vault: Get Secrets"
inputs:
azureSubscription: "vscode-builds-subscription"
diff --git a/build/azure-pipelines/cli/cli-win32-sign.yml b/build/azure-pipelines/cli/cli-win32-sign.yml
index f8d11e806f2..e39df13c998 100644
--- a/build/azure-pipelines/cli/cli-win32-sign.yml
+++ b/build/azure-pipelines/cli/cli-win32-sign.yml
@@ -4,7 +4,7 @@ parameters:
default: []
steps:
- - task: AzureKeyVault@1
+ - task: AzureKeyVault@2
displayName: "Azure Key Vault: Get Secrets"
inputs:
azureSubscription: "vscode-builds-subscription"
diff --git a/build/azure-pipelines/cli/install-rust-posix.yml b/build/azure-pipelines/cli/install-rust-posix.yml
index 89867143938..fee56e028f7 100644
--- a/build/azure-pipelines/cli/install-rust-posix.yml
+++ b/build/azure-pipelines/cli/install-rust-posix.yml
@@ -1,7 +1,7 @@
parameters:
- name: channel
type: string
- default: 1.77
+ default: 1.81
- name: targets
default: []
type: object
diff --git a/build/azure-pipelines/cli/install-rust-win32.yml b/build/azure-pipelines/cli/install-rust-win32.yml
index 22fba8d7f6a..45a1cfd188e 100644
--- a/build/azure-pipelines/cli/install-rust-win32.yml
+++ b/build/azure-pipelines/cli/install-rust-win32.yml
@@ -1,7 +1,7 @@
parameters:
- name: channel
type: string
- default: 1.77
+ default: 1.81
- name: targets
default: []
type: object
diff --git a/build/azure-pipelines/common/computeNodeModulesCacheKey.js b/build/azure-pipelines/common/computeNodeModulesCacheKey.js
index fe84d03e1d7..976e096fad2 100644
--- a/build/azure-pipelines/common/computeNodeModulesCacheKey.js
+++ b/build/azure-pipelines/common/computeNodeModulesCacheKey.js
@@ -11,9 +11,10 @@ const { dirs } = require('../../npm/dirs');
const ROOT = path.join(__dirname, '../../../');
const shasum = crypto.createHash('sha256');
shasum.update(fs.readFileSync(path.join(ROOT, 'build/.cachesalt')));
-shasum.update(fs.readFileSync(path.join(ROOT, '.yarnrc')));
-shasum.update(fs.readFileSync(path.join(ROOT, 'remote/.yarnrc')));
-// Add `package.json` and `yarn.lock` files
+shasum.update(fs.readFileSync(path.join(ROOT, '.npmrc')));
+shasum.update(fs.readFileSync(path.join(ROOT, 'build', '.npmrc')));
+shasum.update(fs.readFileSync(path.join(ROOT, 'remote', '.npmrc')));
+// Add `package.json` and `package-lock.json` files
for (const dir of dirs) {
const packageJsonPath = path.join(ROOT, dir, 'package.json');
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath).toString());
@@ -25,8 +26,8 @@ for (const dir of dirs) {
distro: packageJson.distro
};
shasum.update(JSON.stringify(relevantPackageJsonSections));
- const yarnLockPath = path.join(ROOT, dir, 'yarn.lock');
- shasum.update(fs.readFileSync(yarnLockPath));
+ const packageLockPath = path.join(ROOT, dir, 'package-lock.json');
+ shasum.update(fs.readFileSync(packageLockPath));
}
// Add any other command line arguments
for (let i = 2; i < process.argv.length; i++) {
diff --git a/build/azure-pipelines/common/computeNodeModulesCacheKey.ts b/build/azure-pipelines/common/computeNodeModulesCacheKey.ts
index 16bf76796f9..0940c929b54 100644
--- a/build/azure-pipelines/common/computeNodeModulesCacheKey.ts
+++ b/build/azure-pipelines/common/computeNodeModulesCacheKey.ts
@@ -13,10 +13,11 @@ const ROOT = path.join(__dirname, '../../../');
const shasum = crypto.createHash('sha256');
shasum.update(fs.readFileSync(path.join(ROOT, 'build/.cachesalt')));
-shasum.update(fs.readFileSync(path.join(ROOT, '.yarnrc')));
-shasum.update(fs.readFileSync(path.join(ROOT, 'remote/.yarnrc')));
+shasum.update(fs.readFileSync(path.join(ROOT, '.npmrc')));
+shasum.update(fs.readFileSync(path.join(ROOT, 'build', '.npmrc')));
+shasum.update(fs.readFileSync(path.join(ROOT, 'remote', '.npmrc')));
-// Add `package.json` and `yarn.lock` files
+// Add `package.json` and `package-lock.json` files
for (const dir of dirs) {
const packageJsonPath = path.join(ROOT, dir, 'package.json');
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath).toString());
@@ -29,8 +30,8 @@ for (const dir of dirs) {
};
shasum.update(JSON.stringify(relevantPackageJsonSections));
- const yarnLockPath = path.join(ROOT, dir, 'yarn.lock');
- shasum.update(fs.readFileSync(yarnLockPath));
+ const packageLockPath = path.join(ROOT, dir, 'package-lock.json');
+ shasum.update(fs.readFileSync(packageLockPath));
}
// Add any other command line arguments
diff --git a/build/azure-pipelines/config/tsaoptions.json b/build/azure-pipelines/config/tsaoptions.json
new file mode 100644
index 00000000000..e337b577c1c
--- /dev/null
+++ b/build/azure-pipelines/config/tsaoptions.json
@@ -0,0 +1,12 @@
+{
+ "codebaseName": "devdiv_microsoft_vscode",
+ "serviceTreeID": "79c048b2-322f-4ed5-a1ea-252a1250e4b3",
+ "instanceUrl": "https://devdiv.visualstudio.com/defaultcollection",
+ "projectName": "DevDiv",
+ "areaPath": "DevDiv\\VS Code (compliance tracking only)\\Visual Studio Code Client",
+ "notificationAliases": [
+ "monacotools@microsoft.com"
+ ],
+ "validateToolOutput": "None",
+ "allTools": true
+}
diff --git a/build/azure-pipelines/darwin/product-build-darwin-cli-sign.yml b/build/azure-pipelines/darwin/product-build-darwin-cli-sign.yml
index 80e90a52bac..32615c58463 100644
--- a/build/azure-pipelines/darwin/product-build-darwin-cli-sign.yml
+++ b/build/azure-pipelines/darwin/product-build-darwin-cli-sign.yml
@@ -17,31 +17,30 @@ steps:
- script: |
set -e
- npm config set registry "$NPM_REGISTRY" --location=project
- # npm >v7 deprecated the `always-auth` config option, refs npm/cli@72a7eeb
- # following is a workaround for yarn to send authorization header
- # for GET requests to the registry.
- echo "always-auth=true" >> .npmrc
- yarn config set registry "$NPM_REGISTRY"
- workingDirectory: build
+ # Set the private NPM registry to the global npmrc file
+ # so that authentication works for subfolders like build/, remote/, extensions/ etc
+ # which does not have their own .npmrc file
+ npm config set registry "$NPM_REGISTRY"
+ echo "##vso[task.setvariable variable=NPMRC_PATH]$(npm config get userconfig)"
condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))
- displayName: Setup NPM & Yarn
+ displayName: Setup NPM
- task: npmAuthenticate@0
inputs:
- workingFile: build/.npmrc
+ workingFile: $(NPMRC_PATH)
condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))
displayName: Setup NPM Authentication
- script: |
set -e
+
for i in {1..5}; do # try 5 times
- yarn --frozen-lockfile --check-files && break
- if [ $i -eq 3 ]; then
- echo "Yarn failed too many times" >&2
+ npm ci && break
+ if [ $i -eq 5 ]; then
+ echo "Npm install failed too many times" >&2
exit 1
fi
- echo "Yarn failed $i, trying again..."
+ echo "Npm install failed $i, trying again..."
done
workingDirectory: build
displayName: Install build dependencies
diff --git a/build/azure-pipelines/darwin/product-build-darwin-sign.yml b/build/azure-pipelines/darwin/product-build-darwin-sign.yml
index fb8cf8341c3..82a1e89f2ab 100644
--- a/build/azure-pipelines/darwin/product-build-darwin-sign.yml
+++ b/build/azure-pipelines/darwin/product-build-darwin-sign.yml
@@ -13,7 +13,7 @@ steps:
continueOnError: true
displayName: Download ESRPClient
- - task: AzureKeyVault@1
+ - task: AzureKeyVault@2
displayName: "Azure Key Vault: Get Secrets"
inputs:
azureSubscription: "vscode-builds-subscription"
diff --git a/build/azure-pipelines/darwin/product-build-darwin-test.yml b/build/azure-pipelines/darwin/product-build-darwin-test.yml
index c5f9dfb0036..359aa460a59 100644
--- a/build/azure-pipelines/darwin/product-build-darwin-test.yml
+++ b/build/azure-pipelines/darwin/product-build-darwin-test.yml
@@ -7,12 +7,9 @@ parameters:
type: boolean
- name: VSCODE_RUN_SMOKE_TESTS
type: boolean
- - name: VSCODE_BUILD_ESM
- type: boolean
- default: false
steps:
- - script: yarn npm-run-all -lp "electron $(VSCODE_ARCH)" "playwright-install"
+ - script: npm exec -- npm-run-all -lp "electron $(VSCODE_ARCH)" "playwright-install"
env:
GITHUB_TOKEN: "$(github-distro-mixin-password)"
displayName: Download Electron and Playwright
@@ -20,61 +17,35 @@ steps:
- ${{ if eq(parameters.VSCODE_RUN_UNIT_TESTS, true) }}:
- ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:
- - ${{ if eq(parameters.VSCODE_BUILD_ESM, true) }}:
- - script: ./scripts/test-esm.sh --tfs "Unit Tests"
- displayName: Run unit tests (Electron) [ESM]
- timeoutInMinutes: 15
- - script: yarn test-node-esm
- displayName: Run unit tests (node.js) [ESM]
- timeoutInMinutes: 15
- - script: yarn test-browser-esm-no-install --sequential --browser chromium --browser webkit --tfs "Browser Unit Tests"
- env:
- DEBUG: "*browser*"
- displayName: Run unit tests (Browser, Chromium & Webkit) [ESM]
- timeoutInMinutes: 30
- - ${{ if eq(parameters.VSCODE_BUILD_ESM, false) }}:
- - script: ./scripts/test.sh --tfs "Unit Tests"
- displayName: Run unit tests (Electron)
- timeoutInMinutes: 15
- - script: yarn test-node
- displayName: Run unit tests (node.js)
- timeoutInMinutes: 15
- - script: yarn test-browser-no-install --sequential --browser chromium --browser webkit --tfs "Browser Unit Tests"
- env:
- DEBUG: "*browser*"
- displayName: Run unit tests (Browser, Chromium & Webkit)
- timeoutInMinutes: 30
+ - script: ./scripts/test.sh --tfs "Unit Tests"
+ displayName: Run unit tests (Electron)
+ timeoutInMinutes: 15
+ - script: npm run test-node
+ displayName: Run unit tests (node.js)
+ timeoutInMinutes: 15
+ - script: npm run test-browser-no-install -- --sequential --browser chromium --browser webkit --tfs "Browser Unit Tests"
+ env:
+ DEBUG: "*browser*"
+ displayName: Run unit tests (Browser, Chromium & Webkit)
+ timeoutInMinutes: 30
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- - ${{ if eq(parameters.VSCODE_BUILD_ESM, true) }}:
- - script: ./scripts/test-esm.sh --build --tfs "Unit Tests"
- displayName: Run unit tests (Electron) [ESM]
- timeoutInMinutes: 15
- - script: yarn test-node-esm --build
- displayName: Run unit tests (node.js) [ESM]
- timeoutInMinutes: 15
- - script: yarn test-browser-esm-no-install --sequential --build --browser chromium --browser webkit --tfs "Browser Unit Tests"
- env:
- DEBUG: "*browser*"
- displayName: Run unit tests (Browser, Chromium & Webkit) [ESM]
- timeoutInMinutes: 30
- - ${{ if eq(parameters.VSCODE_BUILD_ESM, false) }}:
- - script: ./scripts/test.sh --build --tfs "Unit Tests"
- displayName: Run unit tests (Electron)
- timeoutInMinutes: 15
- - script: yarn test-node --build
- displayName: Run unit tests (node.js)
- timeoutInMinutes: 15
- - script: yarn test-browser-no-install --sequential --build --browser chromium --browser webkit --tfs "Browser Unit Tests"
- env:
- DEBUG: "*browser*"
- displayName: Run unit tests (Browser, Chromium & Webkit)
- timeoutInMinutes: 30
+ - script: ./scripts/test.sh --build --tfs "Unit Tests"
+ displayName: Run unit tests (Electron)
+ timeoutInMinutes: 15
+ - script: npm run test-node -- --build
+ displayName: Run unit tests (node.js)
+ timeoutInMinutes: 15
+ - script: npm run test-browser-no-install -- --sequential --build --browser chromium --browser webkit --tfs "Browser Unit Tests"
+ env:
+ DEBUG: "*browser*"
+ displayName: Run unit tests (Browser, Chromium & Webkit)
+ timeoutInMinutes: 30
- ${{ if eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true) }}:
- script: |
set -e
- yarn gulp \
+ npm run gulp \
compile-extension:configuration-editing \
compile-extension:css-language-features-server \
compile-extension:emmet \
@@ -94,44 +65,24 @@ steps:
displayName: Build integration tests
- ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:
- - ${{ if eq(parameters.VSCODE_BUILD_ESM, true) }}:
- - script: ./scripts/test-integration-esm.sh --tfs "Integration Tests"
- displayName: Run integration tests (Electron) [ESM]
- timeoutInMinutes: 20
- - ${{ if eq(parameters.VSCODE_BUILD_ESM, false) }}:
- - script: ./scripts/test-integration --tfs "Integration Tests"
- displayName: Run integration tests (Electron)
- timeoutInMinutes: 20
+ - script: ./scripts/test-integration --tfs "Integration Tests"
+ displayName: Run integration tests (Electron)
+ timeoutInMinutes: 20
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- - ${{ if eq(parameters.VSCODE_BUILD_ESM, true) }}:
- - script: |
- # Figure out the full absolute path of the product we just built
- # including the remote server and configure the integration tests
- # to run with these builds instead of running out of sources.
- set -e
- APP_ROOT="$(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH)"
- APP_NAME="`ls $APP_ROOT | head -n 1`"
- INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME/Contents/MacOS/Electron" \
- ./scripts/test-integration-esm.sh --build --tfs "Integration Tests"
- env:
- VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-server-darwin-$(VSCODE_ARCH)
- displayName: Run integration tests (Electron) [ESM]
- timeoutInMinutes: 20
- - ${{ if eq(parameters.VSCODE_BUILD_ESM, false) }}:
- - script: |
- # Figure out the full absolute path of the product we just built
- # including the remote server and configure the integration tests
- # to run with these builds instead of running out of sources.
- set -e
- APP_ROOT="$(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH)"
- APP_NAME="`ls $APP_ROOT | head -n 1`"
- INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME/Contents/MacOS/Electron" \
- ./scripts/test-integration.sh --build --tfs "Integration Tests"
- env:
- VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-server-darwin-$(VSCODE_ARCH)
- displayName: Run integration tests (Electron)
- timeoutInMinutes: 20
+ - script: |
+ # Figure out the full absolute path of the product we just built
+ # including the remote server and configure the integration tests
+ # to run with these builds instead of running out of sources.
+ set -e
+ APP_ROOT="$(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH)"
+ APP_NAME="`ls $APP_ROOT | head -n 1`"
+ INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME/Contents/MacOS/Electron" \
+ ./scripts/test-integration.sh --build --tfs "Integration Tests"
+ env:
+ VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-server-darwin-$(VSCODE_ARCH)
+ displayName: Run integration tests (Electron)
+ timeoutInMinutes: 20
- script: ./scripts/test-web-integration.sh --browser webkit
env:
@@ -157,13 +108,14 @@ steps:
condition: succeededOrFailed()
- ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:
- - script: yarn --cwd test/smoke compile
+ - script: npm run compile
+ workingDirectory: test/smoke
displayName: Compile smoke tests
- - script: yarn gulp compile-extension-media
+ - script: npm run gulp compile-extension-media
displayName: Compile extensions for smoke tests
- - script: yarn smoketest-no-compile --tracing
+ - script: npm run smoketest-no-compile -- --tracing
timeoutInMinutes: 20
displayName: Run smoke tests (Electron)
@@ -172,11 +124,11 @@ steps:
set -e
APP_ROOT=$(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH)
APP_NAME="`ls $APP_ROOT | head -n 1`"
- yarn smoketest-no-compile --tracing --build "$APP_ROOT/$APP_NAME"
+ npm run smoketest-no-compile -- --tracing --build "$APP_ROOT/$APP_NAME"
timeoutInMinutes: 20
displayName: Run smoke tests (Electron)
- - script: yarn smoketest-no-compile --web --tracing --headless
+ - script: npm run smoketest-no-compile -- --web --tracing --headless
env:
VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-server-darwin-$(VSCODE_ARCH)-web
timeoutInMinutes: 20
@@ -184,10 +136,10 @@ steps:
- script: |
set -e
- yarn gulp compile-extension:vscode-test-resolver
+ npm run gulp compile-extension:vscode-test-resolver
APP_ROOT=$(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH)
APP_NAME="`ls $APP_ROOT | head -n 1`"
- yarn smoketest-no-compile --tracing --remote --build "$APP_ROOT/$APP_NAME"
+ npm run smoketest-no-compile -- --tracing --remote --build "$APP_ROOT/$APP_NAME"
env:
VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-server-darwin-$(VSCODE_ARCH)
timeoutInMinutes: 20
diff --git a/build/azure-pipelines/darwin/product-build-darwin-universal.yml b/build/azure-pipelines/darwin/product-build-darwin-universal.yml
index f8b201f40d4..e9c53285795 100644
--- a/build/azure-pipelines/darwin/product-build-darwin-universal.yml
+++ b/build/azure-pipelines/darwin/product-build-darwin-universal.yml
@@ -7,7 +7,7 @@ steps:
- template: ../distro/download-distro.yml@self
- - task: AzureKeyVault@1
+ - task: AzureKeyVault@2
displayName: "Azure Key Vault: Get Secrets"
inputs:
azureSubscription: "vscode-builds-subscription"
@@ -20,31 +20,30 @@ steps:
- script: |
set -e
- npm config set registry "$NPM_REGISTRY" --location=project
- # npm >v7 deprecated the `always-auth` config option, refs npm/cli@72a7eeb
- # following is a workaround for yarn to send authorization header
- # for GET requests to the registry.
- echo "always-auth=true" >> .npmrc
- yarn config set registry "$NPM_REGISTRY"
- workingDirectory: build
+ # Set the private NPM registry to the global npmrc file
+ # so that authentication works for subfolders like build/, remote/, extensions/ etc
+ # which does not have their own .npmrc file
+ npm config set registry "$NPM_REGISTRY"
+ echo "##vso[task.setvariable variable=NPMRC_PATH]$(npm config get userconfig)"
condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))
- displayName: Setup NPM & Yarn
+ displayName: Setup NPM
- task: npmAuthenticate@0
inputs:
- workingFile: build/.npmrc
+ workingFile: $(NPMRC_PATH)
condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))
displayName: Setup NPM Authentication
- script: |
set -e
+
for i in {1..5}; do # try 5 times
- yarn --frozen-lockfile --check-files && break
- if [ $i -eq 3 ]; then
- echo "Yarn failed too many times" >&2
+ npm ci && break
+ if [ $i -eq 5 ]; then
+ echo "Npm install failed too many times" >&2
exit 1
fi
- echo "Yarn failed $i, trying again..."
+ echo "Npm install failed $i, trying again..."
done
workingDirectory: build
displayName: Install build dependencies
@@ -67,6 +66,13 @@ steps:
DEBUG=* node build/darwin/create-universal-app.js $(agent.builddirectory)
displayName: Create Universal App
+ - script: |
+ set -e
+ APP_ROOT="$(Agent.BuildDirectory)/VSCode-darwin-$(VSCODE_ARCH)"
+ APP_NAME="`ls $APP_ROOT | head -n 1`"
+ APP_PATH="$APP_ROOT/$APP_NAME" node build/darwin/verify-macho.js universal
+ displayName: Verify arch of Mach-O objects
+
- script: |
set -e
security create-keychain -p pwd $(agent.tempdirectory)/buildagent.keychain
diff --git a/build/azure-pipelines/darwin/product-build-darwin.yml b/build/azure-pipelines/darwin/product-build-darwin.yml
index ccb6b5b35e7..6709b9149c3 100644
--- a/build/azure-pipelines/darwin/product-build-darwin.yml
+++ b/build/azure-pipelines/darwin/product-build-darwin.yml
@@ -9,9 +9,6 @@ parameters:
type: boolean
- name: VSCODE_RUN_SMOKE_TESTS
type: boolean
- - name: VSCODE_BUILD_ESM
- type: boolean
- default: false
steps:
- ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:
@@ -28,7 +25,7 @@ steps:
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- template: ../distro/download-distro.yml@self
- - task: AzureKeyVault@1
+ - task: AzureKeyVault@2
displayName: "Azure Key Vault: Get Secrets"
inputs:
azureSubscription: "vscode-builds-subscription"
@@ -48,12 +45,12 @@ steps:
condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))
displayName: Setup NPM Registry
- - script: mkdir -p .build && node build/azure-pipelines/common/computeNodeModulesCacheKey.js darwin $VSCODE_ARCH > .build/yarnlockhash
+ - script: mkdir -p .build && node build/azure-pipelines/common/computeNodeModulesCacheKey.js darwin $VSCODE_ARCH > .build/packagelockhash
displayName: Prepare node_modules cache key
- task: Cache@2
inputs:
- key: '"node_modules" | .build/yarnlockhash'
+ key: '"node_modules" | .build/packagelockhash'
path: .build/node_modules_cache
cacheHitVar: NODE_MODULES_RESTORED
displayName: Restore node_modules cache
@@ -64,40 +61,33 @@ steps:
- script: |
set -e
- npm config set registry "$NPM_REGISTRY" --location=project
- # npm >v7 deprecated the `always-auth` config option, refs npm/cli@72a7eeb
- # following is a workaround for yarn to send authorization header
- # for GET requests to the registry.
- echo "always-auth=true" >> .npmrc
- yarn config set registry "$NPM_REGISTRY"
+ # Set the private NPM registry to the global npmrc file
+ # so that authentication works for subfolders like build/, remote/, extensions/ etc
+ # which does not have their own .npmrc file
+ npm config set registry "$NPM_REGISTRY"
+ echo "##vso[task.setvariable variable=NPMRC_PATH]$(npm config get userconfig)"
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))
- displayName: Setup NPM & Yarn
+ displayName: Setup NPM
- task: npmAuthenticate@0
inputs:
- workingFile: .npmrc
+ workingFile: $(NPMRC_PATH)
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))
displayName: Setup NPM Authentication
- - script: |
- set -e
- # Refs https://github.com/microsoft/vscode/issues/219893#issuecomment-2209313109
- sudo xcode-select --switch /Applications/Xcode_15.2.app
- condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
- displayName: Switch to Xcode >= 15.1
-
- script: |
set -e
c++ --version
+ xcode-select -print-path
python3 -m pip install setuptools
for i in {1..5}; do # try 5 times
- yarn --frozen-lockfile --check-files && break
- if [ $i -eq 3 ]; then
- echo "Yarn failed too many times" >&2
+ npm ci && break
+ if [ $i -eq 5 ]; then
+ echo "Npm install failed too many times" >&2
exit 1
fi
- echo "Yarn failed $i, trying again..."
+ echo "Npm install failed $i, trying again..."
done
env:
npm_config_arch: $(VSCODE_ARCH)
@@ -134,7 +124,7 @@ steps:
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- script: |
set -e
- yarn gulp vscode-darwin-$(VSCODE_ARCH)-min-ci
+ npm run gulp vscode-darwin-$(VSCODE_ARCH)-min-ci
echo "##vso[task.setvariable variable=BUILT_CLIENT]true"
env:
GITHUB_TOKEN: "$(github-distro-mixin-password)"
@@ -142,7 +132,7 @@ steps:
- script: |
set -e
- yarn gulp vscode-reh-darwin-$(VSCODE_ARCH)-min-ci
+ npm run gulp vscode-reh-darwin-$(VSCODE_ARCH)-min-ci
mv ../vscode-reh-darwin-$(VSCODE_ARCH) ../vscode-server-darwin-$(VSCODE_ARCH) # TODO@joaomoreno
ARCHIVE_PATH=".build/darwin/server/vscode-server-darwin-$(VSCODE_ARCH).zip"
mkdir -p $(dirname $ARCHIVE_PATH)
@@ -154,7 +144,7 @@ steps:
- script: |
set -e
- yarn gulp vscode-reh-web-darwin-$(VSCODE_ARCH)-min-ci
+ npm run gulp vscode-reh-web-darwin-$(VSCODE_ARCH)-min-ci
mv ../vscode-reh-web-darwin-$(VSCODE_ARCH) ../vscode-server-darwin-$(VSCODE_ARCH)-web # TODO@joaomoreno
ARCHIVE_PATH=".build/darwin/server/vscode-server-darwin-$(VSCODE_ARCH)-web.zip"
mkdir -p $(dirname $ARCHIVE_PATH)
@@ -165,7 +155,7 @@ steps:
displayName: Build server (web)
- ${{ else }}:
- - script: yarn gulp transpile-client-swc transpile-extensions
+ - script: npm run gulp transpile-client-esbuild transpile-extensions
env:
GITHUB_TOKEN: "$(github-distro-mixin-password)"
displayName: Transpile
@@ -177,7 +167,6 @@ steps:
VSCODE_RUN_UNIT_TESTS: ${{ parameters.VSCODE_RUN_UNIT_TESTS }}
VSCODE_RUN_INTEGRATION_TESTS: ${{ parameters.VSCODE_RUN_INTEGRATION_TESTS }}
VSCODE_RUN_SMOKE_TESTS: ${{ parameters.VSCODE_RUN_SMOKE_TESTS }}
- VSCODE_BUILD_ESM: ${{ parameters.VSCODE_BUILD_ESM }}
- ${{ elseif and(ne(parameters.VSCODE_CIBUILD, true), ne(parameters.VSCODE_QUALITY, 'oss')) }}:
- task: DownloadPipelineArtifact@2
@@ -199,6 +188,14 @@ steps:
chmod +x "$APP_PATH/Contents/Resources/app/bin/$CLI_APP_NAME"
displayName: Make CLI executable
+ - script: |
+ set -e
+ APP_ROOT="$(Agent.BuildDirectory)/VSCode-darwin-$(VSCODE_ARCH)"
+ APP_NAME="`ls $APP_ROOT | head -n 1`"
+ APP_PATH="$APP_ROOT/$APP_NAME" node build/darwin/verify-macho.js $(VSCODE_ARCH)
+ APP_PATH="$(Agent.BuildDirectory)/vscode-server-darwin-$(VSCODE_ARCH)" node build/darwin/verify-macho.js $(VSCODE_ARCH)
+ displayName: Verify arch of Mach-O objects
+
# Setting hardened entitlements is a requirement for:
# * Apple notarization
# * Running tests on Big Sur (because Big Sur has additional security precautions)
diff --git a/build/azure-pipelines/distro-build.yml b/build/azure-pipelines/distro-build.yml
index ee5dd5d9919..ae11345bb6d 100644
--- a/build/azure-pipelines/distro-build.yml
+++ b/build/azure-pipelines/distro-build.yml
@@ -1,5 +1,6 @@
pool:
- vmImage: "ubuntu-latest"
+ name: 1es-ubuntu-22.04-x64
+ os: linux
trigger:
branches:
diff --git a/build/azure-pipelines/distro/download-distro.yml b/build/azure-pipelines/distro/download-distro.yml
index a703992aab2..92325762a60 100644
--- a/build/azure-pipelines/distro/download-distro.yml
+++ b/build/azure-pipelines/distro/download-distro.yml
@@ -1,5 +1,5 @@
steps:
- - task: AzureKeyVault@1
+ - task: AzureKeyVault@2
displayName: "Azure Key Vault: Get Secrets"
inputs:
azureSubscription: "vscode-builds-subscription"
@@ -51,6 +51,5 @@ steps:
unzip $ArchivePath -d .build
mv .build/microsoft-vscode-distro-$DistroVersion .build/distro
- cp remote/.yarnrc .build/distro/npm/remote/.yarnrc
condition: and(succeeded(), not(contains(variables['Agent.OS'], 'windows')))
displayName: Download distro (non-Windows)
diff --git a/build/azure-pipelines/linux/apt-retry.sh b/build/azure-pipelines/linux/apt-retry.sh
new file mode 100755
index 00000000000..358f34cd308
--- /dev/null
+++ b/build/azure-pipelines/linux/apt-retry.sh
@@ -0,0 +1,42 @@
+#!/bin/sh
+################################################################################
+## Copied from https://github.com/actions/runner-images/blob/ubuntu22/20240825.1/images/ubuntu/scripts/build/configure-apt-mock.sh
+################################################################################
+
+i=1
+while [ $i -le 30 ];do
+ err=$(mktemp)
+ "$@" 2>$err
+
+ # no errors, break the loop and continue normal flow
+ test -f $err || break
+ cat $err >&2
+
+ retry=false
+
+ if grep -q 'Could not get lock' $err;then
+ # apt db locked needs retry
+ retry=true
+ elif grep -q 'Could not open file /var/lib/apt/lists' $err;then
+ # apt update is not completed, needs retry
+ retry=true
+ elif grep -q 'IPC connect call failed' $err;then
+ # the delay should help with gpg-agent not ready
+ retry=true
+ elif grep -q 'Temporary failure in name resolution' $err;then
+ # It looks like DNS is not updated with random generated hostname yet
+ retry=true
+ elif grep -q 'dpkg frontend is locked by another process' $err;then
+ # dpkg process is busy by another process
+ retry=true
+ fi
+
+ rm $err
+ if [ $retry = false ]; then
+ break
+ fi
+
+ sleep 5
+ echo "...retry $i"
+ i=$((i + 1))
+done
diff --git a/build/azure-pipelines/linux/cli-build-linux.yml b/build/azure-pipelines/linux/cli-build-linux.yml
index f3e2ef88b9d..89bc8a39e24 100644
--- a/build/azure-pipelines/linux/cli-build-linux.yml
+++ b/build/azure-pipelines/linux/cli-build-linux.yml
@@ -40,24 +40,23 @@ steps:
displayName: Extract openssl prebuilt
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- - script: node build/setup-npm-registry.js $NPM_REGISTRY
+ - script: node build/setup-npm-registry.js $NPM_REGISTRY build
condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))
displayName: Setup NPM Registry
- script: |
set -e
- npm config set registry "$NPM_REGISTRY" --location=project
- # npm >v7 deprecated the `always-auth` config option, refs npm/cli@72a7eeb
- # following is a workaround for yarn to send authorization header
- # for GET requests to the registry.
- echo "always-auth=true" >> .npmrc
- yarn config set registry "$NPM_REGISTRY"
+ # Set the private NPM registry to the global npmrc file
+ # so that authentication works for subfolders like build/, remote/, extensions/ etc
+ # which does not have their own .npmrc file
+ npm config set registry "$NPM_REGISTRY"
+ echo "##vso[task.setvariable variable=NPMRC_PATH]$(npm config get userconfig)"
condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))
- displayName: Setup NPM & Yarn
+ displayName: Setup NPM
- task: npmAuthenticate@0
inputs:
- workingFile: .npmrc
+ workingFile: $(NPMRC_PATH)
condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))
displayName: Setup NPM Authentication
@@ -65,13 +64,14 @@ steps:
set -e
for i in {1..5}; do # try 5 times
- yarn --cwd build --frozen-lockfile --check-files && break
- if [ $i -eq 3 ]; then
- echo "Yarn failed too many times" >&2
+ npm ci && break
+ if [ $i -eq 5 ]; then
+ echo "Npm install failed too many times" >&2
exit 1
fi
- echo "Yarn failed $i, trying again..."
+ echo "Npm install failed $i, trying again..."
done
+ workingDirectory: build
displayName: Install build dependencies
- script: |
diff --git a/build/azure-pipelines/linux/product-build-linux-legacy-server.yml b/build/azure-pipelines/linux/product-build-linux-legacy-server.yml
index b3b505c1369..63f71890f19 100644
--- a/build/azure-pipelines/linux/product-build-linux-legacy-server.yml
+++ b/build/azure-pipelines/linux/product-build-linux-legacy-server.yml
@@ -5,9 +5,6 @@ parameters:
type: boolean
- name: VSCODE_ARCH
type: string
- - name: VSCODE_BUILD_ESM
- type: boolean
- default: false
steps:
- task: NodeTool@0
@@ -18,7 +15,7 @@ steps:
- template: ../distro/download-distro.yml
- - task: AzureKeyVault@1
+ - task: AzureKeyVault@2
displayName: "Azure Key Vault: Get Secrets"
inputs:
azureSubscription: "vscode-builds-subscription"
@@ -37,8 +34,8 @@ steps:
- script: |
set -e
# Start X server
- sudo apt-get update
- sudo apt-get install -y pkg-config \
+ ./build/azure-pipelines/linux/apt-retry.sh sudo apt-get update
+ ./build/azure-pipelines/linux/apt-retry.sh sudo apt-get install -y pkg-config \
dbus \
xvfb \
libgtk-3-0 \
@@ -62,18 +59,17 @@ steps:
- script: |
set -e
- npm config set registry "$NPM_REGISTRY" --location=project
- # npm >v7 deprecated the `always-auth` config option, refs npm/cli@72a7eeb
- # following is a workaround for yarn to send authorization header
- # for GET requests to the registry.
- echo "always-auth=true" >> .npmrc
- yarn config set registry "$NPM_REGISTRY"
+ # Set the private NPM registry to the global npmrc file
+ # so that authentication works for subfolders like build/, remote/, extensions/ etc
+ # which does not have their own .npmrc file
+ npm config set registry "$NPM_REGISTRY"
+ echo "##vso[task.setvariable variable=NPMRC_PATH]$(npm config get userconfig)"
condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))
- displayName: Setup NPM & Yarn
+ displayName: Setup NPM
- task: npmAuthenticate@0
inputs:
- workingFile: .npmrc
+ workingFile: $(NPMRC_PATH)
condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))
displayName: Setup NPM Authentication
@@ -87,30 +83,55 @@ steps:
imageName: vscode-linux-build-agent:centos7-devtoolset8-$(VSCODE_ARCH)
containerCommand: uname
+ - ${{ if or(eq(parameters.VSCODE_ARCH, 'arm64'), eq(parameters.VSCODE_ARCH, 'armhf')) }}:
+ - script: |
+ set -e
+ includes=$(cat << 'EOF'
+ {
+ "target_defaults": {
+ "conditions": [
+ ["OS=='linux'", {
+ 'cflags_cc!': [ '-std=gnu++20' ],
+ 'cflags_cc': [ '-std=gnu++2a' ],
+ }]
+ ]
+ }
+ }
+ EOF
+ )
+ if [ ! -d "$HOME/.gyp" ]; then
+ mkdir -p "$HOME/.gyp"
+ fi
+ echo "$includes" > "$HOME/.gyp/include.gypi"
+ displayName: Override gnu target for arm64 and arm
+
- script: |
set -e
- # To workaround the issue of yarn not respecting the registry value from .npmrc
- yarn config set registry "$NPM_REGISTRY"
for i in {1..5}; do # try 5 times
- yarn --cwd build --frozen-lockfile --check-files && break
- if [ $i -eq 3 ]; then
- echo "Yarn failed too many times" >&2
+ npm ci && break
+ if [ $i -eq 5 ]; then
+ echo "Npm install failed too many times" >&2
exit 1
fi
- echo "Yarn failed $i, trying again..."
+ echo "Npm install failed $i, trying again..."
done
+ workingDirectory: build
+ displayName: Install build dependencies
+
+ - script: |
+ set -e
export VSCODE_SYSROOT_PREFIX='-glibc-2.17'
- source ./build/azure-pipelines/linux/setup-env.sh --only-remote
+ source ./build/azure-pipelines/linux/setup-env.sh --skip-sysroot
for i in {1..5}; do # try 5 times
- yarn --frozen-lockfile --check-files && break
- if [ $i -eq 3 ]; then
- echo "Yarn failed too many times" >&2
+ npm ci && break
+ if [ $i -eq 5 ]; then
+ echo "Npm install failed too many times" >&2
exit 1
fi
- echo "Yarn failed $i, trying again..."
+ echo "Npm install failed $i, trying again..."
done
env:
npm_config_arch: $(NPM_ARCH)
@@ -134,7 +155,7 @@ steps:
- script: |
set -e
- yarn gulp vscode-linux-$(VSCODE_ARCH)-min-ci
+ npm run gulp vscode-linux-$(VSCODE_ARCH)-min-ci
ARCHIVE_PATH=".build/linux/client/code-${{ parameters.VSCODE_QUALITY }}-$(VSCODE_ARCH)-$(date +%s).tar.gz"
mkdir -p $(dirname $ARCHIVE_PATH)
echo "##vso[task.setvariable variable=CLIENT_PATH]$ARCHIVE_PATH"
@@ -152,7 +173,7 @@ steps:
- script: |
set -e
export VSCODE_NODE_GLIBC="-glibc-2.17"
- yarn gulp vscode-reh-linux-$(VSCODE_ARCH)-min-ci
+ npm run gulp vscode-reh-linux-$(VSCODE_ARCH)-min-ci
mv ../vscode-reh-linux-$(VSCODE_ARCH) ../vscode-server-linux-$(VSCODE_ARCH) # TODO@joaomoreno
ARCHIVE_PATH=".build/linux/server/vscode-server-linux-legacy-$(VSCODE_ARCH).tar.gz"
UNARCHIVE_PATH="`pwd`/../vscode-server-linux-$(VSCODE_ARCH)"
@@ -167,7 +188,7 @@ steps:
- script: |
set -e
export VSCODE_NODE_GLIBC="-glibc-2.17"
- yarn gulp vscode-reh-web-linux-$(VSCODE_ARCH)-min-ci
+ npm run gulp vscode-reh-web-linux-$(VSCODE_ARCH)-min-ci
mv ../vscode-reh-web-linux-$(VSCODE_ARCH) ../vscode-server-linux-$(VSCODE_ARCH)-web # TODO@joaomoreno
ARCHIVE_PATH=".build/linux/web/vscode-server-linux-legacy-$(VSCODE_ARCH)-web.tar.gz"
mkdir -p $(dirname $ARCHIVE_PATH)
@@ -204,7 +225,6 @@ steps:
VSCODE_RUN_UNIT_TESTS: false
VSCODE_RUN_INTEGRATION_TESTS: ${{ parameters.VSCODE_RUN_INTEGRATION_TESTS }}
VSCODE_RUN_SMOKE_TESTS: false
- VSCODE_BUILD_ESM: ${{ parameters.VSCODE_BUILD_ESM }}
${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
PUBLISH_TASK_NAME: 1ES.PublishPipelineArtifact@1
diff --git a/build/azure-pipelines/linux/product-build-linux-test.yml b/build/azure-pipelines/linux/product-build-linux-test.yml
index 0b358a81914..5f7381d487c 100644
--- a/build/azure-pipelines/linux/product-build-linux-test.yml
+++ b/build/azure-pipelines/linux/product-build-linux-test.yml
@@ -10,12 +10,9 @@ parameters:
- name: PUBLISH_TASK_NAME
type: string
default: PublishPipelineArtifact@0
- - name: VSCODE_BUILD_ESM
- type: boolean
- default: false
steps:
- - script: yarn npm-run-all -lp "electron $(VSCODE_ARCH)" "playwright-install"
+ - script: npm exec -- npm-run-all -lp "electron $(VSCODE_ARCH)" "playwright-install"
env:
GITHUB_TOKEN: "$(github-distro-mixin-password)"
displayName: Download Electron and Playwright
@@ -36,66 +33,38 @@ steps:
- ${{ if eq(parameters.VSCODE_RUN_UNIT_TESTS, true) }}:
- ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:
- - ${{ if eq(parameters.VSCODE_BUILD_ESM, true) }}:
- - script: ./scripts/test-esm.sh --tfs "Unit Tests"
- env:
- DISPLAY: ":10"
- displayName: Run unit tests (Electron) [ESM]
- timeoutInMinutes: 15
- - script: yarn test-node-esm
- displayName: Run unit tests (node.js) [ESM]
- timeoutInMinutes: 15
- - script: yarn test-browser-esm-no-install --browser chromium --tfs "Browser Unit Tests"
- env:
- DEBUG: "*browser*"
- displayName: Run unit tests (Browser, Chromium) [ESM]
- timeoutInMinutes: 15
- - ${{ if eq(parameters.VSCODE_BUILD_ESM, false) }}:
- - script: ./scripts/test.sh --tfs "Unit Tests"
- env:
- DISPLAY: ":10"
- displayName: Run unit tests (Electron)
- timeoutInMinutes: 15
- - script: yarn test-node
- displayName: Run unit tests (node.js)
- timeoutInMinutes: 15
- - script: yarn test-browser-no-install --browser chromium --tfs "Browser Unit Tests"
- env:
- DEBUG: "*browser*"
- displayName: Run unit tests (Browser, Chromium)
- timeoutInMinutes: 15
+ - script: ./scripts/test.sh --tfs "Unit Tests"
+ env:
+ DISPLAY: ":10"
+ displayName: Run unit tests (Electron)
+ timeoutInMinutes: 15
+ - script: npm run test-node
+ displayName: Run unit tests (node.js)
+ timeoutInMinutes: 15
+ - script: npm run test-browser-no-install -- --browser chromium --tfs "Browser Unit Tests"
+ env:
+ DEBUG: "*browser*"
+ displayName: Run unit tests (Browser, Chromium)
+ timeoutInMinutes: 15
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- - ${{ if eq(parameters.VSCODE_BUILD_ESM, true) }}:
- - script: ./scripts/test-esm.sh --build --tfs "Unit Tests"
- displayName: Run unit tests (Electron) [ESM]
- timeoutInMinutes: 15
- - script: yarn test-node-esm --build
- displayName: Run unit tests (node.js) [ESM]
- timeoutInMinutes: 15
- - script: yarn test-browser-esm-no-install --build --browser chromium --tfs "Browser Unit Tests"
- env:
- DEBUG: "*browser*"
- displayName: Run unit tests (Browser, Chromium) [ESM]
- timeoutInMinutes: 15
- - ${{ if eq(parameters.VSCODE_BUILD_ESM, false) }}:
- - script: ./scripts/test.sh --build --tfs "Unit Tests"
- displayName: Run unit tests (Electron)
- timeoutInMinutes: 15
- - script: yarn test-node --build
- displayName: Run unit tests (node.js)
- timeoutInMinutes: 15
- - script: yarn test-browser-no-install --build --browser chromium --tfs "Browser Unit Tests"
- env:
- DEBUG: "*browser*"
- displayName: Run unit tests (Browser, Chromium)
- timeoutInMinutes: 15
+ - script: ./scripts/test.sh --build --tfs "Unit Tests"
+ displayName: Run unit tests (Electron)
+ timeoutInMinutes: 15
+ - script: npm run test-node -- --build
+ displayName: Run unit tests (node.js)
+ timeoutInMinutes: 15
+ - script: npm run test-browser-no-install -- --build --browser chromium --tfs "Browser Unit Tests"
+ env:
+ DEBUG: "*browser*"
+ displayName: Run unit tests (Browser, Chromium)
+ timeoutInMinutes: 15
- ${{ if eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true) }}:
- script: |
set -e
- yarn gulp \
+ npm run gulp \
compile-extension:configuration-editing \
compile-extension:css-language-features-server \
compile-extension:emmet \
@@ -116,18 +85,11 @@ steps:
- ${{ if eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true) }}:
- ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:
- - ${{ if eq(parameters.VSCODE_BUILD_ESM, true) }}:
- - script: ./scripts/test-integration-esm.sh --tfs "Integration Tests"
- env:
- DISPLAY: ":10"
- displayName: Run integration tests (Electron) [ESM]
- timeoutInMinutes: 20
- - ${{ if eq(parameters.VSCODE_BUILD_ESM, false) }}:
- - script: ./scripts/test-integration.sh --tfs "Integration Tests"
- env:
- DISPLAY: ":10"
- displayName: Run integration tests (Electron)
- timeoutInMinutes: 20
+ - script: ./scripts/test-integration.sh --tfs "Integration Tests"
+ env:
+ DISPLAY: ":10"
+ displayName: Run integration tests (Electron)
+ timeoutInMinutes: 20
- script: ./scripts/test-web-integration.sh --browser chromium
displayName: Run integration tests (Browser, Chromium)
@@ -138,36 +100,20 @@ steps:
timeoutInMinutes: 20
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- - ${{ if eq(parameters.VSCODE_BUILD_ESM, true) }}:
- - script: |
- # Figure out the full absolute path of the product we just built
- # including the remote server and configure the integration tests
- # to run with these builds instead of running out of sources.
- set -e
- APP_ROOT=$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)
- APP_NAME=$(node -p "require(\"$APP_ROOT/resources/app/product.json\").applicationName")
- INTEGRATION_TEST_APP_NAME="$APP_NAME" \
- INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME" \
- ./scripts/test-integration-esm.sh --build --tfs "Integration Tests"
- env:
- VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-server-linux-$(VSCODE_ARCH)
- displayName: Run integration tests (Electron) [ESM]
- timeoutInMinutes: 20
- - ${{ if eq(parameters.VSCODE_BUILD_ESM, false) }}:
- - script: |
- # Figure out the full absolute path of the product we just built
- # including the remote server and configure the integration tests
- # to run with these builds instead of running out of sources.
- set -e
- APP_ROOT=$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)
- APP_NAME=$(node -p "require(\"$APP_ROOT/resources/app/product.json\").applicationName")
- INTEGRATION_TEST_APP_NAME="$APP_NAME" \
- INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME" \
- ./scripts/test-integration.sh --build --tfs "Integration Tests"
- env:
- VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-server-linux-$(VSCODE_ARCH)
- displayName: Run integration tests (Electron)
- timeoutInMinutes: 20
+ - script: |
+ # Figure out the full absolute path of the product we just built
+ # including the remote server and configure the integration tests
+ # to run with these builds instead of running out of sources.
+ set -e
+ APP_ROOT=$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)
+ APP_NAME=$(node -p "require(\"$APP_ROOT/resources/app/product.json\").applicationName")
+ INTEGRATION_TEST_APP_NAME="$APP_NAME" \
+ INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME" \
+ ./scripts/test-integration.sh --build --tfs "Integration Tests"
+ env:
+ VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-server-linux-$(VSCODE_ARCH)
+ displayName: Run integration tests (Electron)
+ timeoutInMinutes: 20
- script: ./scripts/test-web-integration.sh --browser chromium
env:
@@ -198,34 +144,35 @@ steps:
condition: succeededOrFailed()
- ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:
- - script: yarn --cwd test/smoke compile
+ - script: npm run compile
+ workingDirectory: test/smoke
displayName: Compile smoke tests
- - script: yarn gulp compile-extension:markdown-language-features compile-extension:ipynb compile-extension-media compile-extension:vscode-test-resolver
+ - script: npm run gulp compile-extension:markdown-language-features compile-extension:ipynb compile-extension-media compile-extension:vscode-test-resolver
displayName: Build extensions for smoke tests
- - script: yarn gulp node
+ - script: npm run gulp node
displayName: Download node.js for remote smoke tests
retryCountOnTaskFailure: 3
- - script: yarn smoketest-no-compile --tracing
+ - script: npm run smoketest-no-compile -- --tracing
timeoutInMinutes: 20
displayName: Run smoke tests (Electron)
- - script: yarn smoketest-no-compile --web --tracing --headless --electronArgs="--disable-dev-shm-usage"
+ - script: npm run smoketest-no-compile -- --web --tracing --headless --electronArgs="--disable-dev-shm-usage"
timeoutInMinutes: 20
displayName: Run smoke tests (Browser, Chromium)
- - script: yarn smoketest-no-compile --remote --tracing
+ - script: npm run smoketest-no-compile -- --remote --tracing
timeoutInMinutes: 20
displayName: Run smoke tests (Remote)
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- - script: yarn smoketest-no-compile --tracing --build "$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)"
+ - script: npm run smoketest-no-compile -- --tracing --build "$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)"
timeoutInMinutes: 20
displayName: Run smoke tests (Electron)
- - script: yarn smoketest-no-compile --web --tracing --headless --electronArgs="--disable-dev-shm-usage"
+ - script: npm run smoketest-no-compile -- --web --tracing --headless --electronArgs="--disable-dev-shm-usage"
env:
VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-server-linux-$(VSCODE_ARCH)-web
timeoutInMinutes: 20
@@ -233,10 +180,10 @@ steps:
- script: |
set -e
- yarn gulp compile-extension:vscode-test-resolver
+ npm run gulp compile-extension:vscode-test-resolver
APP_PATH=$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)
VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-server-linux-$(VSCODE_ARCH)" \
- yarn smoketest-no-compile --tracing --remote --build "$APP_PATH"
+ npm run smoketest-no-compile -- --tracing --remote --build "$APP_PATH"
timeoutInMinutes: 20
displayName: Run smoke tests (Remote)
diff --git a/build/azure-pipelines/linux/product-build-linux.yml b/build/azure-pipelines/linux/product-build-linux.yml
index 2aa304e4fba..fe3951c9e5f 100644
--- a/build/azure-pipelines/linux/product-build-linux.yml
+++ b/build/azure-pipelines/linux/product-build-linux.yml
@@ -11,9 +11,6 @@ parameters:
type: boolean
- name: VSCODE_ARCH
type: string
- - name: VSCODE_BUILD_ESM
- type: boolean
- default: false
steps:
- ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:
@@ -30,7 +27,7 @@ steps:
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- template: ../distro/download-distro.yml@self
- - task: AzureKeyVault@1
+ - task: AzureKeyVault@2
displayName: "Azure Key Vault: Get Secrets"
inputs:
azureSubscription: "vscode-builds-subscription"
@@ -49,8 +46,8 @@ steps:
- script: |
set -e
# Start X server
- sudo apt-get update
- sudo apt-get install -y pkg-config \
+ ./build/azure-pipelines/linux/apt-retry.sh sudo apt-get update
+ ./build/azure-pipelines/linux/apt-retry.sh sudo apt-get install -y pkg-config \
dbus \
xvfb \
libgtk-3-0 \
@@ -72,12 +69,12 @@ steps:
condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))
displayName: Setup NPM Registry
- - script: mkdir -p .build && node build/azure-pipelines/common/computeNodeModulesCacheKey.js linux $VSCODE_ARCH > .build/yarnlockhash
+ - script: mkdir -p .build && node build/azure-pipelines/common/computeNodeModulesCacheKey.js linux $VSCODE_ARCH > .build/packagelockhash
displayName: Prepare node_modules cache key
- task: Cache@2
inputs:
- key: '"node_modules" | .build/yarnlockhash'
+ key: '"node_modules" | .build/packagelockhash'
path: .build/node_modules_cache
cacheHitVar: NODE_MODULES_RESTORED
displayName: Restore node_modules cache
@@ -88,18 +85,17 @@ steps:
- script: |
set -e
- npm config set registry "$NPM_REGISTRY" --location=project
- # npm >v7 deprecated the `always-auth` config option, refs npm/cli@72a7eeb
- # following is a workaround for yarn to send authorization header
- # for GET requests to the registry.
- echo "always-auth=true" >> .npmrc
- yarn config set registry "$NPM_REGISTRY"
+ # Set the private NPM registry to the global npmrc file
+ # so that authentication works for subfolders like build/, remote/, extensions/ etc
+ # which does not have their own .npmrc file
+ npm config set registry "$NPM_REGISTRY"
+ echo "##vso[task.setvariable variable=NPMRC_PATH]$(npm config get userconfig)"
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))
- displayName: Setup NPM & Yarn
+ displayName: Setup NPM
- task: npmAuthenticate@0
inputs:
- workingFile: .npmrc
+ workingFile: $(NPMRC_PATH)
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))
displayName: Setup NPM Authentication
@@ -107,23 +103,66 @@ steps:
set -e
for i in {1..5}; do # try 5 times
- yarn --cwd build --frozen-lockfile --check-files && break
- if [ $i -eq 3 ]; then
- echo "Yarn failed too many times" >&2
+ npm ci && break
+ if [ $i -eq 5 ]; then
+ echo "Npm install failed too many times" >&2
exit 1
fi
- echo "Yarn failed $i, trying again..."
+ echo "Npm install failed $i, trying again..."
done
+ workingDirectory: build
+ displayName: Install build dependencies
+ condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
+
+ # Step will be used by both Install dependencies and building rpm package,
+ # hence avoid adding it behind NODE_MODULES_RESTORED condition.
+ - script: |
+ set -e
+ SYSROOT_ARCH=$VSCODE_ARCH
+ if [ "$SYSROOT_ARCH" == "x64" ]; then
+ SYSROOT_ARCH="amd64"
+ fi
+ export VSCODE_SYSROOT_DIR=$(Build.SourcesDirectory)/.build/sysroots
+ SYSROOT_ARCH="$SYSROOT_ARCH" node -e '(async () => { const { getVSCodeSysroot } = require("./build/linux/debian/install-sysroot.js"); await getVSCodeSysroot(process.env["SYSROOT_ARCH"]); })()'
+ env:
+ VSCODE_ARCH: $(VSCODE_ARCH)
+ GITHUB_TOKEN: "$(github-distro-mixin-password)"
+ displayName: Download vscode sysroots
+
+ - ${{ if or(eq(parameters.VSCODE_ARCH, 'arm64'), eq(parameters.VSCODE_ARCH, 'armhf')) }}:
+ - script: |
+ set -e
+ includes=$(cat << 'EOF'
+ {
+ "target_defaults": {
+ "conditions": [
+ ["OS=='linux'", {
+ 'cflags_cc!': [ '-std=gnu++20' ],
+ 'cflags_cc': [ '-std=gnu++2a' ],
+ }]
+ ]
+ }
+ }
+ EOF
+ )
+ if [ ! -d "$HOME/.gyp" ]; then
+ mkdir -p "$HOME/.gyp"
+ fi
+ echo "$includes" > "$HOME/.gyp/include.gypi"
+ displayName: Override gnu target for arm64 and arm
+
+ - script: |
+ set -e
source ./build/azure-pipelines/linux/setup-env.sh
for i in {1..5}; do # try 5 times
- yarn --frozen-lockfile --check-files && break
- if [ $i -eq 3 ]; then
- echo "Yarn failed too many times" >&2
+ npm ci && break
+ if [ $i -eq 5 ]; then
+ echo "Npm install failed too many times" >&2
exit 1
fi
- echo "Yarn failed $i, trying again..."
+ echo "Npm install failed $i, trying again..."
done
env:
npm_config_arch: $(NPM_ARCH)
@@ -139,20 +178,6 @@ steps:
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
displayName: Mixin distro node modules
- - ${{ else }}:
- # Ref https://github.com/microsoft/vscode/issues/189019
- # for the node-gyp rebuild step
- - script: |
- set -e
-
- cd node_modules/native-keymap && npx node-gyp@9.4.0 -y rebuild --debug
- cd ../.. && ./.github/workflows/check-clean-git-state.sh
- env:
- npm_config_arch: $(NPM_ARCH)
- GITHUB_TOKEN: "$(github-distro-mixin-password)"
- displayName: Rebuild debug version of native modules (OSS)
- condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
-
- script: |
set -e
node build/azure-pipelines/common/listNodeModules.js .build/node_modules_list.txt
@@ -170,7 +195,7 @@ steps:
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- script: |
set -e
- yarn gulp vscode-linux-$(VSCODE_ARCH)-min-ci
+ npm run gulp vscode-linux-$(VSCODE_ARCH)-min-ci
ARCHIVE_PATH=".build/linux/client/code-${{ parameters.VSCODE_QUALITY }}-$(VSCODE_ARCH)-$(date +%s).tar.gz"
mkdir -p $(dirname $ARCHIVE_PATH)
echo "##vso[task.setvariable variable=CLIENT_PATH]$ARCHIVE_PATH"
@@ -203,7 +228,7 @@ steps:
- script: |
set -e
- yarn gulp vscode-reh-linux-$(VSCODE_ARCH)-min-ci
+ npm run gulp vscode-reh-linux-$(VSCODE_ARCH)-min-ci
mv ../vscode-reh-linux-$(VSCODE_ARCH) ../vscode-server-linux-$(VSCODE_ARCH) # TODO@joaomoreno
ARCHIVE_PATH=".build/linux/server/vscode-server-linux-$(VSCODE_ARCH).tar.gz"
UNARCHIVE_PATH="`pwd`/../vscode-server-linux-$(VSCODE_ARCH)"
@@ -217,7 +242,7 @@ steps:
- script: |
set -e
- yarn gulp vscode-reh-web-linux-$(VSCODE_ARCH)-min-ci
+ npm run gulp vscode-reh-web-linux-$(VSCODE_ARCH)-min-ci
mv ../vscode-reh-web-linux-$(VSCODE_ARCH) ../vscode-server-linux-$(VSCODE_ARCH)-web # TODO@joaomoreno
ARCHIVE_PATH=".build/linux/web/vscode-server-linux-$(VSCODE_ARCH)-web.tar.gz"
mkdir -p $(dirname $ARCHIVE_PATH)
@@ -231,8 +256,6 @@ steps:
- script: |
set -e
- source ./build/azure-pipelines/linux/setup-env.sh
-
EXPECTED_GLIBC_VERSION="2.28" \
EXPECTED_GLIBCXX_VERSION="3.4.25" \
./build/azure-pipelines/linux/verify-glibc-requirements.sh
@@ -246,8 +269,6 @@ steps:
- script: |
set -e
- source ./build/azure-pipelines/linux/setup-env.sh
-
EXPECTED_GLIBC_VERSION="2.28" \
EXPECTED_GLIBCXX_VERSION="3.4.26" \
./build/azure-pipelines/linux/verify-glibc-requirements.sh
@@ -258,7 +279,7 @@ steps:
displayName: Check GLIBC and GLIBCXX dependencies in server archive
- ${{ else }}:
- - script: yarn gulp "transpile-client-swc" "transpile-extensions"
+ - script: npm run gulp "transpile-client-esbuild" "transpile-extensions"
env:
GITHUB_TOKEN: "$(github-distro-mixin-password)"
displayName: Transpile client and extensions
@@ -270,38 +291,54 @@ steps:
VSCODE_RUN_UNIT_TESTS: ${{ parameters.VSCODE_RUN_UNIT_TESTS }}
VSCODE_RUN_INTEGRATION_TESTS: ${{ parameters.VSCODE_RUN_INTEGRATION_TESTS }}
VSCODE_RUN_SMOKE_TESTS: ${{ parameters.VSCODE_RUN_SMOKE_TESTS }}
- VSCODE_BUILD_ESM: ${{ parameters.VSCODE_BUILD_ESM }}
${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
PUBLISH_TASK_NAME: 1ES.PublishPipelineArtifact@1
- ${{ if and(ne(parameters.VSCODE_CIBUILD, true), ne(parameters.VSCODE_QUALITY, 'oss')) }}:
- script: |
set -e
- yarn gulp "vscode-linux-$(VSCODE_ARCH)-prepare-deb"
+ npm run gulp "vscode-linux-$(VSCODE_ARCH)-prepare-deb"
env:
GITHUB_TOKEN: "$(github-distro-mixin-password)"
displayName: Prepare deb package
- script: |
set -e
- yarn gulp "vscode-linux-$(VSCODE_ARCH)-build-deb"
+ npm run gulp "vscode-linux-$(VSCODE_ARCH)-build-deb"
+ file_output=$(file $(ls .build/linux/deb/*/deb/*.deb))
+ if [[ "$file_output" != *"data compression xz"* ]]; then
+ echo "Error: unknown compression. $file_output"
+ exit 1
+ fi
echo "##vso[task.setvariable variable=DEB_PATH]$(ls .build/linux/deb/*/deb/*.deb)"
displayName: Build deb package
- script: |
set -e
- yarn gulp "vscode-linux-$(VSCODE_ARCH)-prepare-rpm"
+ TRIPLE=""
+ if [ "$VSCODE_ARCH" == "x64" ]; then
+ TRIPLE="x86_64-linux-gnu"
+ elif [ "$VSCODE_ARCH" == "arm64" ]; then
+ TRIPLE="aarch64-linux-gnu"
+ elif [ "$VSCODE_ARCH" == "armhf" ]; then
+ TRIPLE="arm-rpi-linux-gnueabihf"
+ fi
+ export VSCODE_SYSROOT_DIR=$(Build.SourcesDirectory)/.build/sysroots
+ export STRIP="$VSCODE_SYSROOT_DIR/$TRIPLE/$TRIPLE/bin/strip"
+ npm run gulp "vscode-linux-$(VSCODE_ARCH)-prepare-rpm"
+ env:
+ VSCODE_ARCH: $(VSCODE_ARCH)
displayName: Prepare rpm package
- script: |
set -e
- yarn gulp "vscode-linux-$(VSCODE_ARCH)-build-rpm"
+ npm run gulp "vscode-linux-$(VSCODE_ARCH)-build-rpm"
echo "##vso[task.setvariable variable=RPM_PATH]$(ls .build/linux/rpm/*/*.rpm)"
displayName: Build rpm package
- script: |
set -e
- yarn gulp "vscode-linux-$(VSCODE_ARCH)-prepare-snap"
+ npm run gulp "vscode-linux-$(VSCODE_ARCH)-prepare-snap"
ARCHIVE_PATH=".build/linux/snap-tarball/snap-$(VSCODE_ARCH).tar.gz"
mkdir -p $(dirname $ARCHIVE_PATH)
tar -czf $ARCHIVE_PATH -C .build/linux snap
diff --git a/build/azure-pipelines/linux/setup-env.sh b/build/azure-pipelines/linux/setup-env.sh
index 949b5f371ba..d836fb70fb0 100755
--- a/build/azure-pipelines/linux/setup-env.sh
+++ b/build/azure-pipelines/linux/setup-env.sh
@@ -8,12 +8,16 @@ if [ "$SYSROOT_ARCH" == "x64" ]; then
fi
export VSCODE_SYSROOT_DIR=$PWD/.build/sysroots
-SYSROOT_ARCH="$SYSROOT_ARCH" node -e '(async () => { const { getVSCodeSysroot } = require("./build/linux/debian/install-sysroot.js"); await getVSCodeSysroot(process.env["SYSROOT_ARCH"]); })()'
+if [ -d "$VSCODE_SYSROOT_DIR" ]; then
+ echo "Using cached sysroot"
+else
+ echo "Downloading sysroot"
+ SYSROOT_ARCH="$SYSROOT_ARCH" node -e '(async () => { const { getVSCodeSysroot } = require("./build/linux/debian/install-sysroot.js"); await getVSCodeSysroot(process.env["SYSROOT_ARCH"]); })()'
+fi
if [ "$npm_config_arch" == "x64" ]; then
- if [ "$(echo "$@" | grep -c -- "--only-remote")" -eq 0 ]; then
# Download clang based on chromium revision used by vscode
- curl -s https://raw.githubusercontent.com/chromium/chromium/124.0.6367.243/tools/clang/scripts/update.py | python - --output-dir=$PWD/.build/CR_Clang --host-os=linux
+ curl -s https://raw.githubusercontent.com/chromium/chromium/128.0.6613.186/tools/clang/scripts/update.py | python - --output-dir=$PWD/.build/CR_Clang --host-os=linux
# Download libcxx headers and objects from upstream electron releases
DEBUG=libcxx-fetcher \
@@ -25,14 +29,15 @@ if [ "$npm_config_arch" == "x64" ]; then
# Set compiler toolchain
# Flags for the client build are based on
- # https://source.chromium.org/chromium/chromium/src/+/refs/tags/124.0.6367.243:build/config/arm.gni
- # https://source.chromium.org/chromium/chromium/src/+/refs/tags/124.0.6367.243:build/config/compiler/BUILD.gn
- # https://source.chromium.org/chromium/chromium/src/+/refs/tags/124.0.6367.243:build/config/c++/BUILD.gn
+ # https://source.chromium.org/chromium/chromium/src/+/refs/tags/128.0.6613.186:build/config/arm.gni
+ # https://source.chromium.org/chromium/chromium/src/+/refs/tags/128.0.6613.186:build/config/compiler/BUILD.gn
+ # https://source.chromium.org/chromium/chromium/src/+/refs/tags/128.0.6613.186:build/config/c++/BUILD.gn
export CC="$PWD/.build/CR_Clang/bin/clang --gcc-toolchain=$VSCODE_SYSROOT_DIR/x86_64-linux-gnu"
export CXX="$PWD/.build/CR_Clang/bin/clang++ --gcc-toolchain=$VSCODE_SYSROOT_DIR/x86_64-linux-gnu"
export CXXFLAGS="-nostdinc++ -D__NO_INLINE__ -I$PWD/.build/libcxx_headers -isystem$PWD/.build/libcxx_headers/include -isystem$PWD/.build/libcxxabi_headers/include -fPIC -flto=thin -fsplit-lto-unit -D_LIBCPP_ABI_NAMESPACE=Cr -D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_EXTENSIVE --sysroot=$VSCODE_SYSROOT_DIR/x86_64-linux-gnu/x86_64-linux-gnu/sysroot"
export LDFLAGS="-stdlib=libc++ --sysroot=$VSCODE_SYSROOT_DIR/x86_64-linux-gnu/x86_64-linux-gnu/sysroot -fuse-ld=lld -flto=thin -L$PWD/.build/libcxx-objects -lc++abi -L$VSCODE_SYSROOT_DIR/x86_64-linux-gnu/x86_64-linux-gnu/sysroot/usr/lib/x86_64-linux-gnu -L$VSCODE_SYSROOT_DIR/x86_64-linux-gnu/x86_64-linux-gnu/sysroot/lib/x86_64-linux-gnu -Wl,--lto-O0"
+ if [ "$(echo "$@" | grep -c -- "--skip-sysroot")" -eq 0 ]; then
# Set compiler toolchain for remote server
export VSCODE_REMOTE_CC=$VSCODE_SYSROOT_DIR/x86_64-linux-gnu/bin/x86_64-linux-gnu-gcc
export VSCODE_REMOTE_CXX=$VSCODE_SYSROOT_DIR/x86_64-linux-gnu/bin/x86_64-linux-gnu-g++
@@ -40,7 +45,7 @@ if [ "$npm_config_arch" == "x64" ]; then
export VSCODE_REMOTE_LDFLAGS="--sysroot=$VSCODE_SYSROOT_DIR/x86_64-linux-gnu/x86_64-linux-gnu/sysroot -L$VSCODE_SYSROOT_DIR/x86_64-linux-gnu/x86_64-linux-gnu/sysroot/usr/lib/x86_64-linux-gnu -L$VSCODE_SYSROOT_DIR/x86_64-linux-gnu/x86_64-linux-gnu/sysroot/lib/x86_64-linux-gnu"
fi
elif [ "$npm_config_arch" == "arm64" ]; then
- if [ "$(echo "$@" | grep -c -- "--only-remote")" -eq 0 ]; then
+ if [ "$(echo "$@" | grep -c -- "--skip-sysroot")" -eq 0 ]; then
# Set compiler toolchain for client native modules
export CC=$VSCODE_SYSROOT_DIR/aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc
export CXX=$VSCODE_SYSROOT_DIR/aarch64-linux-gnu/bin/aarch64-linux-gnu-g++
@@ -54,11 +59,13 @@ elif [ "$npm_config_arch" == "arm64" ]; then
export VSCODE_REMOTE_LDFLAGS="--sysroot=$VSCODE_SYSROOT_DIR/aarch64-linux-gnu/aarch64-linux-gnu/sysroot -L$VSCODE_SYSROOT_DIR/aarch64-linux-gnu/aarch64-linux-gnu/sysroot/usr/lib/aarch64-linux-gnu -L$VSCODE_SYSROOT_DIR/aarch64-linux-gnu/aarch64-linux-gnu/sysroot/lib/aarch64-linux-gnu"
fi
elif [ "$npm_config_arch" == "arm" ]; then
- # Set compiler toolchain for client native modules
- export CC=$VSCODE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/bin/arm-rpi-linux-gnueabihf-gcc
- export CXX=$VSCODE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/bin/arm-rpi-linux-gnueabihf-g++
- export CXXFLAGS="--sysroot=$VSCODE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/arm-rpi-linux-gnueabihf/sysroot"
- export LDFLAGS="--sysroot=$VSCODE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/arm-rpi-linux-gnueabihf/sysroot -L$VSCODE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/arm-rpi-linux-gnueabihf/sysroot/usr/lib/arm-linux-gnueabihf -L$VSCODE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/arm-rpi-linux-gnueabihf/sysroot/lib/arm-linux-gnueabihf"
+ if [ "$(echo "$@" | grep -c -- "--skip-sysroot")" -eq 0 ]; then
+ # Set compiler toolchain for client native modules
+ export CC=$VSCODE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/bin/arm-rpi-linux-gnueabihf-gcc
+ export CXX=$VSCODE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/bin/arm-rpi-linux-gnueabihf-g++
+ export CXXFLAGS="--sysroot=$VSCODE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/arm-rpi-linux-gnueabihf/sysroot"
+ export LDFLAGS="--sysroot=$VSCODE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/arm-rpi-linux-gnueabihf/sysroot -L$VSCODE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/arm-rpi-linux-gnueabihf/sysroot/usr/lib/arm-linux-gnueabihf -L$VSCODE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/arm-rpi-linux-gnueabihf/sysroot/lib/arm-linux-gnueabihf"
+ fi
# Set compiler toolchain for remote server
export VSCODE_REMOTE_CC=$VSCODE_SYSROOT_DIR/arm-rpi-linux-gnueabihf/bin/arm-rpi-linux-gnueabihf-gcc
diff --git a/build/azure-pipelines/linux/snap-build-linux.yml b/build/azure-pipelines/linux/snap-build-linux.yml
index 033058163f9..4d0d26411c3 100644
--- a/build/azure-pipelines/linux/snap-build-linux.yml
+++ b/build/azure-pipelines/linux/snap-build-linux.yml
@@ -5,11 +5,11 @@ steps:
versionFilePath: .nvmrc
nodejsMirror: https://github.com/joaomoreno/node-mirror/releases/download
- - task: DownloadPipelineArtifact@0
+ - task: DownloadPipelineArtifact@2
displayName: "Download Pipeline Artifact"
inputs:
- artifactName: snap-$(VSCODE_ARCH)
- targetPath: .build/linux/snap-tarball
+ artifact: snap-$(VSCODE_ARCH)
+ path: .build/linux/snap-tarball
- script: |
set -e
@@ -22,18 +22,9 @@ steps:
sudo apt-get upgrade -y
sudo apt-get install -y curl apt-transport-https ca-certificates
- # Yarn
- curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
- echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
- sudo apt-get update
- sudo apt-get install -y yarn
-
# Define variables
SNAP_ROOT="$(pwd)/.build/linux/snap/$(VSCODE_ARCH)"
- # Install build dependencies
- (cd build && yarn)
-
# Unpack snap tarball artifact, in order to preserve file perms
(cd .build/linux && tar -xzf snap-tarball/snap-$(VSCODE_ARCH).tar.gz)
diff --git a/build/azure-pipelines/linux/verify-glibc-requirements.sh b/build/azure-pipelines/linux/verify-glibc-requirements.sh
index 19482c242ea..c655ce74c7e 100755
--- a/build/azure-pipelines/linux/verify-glibc-requirements.sh
+++ b/build/azure-pipelines/linux/verify-glibc-requirements.sh
@@ -10,7 +10,7 @@ elif [ "$VSCODE_ARCH" == "armhf" ]; then
fi
# Get all files with .node extension from server folder
-files=$(find $SEARCH_PATH -name "*.node" -not -path "*prebuilds*" -o -type f -executable -name "node")
+files=$(find $SEARCH_PATH -name "*.node" -not -path "*prebuilds*" -not -path "*extensions/node_modules/@parcel/watcher*" -o -type f -executable -name "node")
echo "Verifying requirements for files: $files"
diff --git a/build/azure-pipelines/oss/product-build-pr-cache-linux.yml b/build/azure-pipelines/oss/product-build-pr-cache-linux.yml
index 9f207f75220..72cd33cdd75 100644
--- a/build/azure-pipelines/oss/product-build-pr-cache-linux.yml
+++ b/build/azure-pipelines/oss/product-build-pr-cache-linux.yml
@@ -13,12 +13,12 @@ steps:
condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))
displayName: Setup NPM Registry
- - script: mkdir -p .build && node build/azure-pipelines/common/computeNodeModulesCacheKey.js linux $VSCODE_ARCH > .build/yarnlockhash
+ - script: mkdir -p .build && node build/azure-pipelines/common/computeNodeModulesCacheKey.js linux $VSCODE_ARCH > .build/packagelockhash
displayName: Prepare node_modules cache key
- task: Cache@2
inputs:
- key: '"node_modules" | .build/yarnlockhash'
+ key: '"node_modules" | .build/packagelockhash'
path: .build/node_modules_cache
cacheHitVar: NODE_MODULES_RESTORED
displayName: Restore node_modules cache
@@ -29,34 +29,36 @@ steps:
- script: |
set -e
- npm config set registry "$NPM_REGISTRY" --location=project
- # npm >v7 deprecated the `always-auth` config option, refs npm/cli@72a7eeb
- # following is a workaround for yarn to send authorization header
- # for GET requests to the registry.
- echo "always-auth=true" >> .npmrc
- yarn config set registry "$NPM_REGISTRY"
+ # Set the private NPM registry to the global npmrc file
+ # so that authentication works for subfolders like build/, remote/, extensions/ etc
+ # which does not have their own .npmrc file
+ npm config set registry "$NPM_REGISTRY"
+ echo "##vso[task.setvariable variable=NPMRC_PATH]$(npm config get userconfig)"
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))
- displayName: Setup NPM & Yarn
+ displayName: Setup NPM
- task: npmAuthenticate@0
inputs:
- workingFile: .npmrc
+ workingFile: $(NPMRC_PATH)
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))
displayName: Setup NPM Authentication
- - script: sudo apt-get update && sudo apt-get install -y libkrb5-dev
- displayName: Install build dependencies
+ - script: |
+ set -e
+ ./build/azure-pipelines/linux/apt-retry.sh sudo apt-get update
+ ./build/azure-pipelines/linux/apt-retry.sh sudo apt-get install -y libkrb5-dev
+ displayName: Setup system services
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
- script: |
set -e
for i in {1..5}; do # try 5 times
- yarn --frozen-lockfile --check-files && break
- if [ $i -eq 3 ]; then
- echo "Yarn failed too many times" >&2
+ npm ci && break
+ if [ $i -eq 5 ]; then
+ echo "Npm install failed too many times" >&2
exit 1
fi
- echo "Yarn failed $i, trying again..."
+ echo "Npm install failed $i, trying again..."
done
env:
ELECTRON_SKIP_BINARY_DOWNLOAD: 1
diff --git a/build/azure-pipelines/oss/product-build-pr-cache-win32.yml b/build/azure-pipelines/oss/product-build-pr-cache-win32.yml
index b084c5e97c5..76944f69b14 100644
--- a/build/azure-pipelines/oss/product-build-pr-cache-win32.yml
+++ b/build/azure-pipelines/oss/product-build-pr-cache-win32.yml
@@ -15,12 +15,12 @@ steps:
- pwsh: |
mkdir .build -ea 0
- node build/azure-pipelines/common/computeNodeModulesCacheKey.js win32 $(VSCODE_ARCH) > .build/yarnlockhash
+ node build/azure-pipelines/common/computeNodeModulesCacheKey.js win32 $(VSCODE_ARCH) > .build/packagelockhash
displayName: Prepare node_modules cache key
- task: Cache@2
inputs:
- key: '"node_modules" | .build/yarnlockhash'
+ key: '"node_modules" | .build/packagelockhash'
path: .build/node_modules_cache
cacheHitVar: NODE_MODULES_RESTORED
displayName: Restore node_modules cache
@@ -32,32 +32,32 @@ steps:
- powershell: |
. build/azure-pipelines/win32/exec.ps1
$ErrorActionPreference = "Stop"
- exec { npm config set registry "$env:NPM_REGISTRY" --location=project }
- # npm >v7 deprecated the `always-auth` config option, refs npm/cli@72a7eeb
- # following is a workaround for yarn to send authorization header
- # for GET requests to the registry.
- exec { Add-Content -Path .npmrc -Value "always-auth=true" }
- exec { yarn config set registry "$env:NPM_REGISTRY" }
+ # Set the private NPM registry to the global npmrc file
+ # so that authentication works for subfolders like build/, remote/, extensions/ etc
+ # which does not have their own .npmrc file
+ exec { npm config set registry "$env:NPM_REGISTRY" }
+ $NpmrcPath = (npm config get userconfig)
+ echo "##vso[task.setvariable variable=NPMRC_PATH]$NpmrcPath"
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))
- displayName: Setup NPM & Yarn
+ displayName: Setup NPM
- task: npmAuthenticate@0
inputs:
- workingFile: .npmrc
+ workingFile: $(NPMRC_PATH)
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))
displayName: Setup NPM Authentication
- powershell: |
. build/azure-pipelines/win32/exec.ps1
- . build/azure-pipelines/win32/retry.ps1
$ErrorActionPreference = "Stop"
- $env:npm_config_arch="$(VSCODE_ARCH)"
- $env:CHILD_CONCURRENCY="1"
- retry { exec { yarn --frozen-lockfile --check-files } }
+ exec { npm ci }
env:
+ npm_config_arch: $(VSCODE_ARCH)
+ npm_config_foreground_scripts: "true"
ELECTRON_SKIP_BINARY_DOWNLOAD: 1
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
GITHUB_TOKEN: "$(github-distro-mixin-password)"
+ retryCountOnTaskFailure: 5
displayName: Install dependencies
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
diff --git a/build/azure-pipelines/product-build-pr.yml b/build/azure-pipelines/product-build-pr.yml
index 7dce4d20265..2d66ff3945d 100644
--- a/build/azure-pipelines/product-build-pr.yml
+++ b/build/azure-pipelines/product-build-pr.yml
@@ -26,7 +26,7 @@ jobs:
- ${{ if ne(variables['VSCODE_CIBUILD'], true) }}:
- job: Compile
displayName: Compile & Hygiene
- pool: 1es-oss-ubuntu-20.04-x64
+ pool: 1es-oss-ubuntu-22.04-x64
timeoutInMinutes: 30
variables:
VSCODE_ARCH: x64
@@ -37,7 +37,7 @@ jobs:
- job: Linuxx64UnitTest
displayName: Linux (Unit Tests)
- pool: 1es-oss-ubuntu-20.04-x64
+ pool: 1es-oss-ubuntu-22.04-x64
timeoutInMinutes: 30
variables:
VSCODE_ARCH: x64
@@ -55,7 +55,7 @@ jobs:
- job: Linuxx64IntegrationTest
displayName: Linux (Integration Tests)
- pool: 1es-oss-ubuntu-20.04-x64
+ pool: 1es-oss-ubuntu-22.04-x64
timeoutInMinutes: 30
variables:
VSCODE_ARCH: x64
@@ -73,7 +73,7 @@ jobs:
- job: Linuxx64SmokeTest
displayName: Linux (Smoke Tests)
- pool: 1es-oss-ubuntu-20.04-x64
+ pool: 1es-oss-ubuntu-22.04-x64
timeoutInMinutes: 30
variables:
VSCODE_ARCH: x64
@@ -91,14 +91,14 @@ jobs:
- job: LinuxCLI
displayName: Linux (CLI)
- pool: 1es-oss-ubuntu-20.04-x64
+ pool: 1es-oss-ubuntu-22.04-x64
timeoutInMinutes: 30
steps:
- template: cli/test.yml@self
- job: Windowsx64UnitTests
displayName: Windows (Unit Tests)
- pool: 1es-oss-windows-2019-x64
+ pool: 1es-oss-windows-2022-x64
timeoutInMinutes: 30
variables:
VSCODE_ARCH: x64
@@ -115,8 +115,8 @@ jobs:
- job: Windowsx64IntegrationTests
displayName: Windows (Integration Tests)
- pool: 1es-oss-windows-2019-x64
- timeoutInMinutes: 30
+ pool: 1es-oss-windows-2022-x64
+ timeoutInMinutes: 60
variables:
VSCODE_ARCH: x64
NPM_ARCH: x64
@@ -132,7 +132,7 @@ jobs:
# - job: Windowsx64SmokeTests
# displayName: Windows (Smoke Tests)
- # pool: 1es-oss-windows-2019-x64
+ # pool: 1es-oss-windows-2022-x64
# timeoutInMinutes: 30
# variables:
# VSCODE_ARCH: x64
@@ -149,7 +149,7 @@ jobs:
- ${{ if eq(variables['VSCODE_CIBUILD'], true) }}:
- job: Linuxx64MaintainNodeModulesCache
displayName: Linux (Maintain node_modules cache)
- pool: 1es-oss-ubuntu-20.04-x64
+ pool: 1es-oss-ubuntu-22.04-x64
timeoutInMinutes: 30
variables:
VSCODE_ARCH: x64
@@ -158,7 +158,7 @@ jobs:
- job: Windowsx64MaintainNodeModulesCache
displayName: Windows (Maintain node_modules cache)
- pool: 1es-oss-windows-2019-x64
+ pool: 1es-oss-windows-2022-x64
timeoutInMinutes: 30
variables:
VSCODE_ARCH: x64
diff --git a/build/azure-pipelines/product-build.yml b/build/azure-pipelines/product-build.yml
index b0e495b7b73..a196a1117f8 100644
--- a/build/azure-pipelines/product-build.yml
+++ b/build/azure-pipelines/product-build.yml
@@ -100,10 +100,6 @@ parameters:
displayName: "Skip tests"
type: boolean
default: false
- - name: VSCODE_BUILD_ESM # TODO@bpasero TODO@esm remove me once ESM is shipped
- displayName: "️❗ Build as ESM (!FOR TESTING ONLY!) ️❗"
- type: boolean
- default: false
variables:
- name: VSCODE_PRIVATE_BUILD
@@ -114,8 +110,6 @@ variables:
value: ${{ parameters.CARGO_REGISTRY }}
- name: VSCODE_QUALITY
value: ${{ parameters.VSCODE_QUALITY }}
- - name: VSCODE_BUILD_ESM
- value: ${{ parameters.VSCODE_BUILD_ESM }}
- name: VSCODE_BUILD_STAGE_WINDOWS
value: ${{ or(eq(parameters.VSCODE_BUILD_WIN32, true), eq(parameters.VSCODE_BUILD_WIN32_ARM64, true)) }}
- name: VSCODE_BUILD_STAGE_LINUX
@@ -180,15 +174,7 @@ extends:
sdl:
tsa:
enabled: true
- config:
- codebaseName: 'devdiv_$(Build.Repository.Name)'
- serviceTreeID: '79c048b2-322f-4ed5-a1ea-252a1250e4b3'
- instanceUrl: 'https://devdiv.visualstudio.com/defaultcollection'
- projectName: 'DevDiv'
- areaPath: "DevDiv\\VS Code (compliance tracking only)\\Visual Studio Code Client"
- notificationAliases: ['monacotools@microsoft.com']
- validateToolOutput: None
- allTools: true
+ configFile: $(Build.SourcesDirectory)/build/azure-pipelines/config/tsaoptions.json
codeql:
runSourceLanguagesInSourceAnalysis: true
compiled:
@@ -199,8 +185,9 @@ extends:
eslint:
enabled: true
enableExclusions: true
- exclusionsFilePath: $(Build.SourcesDirectory)/.eslintignore
+ exclusionsFilePath: $(Build.SourcesDirectory)/.eslint-ignore
sourceAnalysisPool: 1es-windows-2022-x64
+ createAdoIssuesForJustificationsForDisablement: false
containers:
snapcraft:
image: vscodehub.azurecr.io/vscode-linux-build-agent:snapcraft-x64
@@ -216,7 +203,7 @@ extends:
- job: Compile
timeoutInMinutes: 90
pool:
- name: 1es-ubuntu-20.04-x64
+ name: 1es-ubuntu-22.04-x64
os: linux
variables:
VSCODE_ARCH: x64
@@ -224,7 +211,6 @@ extends:
- template: build/azure-pipelines/product-compile.yml@self
parameters:
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
- VSCODE_BUILD_ESM: ${{ variables.VSCODE_BUILD_ESM }}
- ${{ if or(eq(parameters.VSCODE_BUILD_LINUX, true),eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true),eq(parameters.VSCODE_BUILD_LINUX_ARM64, true),eq(parameters.VSCODE_BUILD_ALPINE, true),eq(parameters.VSCODE_BUILD_ALPINE_ARM64, true),eq(parameters.VSCODE_BUILD_MACOS, true),eq(parameters.VSCODE_BUILD_MACOS_ARM64, true),eq(parameters.VSCODE_BUILD_WIN32, true),eq(parameters.VSCODE_BUILD_WIN32_ARM64, true)) }}:
- stage: CompileCLI
@@ -233,7 +219,7 @@ extends:
- ${{ if eq(parameters.VSCODE_BUILD_LINUX, true) }}:
- job: CLILinuxX64
pool:
- name: 1es-ubuntu-20.04-x64
+ name: 1es-ubuntu-22.04-x64
os: linux
steps:
- template: build/azure-pipelines/linux/cli-build-linux.yml@self
@@ -245,7 +231,7 @@ extends:
- ${{ if and(eq(variables['VSCODE_CIBUILD'], false), or(eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true), eq(parameters.VSCODE_BUILD_LINUX_ARM64, true))) }}:
- job: CLILinuxGnuARM
pool:
- name: 1es-ubuntu-20.04-x64
+ name: 1es-ubuntu-22.04-x64
os: linux
steps:
- template: build/azure-pipelines/linux/cli-build-linux.yml@self
@@ -257,7 +243,7 @@ extends:
- ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_ALPINE, true)) }}:
- job: CLIAlpineX64
pool:
- name: 1es-ubuntu-20.04-x64
+ name: 1es-ubuntu-22.04-x64
os: linux
steps:
- template: build/azure-pipelines/alpine/cli-build-alpine.yml@self
@@ -362,7 +348,6 @@ extends:
- template: build/azure-pipelines/win32/product-build-win32.yml@self
parameters:
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
- VSCODE_BUILD_ESM: ${{ variables.VSCODE_BUILD_ESM }}
VSCODE_ARCH: x64
VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
VSCODE_RUN_UNIT_TESTS: true
@@ -377,7 +362,6 @@ extends:
- template: build/azure-pipelines/win32/product-build-win32.yml@self
parameters:
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
- VSCODE_BUILD_ESM: ${{ variables.VSCODE_BUILD_ESM }}
VSCODE_ARCH: x64
VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
VSCODE_RUN_UNIT_TESTS: false
@@ -392,7 +376,6 @@ extends:
- template: build/azure-pipelines/win32/product-build-win32.yml@self
parameters:
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
- VSCODE_BUILD_ESM: ${{ variables.VSCODE_BUILD_ESM }}
VSCODE_ARCH: x64
VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
VSCODE_RUN_UNIT_TESTS: false
@@ -408,7 +391,6 @@ extends:
- template: build/azure-pipelines/win32/product-build-win32.yml@self
parameters:
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
- VSCODE_BUILD_ESM: ${{ variables.VSCODE_BUILD_ESM }}
VSCODE_ARCH: x64
VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
VSCODE_RUN_UNIT_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }}
@@ -432,7 +414,6 @@ extends:
- template: build/azure-pipelines/win32/product-build-win32.yml@self
parameters:
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
- VSCODE_BUILD_ESM: ${{ variables.VSCODE_BUILD_ESM }}
VSCODE_ARCH: arm64
VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
VSCODE_RUN_UNIT_TESTS: false
@@ -446,7 +427,7 @@ extends:
- ${{ if or(eq(parameters.VSCODE_BUILD_LINUX, true),eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true),eq(parameters.VSCODE_BUILD_LINUX_ARM64, true),eq(parameters.VSCODE_BUILD_ALPINE, true),eq(parameters.VSCODE_BUILD_ALPINE_ARM64, true),eq(parameters.VSCODE_BUILD_MACOS, true),eq(parameters.VSCODE_BUILD_MACOS_ARM64, true),eq(parameters.VSCODE_BUILD_WIN32, true),eq(parameters.VSCODE_BUILD_WIN32_ARM64, true)) }}:
- CompileCLI
pool:
- name: 1es-ubuntu-20.04-x64
+ name: 1es-ubuntu-22.04-x64
os: linux
jobs:
- ${{ if eq(variables['VSCODE_CIBUILD'], true) }}:
@@ -461,7 +442,6 @@ extends:
parameters:
VSCODE_ARCH: x64
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
- VSCODE_BUILD_ESM: ${{ variables.VSCODE_BUILD_ESM }}
VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
VSCODE_RUN_UNIT_TESTS: true
VSCODE_RUN_INTEGRATION_TESTS: false
@@ -477,7 +457,6 @@ extends:
parameters:
VSCODE_ARCH: x64
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
- VSCODE_BUILD_ESM: ${{ variables.VSCODE_BUILD_ESM }}
VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
VSCODE_RUN_UNIT_TESTS: false
VSCODE_RUN_INTEGRATION_TESTS: true
@@ -493,7 +472,6 @@ extends:
parameters:
VSCODE_ARCH: x64
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
- VSCODE_BUILD_ESM: ${{ variables.VSCODE_BUILD_ESM }}
VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
VSCODE_RUN_UNIT_TESTS: false
VSCODE_RUN_INTEGRATION_TESTS: false
@@ -511,7 +489,6 @@ extends:
parameters:
VSCODE_ARCH: x64
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
- VSCODE_BUILD_ESM: ${{ variables.VSCODE_BUILD_ESM }}
VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
VSCODE_RUN_UNIT_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }}
VSCODE_RUN_INTEGRATION_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }}
@@ -537,7 +514,6 @@ extends:
parameters:
VSCODE_ARCH: armhf
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
- VSCODE_BUILD_ESM: ${{ variables.VSCODE_BUILD_ESM }}
VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
VSCODE_RUN_UNIT_TESTS: false
VSCODE_RUN_INTEGRATION_TESTS: false
@@ -553,7 +529,6 @@ extends:
parameters:
VSCODE_ARCH: arm64
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
- VSCODE_BUILD_ESM: ${{ variables.VSCODE_BUILD_ESM }}
VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
VSCODE_RUN_UNIT_TESTS: false
VSCODE_RUN_INTEGRATION_TESTS: false
@@ -578,7 +553,6 @@ extends:
parameters:
VSCODE_ARCH: x64
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
- VSCODE_BUILD_ESM: ${{ variables.VSCODE_BUILD_ESM }}
VSCODE_RUN_INTEGRATION_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }}
- ${{ if eq(parameters.VSCODE_BUILD_LINUX_ARMHF_LEGACY_SERVER, true) }}:
@@ -591,7 +565,6 @@ extends:
parameters:
VSCODE_ARCH: armhf
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
- VSCODE_BUILD_ESM: ${{ variables.VSCODE_BUILD_ESM }}
VSCODE_RUN_INTEGRATION_TESTS: false
- ${{ if eq(parameters.VSCODE_BUILD_LINUX_ARM64_LEGACY_SERVER, true) }}:
@@ -604,7 +577,6 @@ extends:
parameters:
VSCODE_ARCH: arm64
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
- VSCODE_BUILD_ESM: ${{ variables.VSCODE_BUILD_ESM }}
VSCODE_RUN_INTEGRATION_TESTS: false
- ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_COMPILE_ONLY, false), eq(variables['VSCODE_BUILD_STAGE_ALPINE'], true)) }}:
@@ -614,7 +586,7 @@ extends:
- ${{ if or(eq(parameters.VSCODE_BUILD_LINUX, true),eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true),eq(parameters.VSCODE_BUILD_LINUX_ARM64, true),eq(parameters.VSCODE_BUILD_ALPINE, true),eq(parameters.VSCODE_BUILD_ALPINE_ARM64, true),eq(parameters.VSCODE_BUILD_MACOS, true),eq(parameters.VSCODE_BUILD_MACOS_ARM64, true),eq(parameters.VSCODE_BUILD_WIN32, true),eq(parameters.VSCODE_BUILD_WIN32_ARM64, true)) }}:
- CompileCLI
pool:
- name: 1es-ubuntu-20.04-x64
+ name: 1es-ubuntu-22.04-x64
os: linux
jobs:
- ${{ if eq(parameters.VSCODE_BUILD_ALPINE, true) }}:
@@ -657,7 +629,6 @@ extends:
- template: build/azure-pipelines/darwin/product-build-darwin.yml@self
parameters:
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
- VSCODE_BUILD_ESM: ${{ variables.VSCODE_BUILD_ESM }}
VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
VSCODE_RUN_UNIT_TESTS: true
VSCODE_RUN_INTEGRATION_TESTS: false
@@ -671,7 +642,6 @@ extends:
- template: build/azure-pipelines/darwin/product-build-darwin.yml@self
parameters:
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
- VSCODE_BUILD_ESM: ${{ variables.VSCODE_BUILD_ESM }}
VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
VSCODE_RUN_UNIT_TESTS: false
VSCODE_RUN_INTEGRATION_TESTS: true
@@ -685,7 +655,6 @@ extends:
- template: build/azure-pipelines/darwin/product-build-darwin.yml@self
parameters:
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
- VSCODE_BUILD_ESM: ${{ variables.VSCODE_BUILD_ESM }}
VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
VSCODE_RUN_UNIT_TESTS: false
VSCODE_RUN_INTEGRATION_TESTS: false
@@ -700,7 +669,6 @@ extends:
- template: build/azure-pipelines/darwin/product-build-darwin.yml@self
parameters:
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
- VSCODE_BUILD_ESM: ${{ variables.VSCODE_BUILD_ESM }}
VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
VSCODE_RUN_UNIT_TESTS: false
VSCODE_RUN_INTEGRATION_TESTS: false
@@ -715,7 +683,6 @@ extends:
- template: build/azure-pipelines/darwin/product-build-darwin.yml@self
parameters:
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
- VSCODE_BUILD_ESM: ${{ variables.VSCODE_BUILD_ESM }}
VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
VSCODE_RUN_UNIT_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }}
VSCODE_RUN_INTEGRATION_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }}
@@ -747,7 +714,6 @@ extends:
- template: build/azure-pipelines/darwin/product-build-darwin.yml@self
parameters:
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
- VSCODE_BUILD_ESM: ${{ variables.VSCODE_BUILD_ESM }}
VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
VSCODE_RUN_UNIT_TESTS: false
VSCODE_RUN_INTEGRATION_TESTS: false
@@ -787,7 +753,7 @@ extends:
dependsOn:
- Compile
pool:
- name: 1es-ubuntu-20.04-x64
+ name: 1es-ubuntu-22.04-x64
os: linux
jobs:
- ${{ if eq(parameters.VSCODE_BUILD_WEB, true) }}:
@@ -817,7 +783,7 @@ extends:
- stage: ApproveRelease
dependsOn: [] # run in parallel to compile stage
pool:
- name: 1es-ubuntu-20.04-x64
+ name: 1es-ubuntu-22.04-x64
os: linux
jobs:
- deployment: ApproveRelease
@@ -838,7 +804,7 @@ extends:
- ${{ if and(parameters.VSCODE_RELEASE, eq(variables['VSCODE_PRIVATE_BUILD'], false)) }}:
- ApproveRelease
pool:
- name: 1es-ubuntu-20.04-x64
+ name: 1es-ubuntu-22.04-x64
os: linux
jobs:
- job: ReleaseBuild
diff --git a/build/azure-pipelines/product-compile.yml b/build/azure-pipelines/product-compile.yml
index 46b5dde2492..facc7af4bc2 100644
--- a/build/azure-pipelines/product-compile.yml
+++ b/build/azure-pipelines/product-compile.yml
@@ -1,9 +1,6 @@
parameters:
- name: VSCODE_QUALITY
type: string
- - name: VSCODE_BUILD_ESM
- type: boolean
- default: false
steps:
- task: NodeTool@0
@@ -15,7 +12,7 @@ steps:
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- template: ./distro/download-distro.yml@self
- - task: AzureKeyVault@1
+ - task: AzureKeyVault@2
displayName: "Azure Key Vault: Get Secrets"
inputs:
azureSubscription: "vscode-builds-subscription"
@@ -26,12 +23,12 @@ steps:
condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))
displayName: Setup NPM Registry
- - script: mkdir -p .build && node build/azure-pipelines/common/computeNodeModulesCacheKey.js compile > .build/yarnlockhash
+ - script: mkdir -p .build && node build/azure-pipelines/common/computeNodeModulesCacheKey.js compile > .build/packagelockhash
displayName: Prepare node_modules cache key
- task: Cache@2
inputs:
- key: '"node_modules" | .build/yarnlockhash'
+ key: '"node_modules" | .build/packagelockhash'
path: .build/node_modules_cache
cacheHitVar: NODE_MODULES_RESTORED
displayName: Restore node_modules cache
@@ -42,18 +39,17 @@ steps:
- script: |
set -e
- npm config set registry "$NPM_REGISTRY" --location=project
- # npm >v7 deprecated the `always-auth` config option, refs npm/cli@72a7eeb
- # following is a workaround for yarn to send authorization header
- # for GET requests to the registry.
- echo "always-auth=true" >> .npmrc
- yarn config set registry "$NPM_REGISTRY"
+ # Set the private NPM registry to the global npmrc file
+ # so that authentication works for subfolders like build/, remote/, extensions/ etc
+ # which does not have their own .npmrc file
+ npm config set registry "$NPM_REGISTRY"
+ echo "##vso[task.setvariable variable=NPMRC_PATH]$(npm config get userconfig)"
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))
- displayName: Setup NPM & Yarn
+ displayName: Setup NPM
- task: npmAuthenticate@0
inputs:
- workingFile: .npmrc
+ workingFile: $(NPMRC_PATH)
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))
displayName: Setup NPM Authentication
@@ -63,15 +59,14 @@ steps:
- script: |
set -e
- npm i -g node-gyp@9.4.0
for i in {1..5}; do # try 5 times
- yarn --frozen-lockfile --check-files && break
- if [ $i -eq 3 ]; then
- echo "Yarn failed too many times" >&2
+ npm ci && break
+ if [ $i -eq 5 ]; then
+ echo "Npm install failed too many times" >&2
exit 1
fi
- echo "Yarn failed $i, trying again..."
+ echo "Npm install failed $i, trying again..."
done
env:
ELECTRON_SKIP_BINARY_DOWNLOAD: 1
@@ -94,38 +89,43 @@ steps:
displayName: Create node_modules archive
- ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:
- - script: yarn --cwd build compile && ./.github/workflows/check-clean-git-state.sh
+ - script: npm run compile
+ workingDirectory: build
+ displayName: Compile /build/ folder
+
+ - script: .github/workflows/check-clean-git-state.sh
displayName: Check /build/ folder
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- script: node build/azure-pipelines/distro/mixin-quality
displayName: Mixin distro quality
- - ${{ if eq(parameters.VSCODE_BUILD_ESM, true) }}:
- - script: node migrate.mjs --disable-watch
- displayName: Migrate to ESM
-
- template: common/install-builtin-extensions.yml@self
- ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:
- - script: yarn npm-run-all -lp core-ci-pr extensions-ci-pr hygiene eslint valid-layers-check vscode-dts-compile-check tsec-compile-check
+ - script: npm exec -- npm-run-all -lp core-ci-pr extensions-ci-pr hygiene eslint valid-layers-check vscode-dts-compile-check tsec-compile-check
env:
GITHUB_TOKEN: "$(github-distro-mixin-password)"
- DISABLE_V8_COMPILE_CACHE: 1 # Disable v8 cache used by yarn v1.x, refs https://github.com/nodejs/node/issues/51555
displayName: Compile & Hygiene (OSS)
- ${{ else }}:
- - script: yarn npm-run-all -lp core-ci extensions-ci hygiene eslint valid-layers-check vscode-dts-compile-check tsec-compile-check
+ - script: npm exec -- npm-run-all -lp core-ci extensions-ci hygiene eslint valid-layers-check vscode-dts-compile-check tsec-compile-check
env:
GITHUB_TOKEN: "$(github-distro-mixin-password)"
- DISABLE_V8_COMPILE_CACHE: 1 # Disable v8 cache used by yarn v1.x, refs https://github.com/nodejs/node/issues/51555
displayName: Compile & Hygiene (non-OSS)
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- script: |
set -e
- yarn --cwd test/smoke compile
- yarn --cwd test/integration/browser compile
- displayName: Compile test suites (non-OSS)
+ npm run compile
+ displayName: Compile smoke test suites (non-OSS)
+ workingDirectory: test/smoke
+ condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
+
+ - script: |
+ set -e
+ npm run compile
+ displayName: Compile integration test suites (non-OSS)
+ workingDirectory: test/integration/browser
condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
- task: AzureCLI@2
@@ -171,7 +171,7 @@ steps:
sbomEnabled: false
displayName: Publish compilation artifact
- - script: yarn download-builtin-extensions-cg
+ - script: npm run download-builtin-extensions-cg
env:
GITHUB_TOKEN: "$(github-distro-mixin-password)"
displayName: Download component details of built-in extensions
diff --git a/build/azure-pipelines/product-npm-package-validate.yml b/build/azure-pipelines/product-npm-package-validate.yml
new file mode 100644
index 00000000000..05f2cd8e00e
--- /dev/null
+++ b/build/azure-pipelines/product-npm-package-validate.yml
@@ -0,0 +1,94 @@
+trigger: none
+
+pr:
+ branches:
+ include: ["main"]
+ paths:
+ include: ["package.json", "package-lock.json"]
+
+variables:
+ - name: NPM_REGISTRY
+ value: "https://pkgs.dev.azure.com/monacotools/Monaco/_packaging/vscode/npm/registry/"
+ - name: VSCODE_CIBUILD
+ value: ${{ in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI') }}
+ - name: VSCODE_QUALITY
+ value: oss
+
+jobs:
+ - ${{ if ne(variables['VSCODE_CIBUILD'], true) }}:
+ - job: ValidateNpmPackage
+ displayName: Valiate NPM package against Terrapin
+ pool:
+ name: 1es-ubuntu-22.04-x64
+ os: linux
+ timeoutInMinutes: 40000
+ continueOnError: true
+ variables:
+ VSCODE_ARCH: x64
+ steps:
+ - task: NodeTool@0
+ inputs:
+ versionSource: fromFile
+ versionFilePath: .nvmrc
+ nodejsMirror: https://github.com/joaomoreno/node-mirror/releases/download
+
+ - script: node build/setup-npm-registry.js $NPM_REGISTRY
+ condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))
+ displayName: Setup NPM Registry
+
+ - script: |
+ set -e
+ # Set the private NPM registry to the global npmrc file
+ # so that authentication works for subfolders like build/, remote/, extensions/ etc
+ # which does not have their own .npmrc file
+ echo "NPMRC Path: $(npm config get userconfig)"
+ echo "NPM Registry: $(npm config get registry)"
+ npm config set registry "$NPM_REGISTRY"
+ echo "##vso[task.setvariable variable=NPMRC_PATH]$(npm config get userconfig)"
+ condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))
+ displayName: Setup NPM
+
+ - task: npmAuthenticate@0
+ inputs:
+ workingFile: $(NPMRC_PATH)
+ condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))
+ displayName: Setup NPM Authentication
+
+ - script: sudo apt update -y && sudo apt install -y build-essential pkg-config libx11-dev libx11-xcb-dev libxkbfile-dev libnotify-bin libkrb5-dev
+ displayName: Install build tools
+ condition: succeeded()
+
+ - script: |
+ set -e
+
+ for attempt in {1..6}; do
+ if [ $attempt -gt 1 ]; then
+ echo "Attempt $attempt: Waiting for 1 hour before retrying..."
+ sleep 3600
+ fi
+
+ echo "Attempt $attempt: Running npm ci"
+ if npm i --ignore-scripts; then
+ if node build/npm/postinstall.js; then
+ echo "npm i succeeded on attempt $attempt"
+ exit 0
+ else
+ echo "node build/npm/postinstall.js failed on attempt $attempt"
+ fi
+ else
+ echo "npm i failed on attempt $attempt"
+ fi
+ done
+
+ echo "npm i failed after 6 attempts"
+ exit 1
+ env:
+ npm_command: 'install --ignore-scripts'
+ ELECTRON_SKIP_BINARY_DOWNLOAD: 1
+ PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
+ GITHUB_TOKEN: "$(github-distro-mixin-password)"
+ displayName: Install dependencies with retries
+ timeoutInMinutes: 400
+
+ - script: .github/workflows/check-clean-git-state.sh
+ displayName: Check clean git state
diff --git a/build/azure-pipelines/product-publish.yml b/build/azure-pipelines/product-publish.yml
index 2c57e131c1a..59012a938ac 100644
--- a/build/azure-pipelines/product-publish.yml
+++ b/build/azure-pipelines/product-publish.yml
@@ -8,14 +8,14 @@ steps:
- task: SFP.build-tasks.esrpclient-tools-task.EsrpClientTool@2
displayName: "Use EsrpClient"
- - task: AzureKeyVault@1
+ - task: AzureKeyVault@2
displayName: "Azure Key Vault: Get Secrets"
inputs:
azureSubscription: "vscode-builds-subscription"
KeyVaultName: vscode-build-secrets
SecretsFilter: "github-distro-mixin-password,esrp-aad-username,esrp-aad-password"
- - task: AzureKeyVault@1
+ - task: AzureKeyVault@2
displayName: "Azure Key Vault: Get Secrets"
inputs:
azureSubscription: "vscode-builds-subscription"
@@ -26,10 +26,8 @@ steps:
- pwsh: Write-Host "##vso[build.addbuildtag]🚀"
displayName: Add build tag
- - pwsh: node build/npm/setupBuildYarnrc
- displayName: Prepare build dependencies
-
- - pwsh: yarn
+ - pwsh: |
+ npm ci
workingDirectory: build
displayName: Install build dependencies
diff --git a/build/azure-pipelines/product-release.yml b/build/azure-pipelines/product-release.yml
index dc084f5a04c..8afdcf10053 100644
--- a/build/azure-pipelines/product-release.yml
+++ b/build/azure-pipelines/product-release.yml
@@ -23,7 +23,12 @@ steps:
- script: |
set -e
- (cd build ; yarn)
+ npm ci
+ workingDirectory: build
+ displayName: Install /build dependencies
+
+ - script: |
+ set -e
AZURE_TENANT_ID="$(AZURE_TENANT_ID)" \
AZURE_CLIENT_ID="$(AZURE_CLIENT_ID)" \
AZURE_CLIENT_SECRET="$(AZURE_CLIENT_SECRET)" \
diff --git a/build/azure-pipelines/publish-types/publish-types.yml b/build/azure-pipelines/publish-types/publish-types.yml
index 4fc31fb6b37..5f60ae5a262 100644
--- a/build/azure-pipelines/publish-types/publish-types.yml
+++ b/build/azure-pipelines/publish-types/publish-types.yml
@@ -34,7 +34,7 @@ steps:
- bash: |
# Install build dependencies
- (cd build && yarn)
+ (cd build && npm ci)
node build/azure-pipelines/publish-types/check-version.js
displayName: Check version
diff --git a/build/azure-pipelines/upload-sourcemaps.js b/build/azure-pipelines/upload-sourcemaps.js
index 7cd68398734..83c1cae596d 100644
--- a/build/azure-pipelines/upload-sourcemaps.js
+++ b/build/azure-pipelines/upload-sourcemaps.js
@@ -31,7 +31,7 @@ function main() {
const vs = src('out-vscode-min'); // client source-maps only
sources.push(vs);
const productionDependencies = deps.getProductionDependencies(root);
- const productionDependenciesSrc = productionDependencies.map(d => path.relative(root, d.path)).map(d => `./${d}/**/*.map`);
+ const productionDependenciesSrc = productionDependencies.map(d => path.relative(root, d)).map(d => `./${d}/**/*.map`);
const nodeModules = vfs.src(productionDependenciesSrc, { base: '.' })
.pipe(util.cleanNodeModules(path.join(root, 'build', '.moduleignore')))
.pipe(util.cleanNodeModules(path.join(root, 'build', `.moduleignore.${process.platform}`)));
diff --git a/build/azure-pipelines/upload-sourcemaps.ts b/build/azure-pipelines/upload-sourcemaps.ts
index 366ad945499..8e148c6095f 100644
--- a/build/azure-pipelines/upload-sourcemaps.ts
+++ b/build/azure-pipelines/upload-sourcemaps.ts
@@ -36,8 +36,8 @@ function main(): Promise {
const vs = src('out-vscode-min'); // client source-maps only
sources.push(vs);
- const productionDependencies: { name: string; path: string; version: string }[] = deps.getProductionDependencies(root);
- const productionDependenciesSrc = productionDependencies.map(d => path.relative(root, d.path)).map(d => `./${d}/**/*.map`);
+ const productionDependencies = deps.getProductionDependencies(root);
+ const productionDependenciesSrc = productionDependencies.map(d => path.relative(root, d)).map(d => `./${d}/**/*.map`);
const nodeModules = vfs.src(productionDependenciesSrc, { base: '.' })
.pipe(util.cleanNodeModules(path.join(root, 'build', '.moduleignore')))
.pipe(util.cleanNodeModules(path.join(root, 'build', `.moduleignore.${process.platform}`)));
diff --git a/build/azure-pipelines/web/product-build-web.yml b/build/azure-pipelines/web/product-build-web.yml
index a522e845f3b..3866dc5cf81 100644
--- a/build/azure-pipelines/web/product-build-web.yml
+++ b/build/azure-pipelines/web/product-build-web.yml
@@ -7,7 +7,7 @@ steps:
- template: ../distro/download-distro.yml@self
- - task: AzureKeyVault@1
+ - task: AzureKeyVault@2
displayName: "Azure Key Vault: Get Secrets"
inputs:
azureSubscription: "vscode-builds-subscription"
@@ -27,12 +27,12 @@ steps:
condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))
displayName: Setup NPM Registry
- - script: mkdir -p .build && node build/azure-pipelines/common/computeNodeModulesCacheKey.js web > .build/yarnlockhash
+ - script: mkdir -p .build && node build/azure-pipelines/common/computeNodeModulesCacheKey.js web > .build/packagelockhash
displayName: Prepare node_modules cache key
- task: Cache@2
inputs:
- key: '"node_modules" | .build/yarnlockhash'
+ key: '"node_modules" | .build/packagelockhash'
path: .build/node_modules_cache
cacheHitVar: NODE_MODULES_RESTORED
displayName: Restore node_modules cache
@@ -43,34 +43,37 @@ steps:
- script: |
set -e
- npm config set registry "$NPM_REGISTRY" --location=project
- # npm >v7 deprecated the `always-auth` config option, refs npm/cli@72a7eeb
- # following is a workaround for yarn to send authorization header
- # for GET requests to the registry.
- echo "always-auth=true" >> .npmrc
- yarn config set registry "$NPM_REGISTRY"
+ # Set the private NPM registry to the global npmrc file
+ # so that authentication works for subfolders like build/, remote/, extensions/ etc
+ # which does not have their own .npmrc file
+ npm config set registry "$NPM_REGISTRY"
+ echo "##vso[task.setvariable variable=NPMRC_PATH]$(npm config get userconfig)"
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))
- displayName: Setup NPM & Yarn
+ displayName: Setup NPM
- task: npmAuthenticate@0
inputs:
- workingFile: .npmrc
+ workingFile: $(NPMRC_PATH)
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))
displayName: Setup NPM Authentication
- - script: sudo apt-get update && sudo apt-get install -y libkrb5-dev
- displayName: Install build dependencies
+ - script: |
+ set -e
+ ./build/azure-pipelines/linux/apt-retry.sh sudo apt-get update
+ ./build/azure-pipelines/linux/apt-retry.sh sudo apt-get install -y libkrb5-dev
+ displayName: Setup system services
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
- script: |
set -e
+
for i in {1..5}; do # try 5 times
- yarn --frozen-lockfile --check-files && break
- if [ $i -eq 3 ]; then
- echo "Yarn failed too many times" >&2
+ npm ci && break
+ if [ $i -eq 5 ]; then
+ echo "Npm install failed too many times" >&2
exit 1
fi
- echo "Yarn failed $i, trying again..."
+ echo "Npm install failed $i, trying again..."
done
env:
ELECTRON_SKIP_BINARY_DOWNLOAD: 1
@@ -98,13 +101,12 @@ steps:
- script: |
set -e
- yarn gulp vscode-web-min-ci
+ npm run gulp vscode-web-min-ci
ARCHIVE_PATH=".build/web/vscode-web.tar.gz"
mkdir -p $(dirname $ARCHIVE_PATH)
tar --owner=0 --group=0 -czf $ARCHIVE_PATH -C .. vscode-web
echo "##vso[task.setvariable variable=WEB_PATH]$ARCHIVE_PATH"
env:
- DISABLE_V8_COMPILE_CACHE: 1 # Disable v8 cache used by yarn v1.x, refs https://github.com/nodejs/node/issues/51555
GITHUB_TOKEN: "$(github-distro-mixin-password)"
displayName: Build
@@ -136,7 +138,16 @@ steps:
AZURE_CLIENT_ID="$(AZURE_CLIENT_ID)" \
AZURE_CLIENT_SECRET="$(AZURE_CLIENT_SECRET)" \
node build/azure-pipelines/upload-sourcemaps out-vscode-web-min out-vscode-web-min/vs/workbench/workbench.web.main.js.map
- displayName: Upload sourcemaps (Web)
+ displayName: Upload sourcemaps (Web Main)
+
+ - script: |
+ set -e
+ AZURE_STORAGE_ACCOUNT="vscodeweb" \
+ AZURE_TENANT_ID="$(AZURE_TENANT_ID)" \
+ AZURE_CLIENT_ID="$(AZURE_CLIENT_ID)" \
+ AZURE_CLIENT_SECRET="$(AZURE_CLIENT_SECRET)" \
+ node build/azure-pipelines/upload-sourcemaps out-vscode-web-min out-vscode-web-min/vs/workbench/workbench.web.main.internal.js.map
+ displayName: Upload sourcemaps (Web Internal)
# upload only the workbench.web.main.js source maps because
# we just compiled these bits in the previous step and the
diff --git a/build/azure-pipelines/win32/product-build-win32-cli-sign.yml b/build/azure-pipelines/win32/product-build-win32-cli-sign.yml
index 3b5668d0082..9d9af45d474 100644
--- a/build/azure-pipelines/win32/product-build-win32-cli-sign.yml
+++ b/build/azure-pipelines/win32/product-build-win32-cli-sign.yml
@@ -17,31 +17,29 @@ steps:
displayName: Setup NPM Registry
- powershell: |
- . azure-pipelines/win32/exec.ps1
+ . build/azure-pipelines/win32/exec.ps1
$ErrorActionPreference = "Stop"
- exec { npm config set registry "$env:NPM_REGISTRY" --location=project }
- # npm >v7 deprecated the `always-auth` config option, refs npm/cli@72a7eeb
- # following is a workaround for yarn to send authorization header
- # for GET requests to the registry.
- exec { Add-Content -Path .npmrc -Value "always-auth=true" }
- exec { yarn config set registry "$env:NPM_REGISTRY" }
- workingDirectory: build
+ # Set the private NPM registry to the global npmrc file
+ # so that authentication works for subfolders like build/, remote/, extensions/ etc
+ # which does not have their own .npmrc file
+ exec { npm config set registry "$env:NPM_REGISTRY" }
+ $NpmrcPath = (npm config get userconfig)
+ echo "##vso[task.setvariable variable=NPMRC_PATH]$NpmrcPath"
condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))
- displayName: Setup NPM & Yarn
+ displayName: Setup NPM
- task: npmAuthenticate@0
inputs:
- workingFile: build/.npmrc
+ workingFile: $(NPMRC_PATH)
condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))
displayName: Setup NPM Authentication
- powershell: |
. azure-pipelines/win32/exec.ps1
- . azure-pipelines/win32/retry.ps1
$ErrorActionPreference = "Stop"
- $env:CHILD_CONCURRENCY="1"
- retry { exec { yarn --frozen-lockfile --check-files } }
+ exec { npm ci }
workingDirectory: build
+ retryCountOnTaskFailure: 5
displayName: Install build dependencies
- template: ../cli/cli-win32-sign.yml@self
diff --git a/build/azure-pipelines/win32/product-build-win32-test.yml b/build/azure-pipelines/win32/product-build-win32-test.yml
index fb3f3f4d73b..cdcccd7684b 100644
--- a/build/azure-pipelines/win32/product-build-win32-test.yml
+++ b/build/azure-pipelines/win32/product-build-win32-test.yml
@@ -12,12 +12,9 @@ parameters:
- name: PUBLISH_TASK_NAME
type: string
default: PublishPipelineArtifact@0
- - name: VSCODE_BUILD_ESM
- type: boolean
- default: false
steps:
- - powershell: yarn npm-run-all -lp "electron $(VSCODE_ARCH)" "playwright-install"
+ - powershell: npm exec -- npm-run-all -lp "electron $(VSCODE_ARCH)" "playwright-install"
env:
GITHUB_TOKEN: "$(github-distro-mixin-password)"
displayName: Download Electron and Playwright
@@ -25,54 +22,32 @@ steps:
- ${{ if eq(parameters.VSCODE_RUN_UNIT_TESTS, true) }}:
- ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:
- - ${{ if eq(parameters.VSCODE_BUILD_ESM, true) }}:
- - powershell: .\scripts\test-esm.bat --tfs "Unit Tests"
- displayName: Run unit tests (Electron) [ESM]
- timeoutInMinutes: 15
- - powershell: yarn test-node-esm
- displayName: Run unit tests (node.js) [ESM]
- timeoutInMinutes: 15
- - powershell: node test/unit/browser/index.esm.js --sequential --browser chromium --tfs "Browser Unit Tests"
- displayName: Run unit tests (Browser, Chromium) [ESM]
- timeoutInMinutes: 20
- - ${{ if eq(parameters.VSCODE_BUILD_ESM, false) }}:
- - powershell: .\scripts\test.bat --tfs "Unit Tests"
- displayName: Run unit tests (Electron)
- timeoutInMinutes: 15
- - powershell: yarn test-node
- displayName: Run unit tests (node.js)
- timeoutInMinutes: 15
- - powershell: node test/unit/browser/index.js --sequential --browser chromium --tfs "Browser Unit Tests"
- displayName: Run unit tests (Browser, Chromium)
- timeoutInMinutes: 20
+ - powershell: .\scripts\test.bat --tfs "Unit Tests"
+ displayName: Run unit tests (Electron)
+ timeoutInMinutes: 15
+ - powershell: npm run test-node
+ displayName: Run unit tests (node.js)
+ timeoutInMinutes: 15
+ - powershell: node test/unit/browser/index.js --sequential --browser chromium --tfs "Browser Unit Tests"
+ displayName: Run unit tests (Browser, Chromium)
+ timeoutInMinutes: 20
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- - ${{ if eq(parameters.VSCODE_BUILD_ESM, true) }}:
- - powershell: .\scripts\test-esm.bat --build --tfs "Unit Tests"
- displayName: Run unit tests (Electron) [ESM]
- timeoutInMinutes: 15
- - script: yarn test-node-esm --build
- displayName: Run unit tests (node.js) [ESM]
- timeoutInMinutes: 15
- - powershell: yarn test-browser-esm-no-install --sequential --build --browser chromium --tfs "Browser Unit Tests"
- displayName: Run unit tests (Browser, Chromium) [ESM]
- timeoutInMinutes: 20
- - ${{ if eq(parameters.VSCODE_BUILD_ESM, false) }}:
- - powershell: .\scripts\test.bat --build --tfs "Unit Tests"
- displayName: Run unit tests (Electron)
- timeoutInMinutes: 15
- - powershell: yarn test-node --build
- displayName: Run unit tests (node.js)
- timeoutInMinutes: 15
- - powershell: yarn test-browser-no-install --sequential --build --browser chromium --tfs "Browser Unit Tests"
- displayName: Run unit tests (Browser, Chromium)
- timeoutInMinutes: 20
+ - powershell: .\scripts\test.bat --build --tfs "Unit Tests"
+ displayName: Run unit tests (Electron)
+ timeoutInMinutes: 15
+ - powershell: npm run test-node -- --build
+ displayName: Run unit tests (node.js)
+ timeoutInMinutes: 15
+ - powershell: npm run test-browser-no-install -- --sequential --build --browser chromium --tfs "Browser Unit Tests"
+ displayName: Run unit tests (Browser, Chromium)
+ timeoutInMinutes: 20
- ${{ if eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true) }}:
- powershell: |
. build/azure-pipelines/win32/exec.ps1
$ErrorActionPreference = "Stop"
- exec { yarn gulp `
+ exec { npm run gulp `
compile-extension:configuration-editing `
compile-extension:css-language-features-server `
compile-extension:emmet `
@@ -98,17 +73,12 @@ steps:
condition: succeededOrFailed()
- ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:
- - ${{ if eq(parameters.VSCODE_BUILD_ESM, true) }}:
- - powershell: .\scripts\test-integration-esm.bat --tfs "Integration Tests"
- displayName: Run integration tests (Electron) [ESM]
- timeoutInMinutes: 20
- - ${{ if eq(parameters.VSCODE_BUILD_ESM, false) }}:
- - powershell: .\scripts\test-integration.bat --tfs "Integration Tests"
- displayName: Run integration tests (Electron)
- timeoutInMinutes: 20
+ - powershell: .\scripts\test-integration.bat --tfs "Integration Tests"
+ displayName: Run integration tests (Electron)
+ timeoutInMinutes: 20
- - powershell: .\scripts\test-web-integration.bat --browser firefox
- displayName: Run integration tests (Browser, Firefox)
+ - powershell: .\scripts\test-web-integration.bat --browser chromium
+ displayName: Run integration tests (Browser, Chromium)
timeoutInMinutes: 20
- powershell: .\scripts\test-remote-integration.bat
@@ -116,36 +86,20 @@ steps:
timeoutInMinutes: 20
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- - ${{ if eq(parameters.VSCODE_BUILD_ESM, true) }}:
- - powershell: |
- # Figure out the full absolute path of the product we just built
- # including the remote server and configure the integration tests
- # to run with these builds instead of running out of sources.
- . build/azure-pipelines/win32/exec.ps1
- $ErrorActionPreference = "Stop"
- $AppRoot = "$(agent.builddirectory)\VSCode-win32-$(VSCODE_ARCH)"
- $AppProductJson = Get-Content -Raw -Path "$AppRoot\resources\app\product.json" | ConvertFrom-Json
- $AppNameShort = $AppProductJson.nameShort
- $env:INTEGRATION_TEST_ELECTRON_PATH = "$AppRoot\$AppNameShort.exe"
- $env:VSCODE_REMOTE_SERVER_PATH = "$(agent.builddirectory)\vscode-server-win32-$(VSCODE_ARCH)"
- exec { .\scripts\test-integration-esm.bat --build --tfs "Integration Tests" }
- displayName: Run integration tests (Electron) [ESM]
- timeoutInMinutes: 20
- - ${{ if eq(parameters.VSCODE_BUILD_ESM, false) }}:
- - powershell: |
- # Figure out the full absolute path of the product we just built
- # including the remote server and configure the integration tests
- # to run with these builds instead of running out of sources.
- . build/azure-pipelines/win32/exec.ps1
- $ErrorActionPreference = "Stop"
- $AppRoot = "$(agent.builddirectory)\VSCode-win32-$(VSCODE_ARCH)"
- $AppProductJson = Get-Content -Raw -Path "$AppRoot\resources\app\product.json" | ConvertFrom-Json
- $AppNameShort = $AppProductJson.nameShort
- $env:INTEGRATION_TEST_ELECTRON_PATH = "$AppRoot\$AppNameShort.exe"
- $env:VSCODE_REMOTE_SERVER_PATH = "$(agent.builddirectory)\vscode-server-win32-$(VSCODE_ARCH)"
- exec { .\scripts\test-integration.bat --build --tfs "Integration Tests" }
- displayName: Run integration tests (Electron)
- timeoutInMinutes: 20
+ - powershell: |
+ # Figure out the full absolute path of the product we just built
+ # including the remote server and configure the integration tests
+ # to run with these builds instead of running out of sources.
+ . build/azure-pipelines/win32/exec.ps1
+ $ErrorActionPreference = "Stop"
+ $AppRoot = "$(agent.builddirectory)\VSCode-win32-$(VSCODE_ARCH)"
+ $AppProductJson = Get-Content -Raw -Path "$AppRoot\resources\app\product.json" | ConvertFrom-Json
+ $AppNameShort = $AppProductJson.nameShort
+ $env:INTEGRATION_TEST_ELECTRON_PATH = "$AppRoot\$AppNameShort.exe"
+ $env:VSCODE_REMOTE_SERVER_PATH = "$(agent.builddirectory)\vscode-server-win32-$(VSCODE_ARCH)"
+ exec { .\scripts\test-integration.bat --build --tfs "Integration Tests" }
+ displayName: Run integration tests (Electron)
+ timeoutInMinutes: 20
- powershell: |
. build/azure-pipelines/win32/exec.ps1
@@ -179,32 +133,33 @@ steps:
condition: succeededOrFailed()
- ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:
- - powershell: yarn --cwd test/smoke compile
+ - powershell: npm run compile
+ workingDirectory: test/smoke
displayName: Compile smoke tests
- - powershell: yarn gulp compile-extension-media
+ - powershell: npm run gulp compile-extension-media
displayName: Build extensions for smoke tests
- - powershell: yarn smoketest-no-compile --tracing
+ - powershell: npm run smoketest-no-compile -- --tracing
displayName: Run smoke tests (Electron)
timeoutInMinutes: 20
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- - powershell: yarn smoketest-no-compile --tracing --build "$(agent.builddirectory)\VSCode-win32-$(VSCODE_ARCH)"
+ - powershell: npm run smoketest-no-compile -- --tracing --build "$(agent.builddirectory)\VSCode-win32-$(VSCODE_ARCH)"
displayName: Run smoke tests (Electron)
timeoutInMinutes: 20
- - powershell: yarn smoketest-no-compile --web --tracing --headless
+ - powershell: npm run smoketest-no-compile -- --web --tracing --headless
env:
VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)\vscode-server-win32-$(VSCODE_ARCH)-web
displayName: Run smoke tests (Browser, Chromium)
timeoutInMinutes: 20
- - powershell: yarn gulp compile-extension:vscode-test-resolver
+ - powershell: npm run gulp compile-extension:vscode-test-resolver
displayName: Compile test resolver extension
timeoutInMinutes: 20
- - powershell: yarn smoketest-no-compile --tracing --remote --build "$(agent.builddirectory)\VSCode-win32-$(VSCODE_ARCH)"
+ - powershell: npm run smoketest-no-compile -- --tracing --remote --build "$(agent.builddirectory)\VSCode-win32-$(VSCODE_ARCH)"
env:
VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)\vscode-server-win32-$(VSCODE_ARCH)
displayName: Run smoke tests (Remote)
diff --git a/build/azure-pipelines/win32/product-build-win32.yml b/build/azure-pipelines/win32/product-build-win32.yml
index a67e0ccf4e3..f52bf07de08 100644
--- a/build/azure-pipelines/win32/product-build-win32.yml
+++ b/build/azure-pipelines/win32/product-build-win32.yml
@@ -11,9 +11,6 @@ parameters:
type: boolean
- name: VSCODE_RUN_SMOKE_TESTS
type: boolean
- - name: VSCODE_BUILD_ESM
- type: boolean
- default: false
steps:
- ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:
@@ -35,7 +32,7 @@ steps:
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- template: ../distro/download-distro.yml@self
- - task: AzureKeyVault@1
+ - task: AzureKeyVault@2
displayName: "Azure Key Vault: Get Secrets"
inputs:
azureSubscription: "vscode-builds-subscription"
@@ -60,12 +57,12 @@ steps:
- pwsh: |
mkdir .build -ea 0
- node build/azure-pipelines/common/computeNodeModulesCacheKey.js win32 $(VSCODE_ARCH) > .build/yarnlockhash
+ node build/azure-pipelines/common/computeNodeModulesCacheKey.js win32 $(VSCODE_ARCH) > .build/packagelockhash
displayName: Prepare node_modules cache key
- task: Cache@2
inputs:
- key: '"node_modules" | .build/yarnlockhash'
+ key: '"node_modules" | .build/packagelockhash'
path: .build/node_modules_cache
cacheHitVar: NODE_MODULES_RESTORED
displayName: Restore node_modules cache
@@ -77,32 +74,32 @@ steps:
- powershell: |
. build/azure-pipelines/win32/exec.ps1
$ErrorActionPreference = "Stop"
- exec { npm config set registry "$env:NPM_REGISTRY" --location=project }
- # npm >v7 deprecated the `always-auth` config option, refs npm/cli@72a7eeb
- # following is a workaround for yarn to send authorization header
- # for GET requests to the registry.
- exec { Add-Content -Path .npmrc -Value "always-auth=true" }
- exec { yarn config set registry "$env:NPM_REGISTRY" }
+ # Set the private NPM registry to the global npmrc file
+ # so that authentication works for subfolders like build/, remote/, extensions/ etc
+ # which does not have their own .npmrc file
+ exec { npm config set registry "$env:NPM_REGISTRY" }
+ $NpmrcPath = (npm config get userconfig)
+ echo "##vso[task.setvariable variable=NPMRC_PATH]$NpmrcPath"
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))
- displayName: Setup NPM & Yarn
+ displayName: Setup NPM
- task: npmAuthenticate@0
inputs:
- workingFile: .npmrc
+ workingFile: $(NPMRC_PATH)
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))
displayName: Setup NPM Authentication
- powershell: |
. build/azure-pipelines/win32/exec.ps1
- . build/azure-pipelines/win32/retry.ps1
$ErrorActionPreference = "Stop"
- retry { exec { yarn --frozen-lockfile --check-files } }
+ exec { npm ci }
env:
npm_config_arch: $(VSCODE_ARCH)
- CHILD_CONCURRENCY: 1
+ npm_config_foreground_scripts: "true"
ELECTRON_SKIP_BINARY_DOWNLOAD: 1
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
GITHUB_TOKEN: "$(github-distro-mixin-password)"
+ retryCountOnTaskFailure: 5
displayName: Install dependencies
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
@@ -132,7 +129,7 @@ steps:
retryCountOnTaskFailure: 3
- ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:
- - powershell: yarn gulp "transpile-client-swc" "transpile-extensions"
+ - powershell: npm run gulp "transpile-client-esbuild" "transpile-extensions"
env:
GITHUB_TOKEN: "$(github-distro-mixin-password)"
displayName: Transpile client and extensions
@@ -145,8 +142,8 @@ steps:
- powershell: |
. build/azure-pipelines/win32/exec.ps1
$ErrorActionPreference = "Stop"
- exec { yarn gulp "vscode-win32-$(VSCODE_ARCH)-min-ci" }
- exec { yarn gulp "vscode-win32-$(VSCODE_ARCH)-inno-updater" }
+ exec { npm run gulp "vscode-win32-$(VSCODE_ARCH)-min-ci" }
+ exec { npm run gulp "vscode-win32-$(VSCODE_ARCH)-inno-updater" }
echo "##vso[task.setvariable variable=BUILT_CLIENT]true"
echo "##vso[task.setvariable variable=CodeSigningFolderPath]$(agent.builddirectory)/VSCode-win32-$(VSCODE_ARCH)"
env:
@@ -156,7 +153,7 @@ steps:
- powershell: |
. build/azure-pipelines/win32/exec.ps1
$ErrorActionPreference = "Stop"
- exec { yarn gulp "vscode-reh-win32-$(VSCODE_ARCH)-min-ci" }
+ exec { npm run gulp "vscode-reh-win32-$(VSCODE_ARCH)-min-ci" }
mv ..\vscode-reh-win32-$(VSCODE_ARCH) ..\vscode-server-win32-$(VSCODE_ARCH) # TODO@joaomoreno
echo "##vso[task.setvariable variable=BUILT_SERVER]true"
echo "##vso[task.setvariable variable=CodeSigningFolderPath]$(CodeSigningFolderPath),$(agent.builddirectory)/vscode-server-win32-$(VSCODE_ARCH)"
@@ -167,7 +164,7 @@ steps:
- powershell: |
. build/azure-pipelines/win32/exec.ps1
$ErrorActionPreference = "Stop"
- exec { yarn gulp "vscode-reh-web-win32-$(VSCODE_ARCH)-min-ci" }
+ exec { npm run gulp "vscode-reh-web-win32-$(VSCODE_ARCH)-min-ci" }
mv ..\vscode-reh-web-win32-$(VSCODE_ARCH) ..\vscode-server-win32-$(VSCODE_ARCH)-web # TODO@joaomoreno
echo "##vso[task.setvariable variable=BUILT_WEB]true"
env:
@@ -182,7 +179,6 @@ steps:
VSCODE_RUN_UNIT_TESTS: ${{ parameters.VSCODE_RUN_UNIT_TESTS }}
VSCODE_RUN_INTEGRATION_TESTS: ${{ parameters.VSCODE_RUN_INTEGRATION_TESTS }}
VSCODE_RUN_SMOKE_TESTS: ${{ parameters.VSCODE_RUN_SMOKE_TESTS }}
- VSCODE_BUILD_ESM: ${{ parameters.VSCODE_BUILD_ESM }}
${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
PUBLISH_TASK_NAME: 1ES.PublishPipelineArtifact@1
@@ -275,7 +271,7 @@ steps:
$env:ESRPPKI = "$(ESRP-PKI)"
$env:ESRPAADUsername = "$(esrp-aad-username)"
$env:ESRPAADPassword = "$(esrp-aad-password)"
- exec { yarn gulp "vscode-win32-$(VSCODE_ARCH)-system-setup" --sign }
+ exec { npm run -- gulp "vscode-win32-$(VSCODE_ARCH)-system-setup" --sign }
$SetupPath = ".build\win32-$(VSCODE_ARCH)\system-setup\VSCodeSetup-$(VSCODE_ARCH)-$(VSCODE_VERSION).exe"
mv .build\win32-$(VSCODE_ARCH)\system-setup\VSCodeSetup.exe $SetupPath
echo "##vso[task.setvariable variable=SYSTEM_SETUP_PATH]$SetupPath"
@@ -287,7 +283,7 @@ steps:
$env:ESRPPKI = "$(ESRP-PKI)"
$env:ESRPAADUsername = "$(esrp-aad-username)"
$env:ESRPAADPassword = "$(esrp-aad-password)"
- exec { yarn gulp "vscode-win32-$(VSCODE_ARCH)-user-setup" --sign }
+ exec { npm run -- gulp "vscode-win32-$(VSCODE_ARCH)-user-setup" --sign }
$SetupPath = ".build\win32-$(VSCODE_ARCH)\user-setup\VSCodeUserSetup-$(VSCODE_ARCH)-$(VSCODE_VERSION).exe"
mv .build\win32-$(VSCODE_ARCH)\user-setup\VSCodeSetup.exe $SetupPath
echo "##vso[task.setvariable variable=USER_SETUP_PATH]$SetupPath"
diff --git a/build/azure-pipelines/win32/sdl-scan-win32.yml b/build/azure-pipelines/win32/sdl-scan-win32.yml
index 81c0258f4ee..ddec0538620 100644
--- a/build/azure-pipelines/win32/sdl-scan-win32.yml
+++ b/build/azure-pipelines/win32/sdl-scan-win32.yml
@@ -18,7 +18,7 @@ steps:
- template: ../distro/download-distro.yml@self
- - task: AzureKeyVault@1
+ - task: AzureKeyVault@2
displayName: "Azure Key Vault: Get Secrets"
inputs:
azureSubscription: "vscode-builds-subscription"
@@ -32,18 +32,18 @@ steps:
- powershell: |
. build/azure-pipelines/win32/exec.ps1
$ErrorActionPreference = "Stop"
- exec { npm config set registry "$env:NPM_REGISTRY" --location=project }
- # npm >v7 deprecated the `always-auth` config option, refs npm/cli@72a7eeb
- # following is a workaround for yarn to send authorization header
- # for GET requests to the registry.
- exec { Add-Content -Path .npmrc -Value "always-auth=true" }
- exec { yarn config set registry "$env:NPM_REGISTRY" }
+ # Set the private NPM registry to the global npmrc file
+ # so that authentication works for subfolders like build/, remote/, extensions/ etc
+ # which does not have their own .npmrc file
+ exec { npm config set registry "$env:NPM_REGISTRY" }
+ $NpmrcPath = (npm config get userconfig)
+ echo "##vso[task.setvariable variable=NPMRC_PATH]$NpmrcPath"
condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))
- displayName: Setup NPM & Yarn
+ displayName: Setup NPM
- task: npmAuthenticate@0
inputs:
- workingFile: .npmrc
+ workingFile: $(NPMRC_PATH)
condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))
displayName: Setup NPM Authentication
@@ -80,15 +80,15 @@ steps:
- powershell: |
. build/azure-pipelines/win32/exec.ps1
- . build/azure-pipelines/win32/retry.ps1
$ErrorActionPreference = "Stop"
- retry { exec { yarn --frozen-lockfile --check-files } }
+ exec { npm ci }
env:
npm_config_arch: ${{ parameters.VSCODE_ARCH }}
- CHILD_CONCURRENCY: 1
+ npm_config_foreground_scripts: "true"
ELECTRON_SKIP_BINARY_DOWNLOAD: 1
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
GITHUB_TOKEN: "$(github-distro-mixin-password)"
+ retryCountOnTaskFailure: 5
displayName: Install dependencies
- script: node build/azure-pipelines/distro/mixin-npm
@@ -99,7 +99,7 @@ steps:
env:
VSCODE_QUALITY: ${{ parameters.VSCODE_QUALITY }}
- - powershell: yarn compile
+ - powershell: npm run compile
displayName: Compile
- powershell: |
@@ -109,7 +109,7 @@ steps:
Get-ChildItem '$(Build.SourcesDirectory)' -Recurse -Filter "*.pdb"
displayName: List files
- - powershell: yarn gulp "vscode-symbols-win32-${{ parameters.VSCODE_ARCH }}"
+ - powershell: npm run gulp "vscode-symbols-win32-${{ parameters.VSCODE_ARCH }}"
env:
GITHUB_TOKEN: "$(github-distro-mixin-password)"
displayName: Download Symbols
@@ -139,6 +139,16 @@ steps:
flattenFolders: true
condition: succeeded()
+ - task: PublishSymbols@2
+ inputs:
+ IndexSources: false
+ SymbolsFolder: '$(Agent.BuildDirectory)\symbols'
+ SearchPattern: '**\*.pdb'
+ SymbolServerType: TeamServices
+ SymbolsProduct: 'code'
+ displayName: Publish Symbols
+ condition: succeeded()
+
- task: APIScan@2
inputs:
softwareFolder: $(Agent.BuildDirectory)\scanbin
@@ -160,3 +170,11 @@ steps:
ArtifactType: Container
PublishProcessedResults: false
AllTools: true
+
+ # TSA Upload
+ - task: securedevelopmentteam.vss-secure-development-tools.build-task-uploadtotsa.TSAUpload@2
+ displayName: TSA Upload
+ continueOnError: true
+ inputs:
+ GdnPublishTsaOnboard: true
+ GdnPublishTsaConfigFile: '$(Build.SourcesDirectory)/build/azure-pipelines/config/tsaoptions.json'
diff --git a/build/buildfile.js b/build/buildfile.js
index 74ac8436ccf..607e79e13d7 100644
--- a/build/buildfile.js
+++ b/build/buildfile.js
@@ -3,24 +3,15 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
-const { isESM } = require('./lib/esm');
-
/**
* @param {string} name
* @param {string[]=} exclude
* @returns {import('./lib/bundle').IEntryPoint}
*/
function createModuleDescription(name, exclude) {
-
- let excludes = ['vs/css'];
- if (Array.isArray(exclude) && exclude.length > 0) {
- excludes = excludes.concat(exclude);
- }
-
return {
- name: name,
- include: [],
- exclude: excludes
+ name,
+ exclude
};
}
@@ -28,76 +19,28 @@ function createModuleDescription(name, exclude) {
* @param {string} name
*/
function createEditorWorkerModuleDescription(name) {
- const amdVariant = createModuleDescription(name, ['vs/base/common/worker/simpleWorker', 'vs/editor/common/services/editorSimpleWorker']);
- amdVariant.target = 'amd';
-
- const esmVariant = { ...amdVariant, dest: undefined };
- esmVariant.target = 'esm';
- esmVariant.name = `${esmVariant.name}.esm`;
-
- return [amdVariant, esmVariant];
+ return createModuleDescription(name, ['vs/base/common/worker/simpleWorker', 'vs/editor/common/services/editorSimpleWorker']);
}
-// TODO@esm take the editor simple worker top level and rename away from "base"
-exports.base = [
- {
- name: 'vs/editor/common/services/editorSimpleWorker',
- include: ['vs/base/common/worker/simpleWorker'],
- exclude: [],
- prepend: [
- { path: 'vs/loader.js' },
- { path: 'vs/base/worker/workerMain.js' }
- ],
- dest: 'vs/base/worker/workerMain.js',
- target: 'amd'
- },
- {
- name: 'vs/editor/common/services/editorSimpleWorker.esm',
- target: 'esm'
- },
- {
- name: 'vs/base/common/worker/simpleWorker',
- exclude: [],
- target: 'amd'
- }
-];
-
-exports.workerExtensionHost = createEditorWorkerModuleDescription('vs/workbench/api/worker/extensionHostWorker');
-exports.workerNotebook = createEditorWorkerModuleDescription('vs/workbench/contrib/notebook/common/services/notebookSimpleWorker');
-exports.workerLanguageDetection = createEditorWorkerModuleDescription('vs/workbench/services/languageDetection/browser/languageDetectionSimpleWorker');
-exports.workerLocalFileSearch = createEditorWorkerModuleDescription('vs/workbench/services/search/worker/localFileSearch');
-exports.workerProfileAnalysis = createEditorWorkerModuleDescription('vs/platform/profiling/electron-sandbox/profileAnalysisWorker');
-exports.workerOutputLinks = createEditorWorkerModuleDescription('vs/workbench/contrib/output/common/outputLinkComputer');
-exports.workerBackgroundTokenization = createEditorWorkerModuleDescription('vs/workbench/services/textMate/browser/backgroundTokenization/worker/textMateTokenizationWorker.worker');
+exports.workerEditor = createEditorWorkerModuleDescription('vs/editor/common/services/editorSimpleWorkerMain');
+exports.workerExtensionHost = createEditorWorkerModuleDescription('vs/workbench/api/worker/extensionHostWorkerMain');
+exports.workerNotebook = createEditorWorkerModuleDescription('vs/workbench/contrib/notebook/common/services/notebookSimpleWorkerMain');
+exports.workerLanguageDetection = createEditorWorkerModuleDescription('vs/workbench/services/languageDetection/browser/languageDetectionSimpleWorkerMain');
+exports.workerLocalFileSearch = createEditorWorkerModuleDescription('vs/workbench/services/search/worker/localFileSearchMain');
+exports.workerProfileAnalysis = createEditorWorkerModuleDescription('vs/platform/profiling/electron-sandbox/profileAnalysisWorkerMain');
+exports.workerOutputLinks = createEditorWorkerModuleDescription('vs/workbench/contrib/output/common/outputLinkComputerMain');
+exports.workerBackgroundTokenization = createEditorWorkerModuleDescription('vs/workbench/services/textMate/browser/backgroundTokenization/worker/textMateTokenizationWorker.workerMain');
-exports.workbenchDesktop = function () {
- return isESM() ? [
- createModuleDescription('vs/workbench/contrib/debug/node/telemetryApp'),
- createModuleDescription('vs/platform/files/node/watcher/watcherMain'),
- createModuleDescription('vs/platform/terminal/node/ptyHostMain'),
- createModuleDescription('vs/workbench/api/node/extensionHostProcess'),
- createModuleDescription('vs/workbench/contrib/issue/electron-sandbox/issueReporterMain'),
- createModuleDescription('vs/workbench/workbench.desktop.main')
- ] : [
- ...createEditorWorkerModuleDescription('vs/workbench/contrib/output/common/outputLinkComputer'),
- ...createEditorWorkerModuleDescription('vs/workbench/services/textMate/browser/backgroundTokenization/worker/textMateTokenizationWorker.worker'),
- createModuleDescription('vs/workbench/contrib/debug/node/telemetryApp'),
- createModuleDescription('vs/platform/files/node/watcher/watcherMain'),
- createModuleDescription('vs/platform/terminal/node/ptyHostMain'),
- createModuleDescription('vs/workbench/api/node/extensionHostProcess'),
- createModuleDescription('vs/workbench/contrib/issue/electron-sandbox/issueReporterMain'),
- ];
-};
+exports.workbenchDesktop = [
+ createModuleDescription('vs/workbench/contrib/debug/node/telemetryApp'),
+ createModuleDescription('vs/platform/files/node/watcher/watcherMain'),
+ createModuleDescription('vs/platform/terminal/node/ptyHostMain'),
+ createModuleDescription('vs/workbench/api/node/extensionHostProcess'),
+ createModuleDescription('vs/workbench/contrib/issue/electron-sandbox/issueReporterMain'),
+ createModuleDescription('vs/workbench/workbench.desktop.main')
+];
-exports.workbenchWeb = function () {
- return isESM() ? [
- createModuleDescription('vs/workbench/workbench.web.main')
- ] : [
- ...createEditorWorkerModuleDescription('vs/workbench/contrib/output/common/outputLinkComputer'),
- ...createEditorWorkerModuleDescription('vs/workbench/services/textMate/browser/backgroundTokenization/worker/textMateTokenizationWorker.worker'),
- createModuleDescription('vs/code/browser/workbench/workbench', ['vs/workbench/workbench.web.main'])
- ];
-};
+exports.workbenchWeb = createModuleDescription('vs/workbench/workbench.web.main');
exports.keyboardMaps = [
createModuleDescription('vs/workbench/services/keybinding/browser/keyboardLayouts/layout.contribution.linux'),
@@ -106,15 +49,25 @@ exports.keyboardMaps = [
];
exports.code = [
- createModuleDescription('vs/code/electron-main/main'),
- createModuleDescription('vs/code/node/cli'),
- createModuleDescription('vs/code/node/cliProcessMain', ['vs/code/node/cli']),
- createModuleDescription('vs/code/node/sharedProcess/sharedProcessMain'),
- createModuleDescription('vs/code/electron-sandbox/processExplorer/processExplorerMain')
+ // 'vs/code/electron-main/main' is not included here because it comes in via ./src/main.js
+ // 'vs/code/node/cli' is not included here because it comes in via ./src/cli.js
+ createModuleDescription('vs/code/node/cliProcessMain'),
+ createModuleDescription('vs/code/electron-utility/sharedProcess/sharedProcessMain'),
+ createModuleDescription('vs/code/electron-sandbox/processExplorer/processExplorerMain'),
+ createModuleDescription('vs/code/electron-sandbox/workbench/workbench'),
+ // TODO: @justchen https://github.com/microsoft/vscode/issues/213332 make sure to remove when we use window.open on desktop.
+ createModuleDescription('vs/workbench/contrib/issue/electron-sandbox/issueReporter'),
+ createModuleDescription('vs/code/electron-sandbox/processExplorer/processExplorer')
];
-exports.codeWeb = [
- createModuleDescription('vs/code/browser/workbench/workbench')
+exports.codeWeb = createModuleDescription('vs/code/browser/workbench/workbench');
+
+exports.codeServer = [
+ // 'vs/server/node/server.main' is not included here because it gets inlined via ./src/server-main.js
+ // 'vs/server/node/server.cli' is not included here because it gets inlined via ./src/server-cli.js
+ createModuleDescription('vs/workbench/api/node/extensionHostProcess'),
+ createModuleDescription('vs/platform/files/node/watcher/watcherMain'),
+ createModuleDescription('vs/platform/terminal/node/ptyHostMain')
];
exports.entrypoint = createModuleDescription;
diff --git a/build/checksums/electron.txt b/build/checksums/electron.txt
index aecf657e571..4d7f8de8560 100644
--- a/build/checksums/electron.txt
+++ b/build/checksums/electron.txt
@@ -1,75 +1,75 @@
-3e432bd550279c2d58c6a02b0bda048fa2a9a89aef9752e22c39a518a83fe96f *chromedriver-v30.4.0-darwin-arm64.zip
-4d38f40ec33955dd0aef5cc0053b2b07c4744abb9f2614a44780280c4678aca9 *chromedriver-v30.4.0-darwin-x64.zip
-338f2a361448e78aa8c319cd582f2dd6d891d6c0c66b676c628e50511c27514f *chromedriver-v30.4.0-linux-arm64.zip
-8cffae19618fe5f0eaff40378c40084e18f9747bbbe2d87390203a3012c98367 *chromedriver-v30.4.0-linux-armv7l.zip
-7ff1b75defc522f327c0f1bf6f4d13938b041cf5de1d7417b9dc5d1e7026e93c *chromedriver-v30.4.0-linux-x64.zip
-8e93b0892d7d01c38608fa7907f28da1da27de09bb382f261d81a676f8c2ba64 *chromedriver-v30.4.0-mas-arm64.zip
-d306ef0bc651bef046b21ba2e4745e2768be9df1b6c2fc2e7b1a0368f7e10d76 *chromedriver-v30.4.0-mas-x64.zip
-bb7c5db2a20f437e0b398846ecc8111e7e51e2021b78f60db021262daacf7d7c *chromedriver-v30.4.0-win32-arm64.zip
-df4acaa6684e7db07468c6dc8102cb49746884e8db2b53648431b2b61e8debb2 *chromedriver-v30.4.0-win32-ia32.zip
-7a207b29977e52ba052037f00f4ea6284177fdd93e0774dfc39e83ee5a86513d *chromedriver-v30.4.0-win32-x64.zip
-8c876662fd46c37b2dd9487ea8e62fde3f20a729dc95e42f12f7db4986138edc *electron-api.json
-a36786c7d4e30887a6aa1f2adbc23e721266a31ffe84191bf4caddb731cfb973 *electron-v30.4.0-darwin-arm64-dsym-snapshot.zip
-e5edcad107307e97bdd6f69ccab0368df4c3270213f2f42f259f3723d24ca611 *electron-v30.4.0-darwin-arm64-dsym.zip
-cc522e772a1d80f7ec73ce2077dae93de76cd4f6767c467b6a8e01e4a252f15f *electron-v30.4.0-darwin-arm64-symbols.zip
-2238c45a85b2c78aed00aeaf15bbfa2f64b4d13e48cc6b9bc330f24c4d214595 *electron-v30.4.0-darwin-arm64.zip
-48c3197fc36f5ef64eaa913a0a769d2b2d4b79c94e61991ca73e8be2b24bf997 *electron-v30.4.0-darwin-x64-dsym-snapshot.zip
-9b669dc060695e5495573cce7b7916bdadd980d523772fbbf57fd1811bb4feca *electron-v30.4.0-darwin-x64-dsym.zip
-0acd5b74cbb1719a89a310fb42f5ab4282711bb0ccf4e8b242d9c24c8ecc7136 *electron-v30.4.0-darwin-x64-symbols.zip
-6e633bf87be9f8bf46dff9733cfd0d611e018ae5df75f30735747721f91fcf43 *electron-v30.4.0-darwin-x64.zip
-5bc27ceae706116a14fa24da3cda32f00893dd3f51ae2c2d58c4c08f26ce2ac2 *electron-v30.4.0-linux-arm64-debug.zip
-d13970ef6f4ad30dd8268563ed0b768f703d6e4ea1389ee36b8e7eb407b40523 *electron-v30.4.0-linux-arm64-symbols.zip
-aa422122373b84f4eb8ce937937b1b6fe8fb3975c3edafb9df85f7fba449afd4 *electron-v30.4.0-linux-arm64.zip
-5bc27ceae706116a14fa24da3cda32f00893dd3f51ae2c2d58c4c08f26ce2ac2 *electron-v30.4.0-linux-armv7l-debug.zip
-645af6535a3956e263d8ff586bfb45c5d16ec4c07add406e7c2a767eec070e8e *electron-v30.4.0-linux-armv7l-symbols.zip
-3643857e1eec3037ad6f07e755bffc64f033a7196307ff0386bf67c9cc3ec31e *electron-v30.4.0-linux-armv7l.zip
-0f099b597830fd990bac82fbe976720d5610450133dff880b570cbe1ef793742 *electron-v30.4.0-linux-x64-debug.zip
-084566b78797502ad164832e49690d8845c53a8becb28085f271ab1a9fe20942 *electron-v30.4.0-linux-x64-symbols.zip
-b365aac23c61dc0b18002c60937c4842e814cbe6d8e6a34e4dc211774ebaec01 *electron-v30.4.0-linux-x64.zip
-b050b4de0fda4c2fa4ceeb0ecaf452cc426a9b03a9e286686d2167c7ded252f4 *electron-v30.4.0-mas-arm64-dsym-snapshot.zip
-1e9c3f820e809fc2e05434d54862c7309dd04b74406869e06edb1e07faa3e40f *electron-v30.4.0-mas-arm64-dsym.zip
-9b4112c73606d1a0393320178a3d0f172671ec211fe69b2106ad9b04b55b3538 *electron-v30.4.0-mas-arm64-symbols.zip
-10ac65b581c2941fd05b2804055be2eed8d69de4c82b90f7357a3989d8276c9f *electron-v30.4.0-mas-arm64.zip
-9e4cba132474d82894541ab33d02b28894f0452f4c6808e2428878d0b6a55aac *electron-v30.4.0-mas-x64-dsym-snapshot.zip
-33c9c13a8a33ab292db5f14b1d8af1fa7967601badf505a06972fd3cdc9cb6bb *electron-v30.4.0-mas-x64-dsym.zip
-1e8871c34294912bc562861226742dcd2de073ae2dc3fef8065fe86550265bca *electron-v30.4.0-mas-x64-symbols.zip
-055bea26dfd9fa86838e25b77e29fec3967ed21020ce1362ff683be07ac90c45 *electron-v30.4.0-mas-x64.zip
-1fd654358ad895fce4806fcd39be848deeccd20f767e96006ebb5c88ca973d92 *electron-v30.4.0-win32-arm64-pdb.zip
-5cf51db3ece15f155afc066230f844bf7825fe912f0f479b8cf9eb47e46a2278 *electron-v30.4.0-win32-arm64-symbols.zip
-7351fa5cb892853a7d4b67d8858d0f9cc6506c554a2e42c9ad7e8d5e29ae2743 *electron-v30.4.0-win32-arm64-toolchain-profile.zip
-51bc3a21faefe99ccc8e8670dccf2320249af5c185728a31d907a18092542d73 *electron-v30.4.0-win32-arm64.zip
-b4a539c7dbad3db544d7709faaf357d55d7f3349bfd4d42c884b0608725b526d *electron-v30.4.0-win32-ia32-pdb.zip
-ddb355e3e45978eee33c679c42781587533b934f3e98374057d2b0c212062915 *electron-v30.4.0-win32-ia32-symbols.zip
-7351fa5cb892853a7d4b67d8858d0f9cc6506c554a2e42c9ad7e8d5e29ae2743 *electron-v30.4.0-win32-ia32-toolchain-profile.zip
-7260c9f533d5fa0c543d34593bb1a8bc4904943ca872afc5246e15da6f00b43a *electron-v30.4.0-win32-ia32.zip
-2d0d5631158971e0fac9bb7c427c5361177c7e967cca41940ad18183d95c3e23 *electron-v30.4.0-win32-x64-pdb.zip
-0ea8c0b8734bd45cb04ae83390bd7efee407ed6bb30dbaa1030e1a1f03a0f025 *electron-v30.4.0-win32-x64-symbols.zip
-7351fa5cb892853a7d4b67d8858d0f9cc6506c554a2e42c9ad7e8d5e29ae2743 *electron-v30.4.0-win32-x64-toolchain-profile.zip
-9dcf4b5bbdb6c672ba1b3812d4b642999faf4b6f4e2a4e4af314ba61596a62dc *electron-v30.4.0-win32-x64.zip
-c524777653f0b3ba58da6c1e97aa5a3a172caf68d9b24a7d33f733b36c281ce8 *electron.d.ts
-c1586ee3f3960943dfa1c1a3da2ebc327afd95c3c7a160b0646730fbc78731bb *ffmpeg-v30.4.0-darwin-arm64.zip
-7f76a792c8f9ee9611f966956b4b70017253f9357ec73806d35c568808eec470 *ffmpeg-v30.4.0-darwin-x64.zip
-5160348bcae6cb4fce20905338a903475c2eb52511370b44bdfeafef3cbeab6c *ffmpeg-v30.4.0-linux-arm64.zip
-4f7583513d48b48c44a2cbc4430cbc9a33d8f9728622166db688e3de61190821 *ffmpeg-v30.4.0-linux-armv7l.zip
-4f62d246a2ccb904e9f03bdc65fd5806edd69b95099fa2dcba4f148d44ea1bce *ffmpeg-v30.4.0-linux-x64.zip
-c1586ee3f3960943dfa1c1a3da2ebc327afd95c3c7a160b0646730fbc78731bb *ffmpeg-v30.4.0-mas-arm64.zip
-7f76a792c8f9ee9611f966956b4b70017253f9357ec73806d35c568808eec470 *ffmpeg-v30.4.0-mas-x64.zip
-26b82e5943d09eb0765804df27182cd45c45e63e82fe95d60a5a78611d85a926 *ffmpeg-v30.4.0-win32-arm64.zip
-ea688b108cb545bd436621c8d1279696ac6cb0b041d1d3d322dba06f8dd0f295 *ffmpeg-v30.4.0-win32-ia32.zip
-733a522d2095964ff3796f3301591b7aa9cf1ba8dcc545d1928745022ef99e6a *ffmpeg-v30.4.0-win32-x64.zip
-0b82c8db956264c1be4006eff3908b51ae8e48a17176fe61fa86d8ca8c103bf5 *hunspell_dictionaries.zip
-27d5d6d82bd5703342e6a3804ff3c032433cda833ad3881f263035b23193ace9 *libcxx-objects-v30.4.0-linux-arm64.zip
-babe51c929cc77907fdb5af11781938bab4b9f31642a0220b4ce4a35cfb904ff *libcxx-objects-v30.4.0-linux-armv7l.zip
-e6e13dd7c493841c3ab406b147d021b4e5a379e286767c1459d23bd9581c10c9 *libcxx-objects-v30.4.0-linux-x64.zip
-c9ba1b8c0e971cf477f7c0120436cc45a02b72908a41c82cd809ec8014b81e32 *libcxx_headers.zip
-2c4c140bfeb235584f8f7c699d0d95b16ddb959484923aaa59eeb3310dbc161a *libcxxabi_headers.zip
-0cee8848525e0d633d3ccf599d03ac05be6e0bc014b5a77ddce99c3a50941feb *mksnapshot-v30.4.0-darwin-arm64.zip
-0c491f602cfc6fbd81b8b771d3fa28ec1eb77c23c7636479a158265dd7d59977 *mksnapshot-v30.4.0-darwin-x64.zip
-6ea645627b0a0cab88cda80a2fa4d399a491bc5f0d0ff1d007f6dd28728d4592 *mksnapshot-v30.4.0-linux-arm64-x64.zip
-6b33e8bc53281710d9754e3ea88a8c025649f3d7c499e9b8693183bd2b76ea8d *mksnapshot-v30.4.0-linux-armv7l-x64.zip
-092afde6a2ab8ac922524a02b30343cd11f96c01405814019797bf38fa8c634b *mksnapshot-v30.4.0-linux-x64.zip
-dada39480526a46992f2ff0ad8ea72a26565384e9976497867a6c4776705e49f *mksnapshot-v30.4.0-mas-arm64.zip
-4082f5b379b788d300b2a7fc7c84deee80ebc61a34b534c795c1b4594c3f0d1a *mksnapshot-v30.4.0-mas-x64.zip
-01a5e83fe293dd2c52e1d5cc79450fbfc1dfa1e4988146f94bfbf9a9e24cb9d7 *mksnapshot-v30.4.0-win32-arm64-x64.zip
-0bccaa2779f8ce98bd4a2a66be082bcd3c34484aad8000c08de0fed5acb8ad88 *mksnapshot-v30.4.0-win32-ia32.zip
-439c7f5b9fdd0ea19ee95f724773cda42382b27a31494ae8f2aca5c2ec043ec7 *mksnapshot-v30.4.0-win32-x64.zip
+29acb63bb116a08e97797042505d48eecfa396f5d84a12114573aa70acaa48ec *chromedriver-v32.2.1-darwin-arm64.zip
+a1fd00f8634c6b4d9e28ce8ac69684ea24f5274c9f17c0e39bd149b34568b84b *chromedriver-v32.2.1-darwin-x64.zip
+6b311318f5a537e21d2d832609ce8306b4806e4c62aaa132ee87e063d45f5b00 *chromedriver-v32.2.1-linux-arm64.zip
+ac1529a8f6e4c77fdae3bc92bc5bfcb40c3b19def0772de9d1874da7223517b7 *chromedriver-v32.2.1-linux-armv7l.zip
+2329d1307729c714bef71d9f8250ed510b5a1ae07beefddee2371af70f712297 *chromedriver-v32.2.1-linux-x64.zip
+84566e08029ea9b3d939f2329332b6b6d0c4a886f2aa2f2f53818b90af16a717 *chromedriver-v32.2.1-mas-arm64.zip
+71c6e443617b6dd9b9962ff566ac7b8856db0a2e81b8b6ee7f985ffc96bb409a *chromedriver-v32.2.1-mas-x64.zip
+0340ecc564b68a1632ea76f7e77fc06a4f150ea2fbb3c599c0dc8d78499c39e3 *chromedriver-v32.2.1-win32-arm64.zip
+9d6d1a0b4863a4de2587e746b1a25da698076eda9268ef70ca24d43b39514859 *chromedriver-v32.2.1-win32-ia32.zip
+1dc504383f63b2f178b902de41ba0efa28650bde54c3b2ebeee827c87a2768f3 *chromedriver-v32.2.1-win32-x64.zip
+ba8e9ac663cc2edea61e7ddf12af835bf6ebb02b8d4ae6362c1f39c2390e7d22 *electron-api.json
+a3544e9894f1ca544b0c8231f7c34f90a29f0ce3fd7853d592d51eb4ad4b31c5 *electron-v32.2.1-darwin-arm64-dsym-snapshot.zip
+89377cde729f99707cb822e88999cfc312c4b82495600f38d13593c3de1b47f4 *electron-v32.2.1-darwin-arm64-dsym.zip
+4e13b04efd03c237c3421b551180bc2b8dc6c35d49acd475e42c11aaa6b199aa *electron-v32.2.1-darwin-arm64-symbols.zip
+906fbf9e7a5ee6d49ea107fdfd0e98bc80884fbf1f6ff38d824453f58c6ec259 *electron-v32.2.1-darwin-arm64.zip
+fb3e5eb15915b4328820ebaf2c4a056f4ac374eb8e24479bdfd6f0cf8e1da1be *electron-v32.2.1-darwin-x64-dsym-snapshot.zip
+0a95df2a44e0a42b9076e58d7e539e91ba7e583de77a8e94695d9c6dd03f201a *electron-v32.2.1-darwin-x64-dsym.zip
+4864122e38f423f6ff9a8625696f323e908e613ebdab8ed7d40b374d6f9dec13 *electron-v32.2.1-darwin-x64-symbols.zip
+56e2e4252b4d4e92075345f0b9dbefc8db49bdc6a4c45a87000f3cc705057907 *electron-v32.2.1-darwin-x64.zip
+692aaf464bdb7bd7538e6392885571ef4d5f4d02319f84b99ada1827fbdfabf9 *electron-v32.2.1-linux-arm64-debug.zip
+86161e2f6b1ca5cd6eb998863798186d9be270535d6912075001588e3e35e90d *electron-v32.2.1-linux-arm64-symbols.zip
+6500fdbff988e0cda909643ba8439660a207c9a2d393fa63f680a0337e530342 *electron-v32.2.1-linux-arm64.zip
+692aaf464bdb7bd7538e6392885571ef4d5f4d02319f84b99ada1827fbdfabf9 *electron-v32.2.1-linux-armv7l-debug.zip
+cfe4cfb7a6818902b5cc1b493ec2f7a9e4dc8fcb63346ddf75bec3496658a363 *electron-v32.2.1-linux-armv7l-symbols.zip
+7ffcce19ebdb30a9db78671c7f222edde66181a37c895834682d224e459200fc *electron-v32.2.1-linux-armv7l.zip
+1e0318a7d125ebe015a5d4f214d186cd10e36021cc8555d376d8fda15a28a5ac *electron-v32.2.1-linux-x64-debug.zip
+9d857cd5bdc81abb965e2e1bb73af8de31ef74cd182de52160b7afe805837574 *electron-v32.2.1-linux-x64-symbols.zip
+4fc58e6e79e5b5793ec9b5d35c8926fcad5352b6a1b21b3edf42343487c90185 *electron-v32.2.1-linux-x64.zip
+5fba9ea6c0d49ecd8bbbc87a9da6f860b901892e7ea487013e353bc2e951fbde *electron-v32.2.1-mas-arm64-dsym-snapshot.zip
+71c2cdc23e61b7f13bda837fb9dfb5fdb9c6ca4fa755f2596f70874caaeeacea *electron-v32.2.1-mas-arm64-dsym.zip
+448df71d1e62ca570b3f8b7d35b21eaa2870ce4877f12465cf6e54e90a16ac12 *electron-v32.2.1-mas-arm64-symbols.zip
+4c53ef19385ab5a0040e6eda3a8f88f42b5f53de0e9a6118333613a1388fc39f *electron-v32.2.1-mas-arm64.zip
+cbc5b08014cda37d6943f8a388ba1386f5ee1af3ca7a5ed28c12bf5fbd00f633 *electron-v32.2.1-mas-x64-dsym-snapshot.zip
+a6bfe31ea9cef19794418d169872d5b68130b49989d7e2ee3d83a2853d4e706c *electron-v32.2.1-mas-x64-dsym.zip
+a9ce94d21c61d3cf9f8319ae394c779058bc2377916e0330f0447e8c79b5b0e1 *electron-v32.2.1-mas-x64-symbols.zip
+8b57ced11b88fa80f9a986662658cf4cb40a1138811ad6129fc826988b31f9ab *electron-v32.2.1-mas-x64.zip
+5fcb399829066859399e8e3e7c5574b2e8885f632661fc2830da02be3d5803d2 *electron-v32.2.1-win32-arm64-pdb.zip
+eb16ad799a8db120b1e4b13533f9f52e844b6252308ea9e182f290c7657a5361 *electron-v32.2.1-win32-arm64-symbols.zip
+48b81d28fdceb4ab3ca27650d79bab910a1a19dbda72271882bfdc877c71975f *electron-v32.2.1-win32-arm64-toolchain-profile.zip
+3ac484f124c2012c0bff7640e82bed268876de1e3c6776716b5883d2de043a4f *electron-v32.2.1-win32-arm64.zip
+75b6117bd0462641d93de9e0a7aac9c6a1a052c688f59426a66aafe34c7bb914 *electron-v32.2.1-win32-ia32-pdb.zip
+10d4b64e7d2abeef1c93f2ec58d55715462229d20f61edf50bf5ceb4fce5719b *electron-v32.2.1-win32-ia32-symbols.zip
+48b81d28fdceb4ab3ca27650d79bab910a1a19dbda72271882bfdc877c71975f *electron-v32.2.1-win32-ia32-toolchain-profile.zip
+e5d4e2b10e5215b8a7133cc3fa39875ea18e8d4ea41f9ba9a9ae9f13a4090f53 *electron-v32.2.1-win32-ia32.zip
+83055f775e93c0be5c17a4312a552d3d0abb86a36b354f30973917a44d7a5656 *electron-v32.2.1-win32-x64-pdb.zip
+38158fd465eb41674767707bfbd87ec67874aac9bd42c550aad6901035884697 *electron-v32.2.1-win32-x64-symbols.zip
+48b81d28fdceb4ab3ca27650d79bab910a1a19dbda72271882bfdc877c71975f *electron-v32.2.1-win32-x64-toolchain-profile.zip
+494282c481eca93e1ee1d3e0df65ba0da5cec09b0c15bcc81521eee108839190 *electron-v32.2.1-win32-x64.zip
+27050115afac161a368be0b92e842f65d5c7021b5b508b71ad972ce252bbbb3f *electron.d.ts
+d8c054da57903f4e3297edd4de69177e9556feca9f2fc71b833608a486a7cae2 *ffmpeg-v32.2.1-darwin-arm64.zip
+ac22a993719b804b560ed73ff1ad339df3eb126eeb9f5d496174a293ba952d78 *ffmpeg-v32.2.1-darwin-x64.zip
+3f1eafaf4cd90ab43ba0267429189be182435849a166a2cbe1faefc0d07217c4 *ffmpeg-v32.2.1-linux-arm64.zip
+3db919bc57e1a5bf7c1bae1d7aeacf4a331990ea82750391c0b24a046d9a2812 *ffmpeg-v32.2.1-linux-armv7l.zip
+fe7d779dddbfb5da5999a7607fc5e3c7a6ab7c65e8da9fee1384918865231612 *ffmpeg-v32.2.1-linux-x64.zip
+de4b05b040207d6807444f4289c0adc7f4947de0e32a0441073085cd76676648 *ffmpeg-v32.2.1-mas-arm64.zip
+b007a2c582cd55727453fdf51ca3521d76f3ebeda8bfb3c2eeb56d56ec17a6a7 *ffmpeg-v32.2.1-mas-x64.zip
+c72c467834669575ca1a5e34a624db71da3cbe63223f63d8f92bc4d2551a4164 *ffmpeg-v32.2.1-win32-arm64.zip
+a9d26ba87262631ba279f6eae4164bcb289abe99c5a10e56c2e28e1e05b530bf *ffmpeg-v32.2.1-win32-ia32.zip
+98c917caa3cd7ad10f2c48669c377a028d42673515034c05c3cac461213d5535 *ffmpeg-v32.2.1-win32-x64.zip
+8b685975c9aeae9e5d8df85ad797492419e6414aa68a87d14f6fbb923d0f7dad *hunspell_dictionaries.zip
+ee3871c7b533fc1c24baab89d25b60fc3e5f339b4c3e7767c768d833b0a828f4 *libcxx-objects-v32.2.1-linux-arm64.zip
+3a01ecfc2f4e91bdc20280d8d3954347c0abd1bd53256e79a053d05f6a3ec664 *libcxx-objects-v32.2.1-linux-armv7l.zip
+ab43146f8ca665a7064da6a82af2c7e3c3adce0788fb55862991f3a491bc692d *libcxx-objects-v32.2.1-linux-x64.zip
+bb9dc46ad47b265fa353c42fc54ba584c2c890521069ea9de4c12cddb96297ea *libcxx_headers.zip
+6846d928164a74dcad442da06cd79ecc788aa52815b8334e3a8a187f1650ce4f *libcxxabi_headers.zip
+8f4cb6c9358c1bf9a0c81dcf94dd1f3683c42f3407441ed1ce074851bca0cbed *mksnapshot-v32.2.1-darwin-arm64.zip
+ca0919eaa60722e8e864eeae331a571e10ecf02bb1bcd9028849436a15db4416 *mksnapshot-v32.2.1-darwin-x64.zip
+1858861baadfd453eac7e78de2b1837253d4e44084aff22d8b6813602e0a3f4e *mksnapshot-v32.2.1-linux-arm64-x64.zip
+15a713a85f2a3082c6b8943315bb7b9ab850f34a73544a619414f586e69b9b08 *mksnapshot-v32.2.1-linux-armv7l-x64.zip
+5b82fba9a2ee305ef4f0818c406c726cfebc090b84fdaf39e76954f360740445 *mksnapshot-v32.2.1-linux-x64.zip
+eef68fa0ea8ab11be45447e7e89fcac8dce3261d207807cd0d8366785964d7fc *mksnapshot-v32.2.1-mas-arm64.zip
+26fcd020007a857611adad7ce7ba0b83b008edb130d87c93183c053b73f61a76 *mksnapshot-v32.2.1-mas-x64.zip
+fbe7b665451fc4c48c4b09fe949374aedf95563b7d0b7f1927974b347205a8f9 *mksnapshot-v32.2.1-win32-arm64-x64.zip
+3e0cc1d1cfa749a6364e2124b63583d7543c95c744c10400a6834726337468d0 *mksnapshot-v32.2.1-win32-ia32.zip
+ef506867e5bb87c7e4380f9d9e93902d180a7425e1528acdd8283779e902f51e *mksnapshot-v32.2.1-win32-x64.zip
diff --git a/build/checksums/nodejs.txt b/build/checksums/nodejs.txt
index 23a56cdb23b..632cc7155e0 100644
--- a/build/checksums/nodejs.txt
+++ b/build/checksums/nodejs.txt
@@ -1,7 +1,7 @@
-4743bc042f90ba5d9edf09403207290a9cdd2f6061bdccf7caaa0bbfd49f343e node-v20.15.1-darwin-arm64.tar.gz
-f5379772ffae1404cfd1fcc8cf0c6c5971306b8fb2090d348019047306de39dc node-v20.15.1-darwin-x64.tar.gz
-8554c91ccd32782351035d3a9b168ad01c6922480800a21870fc5d6d86c2bb70 node-v20.15.1-linux-arm64.tar.gz
-2c16717da7d2d7b00f6af146cdf436a0297cbcee52c85b754e4c9ed7cee34b51 node-v20.15.1-linux-armv7l.tar.gz
-a9db028c0a1c63e3aa0d97de24b0966bc507d8239b3aedc4e752eea6b0580665 node-v20.15.1-linux-x64.tar.gz
-8e3f84e8ec7e41f98a048eb0c1365cfe54426a556ead98c4803df45d29e0335d win-arm64/node.exe
-229fb64aeb10d3cc18eaaa2f5a4c3f1c81792dd3647c5c4350e142db528d0f89 win-x64/node.exe
+92e180624259d082562592bb12548037c6a417069be29e452ec5d158d657b4be node-v20.18.0-darwin-arm64.tar.gz
+c02aa7560612a4e2cc359fd89fae7aedde370c06db621f2040a4a9f830a125dc node-v20.18.0-darwin-x64.tar.gz
+38bccb35c06ee4edbcd00c77976e3fad1d69d2e57c3c0c363d1700a2a2493278 node-v20.18.0-linux-arm64.tar.gz
+9a522daa837d4d32dc700bf9b18dea9e21a229b113a22cfcf38f1f2240bbbc47 node-v20.18.0-linux-armv7l.tar.gz
+24a5d58a1d4c2903478f4b7c3cfd2eeb5cea2cae3baee11a4dc6a1fed25fec6c node-v20.18.0-linux-x64.tar.gz
+e66327f3d1de938059bedda660de2eff1a508b61d777ff247615a019eb153d46 win-arm64/node.exe
+35b7c95a379beb606f5798ed83081690df13190077630b234163c6607aa4cc94 win-x64/node.exe
diff --git a/build/darwin/create-universal-app.js b/build/darwin/create-universal-app.js
index 468f13d93cd..ee99d569dc3 100644
--- a/build/darwin/create-universal-app.js
+++ b/build/darwin/create-universal-app.js
@@ -8,8 +8,6 @@ const path = require("path");
const fs = require("fs");
const minimatch = require("minimatch");
const vscode_universal_bundler_1 = require("vscode-universal-bundler");
-const cross_spawn_promise_1 = require("@malept/cross-spawn-promise");
-const esm_1 = require("../lib/esm");
const root = path.dirname(path.dirname(__dirname));
// --- Start Positron ---
const os = require("os");
@@ -51,6 +49,9 @@ const stashPatterns = [
'**/kcserver', // Compiled Jupyter supervisor
// Exclusions from Quarto
'**/quarto/bin/tools/**',
+ // Exclusions from Node Addon API
+ '**/@vscode/node-addon-api/**',
+ '**/@parcel/node-addon-api/**',
];
// Some generated files may end up being different in both distributions.
// `reconciliationFiles` contains relative paths of files that should be copied
@@ -61,18 +62,16 @@ const reconciliationFiles = [
'Contents/Resources/app/out/nls.messages.json',
'Contents/Resources/app/out/nls.keys.json',
// Consumers of localised strings, found by grepping for `nls_1.localize`
- 'Contents/Resources/app/out/vs/platform/profiling/electron-sandbox/profileAnalysisWorker.js',
+ 'Contents/Resources/app/out/vs/platform/profiling/electron-sandbox/profileAnalysisWorkerMain.js',
'Contents/Resources/app/out/vs/platform/files/node/watcher/watcherMain.js',
'Contents/Resources/app/out/vs/platform/terminal/node/ptyHostMain.js',
- 'Contents/Resources/app/out/vs/code/node/cli.js',
+ 'Contents/Resources/app/out/cli.js',
'Contents/Resources/app/out/vs/code/node/cliProcessMain.js',
'Contents/Resources/app/out/vs/code/electron-sandbox/processExplorer/processExplorerMain.js',
- 'Contents/Resources/app/out/vs/code/node/sharedProcess/sharedProcessMain.js',
- 'Contents/Resources/app/out/vs/code/electron-main/main.js',
- 'Contents/Resources/app/out/vs/workbench/contrib/notebook/common/services/notebookSimpleWorker.js',
+ 'Contents/Resources/app/out/vs/code/electron-utility/sharedProcess/sharedProcessMain.js',
+ 'Contents/Resources/app/out/vs/workbench/contrib/notebook/common/services/notebookSimpleWorkerMain.js',
'Contents/Resources/app/out/vs/workbench/contrib/issue/electron-sandbox/issueReporterMain.js',
- 'Contents/Resources/app/out/vs/base/worker/workerMain.js',
- 'Contents/Resources/app/out/vs/workbench/api/worker/extensionHostWorker.js',
+ 'Contents/Resources/app/out/vs/workbench/api/worker/extensionHostWorkerMain.js',
'Contents/Resources/app/out/vs/workbench/api/node/extensionHostProcess.js',
'Contents/Resources/app/out/vs/workbench/workbench.desktop.main.js',
];
@@ -169,14 +168,13 @@ async function main(buildDir) {
}
async function origMain(x64AppPath, arm64AppPath, asarRelativePath, outAppPath, filesToSkip, productJsonPath) {
// --- End Positron ---
- const canAsar = !(0, esm_1.isESM)('ASAR disabled in universal build'); // TODO@esm ASAR disabled in ESM
await (0, vscode_universal_bundler_1.makeUniversalApp)({
x64AppPath,
arm64AppPath,
- asarPath: canAsar ? asarRelativePath : undefined,
+ asarPath: asarRelativePath,
outAppPath,
force: true,
- mergeASARs: canAsar,
+ mergeASARs: true,
x64ArchFiles: '*/kerberos.node',
filesToSkipComparison: (file) => {
for (const expected of filesToSkip) {
@@ -192,12 +190,6 @@ async function origMain(x64AppPath, arm64AppPath, asarRelativePath, outAppPath,
darwinUniversalAssetId: 'darwin-universal'
});
fs.writeFileSync(productJsonPath, JSON.stringify(productJson, null, '\t'));
- // Verify if native module architecture is correct
- const findOutput = await (0, cross_spawn_promise_1.spawn)('find', [outAppPath, '-name', 'kerberos.node']);
- const lipoOutput = await (0, cross_spawn_promise_1.spawn)('lipo', ['-archs', findOutput.replace(/\n$/, '')]);
- if (lipoOutput.replace(/\n$/, '') !== 'x86_64 arm64') {
- throw new Error(`Invalid arch, got : ${lipoOutput}`);
- }
}
if (require.main === module) {
main(process.argv[2]).catch(err => {
diff --git a/build/darwin/create-universal-app.ts b/build/darwin/create-universal-app.ts
index de2c099ac28..8f6d040bfe6 100644
--- a/build/darwin/create-universal-app.ts
+++ b/build/darwin/create-universal-app.ts
@@ -7,8 +7,6 @@ import * as path from 'path';
import * as fs from 'fs';
import * as minimatch from 'minimatch';
import { makeUniversalApp } from 'vscode-universal-bundler';
-import { spawn } from '@malept/cross-spawn-promise';
-import { isESM } from '../lib/esm';
const root = path.dirname(path.dirname(__dirname));
@@ -54,6 +52,9 @@ const stashPatterns = [
'**/kcserver', // Compiled Jupyter supervisor
// Exclusions from Quarto
'**/quarto/bin/tools/**',
+ // Exclusions from Node Addon API
+ '**/@vscode/node-addon-api/**',
+ '**/@parcel/node-addon-api/**',
];
// Some generated files may end up being different in both distributions.
@@ -65,18 +66,16 @@ const reconciliationFiles = [
'Contents/Resources/app/out/nls.messages.json',
'Contents/Resources/app/out/nls.keys.json',
// Consumers of localised strings, found by grepping for `nls_1.localize`
- 'Contents/Resources/app/out/vs/platform/profiling/electron-sandbox/profileAnalysisWorker.js',
+ 'Contents/Resources/app/out/vs/platform/profiling/electron-sandbox/profileAnalysisWorkerMain.js',
'Contents/Resources/app/out/vs/platform/files/node/watcher/watcherMain.js',
'Contents/Resources/app/out/vs/platform/terminal/node/ptyHostMain.js',
- 'Contents/Resources/app/out/vs/code/node/cli.js',
+ 'Contents/Resources/app/out/cli.js',
'Contents/Resources/app/out/vs/code/node/cliProcessMain.js',
'Contents/Resources/app/out/vs/code/electron-sandbox/processExplorer/processExplorerMain.js',
- 'Contents/Resources/app/out/vs/code/node/sharedProcess/sharedProcessMain.js',
- 'Contents/Resources/app/out/vs/code/electron-main/main.js',
- 'Contents/Resources/app/out/vs/workbench/contrib/notebook/common/services/notebookSimpleWorker.js',
+ 'Contents/Resources/app/out/vs/code/electron-utility/sharedProcess/sharedProcessMain.js',
+ 'Contents/Resources/app/out/vs/workbench/contrib/notebook/common/services/notebookSimpleWorkerMain.js',
'Contents/Resources/app/out/vs/workbench/contrib/issue/electron-sandbox/issueReporterMain.js',
- 'Contents/Resources/app/out/vs/base/worker/workerMain.js',
- 'Contents/Resources/app/out/vs/workbench/api/worker/extensionHostWorker.js',
+ 'Contents/Resources/app/out/vs/workbench/api/worker/extensionHostWorkerMain.js',
'Contents/Resources/app/out/vs/workbench/api/node/extensionHostProcess.js',
'Contents/Resources/app/out/vs/workbench/workbench.desktop.main.js',
];
@@ -213,15 +212,13 @@ async function origMain(
) {
// --- End Positron ---
- const canAsar = !isESM('ASAR disabled in universal build'); // TODO@esm ASAR disabled in ESM
-
await makeUniversalApp({
x64AppPath,
arm64AppPath,
- asarPath: canAsar ? asarRelativePath : undefined,
+ asarPath: asarRelativePath,
outAppPath,
force: true,
- mergeASARs: canAsar,
+ mergeASARs: true,
x64ArchFiles: '*/kerberos.node',
filesToSkipComparison: (file: string) => {
for (const expected of filesToSkip) {
@@ -238,13 +235,6 @@ async function origMain(
darwinUniversalAssetId: 'darwin-universal'
});
fs.writeFileSync(productJsonPath, JSON.stringify(productJson, null, '\t'));
-
- // Verify if native module architecture is correct
- const findOutput = await spawn('find', [outAppPath, '-name', 'kerberos.node']);
- const lipoOutput = await spawn('lipo', ['-archs', findOutput.replace(/\n$/, '')]);
- if (lipoOutput.replace(/\n$/, '') !== 'x86_64 arm64') {
- throw new Error(`Invalid arch, got : ${lipoOutput}`);
- }
}
if (require.main === module) {
diff --git a/build/darwin/sign.js b/build/darwin/sign.js
index f5913b73ab8..feb5834ff85 100644
--- a/build/darwin/sign.js
+++ b/build/darwin/sign.js
@@ -10,8 +10,8 @@ const codesign = require("electron-osx-sign");
const cross_spawn_promise_1 = require("@malept/cross-spawn-promise");
const root = path.dirname(path.dirname(__dirname));
function getElectronVersion() {
- const yarnrc = fs.readFileSync(path.join(root, '.yarnrc'), 'utf8');
- const target = /^target "(.*)"$/m.exec(yarnrc)[1];
+ const npmrc = fs.readFileSync(path.join(root, '.npmrc'), 'utf8');
+ const target = /^target="(.*)"$/m.exec(npmrc)[1];
return target;
}
async function main(buildDir) {
diff --git a/build/darwin/sign.ts b/build/darwin/sign.ts
index 01e9ebf2d4b..5b3413b79e1 100644
--- a/build/darwin/sign.ts
+++ b/build/darwin/sign.ts
@@ -11,8 +11,8 @@ import { spawn } from '@malept/cross-spawn-promise';
const root = path.dirname(path.dirname(__dirname));
function getElectronVersion(): string {
- const yarnrc = fs.readFileSync(path.join(root, '.yarnrc'), 'utf8');
- const target = /^target "(.*)"$/m.exec(yarnrc)![1];
+ const npmrc = fs.readFileSync(path.join(root, '.npmrc'), 'utf8');
+ const target = /^target="(.*)"$/m.exec(npmrc)![1];
return target;
}
diff --git a/build/darwin/verify-macho.js b/build/darwin/verify-macho.js
new file mode 100644
index 00000000000..947184324e2
--- /dev/null
+++ b/build/darwin/verify-macho.js
@@ -0,0 +1,123 @@
+"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 });
+const assert = require("assert");
+const path = require("path");
+const promises_1 = require("fs/promises");
+const cross_spawn_promise_1 = require("@malept/cross-spawn-promise");
+const MACHO_PREFIX = 'Mach-O ';
+const MACHO_64_MAGIC_LE = 0xfeedfacf;
+const MACHO_UNIVERSAL_MAGIC_LE = 0xbebafeca;
+const MACHO_ARM64_CPU_TYPE = new Set([
+ 0x0c000001,
+ 0x0100000c,
+]);
+const MACHO_X86_64_CPU_TYPE = new Set([
+ 0x07000001,
+ 0x01000007,
+]);
+async function read(file, buf, offset, length, position) {
+ let filehandle;
+ try {
+ filehandle = await (0, promises_1.open)(file);
+ await filehandle.read(buf, offset, length, position);
+ }
+ finally {
+ await filehandle?.close();
+ }
+}
+async function checkMachOFiles(appPath, arch) {
+ const visited = new Set();
+ const invalidFiles = [];
+ const header = Buffer.alloc(8);
+ const file_header_entry_size = 20;
+ const checkx86_64Arch = (arch === 'x64');
+ const checkArm64Arch = (arch === 'arm64');
+ const checkUniversalArch = (arch === 'universal');
+ const traverse = async (p) => {
+ p = await (0, promises_1.realpath)(p);
+ if (visited.has(p)) {
+ return;
+ }
+ visited.add(p);
+ const info = await (0, promises_1.stat)(p);
+ if (info.isSymbolicLink()) {
+ return;
+ }
+ if (info.isFile()) {
+ let fileOutput = '';
+ try {
+ fileOutput = await (0, cross_spawn_promise_1.spawn)('file', ['--brief', '--no-pad', p]);
+ }
+ catch (e) {
+ if (e instanceof cross_spawn_promise_1.ExitCodeError) {
+ /* silently accept error codes from "file" */
+ }
+ else {
+ throw e;
+ }
+ }
+ if (fileOutput.startsWith(MACHO_PREFIX)) {
+ console.log(`Verifying architecture of ${p}`);
+ read(p, header, 0, 8, 0).then(_ => {
+ const header_magic = header.readUInt32LE();
+ if (header_magic === MACHO_64_MAGIC_LE) {
+ const cpu_type = header.readUInt32LE(4);
+ if (checkUniversalArch) {
+ invalidFiles.push(p);
+ }
+ else if (checkArm64Arch && !MACHO_ARM64_CPU_TYPE.has(cpu_type)) {
+ invalidFiles.push(p);
+ }
+ else if (checkx86_64Arch && !MACHO_X86_64_CPU_TYPE.has(cpu_type)) {
+ invalidFiles.push(p);
+ }
+ }
+ else if (header_magic === MACHO_UNIVERSAL_MAGIC_LE) {
+ const num_binaries = header.readUInt32BE(4);
+ assert.equal(num_binaries, 2);
+ const file_entries_size = file_header_entry_size * num_binaries;
+ const file_entries = Buffer.alloc(file_entries_size);
+ read(p, file_entries, 0, file_entries_size, 8).then(_ => {
+ for (let i = 0; i < num_binaries; i++) {
+ const cpu_type = file_entries.readUInt32LE(file_header_entry_size * i);
+ if (!MACHO_ARM64_CPU_TYPE.has(cpu_type) && !MACHO_X86_64_CPU_TYPE.has(cpu_type)) {
+ invalidFiles.push(p);
+ }
+ }
+ });
+ }
+ });
+ }
+ }
+ if (info.isDirectory()) {
+ for (const child of await (0, promises_1.readdir)(p)) {
+ await traverse(path.resolve(p, child));
+ }
+ }
+ };
+ await traverse(appPath);
+ return invalidFiles;
+}
+const archToCheck = process.argv[2];
+assert(process.env['APP_PATH'], 'APP_PATH not set');
+assert(archToCheck === 'x64' || archToCheck === 'arm64' || archToCheck === 'universal', `Invalid architecture ${archToCheck} to check`);
+checkMachOFiles(process.env['APP_PATH'], archToCheck).then(invalidFiles => {
+ if (invalidFiles.length > 0) {
+ console.error('\x1b[31mThe following files are built for the wrong architecture:\x1b[0m');
+ for (const file of invalidFiles) {
+ console.error(`\x1b[31m${file}\x1b[0m`);
+ }
+ process.exit(1);
+ }
+ else {
+ console.log('\x1b[32mAll files are valid\x1b[0m');
+ }
+}).catch(err => {
+ console.error(err);
+ process.exit(1);
+});
+//# sourceMappingURL=verify-macho.js.map
\ No newline at end of file
diff --git a/build/darwin/verify-macho.ts b/build/darwin/verify-macho.ts
new file mode 100644
index 00000000000..f418c44a230
--- /dev/null
+++ b/build/darwin/verify-macho.ts
@@ -0,0 +1,120 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+import * as assert from 'assert';
+import * as path from 'path';
+import { open, stat, readdir, realpath } from 'fs/promises';
+import { spawn, ExitCodeError } from '@malept/cross-spawn-promise';
+
+const MACHO_PREFIX = 'Mach-O ';
+const MACHO_64_MAGIC_LE = 0xfeedfacf;
+const MACHO_UNIVERSAL_MAGIC_LE = 0xbebafeca;
+const MACHO_ARM64_CPU_TYPE = new Set([
+ 0x0c000001,
+ 0x0100000c,
+]);
+const MACHO_X86_64_CPU_TYPE = new Set([
+ 0x07000001,
+ 0x01000007,
+]);
+
+async function read(file: string, buf: Buffer, offset: number, length: number, position: number) {
+ let filehandle;
+ try {
+ filehandle = await open(file);
+ await filehandle.read(buf, offset, length, position);
+ } finally {
+ await filehandle?.close();
+ }
+}
+
+async function checkMachOFiles(appPath: string, arch: string) {
+ const visited = new Set();
+ const invalidFiles: string[] = [];
+ const header = Buffer.alloc(8);
+ const file_header_entry_size = 20;
+ const checkx86_64Arch = (arch === 'x64');
+ const checkArm64Arch = (arch === 'arm64');
+ const checkUniversalArch = (arch === 'universal');
+ const traverse = async (p: string) => {
+ p = await realpath(p);
+ if (visited.has(p)) {
+ return;
+ }
+ visited.add(p);
+
+ const info = await stat(p);
+ if (info.isSymbolicLink()) {
+ return;
+ }
+ if (info.isFile()) {
+ let fileOutput = '';
+ try {
+ fileOutput = await spawn('file', ['--brief', '--no-pad', p]);
+ } catch (e) {
+ if (e instanceof ExitCodeError) {
+ /* silently accept error codes from "file" */
+ } else {
+ throw e;
+ }
+ }
+ if (fileOutput.startsWith(MACHO_PREFIX)) {
+ console.log(`Verifying architecture of ${p}`);
+ read(p, header, 0, 8, 0).then(_ => {
+ const header_magic = header.readUInt32LE();
+ if (header_magic === MACHO_64_MAGIC_LE) {
+ const cpu_type = header.readUInt32LE(4);
+ if (checkUniversalArch) {
+ invalidFiles.push(p);
+ } else if (checkArm64Arch && !MACHO_ARM64_CPU_TYPE.has(cpu_type)) {
+ invalidFiles.push(p);
+ } else if (checkx86_64Arch && !MACHO_X86_64_CPU_TYPE.has(cpu_type)) {
+ invalidFiles.push(p);
+ }
+ } else if (header_magic === MACHO_UNIVERSAL_MAGIC_LE) {
+ const num_binaries = header.readUInt32BE(4);
+ assert.equal(num_binaries, 2);
+ const file_entries_size = file_header_entry_size * num_binaries;
+ const file_entries = Buffer.alloc(file_entries_size);
+ read(p, file_entries, 0, file_entries_size, 8).then(_ => {
+ for (let i = 0; i < num_binaries; i++) {
+ const cpu_type = file_entries.readUInt32LE(file_header_entry_size * i);
+ if (!MACHO_ARM64_CPU_TYPE.has(cpu_type) && !MACHO_X86_64_CPU_TYPE.has(cpu_type)) {
+ invalidFiles.push(p);
+ }
+ }
+ });
+ }
+ });
+ }
+ }
+
+ if (info.isDirectory()) {
+ for (const child of await readdir(p)) {
+ await traverse(path.resolve(p, child));
+ }
+ }
+ };
+ await traverse(appPath);
+ return invalidFiles;
+}
+
+const archToCheck = process.argv[2];
+assert(process.env['APP_PATH'], 'APP_PATH not set');
+assert(archToCheck === 'x64' || archToCheck === 'arm64' || archToCheck === 'universal', `Invalid architecture ${archToCheck} to check`);
+checkMachOFiles(process.env['APP_PATH'], archToCheck).then(invalidFiles => {
+ if (invalidFiles.length > 0) {
+ console.error('\x1b[31mThe following files are built for the wrong architecture:\x1b[0m');
+ for (const file of invalidFiles) {
+ console.error(`\x1b[31m${file}\x1b[0m`);
+ }
+ process.exit(1);
+ } else {
+ console.log('\x1b[32mAll files are valid\x1b[0m');
+ }
+}).catch(err => {
+ console.error(err);
+ process.exit(1);
+});
diff --git a/build/eslint.js b/build/eslint.js
index 288917b35bf..55e11b277d9 100644
--- a/build/eslint.js
+++ b/build/eslint.js
@@ -8,17 +8,11 @@ const vfs = require('vinyl-fs');
const { eslintFilter } = require('./filters');
function eslint() {
- const gulpeslint = require('gulp-eslint');
+ const eslint = require('./gulp-eslint');
return vfs
.src(eslintFilter, { base: '.', follow: true, allowEmpty: true })
.pipe(
- gulpeslint({
- configFile: '.eslintrc.json'
- })
- )
- .pipe(gulpeslint.formatEach('compact'))
- .pipe(
- gulpeslint.results((results) => {
+ eslint((results) => {
if (results.warningCount > 0 || results.errorCount > 0) {
throw new Error('eslint failed with warnings and/or errors');
}
diff --git a/build/filters.js b/build/filters.js
index 4925f6f48bf..6594024602c 100644
--- a/build/filters.js
+++ b/build/filters.js
@@ -100,7 +100,6 @@ module.exports.indentationFilter = [
'!src/vs/base/node/cpuUsage.sh',
'!src/vs/editor/common/languages/highlights/*.scm',
'!test/unit/assert.js',
- '!test/unit/assert-esm.js',
'!resources/linux/snap/electron-launch',
'!build/ext.js',
'!build/npm/gyp/patches/gyp_spectre_mitigation_support.patch',
@@ -123,8 +122,7 @@ module.exports.indentationFilter = [
// except multiple specific files
'!**/package.json',
- '!**/yarn.lock',
- '!**/yarn-error.log',
+ '!**/package-lock.json',
// except multiple specific folders
'!**/codicon/**',
@@ -205,6 +203,7 @@ module.exports.copyrightFilter = [
'!extensions/markdown-language-features/media/highlight.css',
'!extensions/markdown-math/notebook-out/**',
'!extensions/ipynb/notebook-out/**',
+ '!extensions/simple-browser/media/codicon.css',
'!extensions/typescript-language-features/node-maintainer/**',
'!extensions/html-language-features/server/src/modes/typescript/*',
'!extensions/*/server/bin/*',
@@ -237,14 +236,16 @@ module.exports.tsFormattingFilter = [
module.exports.eslintFilter = [
'**/*.js',
+ '**/*.cjs',
+ '**/*.mjs',
'**/*.ts',
// --- Start Positron ---
'**/*.tsx',
// --- End Positron ---
- ...readFileSync(join(__dirname, '../.eslintignore'))
- .toString().split(/\r\n|\n/)
- .filter(line => !line.startsWith('#'))
- .filter(line => !!line)
+ ...readFileSync(join(__dirname, '..', '.eslint-ignore'))
+ .toString()
+ .split(/\r\n|\n/)
+ .filter(line => line && !line.startsWith('#'))
.map(line => line.startsWith('!') ? line.slice(1) : `!${line}`)
];
diff --git a/build/gulp-eslint.js b/build/gulp-eslint.js
new file mode 100644
index 00000000000..902c7b47003
--- /dev/null
+++ b/build/gulp-eslint.js
@@ -0,0 +1,78 @@
+/*---------------------------------------------------------------------------------------------
+ * 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 { ESLint } = require('eslint');
+const { Transform } = 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
+ */
+function eslint(action) {
+ const linter = new ESLint({});
+ const formatter = linter.loadFormatter('compact');
+
+ const results = [];
+ results.errorCount = 0;
+ results.warningCount = 0;
+
+ return transform(
+ async (file, enc, cb) => {
+ const filePath = relative(process.cwd(), file.path);
+
+ if (file.isNull()) {
+ cb(null, file);
+ return;
+ }
+
+ if (file.isStream()) {
+ cb(new Error('vinyl files with Stream contents are not supported'));
+ return;
+ }
+
+ try {
+ // TODO: Should this be checked?
+ if (await linter.isPathIgnored(filePath)) {
+ cb(null, file);
+ return;
+ }
+
+ const result = (await linter.lintText(file.contents.toString(), { filePath }))[0];
+ results.push(result);
+ results.errorCount += result.errorCount;
+ results.warningCount += result.warningCount;
+
+ const message = (await formatter).format([result]);
+ if (message) {
+ fancyLog(message);
+ }
+ cb(null, file);
+ } catch (error) {
+ cb(error);
+ }
+ },
+ (done) => {
+ try {
+ action(results);
+ done();
+ } catch (error) {
+ done(error);
+ }
+ });
+}
+
+function transform(transform, flush) {
+ return new Transform({
+ objectMode: true,
+ transform,
+ flush
+ });
+}
+
+module.exports = eslint;
diff --git a/build/gulpfile.compile.js b/build/gulpfile.compile.js
index 02474be8b82..eb7dc3b50dd 100644
--- a/build/gulpfile.compile.js
+++ b/build/gulpfile.compile.js
@@ -9,12 +9,8 @@
const gulp = require('gulp');
const util = require('./lib/util');
const date = require('./lib/date');
-const esm = require('./lib/esm');
const task = require('./lib/task');
const compilation = require('./lib/compilation');
-const optimize = require('./lib/optimize');
-
-const isESMBuild = typeof process.env.VSCODE_BUILD_ESM === 'string' && process.env.VSCODE_BUILD_ESM.toLowerCase() === 'true';
/**
* @param {boolean} disableMangle
@@ -22,12 +18,9 @@ const isESMBuild = typeof process.env.VSCODE_BUILD_ESM === 'string' && process.e
function makeCompileBuildTask(disableMangle) {
return task.series(
util.rimraf('out-build'),
- util.buildWebNodePaths('out-build'),
date.writeISODate('out-build'),
- esm.setESM(isESMBuild),
compilation.compileApiProposalNamesTask,
- compilation.compileTask(isESMBuild ? 'src2' : 'src', 'out-build', true, { disableMangle }),
- optimize.optimizeLoaderTask('out-build', 'out-build', true)
+ compilation.compileTask('src', 'out-build', true, { disableMangle })
);
}
diff --git a/build/gulpfile.editor.js b/build/gulpfile.editor.js
index 088748b8356..739c37fc677 100644
--- a/build/gulpfile.editor.js
+++ b/build/gulpfile.editor.js
@@ -77,7 +77,7 @@ const extractEditorSrcTask = task.define('extract-editor-src', () => {
extrausages
],
shakeLevel: 2, // 0-Files, 1-InnerFile, 2-ClassMembers
- importIgnorePattern: /(^vs\/css!)/,
+ importIgnorePattern: /\.css$/,
destRoot: path.join(root, 'out-editor-src'),
redirects: {
'@vscode/tree-sitter-wasm': '../node_modules/@vscode/tree-sitter-wasm/wasm/tree-sitter-web',
@@ -89,23 +89,13 @@ const extractEditorSrcTask = task.define('extract-editor-src', () => {
// Disable NLS task to remove english strings to preserve backwards compatibility when we removed the `vs/nls!` AMD plugin.
const compileEditorAMDTask = task.define('compile-editor-amd', compilation.compileTask('out-editor-src', 'out-editor-build', true, { disableMangle: true, preserveEnglish: true }));
-const optimizeEditorAMDTask = task.define('optimize-editor-amd', optimize.optimizeTask(
+const bundleEditorAMDTask = task.define('bundle-editor-amd', optimize.bundleTask(
{
out: 'out-editor',
- amd: {
+ esm: {
src: 'out-editor-build',
entryPoints: editorEntryPoints,
- resources: editorResources,
- loaderConfig: {
- paths: {
- 'vs': 'out-editor-build/vs',
- 'vs/css': 'out-editor-build/vs/css.build',
- 'vscode': 'empty:'
- }
- },
- header: BUNDLED_FILE_HEADER,
- bundleInfo: true,
- languages
+ resources: editorResources
}
}
));
@@ -198,49 +188,11 @@ const compileEditorESMTask = task.define('compile-editor-esm', () => {
}
console.log(`Open in VS Code the folder at '${destPath}' and you can analyze the compilation error`);
- throw new Error('Standalone Editor compilation failed. If this is the build machine, simply launch `yarn run gulp editor-distro` on your machine to further analyze the compilation problem.');
+ throw new Error('Standalone Editor compilation failed. If this is the build machine, simply launch `npm run gulp editor-distro` on your machine to further analyze the compilation problem.');
});
}
});
-/**
- * Go over all .js files in `/out-monaco-editor-core/esm/` and make sure that all imports
- * use `.js` at the end in order to be ESM compliant.
- */
-const appendJSToESMImportsTask = task.define('append-js-to-esm-imports', () => {
- const SRC_DIR = path.join(__dirname, '../out-monaco-editor-core/esm');
- const files = util.rreddir(SRC_DIR);
- for (const file of files) {
- const filePath = path.join(SRC_DIR, file);
- if (!/\.js$/.test(filePath)) {
- continue;
- }
-
- const contents = fs.readFileSync(filePath).toString();
- const lines = contents.split(/\r\n|\r|\n/g);
- const /** @type {string[]} */result = [];
- for (const line of lines) {
- if (!/^import/.test(line) && !/^export \* from/.test(line)) {
- // not an import
- result.push(line);
- continue;
- }
- if (/^import '[^']+\.css';/.test(line)) {
- // CSS import
- result.push(line);
- continue;
- }
- const modifiedLine = (
- line
- .replace(/^import(.*)\'([^']+)\'/, `import$1'$2.js'`)
- .replace(/^export \* from \'([^']+)\'/, `export * from '$1.js'`)
- );
- result.push(modifiedLine);
- }
- fs.writeFileSync(filePath, result.join('\n'));
- }
-});
-
/**
* @param {string} contents
*/
@@ -407,13 +359,12 @@ gulp.task('editor-distro',
task.parallel(
task.series(
compileEditorAMDTask,
- optimizeEditorAMDTask,
+ bundleEditorAMDTask,
minifyEditorAMDTask
),
task.series(
createESMSourcesAndResourcesTask,
compileEditorESMTask,
- appendJSToESMImportsTask
)
),
finalEditorResourcesTask
@@ -430,7 +381,6 @@ gulp.task('editor-esm',
extractEditorSrcTask,
createESMSourcesAndResourcesTask,
compileEditorESMTask,
- appendJSToESMImportsTask,
)
);
@@ -461,7 +411,6 @@ function createTscCompileTask(watch) {
/** @type {NodeJS.ReadWriteStream | undefined} */
let report;
- // eslint-disable-next-line no-control-regex
const magic = /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g; // https://stackoverflow.com/questions/25245716/remove-all-ansi-colors-styles-from-strings
child.stdout.on('data', data => {
diff --git a/build/gulpfile.extensions.js b/build/gulpfile.extensions.js
index 8b09bb669f9..77a680851c1 100644
--- a/build/gulpfile.extensions.js
+++ b/build/gulpfile.extensions.js
@@ -88,6 +88,7 @@ const compilations = [
'extensions/vscode-test-resolver/tsconfig.json',
'.vscode/extensions/vscode-selfhost-test-provider/tsconfig.json',
+ '.vscode/extensions/vscode-selfhost-import-aid/tsconfig.json',
];
const getBaseUrl = out => `https://main.vscode-cdn.net/sourcemaps/${commit}/${out}`;
@@ -120,7 +121,6 @@ const tasks = compilations.map(function (tsconfigFile) {
}
function createPipeline(build, emitError, transpileOnly) {
- const nlsDev = require('vscode-nls-dev');
const tsb = require('./lib/tsb');
const sourcemaps = require('gulp-sourcemaps');
@@ -148,7 +148,6 @@ const tasks = compilations.map(function (tsconfigFile) {
.pipe(tsFilter)
.pipe(util.loadSourcemaps())
.pipe(compilation())
- .pipe(build ? nlsDev.rewriteLocalizeCalls() : es.through())
.pipe(build ? util.stripSourceMappingURL() : es.through())
.pipe(build ? es.through() : util.stripImportStatements())
.pipe(sourcemaps.write('.', {
@@ -159,9 +158,6 @@ const tasks = compilations.map(function (tsconfigFile) {
sourceRoot: '../src/',
}))
.pipe(tsFilter.restore)
- .pipe(build ? nlsDev.bundleMetaDataFiles(headerId, headerOut) : es.through())
- // Filter out *.nls.json file. We needed them only to bundle meta data file.
- .pipe(filter(['**', '!**/*.nls.json'], { dot: true }))
.pipe(reporter.end(emitError));
return es.duplex(input, output);
diff --git a/build/gulpfile.js b/build/gulpfile.js
index 785719d3e14..7894398c2ea 100644
--- a/build/gulpfile.js
+++ b/build/gulpfile.js
@@ -20,29 +20,25 @@ gulp.task(compileApiProposalNamesTask);
gulp.task(watchApiProposalNamesTask);
// SWC Client Transpile
-const transpileClientSWCTask = task.define('transpile-client-swc', task.series(util.rimraf('out'), util.buildWebNodePaths('out'), transpileTask('src', 'out', true)));
+const transpileClientSWCTask = task.define('transpile-client-esbuild', task.series(util.rimraf('out'), transpileTask('src', 'out', true)));
gulp.task(transpileClientSWCTask);
// Transpile only
-const transpileClientTask = task.define('transpile-client', task.series(util.rimraf('out'), util.buildWebNodePaths('out'), transpileTask('src', 'out')));
+const transpileClientTask = task.define('transpile-client', task.series(util.rimraf('out'), transpileTask('src', 'out')));
gulp.task(transpileClientTask);
// Fast compile for development time
-const compileClientTask = task.define('compile-client', task.series(util.rimraf('out'), util.buildWebNodePaths('out'), compileApiProposalNamesTask, compileTask('src', 'out', false)));
+const compileClientTask = task.define('compile-client', task.series(util.rimraf('out'), compileApiProposalNamesTask, compileTask('src', 'out', false)));
gulp.task(compileClientTask);
-const watchClientTask = task.define('watch-client', task.series(util.rimraf('out'), util.buildWebNodePaths('out'), task.parallel(watchTask('out', false), watchApiProposalNamesTask)));
+const watchClientTask = task.define('watch-client', task.series(util.rimraf('out'), task.parallel(watchTask('out', false), watchApiProposalNamesTask)));
gulp.task(watchClientTask);
-const watchClientESMTask = task.define('watch-client-esm', task.series(util.rimraf('out'), util.buildWebNodePaths('out'), task.parallel(watchTask('out', false, 'src2'), watchApiProposalNamesTask)));
-gulp.task(watchClientESMTask);
-
// All
const _compileTask = task.define('compile', task.parallel(monacoTypecheckTask, compileClientTask, compileExtensionsTask, compileExtensionMediaTask));
gulp.task(_compileTask);
gulp.task(task.define('watch', task.parallel(/* monacoTypecheckWatchTask, */ watchClientTask, watchExtensionsTask)));
-gulp.task(task.define('watch-esm', task.parallel(/* monacoTypecheckWatchTask, */ watchClientESMTask, watchExtensionsTask)));
// Default
gulp.task('default', _compileTask);
diff --git a/build/gulpfile.reh.js b/build/gulpfile.reh.js
index 28db854083c..78b989d1b8e 100644
--- a/build/gulpfile.reh.js
+++ b/build/gulpfile.reh.js
@@ -34,7 +34,6 @@ const { positronBuildNumber } = require('./utils');
// --- End Positron ---
const cp = require('child_process');
const log = require('fancy-log');
-const { isESM } = require('./lib/esm');
const buildfile = require('./buildfile');
const REPO_ROOT = path.dirname(__dirname);
@@ -62,10 +61,9 @@ const BUILD_TARGETS = [
];
const serverResourceIncludes = [
- // --- Start Positron ---
- 'out-build/react-dom/client.js',
+ // --- Start PWB ---
'out-build/vs/code/browser/workbench/rsLoginCheck.js',
- // --- End Positron ---
+ // --- End PWB ---
// NLS
'out-build/nls.messages.json',
@@ -75,19 +73,20 @@ const serverResourceIncludes = [
'out-build/vs/base/node/ps.sh',
// Terminal shell integration
- 'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration.ps1',
- 'out-build/vs/workbench/contrib/terminal/browser/media/CodeTabExpansion.psm1',
- 'out-build/vs/workbench/contrib/terminal/browser/media/GitTabExpansion.psm1',
- 'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration-bash.sh',
- 'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration-env.zsh',
- 'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration-profile.zsh',
- 'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration-rc.zsh',
- 'out-build/vs/workbench/contrib/terminal/browser/media/shellIntegration-login.zsh',
- 'out-build/vs/workbench/contrib/terminal/browser/media/fish_xdg_data/fish/vendor_conf.d/shellIntegration.fish',
+ 'out-build/vs/workbench/contrib/terminal/common/scripts/shellIntegration.ps1',
+ 'out-build/vs/workbench/contrib/terminal/common/scripts/CodeTabExpansion.psm1',
+ 'out-build/vs/workbench/contrib/terminal/common/scripts/GitTabExpansion.psm1',
+ 'out-build/vs/workbench/contrib/terminal/common/scripts/shellIntegration-bash.sh',
+ 'out-build/vs/workbench/contrib/terminal/common/scripts/shellIntegration-env.zsh',
+ 'out-build/vs/workbench/contrib/terminal/common/scripts/shellIntegration-profile.zsh',
+ 'out-build/vs/workbench/contrib/terminal/common/scripts/shellIntegration-rc.zsh',
+ 'out-build/vs/workbench/contrib/terminal/common/scripts/shellIntegration-login.zsh',
+ 'out-build/vs/workbench/contrib/terminal/common/scripts/fish_xdg_data/fish/vendor_conf.d/shellIntegration.fish',
+
];
const serverResourceExcludes = [
- '!out-build/vs/**/{electron-sandbox,electron-main}/**',
+ '!out-build/vs/**/{electron-sandbox,electron-main,electron-utility}/**',
'!out-build/vs/editor/standalone/**',
'!out-build/vs/workbench/**/*-tb.png',
'!**/test/**'
@@ -98,51 +97,25 @@ const serverResources = [
...serverResourceExcludes
];
-const serverWithWebResourceIncludes = isESM() ? [
+const serverWithWebResourceIncludes = [
...serverResourceIncludes,
'out-build/vs/code/browser/workbench/*.html',
...vscodeWebResourceIncludes
-] : [
- ...serverResourceIncludes,
- ...vscodeWebResourceIncludes
];
const serverWithWebResourceExcludes = [
...serverResourceExcludes,
- '!out-build/vs/code/**/*-dev.html',
- '!out-build/vs/code/**/*-dev.esm.html',
+ '!out-build/vs/code/**/*-dev.html'
];
const serverWithWebResources = [
...serverWithWebResourceIncludes,
...serverWithWebResourceExcludes
];
+const serverEntryPoints = buildfile.codeServer;
-const serverEntryPoints = [
- {
- name: 'vs/server/node/server.main',
- exclude: ['vs/css']
- },
- {
- name: 'vs/server/node/server.cli',
- exclude: ['vs/css']
- },
- {
- name: 'vs/workbench/api/node/extensionHostProcess',
- exclude: ['vs/css']
- },
- {
- name: 'vs/platform/files/node/watcher/watcherMain',
- exclude: ['vs/css']
- },
- {
- name: 'vs/platform/terminal/node/ptyHostMain',
- exclude: ['vs/css']
- }
-];
-
-const webEntryPoints = isESM() ? [
- buildfile.base,
+const webEntryPoints = [
+ buildfile.workerEditor,
buildfile.workerExtensionHost,
buildfile.workerNotebook,
buildfile.workerLanguageDetection,
@@ -151,15 +124,6 @@ const webEntryPoints = isESM() ? [
buildfile.workerBackgroundTokenization,
buildfile.keyboardMaps,
buildfile.codeWeb
-].flat() : [
- buildfile.entrypoint('vs/workbench/workbench.web.main'),
- buildfile.base,
- buildfile.workerExtensionHost,
- buildfile.workerNotebook,
- buildfile.workerLanguageDetection,
- buildfile.workerLocalFileSearch,
- buildfile.keyboardMaps,
- buildfile.workbenchWeb()
].flat();
const serverWithWebEntryPoints = [
@@ -171,16 +135,16 @@ const serverWithWebEntryPoints = [
...webEntryPoints,
].flat();
-const commonJSEntryPoints = [
+const bootstrapEntryPoints = [
'out-build/server-main.js',
'out-build/server-cli.js',
- 'out-build/bootstrap-fork.js',
+ 'out-build/bootstrap-fork.js'
];
function getNodeVersion() {
- const yarnrc = fs.readFileSync(path.join(REPO_ROOT, 'remote', '.yarnrc'), 'utf8');
- const nodeVersion = /^target "(.*)"$/m.exec(yarnrc)[1];
- const internalNodeVersion = /^ms_build_id "(.*)"$/m.exec(yarnrc)[1];
+ const npmrc = fs.readFileSync(path.join(REPO_ROOT, 'remote', '.npmrc'), 'utf8');
+ const nodeVersion = /^target="(.*)"$/m.exec(npmrc)[1];
+ const internalNodeVersion = /^ms_build_id="(.*)"$/m.exec(npmrc)[1];
return { nodeVersion, internalNodeVersion };
}
@@ -378,9 +342,8 @@ function packageTask(type, platform, arch, sourceFolderName, destinationFolderNa
// --- Start Positron ---
// Note: The remote/reh-web/package.json is generated/updated in build/npm/postinstall.js
const packageJsonBase = type === 'reh-web' ? 'remote/reh-web' : 'remote';
- const packageJsonStream = gulp.src([`${packageJsonBase}/package.json`], { base: packageJsonBase })
- .pipe(json({ name, version, dependencies: undefined, optionalDependencies: undefined, ...(isESM(`Setting 'type: module' in top level package.json`) ? { type: 'module' } : {}) })) // TODO@esm this should be configured in the top level package.json
- // --- End Positron ---
+ const packageJsonStream = gulp.src(['remote/package.json'], { base: packageJsonBase })
+ .pipe(json({ name, version, dependencies: undefined, optionalDependencies: undefined, type: 'module' }))
.pipe(es.through(function (file) {
packageJsonContents = file.contents.toString();
this.emit('data', file);
@@ -402,12 +365,11 @@ function packageTask(type, platform, arch, sourceFolderName, destinationFolderNa
// --- Start Positron ---
const productionDependencies = getProductionDependencies(type === 'reh-web' ? REMOTE_REH_WEB_FOLDER : REMOTE_FOLDER);
- const dependenciesSrc = productionDependencies.map(d => path.relative(REPO_ROOT, d.path)).map(d => [`${d}/**`, `!${d}/**/{test,tests}/**`, `!${d}/.bin/**`]).flat();
-
+ const dependenciesSrc = productionDependencies.map(d => path.relative(REPO_ROOT, d)).map(d => [`${d}/**`, `!${d}/**/{test,tests}/**`, `!${d}/.bin/**`]).flat();
const deps = gulp.src(dependenciesSrc, { base: packageJsonBase, dot: true })
// --- End Positron ---
// filter out unnecessary files, no source maps in server build
- .pipe(filter(['**', '!**/package-lock.json', '!**/yarn.lock', '!**/*.js.map']))
+ .pipe(filter(['**', '!**/package-lock.json', '!**/*.js.map']))
.pipe(util.cleanNodeModules(path.join(__dirname, '.moduleignore')))
.pipe(util.cleanNodeModules(path.join(__dirname, `.moduleignore.${process.platform}`)))
.pipe(jsFilter)
@@ -509,7 +471,7 @@ function packageTask(type, platform, arch, sourceFolderName, destinationFolderNa
}
result = inlineMeta(result, {
- targetPaths: commonJSEntryPoints,
+ targetPaths: bootstrapEntryPoints,
packageJsonFn: () => packageJsonContents,
productJsonFn: () => productJsonContents
});
@@ -528,43 +490,28 @@ function tweakProductForServerWeb(product) {
}
['reh', 'reh-web'].forEach(type => {
- const optimizeTask = task.define(`optimize-vscode-${type}`, task.series(
+ const bundleTask = task.define(`bundle-vscode-${type}`, task.series(
util.rimraf(`out-vscode-${type}`),
- optimize.optimizeTask(
+ optimize.bundleTask(
{
out: `out-vscode-${type}`,
- amd: {
+ esm: {
src: 'out-build',
- entryPoints: (type === 'reh' ? serverEntryPoints : serverWithWebEntryPoints).flat(),
- otherSources: [],
+ entryPoints: [
+ ...(type === 'reh' ? serverEntryPoints : serverWithWebEntryPoints),
+ ...bootstrapEntryPoints
+ ],
resources: type === 'reh' ? serverResources : serverWithWebResources,
- loaderConfig: optimize.loaderConfig(),
- inlineAmdImages: true,
- bundleInfo: undefined,
// --- Start Positron ---
fileContentMapper: createVSCodeWebFileContentMapper(type === 'reh-web' ? '.build/web/extensions' : '.build/extensions', type === 'reh-web' ? tweakProductForServerWeb(product) : product)
// --- End Positron ---
- },
- commonJS: {
- src: 'out-build',
- entryPoints: commonJSEntryPoints,
- platform: 'node',
- external: [
- 'minimist',
- // We cannot inline `product.json` from here because
- // it is being changed during build time at a later
- // point in time (such as `checksums`)
- // We have a manual step to inline these later.
- '../product.json',
- '../package.json'
- ]
}
}
)
));
const minifyTask = task.define(`minify-vscode-${type}`, task.series(
- optimizeTask,
+ bundleTask,
util.rimraf(`out-vscode-${type}-min`),
optimize.minifyTask(`out-vscode-${type}`, `https://main.vscode-cdn.net/sourcemaps/${commit}/core`)
));
@@ -590,7 +537,7 @@ function tweakProductForServerWeb(product) {
compileBuildTask,
compileExtensionsBuildTask,
compileExtensionMediaBuildTask,
- minified ? minifyTask : optimizeTask,
+ minified ? minifyTask : bundleTask,
serverTaskCI
));
gulp.task(serverTask);
diff --git a/build/gulpfile.scan.js b/build/gulpfile.scan.js
index 127720a0245..cbcdddb74bc 100644
--- a/build/gulpfile.scan.js
+++ b/build/gulpfile.scan.js
@@ -71,12 +71,15 @@ BUILD_TARGETS.forEach(buildTarget => {
gulp.task(setupSymbolsTask);
});
-function nodeModules(destinationExe, destinationPdb, platform) {
+function getProductionDependencySources() {
const productionDependencies = deps.getProductionDependencies(root);
- const dependenciesSrc = productionDependencies.map(d => path.relative(root, d.path)).map(d => [`${d}/**`, `!${d}/**/{test,tests}/**`]).flat();
+ return productionDependencies.map(d => path.relative(root, d)).map(d => [`${d}/**`, `!${d}/**/{test,tests}/**`]).flat();
+}
+
+function nodeModules(destinationExe, destinationPdb, platform) {
const exe = () => {
- return gulp.src(dependenciesSrc, { base: '.', dot: true })
+ return gulp.src(getProductionDependencySources(), { base: '.', dot: true })
.pipe(filter([
'**/*.node',
// Exclude these paths.
@@ -89,7 +92,7 @@ function nodeModules(destinationExe, destinationPdb, platform) {
if (platform === 'win32') {
const pdb = () => {
- return gulp.src(dependenciesSrc, { base: '.', dot: true })
+ return gulp.src(getProductionDependencySources(), { base: '.', dot: true })
.pipe(filter(['**/*.pdb']))
.pipe(gulp.dest(destinationPdb));
};
@@ -99,7 +102,7 @@ function nodeModules(destinationExe, destinationPdb, platform) {
if (platform === 'linux') {
const pdb = () => {
- return gulp.src(dependenciesSrc, { base: '.', dot: true })
+ return gulp.src(getProductionDependencySources(), { base: '.', dot: true })
.pipe(filter(['**/*.sym']))
.pipe(gulp.dest(destinationPdb));
};
diff --git a/build/gulpfile.vscode.js b/build/gulpfile.vscode.js
index d933164c907..4b2178b0fad 100644
--- a/build/gulpfile.vscode.js
+++ b/build/gulpfile.vscode.js
@@ -33,7 +33,6 @@ const minimist = require('minimist');
const { compileBuildTask } = require('./gulpfile.compile');
const { compileExtensionsBuildTask, compileExtensionMediaBuildTask } = require('./gulpfile.extensions');
const { promisify } = require('util');
-const { isESM } = require('./lib/esm');
const glob = promisify(require('glob'));
const rcedit = promisify(require('rcedit'));
@@ -44,8 +43,8 @@ const { positronBuildNumber } = require('./utils');
// --- End Positron ---
// Build
-const vscodeEntryPoints = isESM() ? [
- buildfile.base,
+const vscodeEntryPoints = [
+ buildfile.workerEditor,
buildfile.workerExtensionHost,
buildfile.workerNotebook,
buildfile.workerLanguageDetection,
@@ -53,31 +52,17 @@ const vscodeEntryPoints = isESM() ? [
buildfile.workerProfileAnalysis,
buildfile.workerOutputLinks,
buildfile.workerBackgroundTokenization,
- buildfile.workbenchDesktop(),
- buildfile.code
-].flat() : [
- buildfile.entrypoint('vs/workbench/workbench.desktop.main'),
- buildfile.base,
- buildfile.workerExtensionHost,
- buildfile.workerNotebook,
- buildfile.workerLanguageDetection,
- buildfile.workerLocalFileSearch,
- buildfile.workerProfileAnalysis,
- buildfile.workbenchDesktop(),
+ buildfile.workbenchDesktop,
buildfile.code
].flat();
-const vscodeResourceIncludes = isESM() ? [
- // --- Start Positron ---
- 'out-build/react-dom/client.js',
- // --- End Positron ---
-
+const vscodeResourceIncludes = [
// NLS
'out-build/nls.messages.json',
'out-build/nls.keys.json',
// Workbench
- 'out-build/vs/code/electron-sandbox/workbench/workbench.esm.html',
+ 'out-build/vs/code/electron-sandbox/workbench/workbench.html',
// Electron Preload
'out-build/vs/base/parts/sandbox/electron-sandbox/preload.js',
@@ -94,11 +79,11 @@ const vscodeResourceIncludes = isESM() ? [
'out-build/vs/workbench/contrib/externalTerminal/**/*.scpt',
// Terminal shell integration
- 'out-build/vs/workbench/contrib/terminal/browser/media/fish_xdg_data/fish/vendor_conf.d/*.fish',
- 'out-build/vs/workbench/contrib/terminal/browser/media/*.ps1',
- 'out-build/vs/workbench/contrib/terminal/browser/media/*.psm1',
- 'out-build/vs/workbench/contrib/terminal/browser/media/*.sh',
- 'out-build/vs/workbench/contrib/terminal/browser/media/*.zsh',
+ 'out-build/vs/workbench/contrib/terminal/common/scripts/fish_xdg_data/fish/vendor_conf.d/*.fish',
+ 'out-build/vs/workbench/contrib/terminal/common/scripts/*.ps1',
+ 'out-build/vs/workbench/contrib/terminal/common/scripts/*.psm1',
+ 'out-build/vs/workbench/contrib/terminal/common/scripts/*.sh',
+ 'out-build/vs/workbench/contrib/terminal/common/scripts/*.zsh',
// Accessibility Signals
'out-build/vs/platform/accessibilitySignal/browser/media/*.mp3',
@@ -114,47 +99,16 @@ const vscodeResourceIncludes = isESM() ? [
'out-build/vs/workbench/contrib/webview/browser/pre/*.{js,html}',
// Extension Host Worker
- 'out-build/vs/workbench/services/extensions/worker/webWorkerExtensionHostIframe.esm.html',
+ 'out-build/vs/workbench/services/extensions/worker/webWorkerExtensionHostIframe.html',
// Process Explorer
- 'out-build/vs/code/electron-sandbox/processExplorer/processExplorer.esm.html',
+ 'out-build/vs/code/electron-sandbox/processExplorer/processExplorer.html',
// Tree Sitter highlights
'out-build/vs/editor/common/languages/highlights/*.scm',
// Issue Reporter
- 'out-build/vs/workbench/contrib/issue/electron-sandbox/issueReporter.esm.html'
-] : [
- // --- Start Positron ---
- 'out-build/react-dom/client.js',
- // --- End Positron ---
-
- 'out-build/nls.messages.json',
- 'out-build/nls.keys.json',
- 'out-build/vs/**/*.{svg,png,html,jpg,mp3}',
- '!out-build/vs/code/browser/**/*.html',
- '!out-build/vs/code/**/*-dev.html',
- '!out-build/vs/code/**/*-dev.esm.html',
- '!out-build/vs/editor/standalone/**/*.svg',
- 'out-build/vs/base/node/{stdForkStart.js,terminateProcess.sh,cpuUsage.sh,ps.sh}',
- 'out-build/vs/base/browser/ui/codicons/codicon/**',
- 'out-build/vs/base/parts/sandbox/electron-sandbox/preload.js',
- 'out-build/vs/base/parts/sandbox/electron-sandbox/preload-aux.js',
- 'out-build/vs/workbench/browser/media/*-theme.css',
- 'out-build/vs/workbench/contrib/debug/**/*.json',
- 'out-build/vs/workbench/contrib/externalTerminal/**/*.scpt',
- 'out-build/vs/workbench/contrib/terminal/browser/media/fish_xdg_data/fish/vendor_conf.d/*.fish',
- 'out-build/vs/workbench/contrib/terminal/browser/media/*.ps1',
- 'out-build/vs/workbench/contrib/terminal/browser/media/*.psm1',
- 'out-build/vs/workbench/contrib/terminal/browser/media/*.sh',
- 'out-build/vs/workbench/contrib/terminal/browser/media/*.zsh',
- 'out-build/vs/workbench/contrib/webview/browser/pre/*.js',
- '!out-build/vs/workbench/contrib/issue/**/*-dev.html',
- '!out-build/vs/workbench/contrib/issue/**/*-dev.esm.html',
- 'out-build/vs/editor/common/languages/highlights/*.scm',
- 'out-build/vs/**/markdown.css',
- 'out-build/vs/workbench/contrib/tasks/**/*.json',
- '!**/test/**'
+ 'out-build/vs/workbench/contrib/issue/electron-sandbox/issueReporter.html'
];
const vscodeResources = [
@@ -166,73 +120,67 @@ const vscodeResources = [
'!out-build/vs/code/browser/**',
'!out-build/vs/editor/standalone/**',
'!out-build/vs/code/**/*-dev.html',
- '!out-build/vs/code/**/*-dev.esm.html',
'!out-build/vs/workbench/contrib/issue/**/*-dev.html',
- '!out-build/vs/workbench/contrib/issue/**/*-dev.esm.html',
'!**/test/**'
];
-// Do not change the order of these files! They will
-// be inlined into the target window file in this order
-// and they depend on each other in this way.
-const windowBootstrapFiles = [];
-if (!isESM('Skipping loader.js in window bootstrap files')) {
- windowBootstrapFiles.push('out-build/vs/loader.js');
-}
-windowBootstrapFiles.push('out-build/bootstrap-window.js');
-
-const commonJSEntryPoints = [
+const bootstrapEntryPoints = [
'out-build/main.js',
'out-build/cli.js',
'out-build/bootstrap-fork.js'
];
-const optimizeVSCodeTask = task.define('optimize-vscode', task.series(
+const bundleVSCodeTask = task.define('bundle-vscode', task.series(
util.rimraf('out-vscode'),
// Optimize: bundles source files automatically based on
- // AMD and CommonJS import statements based on the passed
- // in entry points. In addition, concat window related
- // bootstrap files into a single file.
- optimize.optimizeTask(
+ // import statements based on the passed in entry points.
+ // In addition, concat window related bootstrap files into
+ // a single file.
+ optimize.bundleTask(
{
out: 'out-vscode',
- amd: {
+ esm: {
src: 'out-build',
- entryPoints: vscodeEntryPoints,
+ entryPoints: [
+ ...vscodeEntryPoints,
+ ...bootstrapEntryPoints
+ ],
resources: vscodeResources,
- loaderConfig: optimize.loaderConfig(),
- bundleInfo: undefined
- },
- commonJS: {
- src: 'out-build',
- entryPoints: commonJSEntryPoints,
- platform: 'node',
- external: [
- 'electron',
- 'minimist',
- 'original-fs',
- // We cannot inline `product.json` from here because
- // it is being changed during build time at a later
- // point in time (such as `checksums`)
- // We have a manual step to inline these later.
- '../product.json',
- '../package.json',
- ]
- },
- manual: [
- { src: [...windowBootstrapFiles, 'out-build/vs/code/electron-sandbox/workbench/workbench.js'], out: 'vs/code/electron-sandbox/workbench/workbench.js' },
- // TODO: @justchen https://github.com/microsoft/vscode/issues/213332 make sure to remove when we use window.open on desktop.
- { src: [...windowBootstrapFiles, 'out-build/vs/workbench/contrib/issue/electron-sandbox/issueReporter.js'], out: 'vs/workbench/contrib/issue/electron-sandbox/issueReporter.js' },
- { src: [...windowBootstrapFiles, 'out-build/vs/code/electron-sandbox/processExplorer/processExplorer.js'], out: 'vs/code/electron-sandbox/processExplorer/processExplorer.js' }
- ]
+ fileContentMapper: filePath => {
+ // --- Start Positron ---
+ // We have modified these `endsWith` statements to use
+ // `path.join` instead of hardcoded `/` path separators;
+ // without this change, no content would be prepended on
+ // Windows. (Presumably, the upstream build process is
+ // running on a Unix-like system or the path separators are
+ // being normalized somewhere else.)
+ if (
+ filePath.endsWith(path.join('vs', 'code', 'electron-sandbox', 'workbench', 'workbench.js')) ||
+ // TODO: @justchen https://github.com/microsoft/vscode/issues/213332 make sure to remove when we use window.open on desktop
+ filePath.endsWith(path.join('vs', 'workbench', 'contrib', 'issue', 'electron-sandbox', 'issueReporter.js')) ||
+ filePath.endsWith(path.join('vs', 'code', 'electron-sandbox', 'processExplorer', 'processExplorer.js'))) {
+ return async (content) => {
+ const bootstrapWindowContent = await fs.promises.readFile(path.join(root, 'out-build', 'bootstrap-window.js'), 'utf-8');
+ return `${bootstrapWindowContent}\n${content}`; // prepend bootstrap-window.js content to entry points that are Electron windows
+ };
+ }
+ // --- End Positron ---
+ return undefined;
+ },
+ skipTSBoilerplateRemoval: entryPoint =>
+ entryPoint === 'vs/code/electron-sandbox/workbench/workbench' ||
+ // TODO: @justchen https://github.com/microsoft/vscode/issues/213332 make sure to remove when we use window.open on desktop
+ entryPoint === 'vs/workbench/contrib/issue/electron-sandbox/issueReporter' ||
+ entryPoint === 'vs/code/electron-sandbox/processExplorer/processExplorer',
+ }
}
)
));
-gulp.task(optimizeVSCodeTask);
+gulp.task(bundleVSCodeTask);
const sourceMappingURLBase = `https://main.vscode-cdn.net/sourcemaps/${commit}`;
const minifyVSCodeTask = task.define('minify-vscode', task.series(
- optimizeVSCodeTask,
+ bundleVSCodeTask,
util.rimraf('out-vscode-min'),
optimize.minifyTask('out-vscode', `${sourceMappingURLBase}/core`)
));
@@ -309,7 +257,7 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op
'vs/workbench/workbench.desktop.main.js',
'vs/workbench/workbench.desktop.main.css',
'vs/workbench/api/node/extensionHostProcess.js',
- isESM() ? 'vs/code/electron-sandbox/workbench/workbench.esm.html' : 'vs/code/electron-sandbox/workbench/workbench.html',
+ 'vs/code/electron-sandbox/workbench/workbench.html',
'vs/code/electron-sandbox/workbench/workbench.js'
]);
@@ -350,17 +298,11 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op
version += '-' + quality;
}
- if (isESM() && typeof quality === 'string' && quality !== 'exploration') {
- // TODO@esm remove this safeguard
- throw new Error('Refuse to build ESM on quality other than exploration');
- }
-
const name = product.nameShort;
- const packageJsonUpdates = { name, version, ...(isESM(`Setting 'type: module' and 'main: out/main.js' in top level package.json`) ? { type: 'module', main: 'out/main.js' } : {}) }; // TODO@esm this should be configured in the top level package.json
+ const packageJsonUpdates = { name, version };
- // for linux url handling
if (platform === 'linux') {
- packageJsonUpdates.desktopName = `${product.applicationName}-url-handler.desktop`;
+ packageJsonUpdates.desktopName = `${product.applicationName}.desktop`;
}
let packageJsonContents;
@@ -388,6 +330,10 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op
// --- Start Positron ---
+ // External modules (React, etc.)
+ const externalModules = gulp.src('out-build/bootstrap-external.js').pipe(rename('out/bootstrap-external.js'));
+ const moduleSources = gulp.src('src/esm-package-dependencies/**').pipe(rename(function (p) { p.dirname = path.join('out', 'esm-package-dependencies', p.dirname) }));
+
// Positron API
const positronApi = gulp.src('src/positron-dts/positron.d.ts')
.pipe(rename('out/positron-dts/positron.d.ts'));
@@ -424,18 +370,16 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op
const jsFilter = util.filter(data => !data.isDirectory() && /\.js$/.test(data.path));
const root = path.resolve(path.join(__dirname, '..'));
const productionDependencies = getProductionDependencies(root);
- const dependenciesSrc = productionDependencies.map(d => path.relative(root, d.path)).map(d => [`${d}/**`, `!${d}/**/{test,tests}/**`, `!**/*.mk`]).flat();
+ const dependenciesSrc = productionDependencies.map(d => path.relative(root, d)).map(d => [`${d}/**`, `!${d}/**/{test,tests}/**`, `!**/*.mk`]).flat();
- let deps = gulp.src(dependenciesSrc, { base: '.', dot: true })
+ const deps = gulp.src(dependenciesSrc, { base: '.', dot: true })
.pipe(filter(['**', `!**/${config.version}/**`, '!**/bin/darwin-arm64-87/**', '!**/package-lock.json', '!**/yarn.lock', '!**/*.js.map']))
.pipe(util.cleanNodeModules(path.join(__dirname, '.moduleignore')))
.pipe(util.cleanNodeModules(path.join(__dirname, `.moduleignore.${process.platform}`)))
.pipe(jsFilter)
.pipe(util.rewriteSourceMappingURL(sourceMappingURLBase))
- .pipe(jsFilter.restore);
-
- if (!isESM('ASAR disabled in VS Code builds')) { // TODO@esm: ASAR disabled in ESM
- deps = deps.pipe(createAsar(path.join(process.cwd(), 'node_modules'), [
+ .pipe(jsFilter.restore)
+ .pipe(createAsar(path.join(process.cwd(), 'node_modules'), [
'**/*.node',
'**/@vscode/ripgrep/bin/*',
'**/node-pty/build/Release/*',
@@ -446,8 +390,10 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op
'**/@vscode/vsce-sign/bin/*',
], [
'**/*.mk',
+ '!node_modules/vsda/**' // stay compatible with extensions that depend on us shipping `vsda` into ASAR
+ ], [
+ 'node_modules/vsda/**' // retain copy of `vsda` in node_modules for internal use
], 'node_modules.asar'));
- }
let all = es.merge(
packageJsonStream,
@@ -457,6 +403,8 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op
// --- Start Positron ---
positronApi,
quarto,
+ externalModules,
+ moduleSources,
// --- End Positron ---
telemetry,
sources,
@@ -568,7 +516,7 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op
}
result = inlineMeta(result, {
- targetPaths: commonJSEntryPoints,
+ targetPaths: bootstrapEntryPoints,
packageJsonFn: () => packageJsonContents,
productJsonFn: () => productJsonContents
});
@@ -587,7 +535,7 @@ function updateIcon(cwd, executablePath, icon) {
function patchWin32DependenciesTask(cwd) {
// --- End Positron ---
return async () => {
- const deps = await glob('**/*.node', { cwd });
+ const deps = await glob('**/*.node', { cwd, ignore: 'extensions/node_modules/@parcel/watcher/**' });
const packageJson = JSON.parse(await fs.promises.readFile(path.join(cwd, 'resources', 'app', 'package.json'), 'utf8'));
const product = JSON.parse(await fs.promises.readFile(path.join(cwd, 'resources', 'app', 'product.json'), 'utf8'));
const baseVersion = packageJson.version.replace(/-.*$/, '');
@@ -667,7 +615,7 @@ BUILD_TARGETS.forEach(buildTarget => {
compileBuildTask,
compileExtensionsBuildTask,
compileExtensionMediaBuildTask,
- minified ? minifyVSCodeTask : optimizeVSCodeTask,
+ minified ? minifyVSCodeTask : bundleVSCodeTask,
vscodeTaskCI
));
gulp.task(vscodeTask);
diff --git a/build/gulpfile.vscode.linux.js b/build/gulpfile.vscode.linux.js
index a65e0489528..e3699586408 100644
--- a/build/gulpfile.vscode.linux.js
+++ b/build/gulpfile.vscode.linux.js
@@ -147,7 +147,7 @@ function buildDebPackage(arch) {
return async () => {
await exec(`chmod 755 ${product.applicationName}-${debArch}/DEBIAN/postinst ${product.applicationName}-${debArch}/DEBIAN/prerm ${product.applicationName}-${debArch}/DEBIAN/postrm`, { cwd });
await exec('mkdir -p deb', { cwd });
- await exec(`fakeroot dpkg-deb -b ${product.applicationName}-${debArch} deb`, { cwd });
+ await exec(`fakeroot dpkg-deb -Zxz -b ${product.applicationName}-${debArch} deb`, { cwd });
};
}
@@ -171,6 +171,7 @@ function getRpmPackageArch(arch) {
function prepareRpmPackage(arch) {
const binaryDir = '../VSCode-linux-' + arch;
const rpmArch = getRpmPackageArch(arch);
+ const stripBinary = process.env['STRIP'] ?? '/usr/bin/strip';
return function () {
const desktop = gulp.src('resources/linux/code.desktop', { base: '.' })
@@ -239,6 +240,7 @@ function prepareRpmPackage(arch) {
.pipe(replace('@@QUALITY@@', product.quality || '@@QUALITY@@'))
.pipe(replace('@@UPDATEURL@@', product.updateUrl || '@@UPDATEURL@@'))
.pipe(replace('@@DEPENDENCIES@@', dependencies.join(', ')))
+ .pipe(replace('@@STRIP@@', stripBinary))
.pipe(rename('SPECS/' + product.applicationName + '.spec'))
.pipe(es.through(function (f) { that.emit('data', f); }, function () { that.emit('end'); }));
}
diff --git a/build/gulpfile.vscode.web.js b/build/gulpfile.vscode.web.js
index dab6f93bffd..f918bfba1fa 100644
--- a/build/gulpfile.vscode.web.js
+++ b/build/gulpfile.vscode.web.js
@@ -21,7 +21,7 @@ const vfs = require('vinyl-fs');
const packageJson = require('../package.json');
const { compileBuildTask } = require('./gulpfile.compile');
const extensions = require('./lib/extensions');
-const { isESM } = require('./lib/esm');
+const VinylFile = require('vinyl');
// --- Start Positron ---
const { positronBuildNumber } = require('./utils');
@@ -39,7 +39,7 @@ const version = (quality && quality !== 'stable') ? `${packageJson.version}-${qu
const positronVersion = (quality && quality !== 'stable') ? `${product.positronVersion}-${quality}` : product.positronVersion;
// --- End Positron ---
-const vscodeWebResourceIncludes = isESM() ? [
+const vscodeWebResourceIncludes = [
// NLS
'out-build/nls.messages.js',
@@ -66,35 +66,7 @@ const vscodeWebResourceIncludes = isESM() ? [
'out-build/vs/editor/common/languages/highlights/*.scm',
// Extension Host Worker
- 'out-build/vs/workbench/services/extensions/worker/webWorkerExtensionHostIframe.esm.html',
-] : [
-
- // Workbench
- 'out-build/vs/{base,platform,editor,workbench}/**/*.{svg,png,jpg,mp3}',
- 'out-build/vs/code/browser/workbench/*.html',
- 'out-build/vs/base/browser/ui/codicons/codicon/**/*.ttf',
- 'out-build/vs/**/markdown.css',
-
- // NLS
- 'out-build/nls.messages.js',
-
- // Webview
- 'out-build/vs/workbench/contrib/webview/browser/pre/*.js',
- 'out-build/vs/workbench/contrib/webview/browser/pre/*.html',
-
- // --- Start Positron ---
- // Positron Help
- 'out-build/vs/workbench/contrib/positronHelp/browser/resources/help.html',
- // --- End Positron ---
-
- // Extension Worker
'out-build/vs/workbench/services/extensions/worker/webWorkerExtensionHostIframe.html',
-
- // Tree Sitter highlights
- 'out-build/vs/editor/common/languages/highlights/*.scm',
-
- // Web node paths (needed for integration tests)
- 'out-build/vs/webPackagePaths.js',
];
exports.vscodeWebResourceIncludes = vscodeWebResourceIncludes;
@@ -104,18 +76,17 @@ const vscodeWebResources = [
...vscodeWebResourceIncludes,
// Excludes
- '!out-build/vs/**/{node,electron-sandbox,electron-main}/**',
+ '!out-build/vs/**/{node,electron-sandbox,electron-main,electron-utility}/**',
'!out-build/vs/editor/standalone/**',
'!out-build/vs/workbench/**/*-tb.png',
'!out-build/vs/code/**/*-dev.html',
- '!out-build/vs/code/**/*-dev.esm.html',
'!**/test/**'
];
const buildfile = require('./buildfile');
-const vscodeWebEntryPoints = isESM() ? [
- buildfile.base,
+const vscodeWebEntryPoints = [
+ buildfile.workerEditor,
buildfile.workerExtensionHost,
buildfile.workerNotebook,
buildfile.workerLanguageDetection,
@@ -123,110 +94,47 @@ const vscodeWebEntryPoints = isESM() ? [
buildfile.workerOutputLinks,
buildfile.workerBackgroundTokenization,
buildfile.keyboardMaps,
- buildfile.workbenchWeb()
-].flat() : [
- buildfile.entrypoint('vs/workbench/workbench.web.main'),
- buildfile.base,
- buildfile.workerExtensionHost,
- buildfile.workerNotebook,
- buildfile.workerLanguageDetection,
- buildfile.workerLocalFileSearch,
- buildfile.keyboardMaps,
- buildfile.workbenchWeb()
+ buildfile.workbenchWeb,
+ buildfile.entrypoint('vs/workbench/workbench.web.main.internal') // TODO@esm remove line when we stop supporting web-amd-esm-bridge
].flat();
/**
+ * @param extensionsRoot {string} The location where extension will be read from
* @param {object} product The parsed product.json file contents
*/
-const createVSCodeWebProductConfigurationPatcher = (product) => {
- /**
- * @param content {string} The contents of the file
- * @param path {string} The absolute file path, always using `/`, even on Windows
- */
- const result = (content, path) => {
- // (1) Patch product configuration
+const createVSCodeWebFileContentMapper = (extensionsRoot, product) => {
+ return path => {
if (path.endsWith('vs/platform/product/common/product.js')) {
- const productConfiguration = JSON.stringify({
- ...product,
- // --- Start Positron ---
- positronVersion,
- positronBuildNumber,
- // --- End Positron ---
- version,
- commit,
- date: readISODate('out-build')
- });
- return content.replace('/*BUILD->INSERT_PRODUCT_CONFIGURATION*/', () => productConfiguration.substr(1, productConfiguration.length - 2) /* without { and }*/);
+ return content => {
+ const productConfiguration = JSON.stringify({
+ ...product,
+ version,
+ commit,
+ date: readISODate('out-build')
+ });
+ return content.replace('/*BUILD->INSERT_PRODUCT_CONFIGURATION*/', () => productConfiguration.substr(1, productConfiguration.length - 2) /* without { and }*/);
+ };
+ } else if (path.endsWith('vs/workbench/services/extensionManagement/browser/builtinExtensionsScannerService.js')) {
+ return content => {
+ const builtinExtensions = JSON.stringify(extensions.scanBuiltinExtensions(extensionsRoot));
+ return content.replace('/*BUILD->INSERT_BUILTIN_EXTENSIONS*/', () => builtinExtensions.substr(1, builtinExtensions.length - 2) /* without [ and ]*/);
+ };
}
- return content;
- };
- return result;
-};
-
-/**
- * @param extensionsRoot {string} The location where extension will be read from
- */
-const createVSCodeWebBuiltinExtensionsPatcher = (extensionsRoot) => {
- /**
- * @param content {string} The contents of the file
- * @param path {string} The absolute file path, always using `/`, even on Windows
- */
- const result = (content, path) => {
- // (2) Patch builtin extensions
- if (path.endsWith('vs/workbench/services/extensionManagement/browser/builtinExtensionsScannerService.js')) {
- const builtinExtensions = JSON.stringify(extensions.scanBuiltinExtensions(extensionsRoot));
- return content.replace('/*BUILD->INSERT_BUILTIN_EXTENSIONS*/', () => builtinExtensions.substr(1, builtinExtensions.length - 2) /* without [ and ]*/);
- }
-
- return content;
- };
- return result;
-};
-
-/**
- * @param patchers {((content:string, path: string)=>string)[]}
- */
-const combineContentPatchers = (...patchers) => {
- /**
- * @param content {string} The contents of the file
- * @param path {string} The absolute file path, always using `/`, even on Windows
- */
- const result = (content, path) => {
- for (const patcher of patchers) {
- content = patcher(content, path);
- }
- return content;
+ return undefined;
};
- return result;
-};
-
-/**
- * @param extensionsRoot {string} The location where extension will be read from
- * @param {object} product The parsed product.json file contents
- */
-const createVSCodeWebFileContentMapper = (extensionsRoot, product) => {
- return combineContentPatchers(
- createVSCodeWebProductConfigurationPatcher(product),
- createVSCodeWebBuiltinExtensionsPatcher(extensionsRoot)
- );
};
exports.createVSCodeWebFileContentMapper = createVSCodeWebFileContentMapper;
-const optimizeVSCodeWebTask = task.define('optimize-vscode-web', task.series(
+const bundleVSCodeWebTask = task.define('bundle-vscode-web', task.series(
util.rimraf('out-vscode-web'),
- optimize.optimizeTask(
+ optimize.bundleTask(
{
out: 'out-vscode-web',
- amd: {
+ esm: {
src: 'out-build',
- entryPoints: vscodeWebEntryPoints.flat(),
- otherSources: [],
+ entryPoints: vscodeWebEntryPoints,
resources: vscodeWebResources,
- loaderConfig: optimize.loaderConfig(),
- externalLoaderInfo: util.createExternalLoaderConfig(product.webEndpointUrl, commit, quality),
- inlineAmdImages: true,
- bundleInfo: undefined,
fileContentMapper: createVSCodeWebFileContentMapper('.build/web/extensions', product)
}
}
@@ -234,7 +142,7 @@ const optimizeVSCodeWebTask = task.define('optimize-vscode-web', task.series(
));
const minifyVSCodeWebTask = task.define('minify-vscode-web', task.series(
- optimizeVSCodeWebTask,
+ bundleVSCodeWebTask,
util.rimraf('out-vscode-web-min'),
optimize.minifyTask('out-vscode-web', `https://main.vscode-cdn.net/sourcemaps/${commit}/core`)
));
@@ -251,8 +159,21 @@ function packageTask(sourceFolderName, destinationFolderName) {
const extensions = gulp.src('.build/web/extensions/**', { base: '.build/web', dot: true });
- const sources = es.merge(src, extensions)
- .pipe(filter(['**', '!**/*.js.map'], { dot: true }));
+ const loader = gulp.src('build/loader.min', { base: 'build', dot: true }).pipe(rename('out/vs/loader.js')); // TODO@esm remove line when we stop supporting web-amd-esm-bridge
+
+ const sources = es.merge(src, extensions, loader)
+ .pipe(filter(['**', '!**/*.js.map'], { dot: true }))
+ // TODO@esm remove me once we stop supporting our web-esm-bridge
+ .pipe(es.through(function (file) {
+ if (file.relative === 'out/vs/workbench/workbench.web.main.internal.css') {
+ this.emit('data', new VinylFile({
+ contents: file.contents,
+ path: file.path.replace('workbench.web.main.internal.css', 'workbench.web.main.css'),
+ base: file.base
+ }));
+ }
+ this.emit('data', file);
+ }));
const name = product.nameShort;
const packageJsonStream = gulp.src(['remote/web/package.json'], { base: 'remote/web' })
@@ -261,7 +182,7 @@ function packageTask(sourceFolderName, destinationFolderName) {
const license = gulp.src(['remote/LICENSE'], { base: 'remote', allowEmpty: true });
const productionDependencies = getProductionDependencies(WEB_FOLDER);
- const dependenciesSrc = productionDependencies.map(d => path.relative(REPO_ROOT, d.path)).map(d => [`${d}/**`, `!${d}/**/{test,tests}/**`, `!${d}/.bin/**`]).flat();
+ const dependenciesSrc = productionDependencies.map(d => path.relative(REPO_ROOT, d)).map(d => [`${d}/**`, `!${d}/**/{test,tests}/**`, `!${d}/.bin/**`]).flat();
const deps = gulp.src(dependenciesSrc, { base: 'remote/web', dot: true })
.pipe(filter(['**', '!**/package-lock.json']))
@@ -310,7 +231,7 @@ const dashed = (/** @type {string} */ str) => (str ? `-${str}` : ``);
const vscodeWebTaskCI = task.define(`vscode-web${dashed(minified)}-ci`, task.series(
compileWebExtensionsBuildTask,
- minified ? minifyVSCodeWebTask : optimizeVSCodeWebTask,
+ minified ? minifyVSCodeWebTask : bundleVSCodeWebTask,
util.rimraf(path.join(BUILD_ROOT, destinationFolderName)),
packageTask(sourceFolderName, destinationFolderName)
));
diff --git a/build/gulpfile.vscode.win32.js b/build/gulpfile.vscode.win32.js
index d678fab96cd..0c27f44dd24 100644
--- a/build/gulpfile.vscode.win32.js
+++ b/build/gulpfile.vscode.win32.js
@@ -16,7 +16,6 @@ const pkg = require('../package.json');
const product = require('../product.json');
const vfs = require('vinyl-fs');
const rcedit = require('rcedit');
-const mkdirp = require('mkdirp');
const repoPath = path.dirname(__dirname);
const buildPath = (/** @type {string} */ arch) => path.join(path.dirname(repoPath), `p${arch}`);
@@ -77,7 +76,7 @@ function buildWin32Setup(arch, target) {
const sourcePath = buildPath(arch);
const outputPath = setupDir(arch, target);
- mkdirp.sync(outputPath);
+ fs.mkdirSync(outputPath, { recursive: true });
const originalProductJsonPath = path.join(sourcePath, 'resources/app/product.json');
const productJsonPath = path.join(outputPath, 'product.json');
diff --git a/build/hygiene.js b/build/hygiene.js
index b2de77cebd0..949e5c4ae7f 100644
--- a/build/hygiene.js
+++ b/build/hygiene.js
@@ -42,7 +42,7 @@ const positCopyrightHeaderLinesHash = [
// --- Start Positron ---
function hygiene(some, linting = true, secrets = true) {
// --- End Positron ---
- const gulpeslint = require('gulp-eslint');
+ const eslint = require('./gulp-eslint');
const gulpstylelint = require('./stylelint');
const formatter = require('./lib/formatter');
// --- Start Positron ---
@@ -81,6 +81,7 @@ function hygiene(some, linting = true, secrets = true) {
}
}
// Please do not add symbols that resemble ASCII letters!
+ // eslint-disable-next-line no-misleading-character-class
const m = /([^\t\n\r\x20-\x7E⊃⊇✔︎✓🎯⚠️🛑🔴🚗🚙🚕🎉✨❗⇧⌥⌘×÷¦⋯…↑↓→→←↔⟷·•●◆▼⟪⟫┌└├⏎↩√φ]+)/g.exec(line);
if (m) {
console.error(
@@ -206,6 +207,7 @@ function hygiene(some, linting = true, secrets = true) {
const productJsonFilter = filter('product.json', { restore: true });
const snapshotFilter = filter(['**', '!**/*.snap', '!**/*.snap.actual']);
+ const yarnLockFilter = filter(['**', '!**/yarn.lock']);
const unicodeFilterStream = filter(unicodeFilter, { restore: true });
const result = input
@@ -214,6 +216,7 @@ function hygiene(some, linting = true, secrets = true) {
// --- Start Positron ---
.pipe(testDataFiles)
// --- End Positron ---
+ .pipe(yarnLockFilter)
.pipe(productJsonFilter)
.pipe(process.env['BUILD_SOURCEVERSION'] ? es.through() : productJson)
.pipe(productJsonFilter.restore)
@@ -234,13 +237,7 @@ function hygiene(some, linting = true, secrets = true) {
result
.pipe(filter(eslintFilter))
.pipe(
- gulpeslint({
- configFile: '.eslintrc.json'
- })
- )
- .pipe(gulpeslint.formatEach('compact'))
- .pipe(
- gulpeslint.results((results) => {
+ eslint((results) => {
errorCount += results.warningCount;
errorCount += results.errorCount;
})
diff --git a/build/lib/asar.js b/build/lib/asar.js
index 07b39bf79ff..19285ef7100 100644
--- a/build/lib/asar.js
+++ b/build/lib/asar.js
@@ -11,7 +11,7 @@ const pickle = require('chromium-pickle-js');
const Filesystem = require('asar/lib/filesystem');
const VinylFile = require("vinyl");
const minimatch = require("minimatch");
-function createAsar(folderPath, unpackGlobs, skipGlobs, destFilename) {
+function createAsar(folderPath, unpackGlobs, skipGlobs, duplicateGlobs, destFilename) {
const shouldUnpackFile = (file) => {
for (let i = 0; i < unpackGlobs.length; i++) {
if (minimatch(file.relative, unpackGlobs[i])) {
@@ -28,6 +28,16 @@ function createAsar(folderPath, unpackGlobs, skipGlobs, destFilename) {
}
return false;
};
+ // Files that should be duplicated between
+ // node_modules.asar and node_modules
+ const shouldDuplicateFile = (file) => {
+ for (const duplicateGlob of duplicateGlobs) {
+ if (minimatch(file.relative, duplicateGlob)) {
+ return true;
+ }
+ }
+ return false;
+ };
const filesystem = new Filesystem(folderPath);
const out = [];
// Keep track of pending inserts
@@ -73,8 +83,22 @@ function createAsar(folderPath, unpackGlobs, skipGlobs, destFilename) {
throw new Error(`unknown item in stream!`);
}
if (shouldSkipFile(file)) {
+ this.queue(new VinylFile({
+ base: '.',
+ path: file.path,
+ stat: file.stat,
+ contents: file.contents
+ }));
return;
}
+ if (shouldDuplicateFile(file)) {
+ this.queue(new VinylFile({
+ base: '.',
+ path: file.path,
+ stat: file.stat,
+ contents: file.contents
+ }));
+ }
const shouldUnpack = shouldUnpackFile(file);
insertFile(file.relative, { size: file.contents.length, mode: file.stat.mode }, shouldUnpack);
if (shouldUnpack) {
diff --git a/build/lib/asar.ts b/build/lib/asar.ts
index 7dc1dd3b2e6..0b225ab1624 100644
--- a/build/lib/asar.ts
+++ b/build/lib/asar.ts
@@ -17,7 +17,7 @@ declare class AsarFilesystem {
insertFile(path: string, shouldUnpack: boolean, file: { stat: { size: number; mode: number } }, options: {}): Promise;
}
-export function createAsar(folderPath: string, unpackGlobs: string[], skipGlobs: string[], destFilename: string): NodeJS.ReadWriteStream {
+export function createAsar(folderPath: string, unpackGlobs: string[], skipGlobs: string[], duplicateGlobs: string[], destFilename: string): NodeJS.ReadWriteStream {
const shouldUnpackFile = (file: VinylFile): boolean => {
for (let i = 0; i < unpackGlobs.length; i++) {
@@ -37,6 +37,17 @@ export function createAsar(folderPath: string, unpackGlobs: string[], skipGlobs:
return false;
};
+ // Files that should be duplicated between
+ // node_modules.asar and node_modules
+ const shouldDuplicateFile = (file: VinylFile): boolean => {
+ for (const duplicateGlob of duplicateGlobs) {
+ if (minimatch(file.relative, duplicateGlob)) {
+ return true;
+ }
+ }
+ return false;
+ };
+
const filesystem = new Filesystem(folderPath);
const out: Buffer[] = [];
@@ -88,8 +99,22 @@ export function createAsar(folderPath: string, unpackGlobs: string[], skipGlobs:
throw new Error(`unknown item in stream!`);
}
if (shouldSkipFile(file)) {
+ this.queue(new VinylFile({
+ base: '.',
+ path: file.path,
+ stat: file.stat,
+ contents: file.contents
+ }));
return;
}
+ if (shouldDuplicateFile(file)) {
+ this.queue(new VinylFile({
+ base: '.',
+ path: file.path,
+ stat: file.stat,
+ contents: file.contents
+ }));
+ }
const shouldUnpack = shouldUnpackFile(file);
insertFile(file.relative, { size: file.contents.length, mode: file.stat.mode }, shouldUnpack);
diff --git a/build/lib/builtInExtensions.js b/build/lib/builtInExtensions.js
index bf3a3482ae5..6e1f5cf1684 100644
--- a/build/lib/builtInExtensions.js
+++ b/build/lib/builtInExtensions.js
@@ -16,7 +16,6 @@ const vfs = require("vinyl-fs");
const ext = require("./extensions");
const fancyLog = require("fancy-log");
const ansiColors = require("ansi-colors");
-const mkdirp = require('mkdirp');
const root = path.dirname(path.dirname(__dirname));
const productjson = JSON.parse(fs.readFileSync(path.join(__dirname, '../../product.json'), 'utf8'));
const builtInExtensions = productjson.builtInExtensions || [];
@@ -116,7 +115,7 @@ function readControlFile() {
}
}
function writeControlFile(control) {
- mkdirp.sync(path.dirname(controlFilePath));
+ fs.mkdirSync(path.dirname(controlFilePath), { recursive: true });
fs.writeFileSync(controlFilePath, JSON.stringify(control, null, 2));
}
function getBuiltInExtensions() {
diff --git a/build/lib/builtInExtensions.ts b/build/lib/builtInExtensions.ts
index 04d6fb6d65c..cbe6f6fca27 100644
--- a/build/lib/builtInExtensions.ts
+++ b/build/lib/builtInExtensions.ts
@@ -15,8 +15,6 @@ import * as fancyLog from 'fancy-log';
import * as ansiColors from 'ansi-colors';
import { Stream } from 'stream';
-const mkdirp = require('mkdirp');
-
export interface IExtensionDefinition {
name: string;
version: string;
@@ -162,7 +160,7 @@ function readControlFile(): IControlFile {
}
function writeControlFile(control: IControlFile): void {
- mkdirp.sync(path.dirname(controlFilePath));
+ fs.mkdirSync(path.dirname(controlFilePath), { recursive: true });
fs.writeFileSync(controlFilePath, JSON.stringify(control, null, 2));
}
diff --git a/build/lib/builtInExtensionsCG.js b/build/lib/builtInExtensionsCG.js
index 30b6791b3a0..6a1e5ea539e 100644
--- a/build/lib/builtInExtensionsCG.js
+++ b/build/lib/builtInExtensionsCG.js
@@ -15,7 +15,7 @@ const builtInExtensions = productjson.builtInExtensions || [];
const webBuiltInExtensions = productjson.webBuiltInExtensions || [];
const token = process.env['GITHUB_TOKEN'];
const contentBasePath = 'raw.githubusercontent.com';
-const contentFileNames = ['package.json', 'package-lock.json', 'yarn.lock'];
+const contentFileNames = ['package.json', 'package-lock.json'];
async function downloadExtensionDetails(extension) {
const extensionLabel = `${extension.name}@${extension.version}`;
const repository = url.parse(extension.repo).path.substr(1);
@@ -58,9 +58,8 @@ async function downloadExtensionDetails(extension) {
if (!results.find(r => r.fileName === 'package.json')?.body) {
// throw new Error(`The "package.json" file could not be found for the built-in extension - ${extensionLabel}`);
}
- if (!results.find(r => r.fileName === 'package-lock.json')?.body &&
- !results.find(r => r.fileName === 'yarn.lock')?.body) {
- // throw new Error(`The "package-lock.json"/"yarn.lock" could not be found for the built-in extension - ${extensionLabel}`);
+ if (!results.find(r => r.fileName === 'package-lock.json')?.body) {
+ // throw new Error(`The "package-lock.json" could not be found for the built-in extension - ${extensionLabel}`);
}
}
async function main() {
diff --git a/build/lib/builtInExtensionsCG.ts b/build/lib/builtInExtensionsCG.ts
index 62d09498221..9d11dea3dca 100644
--- a/build/lib/builtInExtensionsCG.ts
+++ b/build/lib/builtInExtensionsCG.ts
@@ -17,7 +17,7 @@ const webBuiltInExtensions = productjson.webBuiltInExten
const token = process.env['GITHUB_TOKEN'];
const contentBasePath = 'raw.githubusercontent.com';
-const contentFileNames = ['package.json', 'package-lock.json', 'yarn.lock'];
+const contentFileNames = ['package.json', 'package-lock.json'];
async function downloadExtensionDetails(extension: IExtensionDefinition): Promise {
const extensionLabel = `${extension.name}@${extension.version}`;
@@ -61,9 +61,8 @@ async function downloadExtensionDetails(extension: IExtensionDefinition): Promis
if (!results.find(r => r.fileName === 'package.json')?.body) {
// throw new Error(`The "package.json" file could not be found for the built-in extension - ${extensionLabel}`);
}
- if (!results.find(r => r.fileName === 'package-lock.json')?.body &&
- !results.find(r => r.fileName === 'yarn.lock')?.body) {
- // throw new Error(`The "package-lock.json"/"yarn.lock" could not be found for the built-in extension - ${extensionLabel}`);
+ if (!results.find(r => r.fileName === 'package-lock.json')?.body) {
+ // throw new Error(`The "package-lock.json" could not be found for the built-in extension - ${extensionLabel}`);
}
}
diff --git a/build/lib/bundle.ts b/build/lib/bundle.ts
index 6e3f96a5062..58995b7d5d1 100644
--- a/build/lib/bundle.ts
+++ b/build/lib/bundle.ts
@@ -51,9 +51,9 @@ export interface IEntryPoint {
name: string;
include?: string[];
exclude?: string[];
+ /** @deprecated unsupported by ESM */
prepend?: IExtraFile[];
dest?: string;
- target?: 'amd' | 'esm';
}
interface IEntryPointMap {
diff --git a/build/lib/compilation.js b/build/lib/compilation.js
index aa77a32c04d..03b0f6d6829 100644
--- a/build/lib/compilation.js
+++ b/build/lib/compilation.js
@@ -19,11 +19,11 @@ const util = require("./util");
const fancyLog = require("fancy-log");
const ansiColors = require("ansi-colors");
const os = require("os");
-const ts = require("typescript");
const File = require("vinyl");
const task = require("./task");
const index_1 = require("./mangle/index");
const postcss_1 = require("./postcss");
+const ts = require("typescript");
const watch = require('./watch');
// --- gulp-tsb: compile and transpile --------------------------------
const reporter = (0, reporter_1.createReporter)();
@@ -52,7 +52,7 @@ function createCompile(src, { build, emitError, transpileOnly, preserveEnglish }
const compilation = tsb.create(projectPath, overrideOptions, {
verbose: false,
transpileOnly: Boolean(transpileOnly),
- transpileWithSwc: typeof transpileOnly !== 'boolean' && transpileOnly.swc
+ transpileWithSwc: typeof transpileOnly !== 'boolean' && transpileOnly.esbuild
}, err => reporter(err));
function pipeline(token) {
const bom = require('gulp-bom');
@@ -91,9 +91,9 @@ function createCompile(src, { build, emitError, transpileOnly, preserveEnglish }
pipeline.projectPath = projectPath;
return pipeline;
}
-function transpileTask(src, out, swc) {
+function transpileTask(src, out, esbuild) {
const task = () => {
- const transpile = createCompile(src, { build: false, emitError: true, transpileOnly: { swc }, preserveEnglish: false });
+ const transpile = createCompile(src, { build: false, emitError: true, transpileOnly: { esbuild }, preserveEnglish: false });
const srcPipe = gulp.src(`${src}/**`, { base: `${src}` });
return srcPipe
.pipe(transpile())
diff --git a/build/lib/compilation.ts b/build/lib/compilation.ts
index 0e015a8ce9d..72c18860844 100644
--- a/build/lib/compilation.ts
+++ b/build/lib/compilation.ts
@@ -14,12 +14,12 @@ import * as util from './util';
import * as fancyLog from 'fancy-log';
import * as ansiColors from 'ansi-colors';
import * as os from 'os';
-import ts = require('typescript');
import * as File from 'vinyl';
import * as task from './task';
import { Mangler } from './mangle/index';
import { RawSourceMap } from 'source-map';
import { gulpPostcss } from './postcss';
+import ts = require('typescript');
const watch = require('./watch');
@@ -45,7 +45,7 @@ function getTypeScriptCompilerOptions(src: string): ts.CompilerOptions {
interface ICompileTaskOptions {
readonly build: boolean;
readonly emitError: boolean;
- readonly transpileOnly: boolean | { swc: boolean };
+ readonly transpileOnly: boolean | { esbuild: boolean };
readonly preserveEnglish: boolean;
}
@@ -63,7 +63,7 @@ function createCompile(src: string, { build, emitError, transpileOnly, preserveE
const compilation = tsb.create(projectPath, overrideOptions, {
verbose: false,
transpileOnly: Boolean(transpileOnly),
- transpileWithSwc: typeof transpileOnly !== 'boolean' && transpileOnly.swc
+ transpileWithSwc: typeof transpileOnly !== 'boolean' && transpileOnly.esbuild
}, err => reporter(err));
function pipeline(token?: util.ICancellationToken) {
@@ -108,11 +108,11 @@ function createCompile(src: string, { build, emitError, transpileOnly, preserveE
return pipeline;
}
-export function transpileTask(src: string, out: string, swc: 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: { swc }, preserveEnglish: false });
+ const transpile = createCompile(src, { build: false, emitError: true, transpileOnly: { esbuild }, preserveEnglish: false });
const srcPipe = gulp.src(`${src}/**`, { base: `${src}` });
return srcPipe
diff --git a/build/lib/dependencies.js b/build/lib/dependencies.js
index 1f2dd75d68c..9bcd1204eab 100644
--- a/build/lib/dependencies.js
+++ b/build/lib/dependencies.js
@@ -8,64 +8,43 @@ exports.getProductionDependencies = getProductionDependencies;
const fs = require("fs");
const path = require("path");
const cp = require("child_process");
-const parseSemver = require('parse-semver');
const root = fs.realpathSync(path.dirname(path.dirname(__dirname)));
-function asYarnDependency(prefix, tree) {
- let parseResult;
+function getNpmProductionDependencies(folder) {
+ let raw;
try {
- parseResult = parseSemver(tree.name);
+ raw = cp.execSync('npm ls --all --omit=dev --parseable', { cwd: folder, encoding: 'utf8', env: { ...process.env, NODE_ENV: 'production' }, stdio: [null, null, null] });
}
catch (err) {
- err.message += `: ${tree.name}`;
- console.warn(`Could not parse semver: ${tree.name}`);
- return null;
- }
- // not an actual dependency in disk
- if (parseResult.version !== parseResult.range) {
- return null;
- }
- const name = parseResult.name;
- const version = parseResult.version;
- const dependencyPath = path.join(prefix, name);
- const children = [];
- for (const child of (tree.children || [])) {
- const dep = asYarnDependency(path.join(prefix, name, 'node_modules'), child);
- if (dep) {
- children.push(dep);
+ const regex = /^npm ERR! .*$/gm;
+ let match;
+ while (match = regex.exec(err.message)) {
+ if (/ELSPROBLEMS/.test(match[0])) {
+ continue;
+ }
+ else if (/invalid: xterm/.test(match[0])) {
+ continue;
+ }
+ else if (/A complete log of this run/.test(match[0])) {
+ continue;
+ }
+ else {
+ throw err;
+ }
}
+ raw = err.stdout;
}
- return { name, version, path: dependencyPath, children };
-}
-function getYarnProductionDependencies(folderPath) {
- const raw = cp.execSync('yarn list --json', { cwd: folderPath, encoding: 'utf8', env: { ...process.env, NODE_ENV: 'production' }, stdio: [null, null, 'inherit'] });
- const match = /^{"type":"tree".*$/m.exec(raw);
- if (!match || match.length !== 1) {
- throw new Error('Could not parse result of `yarn list --json`');
- }
- const trees = JSON.parse(match[0]).data.trees;
- return trees
- .map(tree => asYarnDependency(path.join(folderPath, 'node_modules'), tree))
- .filter((dep) => !!dep);
+ return raw.split(/\r?\n/).filter(line => {
+ return !!line.trim() && path.relative(root, line) !== path.relative(root, folder);
+ });
}
function getProductionDependencies(folderPath) {
- const result = [];
- const deps = getYarnProductionDependencies(folderPath);
- const flatten = (dep) => { result.push({ name: dep.name, version: dep.version, path: dep.path }); dep.children.forEach(flatten); };
- deps.forEach(flatten);
+ const result = getNpmProductionDependencies(folderPath);
// Account for distro npm dependencies
const realFolderPath = fs.realpathSync(folderPath);
const relativeFolderPath = path.relative(root, realFolderPath);
- const distroPackageJsonPath = `${root}/.build/distro/npm/${relativeFolderPath}/package.json`;
- if (fs.existsSync(distroPackageJsonPath)) {
- const distroPackageJson = JSON.parse(fs.readFileSync(distroPackageJsonPath, 'utf8'));
- const distroDependencyNames = Object.keys(distroPackageJson.dependencies ?? {});
- for (const name of distroDependencyNames) {
- result.push({
- name,
- version: distroPackageJson.dependencies[name],
- path: path.join(realFolderPath, 'node_modules', name)
- });
- }
+ const distroFolderPath = `${root}/.build/distro/npm/${relativeFolderPath}`;
+ if (fs.existsSync(distroFolderPath)) {
+ result.push(...getNpmProductionDependencies(distroFolderPath));
}
return [...new Set(result)];
}
diff --git a/build/lib/dependencies.ts b/build/lib/dependencies.ts
index 3b314e7d0c5..45368ffd26d 100644
--- a/build/lib/dependencies.ts
+++ b/build/lib/dependencies.ts
@@ -6,93 +6,46 @@
import * as fs from 'fs';
import * as path from 'path';
import * as cp from 'child_process';
-const parseSemver = require('parse-semver');
const root = fs.realpathSync(path.dirname(path.dirname(__dirname)));
-interface Tree {
- readonly name: string;
- readonly children?: Tree[];
-}
-
-interface FlatDependency {
- readonly name: string;
- readonly version: string;
- readonly path: string;
-}
-
-interface Dependency extends FlatDependency {
- readonly children: Dependency[];
-}
-
-function asYarnDependency(prefix: string, tree: Tree): Dependency | null {
- let parseResult;
+function getNpmProductionDependencies(folder: string): string[] {
+ let raw: string;
try {
- parseResult = parseSemver(tree.name);
+ raw = cp.execSync('npm ls --all --omit=dev --parseable', { cwd: folder, encoding: 'utf8', env: { ...process.env, NODE_ENV: 'production' }, stdio: [null, null, null] });
} catch (err) {
- err.message += `: ${tree.name}`;
- console.warn(`Could not parse semver: ${tree.name}`);
- return null;
- }
-
- // not an actual dependency in disk
- if (parseResult.version !== parseResult.range) {
- return null;
- }
-
- const name = parseResult.name;
- const version = parseResult.version;
- const dependencyPath = path.join(prefix, name);
- const children = [];
-
- for (const child of (tree.children || [])) {
- const dep = asYarnDependency(path.join(prefix, name, 'node_modules'), child);
-
- if (dep) {
- children.push(dep);
+ const regex = /^npm ERR! .*$/gm;
+ let match: RegExpExecArray | null;
+
+ while (match = regex.exec(err.message)) {
+ if (/ELSPROBLEMS/.test(match[0])) {
+ continue;
+ } else if (/invalid: xterm/.test(match[0])) {
+ continue;
+ } else if (/A complete log of this run/.test(match[0])) {
+ continue;
+ } else {
+ throw err;
+ }
}
- }
-
- return { name, version, path: dependencyPath, children };
-}
-function getYarnProductionDependencies(folderPath: string): Dependency[] {
- const raw = cp.execSync('yarn list --json', { cwd: folderPath, encoding: 'utf8', env: { ...process.env, NODE_ENV: 'production' }, stdio: [null, null, 'inherit'] });
- const match = /^{"type":"tree".*$/m.exec(raw);
-
- if (!match || match.length !== 1) {
- throw new Error('Could not parse result of `yarn list --json`');
+ raw = err.stdout;
}
- const trees = JSON.parse(match[0]).data.trees as Tree[];
-
- return trees
- .map(tree => asYarnDependency(path.join(folderPath, 'node_modules'), tree))
- .filter((dep): dep is Dependency => !!dep);
+ return raw.split(/\r?\n/).filter(line => {
+ return !!line.trim() && path.relative(root, line) !== path.relative(root, folder);
+ });
}
-export function getProductionDependencies(folderPath: string): FlatDependency[] {
- const result: FlatDependency[] = [];
- const deps = getYarnProductionDependencies(folderPath);
- const flatten = (dep: Dependency) => { result.push({ name: dep.name, version: dep.version, path: dep.path }); dep.children.forEach(flatten); };
- deps.forEach(flatten);
-
+export function getProductionDependencies(folderPath: string): string[] {
+ const result = getNpmProductionDependencies(folderPath);
// Account for distro npm dependencies
const realFolderPath = fs.realpathSync(folderPath);
const relativeFolderPath = path.relative(root, realFolderPath);
- const distroPackageJsonPath = `${root}/.build/distro/npm/${relativeFolderPath}/package.json`;
+ const distroFolderPath = `${root}/.build/distro/npm/${relativeFolderPath}`;
- if (fs.existsSync(distroPackageJsonPath)) {
- const distroPackageJson = JSON.parse(fs.readFileSync(distroPackageJsonPath, 'utf8'));
- const distroDependencyNames = Object.keys(distroPackageJson.dependencies ?? {});
-
- for (const name of distroDependencyNames) {
- result.push({
- name,
- version: distroPackageJson.dependencies[name],
- path: path.join(realFolderPath, 'node_modules', name)
- });
- }
+ if (fs.existsSync(distroFolderPath)) {
+ result.push(...getNpmProductionDependencies(distroFolderPath));
}
return [...new Set(result)];
diff --git a/build/lib/electron.ts b/build/lib/electron.ts
index b53ab5b53ac..541a772146b 100644
--- a/build/lib/electron.ts
+++ b/build/lib/electron.ts
@@ -93,7 +93,7 @@ function darwinBundleDocumentTypes(types: { [name: string]: string | string[] },
ostypes: ['TEXT', 'utxt', 'TUTX', '****'],
extensions: Array.isArray(extensions) ? extensions : [extensions],
iconFile: 'resources/darwin/' + icon + '.icns'
- } as DarwinDocumentType;
+ };
});
}
diff --git a/build/lib/esm.js b/build/lib/esm.js
deleted file mode 100644
index db2683445a2..00000000000
--- a/build/lib/esm.js
+++ /dev/null
@@ -1,41 +0,0 @@
-"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.setESM = setESM;
-exports.isESM = isESM;
-const path = require("path");
-const fs = require("fs");
-// TODO@esm remove this
-const outDirectory = path.join(__dirname, '..', '..', 'out-build');
-const esmMarkerFile = path.join(outDirectory, 'esm');
-function setESM(enabled) {
- const result = () => new Promise((resolve, _) => {
- if (enabled) {
- fs.mkdirSync(outDirectory, { recursive: true });
- fs.writeFileSync(esmMarkerFile, 'true', 'utf8');
- console.warn(`Setting build to ESM: true`);
- }
- else {
- console.warn(`Setting build to ESM: false`);
- }
- resolve();
- });
- result.taskName = 'set-esm';
- return result;
-}
-function isESM(logWarning) {
- try {
- const res = (typeof process.env.VSCODE_BUILD_ESM === 'string' && process.env.VSCODE_BUILD_ESM.toLowerCase() === 'true') || (fs.readFileSync(esmMarkerFile, 'utf8') === 'true');
- if (res && logWarning) {
- console.warn(`[esm] ${logWarning}`);
- }
- return res;
- }
- catch (error) {
- return false;
- }
-}
-//# sourceMappingURL=esm.js.map
\ No newline at end of file
diff --git a/build/lib/esm.ts b/build/lib/esm.ts
deleted file mode 100644
index 2fc5215e284..00000000000
--- a/build/lib/esm.ts
+++ /dev/null
@@ -1,40 +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 * as path from 'path';
-import * as fs from 'fs';
-
-// TODO@esm remove this
-
-const outDirectory = path.join(__dirname, '..', '..', 'out-build');
-const esmMarkerFile = path.join(outDirectory, 'esm');
-
-export function setESM(enabled: boolean) {
- const result = () => new Promise((resolve, _) => {
- if (enabled) {
- fs.mkdirSync(outDirectory, { recursive: true });
- fs.writeFileSync(esmMarkerFile, 'true', 'utf8');
- console.warn(`Setting build to ESM: true`);
- } else {
- console.warn(`Setting build to ESM: false`);
- }
-
- resolve();
- });
- result.taskName = 'set-esm';
- return result;
-}
-
-export function isESM(logWarning?: string): boolean {
- try {
- const res = (typeof process.env.VSCODE_BUILD_ESM === 'string' && process.env.VSCODE_BUILD_ESM.toLowerCase() === 'true') || (fs.readFileSync(esmMarkerFile, 'utf8') === 'true');
- if (res && logWarning) {
- console.warn(`[esm] ${logWarning}`);
- }
- return res;
- } catch (error) {
- return false;
- }
-}
diff --git a/build/lib/extensions.js b/build/lib/extensions.js
index e9e653a2379..f61140a8c6b 100644
--- a/build/lib/extensions.js
+++ b/build/lib/extensions.js
@@ -102,9 +102,14 @@ function fromLocalWebpack(extensionPath, webpackConfigFileName, disableMangle) {
}
}
}
+ // TODO: add prune support based on packagedDependencies to vsce.PackageManager.Npm similar
+ // to vsce.PackageManager.Yarn.
+ // A static analysis showed there are no webpack externals that are dependencies of the current
+ // local extensions so we can use the vsce.PackageManager.None config to ignore dependencies list
+ // as a temporary workaround.
// --- Start Positron ---
// Replace vsce.listFiles with listExtensionFiles to queue the work
- listExtensionFiles({ cwd: extensionPath, packageManager: vsce.PackageManager.Yarn, packagedDependencies }).then(fileNames => {
+ listExtensionFiles({ cwd: extensionPath, packageManager: vsce.PackageManager.None, packagedDependencies }).then(fileNames => {
const files = fileNames
.map(fileName => path.join(extensionPath, fileName))
.map(filePath => new File({
@@ -188,7 +193,7 @@ function fromLocalNormal(extensionPath) {
const result = es.through();
// --- Start Positron ---
// Replace vsce.listFiles with listExtensionFiles to queue the work
- listExtensionFiles({ cwd: extensionPath, packageManager: vsce.PackageManager.Yarn })
+ listExtensionFiles({ cwd: extensionPath, packageManager: vsce.PackageManager.Npm })
.then(fileNames => {
const files = fileNames
.map(fileName => path.join(extensionPath, fileName))
@@ -364,7 +369,7 @@ function packageLocalExtensionsStream(forWeb, disableMangle) {
else {
// also include shared production node modules
const productionDependencies = (0, dependencies_1.getProductionDependencies)('extensions/');
- const dependenciesSrc = productionDependencies.map(d => path.relative(root, d.path)).map(d => [`${d}/**`, `!${d}/**/{test,tests}/**`]).flat();
+ const dependenciesSrc = productionDependencies.map(d => path.relative(root, d)).map(d => [`${d}/**`, `!${d}/**/{test,tests}/**`]).flat();
result = es.merge(localExtensionsStream, gulp.src(dependenciesSrc, { base: '.' })
.pipe(util2.cleanNodeModules(path.join(root, 'build', '.moduleignore')))
.pipe(util2.cleanNodeModules(path.join(root, 'build', `.moduleignore.${process.platform}`))));
diff --git a/build/lib/extensions.ts b/build/lib/extensions.ts
index 0e675b4f4a1..f8c7344a981 100644
--- a/build/lib/extensions.ts
+++ b/build/lib/extensions.ts
@@ -105,9 +105,15 @@ function fromLocalWebpack(extensionPath: string, webpackConfigFileName: string,
}
}
+ // TODO: add prune support based on packagedDependencies to vsce.PackageManager.Npm similar
+ // to vsce.PackageManager.Yarn.
+ // A static analysis showed there are no webpack externals that are dependencies of the current
+ // local extensions so we can use the vsce.PackageManager.None config to ignore dependencies list
+ // as a temporary workaround.
+
// --- Start Positron ---
// Replace vsce.listFiles with listExtensionFiles to queue the work
- listExtensionFiles({ cwd: extensionPath, packageManager: vsce.PackageManager.Yarn, packagedDependencies }).then(fileNames => {
+ listExtensionFiles({ cwd: extensionPath, packageManager: vsce.PackageManager.None, packagedDependencies }).then(fileNames => {
const files = fileNames
.map(fileName => path.join(extensionPath, fileName))
.map(filePath => new File({
@@ -205,7 +211,7 @@ function fromLocalNormal(extensionPath: string): Stream {
// --- Start Positron ---
// Replace vsce.listFiles with listExtensionFiles to queue the work
- listExtensionFiles({ cwd: extensionPath, packageManager: vsce.PackageManager.Yarn })
+ listExtensionFiles({ cwd: extensionPath, packageManager: vsce.PackageManager.Npm })
.then(fileNames => {
const files = fileNames
.map(fileName => path.join(extensionPath, fileName))
@@ -418,7 +424,7 @@ export function packageLocalExtensionsStream(forWeb: boolean, disableMangle: boo
} else {
// also include shared production node modules
const productionDependencies = getProductionDependencies('extensions/');
- const dependenciesSrc = productionDependencies.map(d => path.relative(root, d.path)).map(d => [`${d}/**`, `!${d}/**/{test,tests}/**`]).flat();
+ const dependenciesSrc = productionDependencies.map(d => path.relative(root, d)).map(d => [`${d}/**`, `!${d}/**/{test,tests}/**`]).flat();
result = es.merge(
localExtensionsStream,
diff --git a/build/lib/layersChecker.js b/build/lib/layersChecker.js
index 7c7fd3bc5fd..ffc21be21f5 100644
--- a/build/lib/layersChecker.js
+++ b/build/lib/layersChecker.js
@@ -23,7 +23,6 @@ const minimatch_1 = require("minimatch");
// Types we assume are present in all implementations of JS VMs (node.js, browsers)
// Feel free to add more core types as you see needed if present in node.js and browsers
const CORE_TYPES = [
- 'require', // from our AMD loader
'setTimeout',
'clearTimeout',
'setInterval',
@@ -72,6 +71,10 @@ const CORE_TYPES = [
'__global',
'PerformanceMark',
'PerformanceObserver',
+ 'ImportMeta',
+ // webcrypto has been available since Node.js 19, but still live in dom.d.ts
+ 'Crypto',
+ 'SubtleCrypto'
];
// Types that are defined in a common layer but are known to be only
// available in native environments should not be allowed in browser
@@ -119,6 +122,22 @@ const RULES = [
'@types/node' // no node.js
]
},
+ // Common: vs/base/common/performance.ts
+ {
+ target: '**/vs/base/common/performance.ts',
+ allowedTypes: [
+ ...CORE_TYPES,
+ // Safe access to Performance
+ 'Performance',
+ 'PerformanceEntry',
+ 'PerformanceTiming'
+ ],
+ disallowedTypes: NATIVE_TYPES,
+ disallowedDefinitions: [
+ 'lib.dom.d.ts', // no DOM
+ '@types/node' // no node.js
+ ]
+ },
// Common: vs/platform/environment/common/*
{
target: '**/vs/platform/environment/common/*.ts',
@@ -173,9 +192,9 @@ const RULES = [
'@types/node' // no node.js
]
},
- // Common: vs/base/parts/sandbox/electron-sandbox/preload.js
+ // Common: vs/base/parts/sandbox/electron-sandbox/preload.ts
{
- target: '**/vs/base/parts/sandbox/electron-sandbox/preload.js',
+ target: '**/vs/base/parts/sandbox/electron-sandbox/preload.ts',
allowedTypes: [
...CORE_TYPES,
// Safe access to a very small subset of node.js
@@ -234,6 +253,22 @@ const RULES = [
'@types/node' // no node.js
]
},
+ // Electron (utility)
+ {
+ target: '**/vs/**/electron-utility/**',
+ allowedTypes: [
+ ...CORE_TYPES,
+ // --> types from electron.d.ts that duplicate from lib.dom.d.ts
+ 'Event',
+ 'Request'
+ ],
+ disallowedTypes: [
+ 'ipcMain' // not allowed, use validatedIpcMain instead
+ ],
+ disallowedDefinitions: [
+ 'lib.dom.d.ts' // no DOM
+ ]
+ },
// Electron (main)
{
target: '**/vs/**/electron-main/**',
diff --git a/build/lib/layersChecker.ts b/build/lib/layersChecker.ts
index 60939fe2750..3ecde09be21 100644
--- a/build/lib/layersChecker.ts
+++ b/build/lib/layersChecker.ts
@@ -24,7 +24,6 @@ import { match } from 'minimatch';
// Types we assume are present in all implementations of JS VMs (node.js, browsers)
// Feel free to add more core types as you see needed if present in node.js and browsers
const CORE_TYPES = [
- 'require', // from our AMD loader
'setTimeout',
'clearTimeout',
'setInterval',
@@ -73,6 +72,11 @@ const CORE_TYPES = [
'__global',
'PerformanceMark',
'PerformanceObserver',
+ 'ImportMeta',
+
+ // webcrypto has been available since Node.js 19, but still live in dom.d.ts
+ 'Crypto',
+ 'SubtleCrypto'
];
// Types that are defined in a common layer but are known to be only
@@ -128,6 +132,24 @@ const RULES: IRule[] = [
]
},
+ // Common: vs/base/common/performance.ts
+ {
+ target: '**/vs/base/common/performance.ts',
+ allowedTypes: [
+ ...CORE_TYPES,
+
+ // Safe access to Performance
+ 'Performance',
+ 'PerformanceEntry',
+ 'PerformanceTiming'
+ ],
+ disallowedTypes: NATIVE_TYPES,
+ disallowedDefinitions: [
+ 'lib.dom.d.ts', // no DOM
+ '@types/node' // no node.js
+ ]
+ },
+
// Common: vs/platform/environment/common/*
{
target: '**/vs/platform/environment/common/*.ts',
@@ -188,9 +210,9 @@ const RULES: IRule[] = [
]
},
- // Common: vs/base/parts/sandbox/electron-sandbox/preload.js
+ // Common: vs/base/parts/sandbox/electron-sandbox/preload.ts
{
- target: '**/vs/base/parts/sandbox/electron-sandbox/preload.js',
+ target: '**/vs/base/parts/sandbox/electron-sandbox/preload.ts',
allowedTypes: [
...CORE_TYPES,
@@ -256,6 +278,24 @@ const RULES: IRule[] = [
]
},
+ // Electron (utility)
+ {
+ target: '**/vs/**/electron-utility/**',
+ allowedTypes: [
+ ...CORE_TYPES,
+
+ // --> types from electron.d.ts that duplicate from lib.dom.d.ts
+ 'Event',
+ 'Request'
+ ],
+ disallowedTypes: [
+ 'ipcMain' // not allowed, use validatedIpcMain instead
+ ],
+ disallowedDefinitions: [
+ 'lib.dom.d.ts' // no DOM
+ ]
+ },
+
// Electron (main)
{
target: '**/vs/**/electron-main/**',
diff --git a/build/lib/mangle/index.js b/build/lib/mangle/index.js
index f72d299930b..1c2c8cc3dd3 100644
--- a/build/lib/mangle/index.js
+++ b/build/lib/mangle/index.js
@@ -14,7 +14,6 @@ const ts = require("typescript");
const url_1 = require("url");
const workerpool = require("workerpool");
const staticLanguageServiceHost_1 = require("./staticLanguageServiceHost");
-const esm_1 = require("../esm");
const buildfile = require('../../buildfile');
class ShortIdent {
prefix;
@@ -248,51 +247,36 @@ function isNameTakenInFile(node, name) {
}
return false;
}
-const skippedExportMangledFiles = function () {
- return [
- // Build
- 'css.build',
- // Monaco
- 'editorCommon',
- 'editorOptions',
- 'editorZoom',
- 'standaloneEditor',
- 'standaloneEnums',
- 'standaloneLanguages',
- // Generated
- 'extensionsApiProposals',
- // Module passed around as type
- 'pfs',
- // entry points
- ...(0, esm_1.isESM)() ? [
- buildfile.entrypoint('vs/server/node/server.main'),
- buildfile.base,
- buildfile.workerExtensionHost,
- buildfile.workerNotebook,
- buildfile.workerLanguageDetection,
- buildfile.workerLocalFileSearch,
- buildfile.workerProfileAnalysis,
- buildfile.workerOutputLinks,
- buildfile.workerBackgroundTokenization,
- buildfile.workbenchDesktop(),
- buildfile.workbenchWeb(),
- buildfile.code,
- buildfile.codeWeb
- ].flat().map(x => x.name) : [
- buildfile.entrypoint('vs/server/node/server.main'),
- buildfile.entrypoint('vs/workbench/workbench.desktop.main'),
- buildfile.base,
- buildfile.workerExtensionHost,
- buildfile.workerNotebook,
- buildfile.workerLanguageDetection,
- buildfile.workerLocalFileSearch,
- buildfile.workerProfileAnalysis,
- buildfile.workbenchDesktop(),
- buildfile.workbenchWeb(),
- buildfile.code
- ].flat().map(x => x.name),
- ];
-};
+const skippedExportMangledFiles = [
+ // Build
+ 'css.build',
+ // Monaco
+ 'editorCommon',
+ 'editorOptions',
+ 'editorZoom',
+ 'standaloneEditor',
+ 'standaloneEnums',
+ 'standaloneLanguages',
+ // Generated
+ 'extensionsApiProposals',
+ // Module passed around as type
+ 'pfs',
+ // entry points
+ ...[
+ buildfile.workerEditor,
+ buildfile.workerExtensionHost,
+ buildfile.workerNotebook,
+ buildfile.workerLanguageDetection,
+ buildfile.workerLocalFileSearch,
+ buildfile.workerProfileAnalysis,
+ buildfile.workerOutputLinks,
+ buildfile.workerBackgroundTokenization,
+ buildfile.workbenchDesktop,
+ buildfile.workbenchWeb,
+ buildfile.code,
+ buildfile.codeWeb
+ ].flat().map(x => x.name),
+];
const skippedExportMangledProjects = [
// Test projects
'vscode-api-tests',
@@ -536,7 +520,7 @@ class Mangler {
for (const data of this.allExportedSymbols.values()) {
if (data.fileName.endsWith('.d.ts')
|| skippedExportMangledProjects.some(proj => data.fileName.includes(proj))
- || skippedExportMangledFiles().some(file => data.fileName.endsWith(file + '.ts'))) {
+ || skippedExportMangledFiles.some(file => data.fileName.endsWith(file + '.ts'))) {
continue;
}
if (!data.shouldMangle(data.replacementName)) {
diff --git a/build/lib/mangle/index.ts b/build/lib/mangle/index.ts
index 7b6c6d20843..f291bd63f6b 100644
--- a/build/lib/mangle/index.ts
+++ b/build/lib/mangle/index.ts
@@ -12,7 +12,6 @@ import * as ts from 'typescript';
import { pathToFileURL } from 'url';
import * as workerpool from 'workerpool';
import { StaticLanguageServiceHost } from './staticLanguageServiceHost';
-import { isESM } from '../esm';
const buildfile = require('../../buildfile');
class ShortIdent {
@@ -280,55 +279,40 @@ function isNameTakenInFile(node: ts.Node, name: string): boolean {
return false;
}
-const skippedExportMangledFiles = function () { // using a function() to ensure late isESM() check
- return [
- // Build
- 'css.build',
-
- // Monaco
- 'editorCommon',
- 'editorOptions',
- 'editorZoom',
- 'standaloneEditor',
- 'standaloneEnums',
- 'standaloneLanguages',
-
- // Generated
- 'extensionsApiProposals',
-
- // Module passed around as type
- 'pfs',
-
- // entry points
- ...isESM() ? [
- buildfile.entrypoint('vs/server/node/server.main'),
- buildfile.base,
- buildfile.workerExtensionHost,
- buildfile.workerNotebook,
- buildfile.workerLanguageDetection,
- buildfile.workerLocalFileSearch,
- buildfile.workerProfileAnalysis,
- buildfile.workerOutputLinks,
- buildfile.workerBackgroundTokenization,
- buildfile.workbenchDesktop(),
- buildfile.workbenchWeb(),
- buildfile.code,
- buildfile.codeWeb
- ].flat().map(x => x.name) : [
- buildfile.entrypoint('vs/server/node/server.main'),
- buildfile.entrypoint('vs/workbench/workbench.desktop.main'),
- buildfile.base,
- buildfile.workerExtensionHost,
- buildfile.workerNotebook,
- buildfile.workerLanguageDetection,
- buildfile.workerLocalFileSearch,
- buildfile.workerProfileAnalysis,
- buildfile.workbenchDesktop(),
- buildfile.workbenchWeb(),
- buildfile.code
- ].flat().map(x => x.name),
- ];
-};
+const skippedExportMangledFiles = [
+ // Build
+ 'css.build',
+
+ // Monaco
+ 'editorCommon',
+ 'editorOptions',
+ 'editorZoom',
+ 'standaloneEditor',
+ 'standaloneEnums',
+ 'standaloneLanguages',
+
+ // Generated
+ 'extensionsApiProposals',
+
+ // Module passed around as type
+ 'pfs',
+
+ // entry points
+ ...[
+ buildfile.workerEditor,
+ buildfile.workerExtensionHost,
+ buildfile.workerNotebook,
+ buildfile.workerLanguageDetection,
+ buildfile.workerLocalFileSearch,
+ buildfile.workerProfileAnalysis,
+ buildfile.workerOutputLinks,
+ buildfile.workerBackgroundTokenization,
+ buildfile.workbenchDesktop,
+ buildfile.workbenchWeb,
+ buildfile.code,
+ buildfile.codeWeb
+ ].flat().map(x => x.name),
+];
const skippedExportMangledProjects = [
// Test projects
@@ -625,7 +609,7 @@ export class Mangler {
for (const data of this.allExportedSymbols.values()) {
if (data.fileName.endsWith('.d.ts')
|| skippedExportMangledProjects.some(proj => data.fileName.includes(proj))
- || skippedExportMangledFiles().some(file => data.fileName.endsWith(file + '.ts'))
+ || skippedExportMangledFiles.some(file => data.fileName.endsWith(file + '.ts'))
) {
continue;
}
diff --git a/build/lib/nls.js b/build/lib/nls.js
index 3fc4ba3ed61..6ddcd46167a 100644
--- a/build/lib/nls.js
+++ b/build/lib/nls.js
@@ -11,7 +11,6 @@ const File = require("vinyl");
const sm = require("source-map");
const path = require("path");
const sort = require("gulp-sort");
-const esm_1 = require("./esm");
var CollectStepResult;
(function (CollectStepResult) {
CollectStepResult[CollectStepResult["Yes"] = 0] = "Yes";
@@ -170,23 +169,13 @@ var _nls;
.filter(n => n.kind === ts.SyntaxKind.ImportEqualsDeclaration)
.map(n => n)
.filter(d => d.moduleReference.kind === ts.SyntaxKind.ExternalModuleReference)
- .filter(d => {
- if ((0, esm_1.isESM)()) {
- return d.moduleReference.expression.getText().endsWith(`/nls.js'`);
- }
- return d.moduleReference.expression.getText() === '\'vs/nls\'';
- });
+ .filter(d => d.moduleReference.expression.getText().endsWith(`/nls.js'`));
// import ... from 'vs/nls';
const importDeclarations = imports
.filter(n => n.kind === ts.SyntaxKind.ImportDeclaration)
.map(n => n)
.filter(d => d.moduleSpecifier.kind === ts.SyntaxKind.StringLiteral)
- .filter(d => {
- if ((0, esm_1.isESM)()) {
- return d.moduleSpecifier.getText().endsWith(`/nls.js'`);
- }
- return d.moduleSpecifier.getText() === '\'vs/nls\'';
- })
+ .filter(d => d.moduleSpecifier.getText().endsWith(`/nls.js'`))
.filter(d => !!d.importClause && !!d.importClause.namedBindings);
// `nls.localize(...)` calls
const nlsLocalizeCallExpressions = importDeclarations
diff --git a/build/lib/nls.ts b/build/lib/nls.ts
index 0a60f74a770..cac832903a3 100644
--- a/build/lib/nls.ts
+++ b/build/lib/nls.ts
@@ -10,7 +10,6 @@ import * as File from 'vinyl';
import * as sm from 'source-map';
import * as path from 'path';
import * as sort from 'gulp-sort';
-import { isESM } from './esm';
declare class FileSourceMap extends File {
public sourceMap: sm.RawSourceMap;
@@ -43,7 +42,7 @@ function collect(ts: typeof import('typescript'), node: ts.Node, fn: (node: ts.N
}
function clone(object: T): T {
- const result = {};
+ const result = {} as any as T;
for (const id in object) {
result[id] = object[id];
}
@@ -232,24 +231,14 @@ module _nls {
.filter(n => n.kind === ts.SyntaxKind.ImportEqualsDeclaration)
.map(n => n)
.filter(d => d.moduleReference.kind === ts.SyntaxKind.ExternalModuleReference)
- .filter(d => {
- if (isESM()) {
- return (d.moduleReference).expression.getText().endsWith(`/nls.js'`);
- }
- return (d.moduleReference).expression.getText() === '\'vs/nls\'';
- });
+ .filter(d => (d.moduleReference).expression.getText().endsWith(`/nls.js'`));
// import ... from 'vs/nls';
const importDeclarations = imports
.filter(n => n.kind === ts.SyntaxKind.ImportDeclaration)
.map(n => n)
.filter(d => d.moduleSpecifier.kind === ts.SyntaxKind.StringLiteral)
- .filter(d => {
- if (isESM()) {
- return d.moduleSpecifier.getText().endsWith(`/nls.js'`);
- }
- return d.moduleSpecifier.getText() === '\'vs/nls\'';
- })
+ .filter(d => d.moduleSpecifier.getText().endsWith(`/nls.js'`))
.filter(d => !!d.importClause && !!d.importClause.namedBindings);
// `nls.localize(...)` calls
diff --git a/build/lib/node.js b/build/lib/node.js
index 7209dffc134..74a54a3c170 100644
--- a/build/lib/node.js
+++ b/build/lib/node.js
@@ -7,9 +7,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
const path = require("path");
const fs = require("fs");
const root = path.dirname(path.dirname(__dirname));
-const yarnrcPath = path.join(root, 'remote', '.yarnrc');
-const yarnrc = fs.readFileSync(yarnrcPath, 'utf8');
-const version = /^target\s+"([^"]+)"$/m.exec(yarnrc)[1];
+const npmrcPath = path.join(root, 'remote', '.npmrc');
+const npmrc = fs.readFileSync(npmrcPath, 'utf8');
+const version = /^target="(.*)"$/m.exec(npmrc)[1];
const platform = process.platform;
const arch = process.arch;
const node = platform === 'win32' ? 'node.exe' : 'node';
diff --git a/build/lib/node.ts b/build/lib/node.ts
index d1b0039b022..4beb13ae91b 100644
--- a/build/lib/node.ts
+++ b/build/lib/node.ts
@@ -7,9 +7,9 @@ import * as path from 'path';
import * as fs from 'fs';
const root = path.dirname(path.dirname(__dirname));
-const yarnrcPath = path.join(root, 'remote', '.yarnrc');
-const yarnrc = fs.readFileSync(yarnrcPath, 'utf8');
-const version = /^target\s+"([^"]+)"$/m.exec(yarnrc)![1];
+const npmrcPath = path.join(root, 'remote', '.npmrc');
+const npmrc = fs.readFileSync(npmrcPath, 'utf8');
+const version = /^target="(.*)"$/m.exec(npmrc)![1];
const platform = process.platform;
const arch = process.arch;
diff --git a/build/lib/optimize.js b/build/lib/optimize.js
index fdf738576c2..478390c4228 100644
--- a/build/lib/optimize.js
+++ b/build/lib/optimize.js
@@ -4,249 +4,99 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
Object.defineProperty(exports, "__esModule", { value: true });
-exports.loaderConfig = loaderConfig;
-exports.optimizeLoaderTask = optimizeLoaderTask;
-exports.optimizeTask = optimizeTask;
+exports.bundleTask = bundleTask;
exports.minifyTask = minifyTask;
const es = require("event-stream");
const gulp = require("gulp");
-const concat = require("gulp-concat");
const filter = require("gulp-filter");
-const fancyLog = require("fancy-log");
-const ansiColors = require("ansi-colors");
const path = require("path");
const fs = require("fs");
const pump = require("pump");
const VinylFile = require("vinyl");
const bundle = require("./bundle");
-const i18n_1 = require("./i18n");
-const stats_1 = require("./stats");
-const util = require("./util");
const postcss_1 = require("./postcss");
const esbuild = require("esbuild");
const sourcemaps = require("gulp-sourcemaps");
-const esm_1 = require("./esm");
+const fancyLog = require("fancy-log");
+const ansiColors = require("ansi-colors");
const REPO_ROOT_PATH = path.join(__dirname, '../..');
-function log(prefix, message) {
- fancyLog(ansiColors.cyan('[' + prefix + ']'), message);
-}
-function loaderConfig() {
- const result = {
- paths: {
- 'vs': 'out-build/vs',
- 'vscode': 'empty:'
- },
- amdModulesPattern: /^vs\//
- };
- result['vs/css'] = { inlineResources: true };
- return result;
-}
-const IS_OUR_COPYRIGHT_REGEXP = /Copyright \(C\) Microsoft Corporation/i;
-function loaderPlugin(src, base, amdModuleId) {
- return (gulp
- .src(src, { base })
- .pipe(es.through(function (data) {
- if (amdModuleId) {
- let contents = data.contents.toString('utf8');
- contents = contents.replace(/^define\(/m, `define("${amdModuleId}",`);
- data.contents = Buffer.from(contents);
- }
- this.emit('data', data);
- })));
-}
-function loader(src, bundledFileHeader, bundleLoader, externalLoaderInfo) {
- let loaderStream = gulp.src(`${src}/vs/loader.js`, { base: `${src}` });
- if (bundleLoader) {
- loaderStream = es.merge(loaderStream, loaderPlugin(`${src}/vs/css.js`, `${src}`, 'vs/css'));
- }
- const files = [];
- const order = (f) => {
- if (f.path.endsWith('loader.js')) {
- return 0;
- }
- if (f.path.endsWith('css.js')) {
- return 1;
- }
- return 2;
- };
- return (loaderStream
- .pipe(es.through(function (data) {
- files.push(data);
- }, function () {
- files.sort((a, b) => {
- return order(a) - order(b);
- });
- files.unshift(new VinylFile({
- path: 'fake',
- base: '.',
- contents: Buffer.from(bundledFileHeader)
- }));
- if (externalLoaderInfo !== undefined) {
- files.push(new VinylFile({
- path: 'fake2',
- base: '.',
- contents: Buffer.from(emitExternalLoaderInfo(externalLoaderInfo))
- }));
- }
- for (const file of files) {
- this.emit('data', file);
- }
- this.emit('end');
- }))
- .pipe(concat('vs/loader.js')));
-}
-function emitExternalLoaderInfo(externalLoaderInfo) {
- const externalBaseUrl = externalLoaderInfo.baseUrl;
- externalLoaderInfo.baseUrl = '$BASE_URL';
- // If defined, use the runtime configured baseUrl.
- const code = `
-(function() {
- const baseUrl = require.getConfig().baseUrl || ${JSON.stringify(externalBaseUrl)};
- require.config(${JSON.stringify(externalLoaderInfo, undefined, 2)});
-})();`;
- return code.replace('"$BASE_URL"', 'baseUrl');
-}
-function toConcatStream(src, bundledFileHeader, sources, dest, fileContentMapper) {
- const useSourcemaps = /\.js$/.test(dest) && !/\.nls\.js$/.test(dest);
- // If a bundle ends up including in any of the sources our copyright, then
- // insert a fake source at the beginning of each bundle with our copyright
- let containsOurCopyright = false;
- for (let i = 0, len = sources.length; i < len; i++) {
- const fileContents = sources[i].contents;
- if (IS_OUR_COPYRIGHT_REGEXP.test(fileContents)) {
- containsOurCopyright = true;
- break;
- }
- }
- if (containsOurCopyright) {
- sources.unshift({
- path: null,
- contents: bundledFileHeader
- });
- }
- const treatedSources = sources.map(function (source) {
- const root = source.path ? REPO_ROOT_PATH.replace(/\\/g, '/') : '';
- const base = source.path ? root + `/${src}` : '.';
- const path = source.path ? root + '/' + source.path.replace(/\\/g, '/') : 'fake';
- const contents = source.path ? fileContentMapper(source.contents, path) : source.contents;
- return new VinylFile({
- path: path,
- base: base,
- contents: Buffer.from(contents)
- });
- });
- return es.readArray(treatedSources)
- .pipe(useSourcemaps ? util.loadSourcemaps() : es.through())
- .pipe(concat(dest))
- .pipe((0, stats_1.createStatsStream)(dest));
-}
-function toBundleStream(src, bundledFileHeader, bundles, fileContentMapper) {
- return es.merge(bundles.map(function (bundle) {
- return toConcatStream(src, bundledFileHeader, bundle.sources, bundle.dest, fileContentMapper);
- }));
-}
const DEFAULT_FILE_HEADER = [
'/*!--------------------------------------------------------',
' * Copyright (C) Microsoft Corporation. All rights reserved.',
' *--------------------------------------------------------*/'
].join('\n');
-function optimizeAMDTask(opts) {
- const src = opts.src;
- const entryPoints = opts.entryPoints.filter(d => d.target !== 'esm');
- const resources = opts.resources;
- const loaderConfig = opts.loaderConfig;
- const bundledFileHeader = opts.header || DEFAULT_FILE_HEADER;
- const fileContentMapper = opts.fileContentMapper || ((contents, _path) => contents);
- const bundlesStream = es.through(); // this stream will contain the bundled files
+function bundleESMTask(opts) {
const resourcesStream = es.through(); // this stream will contain the resources
- const bundleInfoStream = es.through(); // this stream will contain bundleInfo.json
- bundle.bundle(entryPoints, loaderConfig, function (err, result) {
- if (err || !result) {
- return bundlesStream.emit('error', JSON.stringify(err));
- }
- toBundleStream(src, bundledFileHeader, result.files, fileContentMapper).pipe(bundlesStream);
- // Remove css inlined resources
- const filteredResources = resources.slice();
- result.cssInlinedResources.forEach(function (resource) {
- if (process.env['VSCODE_BUILD_VERBOSE']) {
- log('optimizer', 'excluding inlined: ' + resource);
- }
- filteredResources.push('!' + resource);
- });
- gulp.src(filteredResources, { base: `${src}`, allowEmpty: true }).pipe(resourcesStream);
- const bundleInfoArray = [];
- if (opts.bundleInfo) {
- bundleInfoArray.push(new VinylFile({
- path: 'bundleInfo.json',
- base: '.',
- contents: Buffer.from(JSON.stringify(result.bundleData, null, '\t'))
- }));
+ const bundlesStream = es.through(); // this stream will contain the bundled files
+ const entryPoints = opts.entryPoints.map(entryPoint => {
+ if (typeof entryPoint === 'string') {
+ return { name: path.parse(entryPoint).name };
}
- es.readArray(bundleInfoArray).pipe(bundleInfoStream);
+ return entryPoint;
});
- const result = es.merge(loader(src, bundledFileHeader, false, opts.externalLoaderInfo), bundlesStream, resourcesStream, bundleInfoStream);
- return result
- .pipe(sourcemaps.write('./', {
- sourceRoot: undefined,
- addComment: true,
- includeContent: true
- }))
- .pipe(opts.languages && opts.languages.length ? (0, i18n_1.processNlsFiles)({
- out: opts.src,
- fileHeader: bundledFileHeader,
- languages: opts.languages
- }) : es.through());
-}
-function optimizeESMTask(opts, cjsOpts) {
- const resourcesStream = es.through(); // this stream will contain the resources
- const bundlesStream = es.through(); // this stream will contain the bundled files
- const entryPoints = opts.entryPoints.filter(d => d.target !== 'amd');
- if (cjsOpts) {
- cjsOpts.entryPoints.forEach(entryPoint => entryPoints.push({ name: path.parse(entryPoint).name }));
- }
const allMentionedModules = new Set();
for (const entryPoint of entryPoints) {
allMentionedModules.add(entryPoint.name);
entryPoint.include?.forEach(allMentionedModules.add, allMentionedModules);
entryPoint.exclude?.forEach(allMentionedModules.add, allMentionedModules);
}
- allMentionedModules.delete('vs/css'); // TODO@esm remove this when vs/css is removed
const bundleAsync = async () => {
const files = [];
const tasks = [];
for (const entryPoint of entryPoints) {
- console.log(`[bundle] '${entryPoint.name}'`);
+ fancyLog(`Bundled entry point: ${ansiColors.yellow(entryPoint.name)}...`);
// support for 'dest' via esbuild#in/out
const dest = entryPoint.dest?.replace(/\.[^/.]+$/, '') ?? entryPoint.name;
- // boilerplate massage
- const banner = { js: '' };
- const tslibPath = path.join(require.resolve('tslib'), '../tslib.es6.js');
- banner.js += await fs.promises.readFile(tslibPath, 'utf-8');
- const boilerplateTrimmer = {
- name: 'boilerplate-trimmer',
+ // banner contents
+ const banner = {
+ js: DEFAULT_FILE_HEADER,
+ css: DEFAULT_FILE_HEADER
+ };
+ // TS Boilerplate
+ if (!opts.skipTSBoilerplateRemoval?.(entryPoint.name)) {
+ const tslibPath = path.join(require.resolve('tslib'), '../tslib.es6.js');
+ banner.js += await fs.promises.readFile(tslibPath, 'utf-8');
+ }
+ const contentsMapper = {
+ name: 'contents-mapper',
setup(build) {
- build.onLoad({ filter: /\.js$/ }, async (args) => {
- const contents = await fs.promises.readFile(args.path, 'utf-8');
- const newContents = bundle.removeAllTSBoilerplate(contents);
+ build.onLoad({ filter: /\.js$/ }, async ({ path }) => {
+ const contents = await fs.promises.readFile(path, 'utf-8');
+ // TS Boilerplate
+ let newContents;
+ if (!opts.skipTSBoilerplateRemoval?.(entryPoint.name)) {
+ newContents = bundle.removeAllTSBoilerplate(contents);
+ }
+ else {
+ newContents = contents;
+ }
+ // File Content Mapper
+ const mapper = opts.fileContentMapper?.(path);
+ if (mapper) {
+ newContents = await mapper(newContents);
+ }
return { contents: newContents };
});
}
};
- // support for 'preprend' via the esbuild#banner
- if (entryPoint.prepend?.length) {
- for (const item of entryPoint.prepend) {
- const fullpath = path.join(REPO_ROOT_PATH, opts.src, item.path);
- const source = await fs.promises.readFile(fullpath, 'utf8');
- banner.js += source + '\n';
- }
- }
+ const externalOverride = {
+ name: 'external-override',
+ setup(build) {
+ // We inline selected modules that are we depend on on startup without
+ // a conditional `await import(...)` by hooking into the resolution.
+ build.onResolve({ filter: /^minimist$/ }, () => {
+ return { path: path.join(REPO_ROOT_PATH, 'node_modules', 'minimist', 'index.js'), external: false };
+ });
+ },
+ };
const task = esbuild.build({
bundle: true,
external: entryPoint.exclude,
packages: 'external', // "external all the things", see https://esbuild.github.io/api/#packages
platform: 'neutral', // makes esm
format: 'esm',
- plugins: [boilerplateTrimmer],
+ sourcemap: 'external',
+ plugins: [contentsMapper, externalOverride],
target: ['es2022'],
loader: {
'.ttf': 'file',
@@ -255,7 +105,7 @@ function optimizeESMTask(opts, cjsOpts) {
'.sh': 'file',
},
assetNames: 'media/[name]', // moves media assets into a sub-folder "media"
- banner,
+ banner: entryPoint.name === 'vs/workbench/workbench.web.main' ? undefined : banner, // TODO@esm remove line when we stop supporting web-amd-esm-bridge
entryPoints: [
{
in: path.join(REPO_ROOT_PATH, opts.src, `${entryPoint.name}.js`),
@@ -265,29 +115,22 @@ function optimizeESMTask(opts, cjsOpts) {
outdir: path.join(REPO_ROOT_PATH, opts.src),
write: false, // enables res.outputFiles
metafile: true, // enables res.metafile
+ // minify: NOT enabled because we have a separate minify task that takes care of the TSLib banner as well
}).then(res => {
for (const file of res.outputFiles) {
- let contents = file.contents;
+ let sourceMapFile = undefined;
if (file.path.endsWith('.js')) {
- if (opts.fileContentMapper) {
- // UGLY the fileContentMapper is per file but at this point we have all files
- // bundled already. So, we call the mapper for the same contents but each file
- // that has been included in the bundle...
- let newText = file.text;
- for (const input of Object.keys(res.metafile.inputs)) {
- newText = opts.fileContentMapper(newText, input);
- }
- contents = Buffer.from(newText);
- }
+ sourceMapFile = res.outputFiles.find(f => f.path === `${file.path}.map`);
}
- files.push(new VinylFile({
- contents: Buffer.from(contents),
+ const fileProps = {
+ contents: Buffer.from(file.contents),
+ sourceMap: sourceMapFile ? JSON.parse(sourceMapFile.text) : undefined, // support gulp-sourcemaps
path: file.path,
base: path.join(REPO_ROOT_PATH, opts.src)
- }));
+ };
+ files.push(new VinylFile(fileProps));
}
});
- // await task; // FORCE serial bundling (makes debugging easier)
tasks.push(task);
}
await Promise.all(tasks);
@@ -297,7 +140,7 @@ function optimizeESMTask(opts, cjsOpts) {
// bundle output (JS, CSS, SVG...)
es.readArray(output.files).pipe(bundlesStream);
// forward all resources
- gulp.src(opts.resources, { base: `${opts.src}`, allowEmpty: true }).pipe(resourcesStream);
+ gulp.src(opts.resources ?? [], { base: `${opts.src}`, allowEmpty: true }).pipe(resourcesStream);
});
const result = es.merge(bundlesStream, resourcesStream);
return result
@@ -305,58 +148,11 @@ function optimizeESMTask(opts, cjsOpts) {
sourceRoot: undefined,
addComment: true,
includeContent: true
- }))
- .pipe(opts.languages && opts.languages.length ? (0, i18n_1.processNlsFiles)({
- out: opts.src,
- fileHeader: opts.header || DEFAULT_FILE_HEADER,
- languages: opts.languages
- }) : es.through());
-}
-function optimizeCommonJSTask(opts) {
- const src = opts.src;
- const entryPoints = opts.entryPoints;
- return gulp.src(entryPoints, { base: `${src}`, allowEmpty: true })
- .pipe(es.map((f, cb) => {
- esbuild.build({
- entryPoints: [f.path],
- bundle: true,
- platform: opts.platform,
- write: false,
- external: opts.external
- }).then(res => {
- const jsFile = res.outputFiles[0];
- f.contents = Buffer.from(jsFile.contents);
- cb(undefined, f);
- });
}));
}
-function optimizeManualTask(options) {
- const concatenations = options.map(opt => {
- return gulp
- .src(opt.src)
- .pipe(concat(opt.out));
- });
- return es.merge(...concatenations);
-}
-function optimizeLoaderTask(src, out, bundleLoader, bundledFileHeader = '', externalLoaderInfo) {
- return () => loader(src, bundledFileHeader, bundleLoader, externalLoaderInfo).pipe(gulp.dest(out));
-}
-function optimizeTask(opts) {
+function bundleTask(opts) {
return function () {
- const optimizers = [];
- if ((0, esm_1.isESM)('Running optimizer in ESM mode')) {
- optimizers.push(optimizeESMTask(opts.amd, opts.commonJS));
- }
- else {
- optimizers.push(optimizeAMDTask(opts.amd));
- if (opts.commonJS) {
- optimizers.push(optimizeCommonJSTask(opts.commonJS));
- }
- }
- if (opts.manual) {
- optimizers.push(optimizeManualTask(opts.manual));
- }
- return es.merge(...optimizers).pipe(gulp.dest(opts.out));
+ return bundleESMTask(opts.esm).pipe(gulp.dest(opts.out));
};
}
function minifyTask(src, sourceMapBaseUrl) {
@@ -373,7 +169,8 @@ function minifyTask(src, sourceMapBaseUrl) {
minify: true,
sourcemap: 'external',
outdir: '.',
- platform: 'node',
+ packages: 'external', // "external all the things", see https://esbuild.github.io/api/#packages
+ platform: 'neutral', // makes esm
target: ['es2022'],
write: false
}).then(res => {
@@ -390,12 +187,7 @@ function minifyTask(src, sourceMapBaseUrl) {
cb(undefined, f);
}
}, cb);
- }), jsFilter.restore, cssFilter, (0, postcss_1.gulpPostcss)([cssnano({ preset: 'default' })]), cssFilter.restore, svgFilter, svgmin(), svgFilter.restore, sourcemaps.mapSources((sourcePath) => {
- if (sourcePath === 'bootstrap-fork.js') {
- return 'bootstrap-fork.orig.js';
- }
- return sourcePath;
- }), sourcemaps.write('./', {
+ }), jsFilter.restore, cssFilter, (0, postcss_1.gulpPostcss)([cssnano({ preset: 'default' })]), cssFilter.restore, svgFilter, svgmin(), svgFilter.restore, sourcemaps.write('./', {
sourceMappingURL,
sourceRoot: undefined,
includeContent: true,
diff --git a/build/lib/optimize.ts b/build/lib/optimize.ts
index c7503213456..40efe87d674 100644
--- a/build/lib/optimize.ts
+++ b/build/lib/optimize.ts
@@ -5,208 +5,43 @@
import * as es from 'event-stream';
import * as gulp from 'gulp';
-import * as concat from 'gulp-concat';
import * as filter from 'gulp-filter';
-import * as fancyLog from 'fancy-log';
-import * as ansiColors from 'ansi-colors';
import * as path from 'path';
import * as fs from 'fs';
import * as pump from 'pump';
import * as VinylFile from 'vinyl';
import * as bundle from './bundle';
-import { Language, processNlsFiles } from './i18n';
-import { createStatsStream } from './stats';
-import * as util from './util';
import { gulpPostcss } from './postcss';
import * as esbuild from 'esbuild';
import * as sourcemaps from 'gulp-sourcemaps';
-import { isESM } from './esm';
+import * as fancyLog from 'fancy-log';
+import * as ansiColors from 'ansi-colors';
const REPO_ROOT_PATH = path.join(__dirname, '../..');
-function log(prefix: string, message: string): void {
- fancyLog(ansiColors.cyan('[' + prefix + ']'), message);
-}
-
-export function loaderConfig() {
- const result: any = {
- paths: {
- 'vs': 'out-build/vs',
- 'vscode': 'empty:'
- },
- amdModulesPattern: /^vs\//
- };
-
- result['vs/css'] = { inlineResources: true };
-
- return result;
-}
-
-const IS_OUR_COPYRIGHT_REGEXP = /Copyright \(C\) Microsoft Corporation/i;
-
-function loaderPlugin(src: string, base: string, amdModuleId: string | undefined): NodeJS.ReadWriteStream {
- return (
- gulp
- .src(src, { base })
- .pipe(es.through(function (data: VinylFile) {
- if (amdModuleId) {
- let contents = data.contents.toString('utf8');
- contents = contents.replace(/^define\(/m, `define("${amdModuleId}",`);
- data.contents = Buffer.from(contents);
- }
- this.emit('data', data);
- }))
- );
-}
-
-function loader(src: string, bundledFileHeader: string, bundleLoader: boolean, externalLoaderInfo?: util.IExternalLoaderInfo): NodeJS.ReadWriteStream {
- let loaderStream = gulp.src(`${src}/vs/loader.js`, { base: `${src}` });
- if (bundleLoader) {
- loaderStream = es.merge(
- loaderStream,
- loaderPlugin(`${src}/vs/css.js`, `${src}`, 'vs/css')
- );
- }
-
- const files: VinylFile[] = [];
- const order = (f: VinylFile) => {
- if (f.path.endsWith('loader.js')) {
- return 0;
- }
- if (f.path.endsWith('css.js')) {
- return 1;
- }
- return 2;
- };
-
- return (
- loaderStream
- .pipe(es.through(function (data) {
- files.push(data);
- }, function () {
- files.sort((a, b) => {
- return order(a) - order(b);
- });
- files.unshift(new VinylFile({
- path: 'fake',
- base: '.',
- contents: Buffer.from(bundledFileHeader)
- }));
- if (externalLoaderInfo !== undefined) {
- files.push(new VinylFile({
- path: 'fake2',
- base: '.',
- contents: Buffer.from(emitExternalLoaderInfo(externalLoaderInfo))
- }));
- }
- for (const file of files) {
- this.emit('data', file);
- }
- this.emit('end');
- }))
- .pipe(concat('vs/loader.js'))
- );
-}
-
-function emitExternalLoaderInfo(externalLoaderInfo: util.IExternalLoaderInfo): string {
- const externalBaseUrl = externalLoaderInfo.baseUrl;
- externalLoaderInfo.baseUrl = '$BASE_URL';
-
- // If defined, use the runtime configured baseUrl.
- const code = `
-(function() {
- const baseUrl = require.getConfig().baseUrl || ${JSON.stringify(externalBaseUrl)};
- require.config(${JSON.stringify(externalLoaderInfo, undefined, 2)});
-})();`;
- return code.replace('"$BASE_URL"', 'baseUrl');
-}
-
-function toConcatStream(src: string, bundledFileHeader: string, sources: bundle.IFile[], dest: string, fileContentMapper: (contents: string, path: string) => string): NodeJS.ReadWriteStream {
- const useSourcemaps = /\.js$/.test(dest) && !/\.nls\.js$/.test(dest);
-
- // If a bundle ends up including in any of the sources our copyright, then
- // insert a fake source at the beginning of each bundle with our copyright
- let containsOurCopyright = false;
- for (let i = 0, len = sources.length; i < len; i++) {
- const fileContents = sources[i].contents;
- if (IS_OUR_COPYRIGHT_REGEXP.test(fileContents)) {
- containsOurCopyright = true;
- break;
- }
- }
-
- if (containsOurCopyright) {
- sources.unshift({
- path: null,
- contents: bundledFileHeader
- });
- }
-
- const treatedSources = sources.map(function (source) {
- const root = source.path ? REPO_ROOT_PATH.replace(/\\/g, '/') : '';
- const base = source.path ? root + `/${src}` : '.';
- const path = source.path ? root + '/' + source.path.replace(/\\/g, '/') : 'fake';
- const contents = source.path ? fileContentMapper(source.contents, path) : source.contents;
-
- return new VinylFile({
- path: path,
- base: base,
- contents: Buffer.from(contents)
- });
- });
-
- return es.readArray(treatedSources)
- .pipe(useSourcemaps ? util.loadSourcemaps() : es.through())
- .pipe(concat(dest))
- .pipe(createStatsStream(dest));
-}
-
-function toBundleStream(src: string, bundledFileHeader: string, bundles: bundle.IConcatFile[], fileContentMapper: (contents: string, path: string) => string): NodeJS.ReadWriteStream {
- return es.merge(bundles.map(function (bundle) {
- return toConcatStream(src, bundledFileHeader, bundle.sources, bundle.dest, fileContentMapper);
- }));
-}
-
-export interface IOptimizeAMDTaskOpts {
+export interface IBundleESMTaskOpts {
/**
* The folder to read files from.
*/
src: string;
/**
- * (for AMD files, will get bundled and get Copyright treatment)
- */
- entryPoints: bundle.IEntryPoint[];
- /**
- * (svg, etc.)
- */
- resources: string[];
- loaderConfig: any;
- /**
- * Additional info we append to the end of the loader
+ * The entry points to bundle.
*/
- externalLoaderInfo?: util.IExternalLoaderInfo;
+ entryPoints: Array;
/**
- * (true by default - append css and nls to loader)
+ * Other resources to consider (svg, etc.)
*/
- bundleLoader?: boolean;
+ resources?: string[];
/**
- * (basically the Copyright treatment)
+ * File contents interceptor for a given path.
*/
- header?: string;
+ fileContentMapper?: (path: string) => ((contents: string) => Promise | string) | undefined;
/**
- * (emit bundleInfo.json file)
+ * Allows to skip the removal of TS boilerplate. Use this when
+ * the entry point is small and the overhead of removing the
+ * boilerplate makes the file larger in the end.
*/
- bundleInfo: boolean;
- /**
- * Language configuration.
- */
- languages?: Language[];
- /**
- * File contents interceptor
- * @param contents The contents of the file
- * @param path The absolute file path, always using `/`, even on Windows
- */
- fileContentMapper?: (contents: string, path: string) => string;
+ skipTSBoilerplateRemoval?: (entryPointName: string) => boolean;
}
const DEFAULT_FILE_HEADER = [
@@ -215,72 +50,17 @@ const DEFAULT_FILE_HEADER = [
' *--------------------------------------------------------*/'
].join('\n');
-function optimizeAMDTask(opts: IOptimizeAMDTaskOpts): NodeJS.ReadWriteStream {
- const src = opts.src;
- const entryPoints = opts.entryPoints.filter(d => d.target !== 'esm');
- const resources = opts.resources;
- const loaderConfig = opts.loaderConfig;
- const bundledFileHeader = opts.header || DEFAULT_FILE_HEADER;
- const fileContentMapper = opts.fileContentMapper || ((contents: string, _path: string) => contents);
-
- const bundlesStream = es.through(); // this stream will contain the bundled files
+function bundleESMTask(opts: IBundleESMTaskOpts): NodeJS.ReadWriteStream {
const resourcesStream = es.through(); // this stream will contain the resources
- const bundleInfoStream = es.through(); // this stream will contain bundleInfo.json
-
- bundle.bundle(entryPoints, loaderConfig, function (err, result) {
- if (err || !result) { return bundlesStream.emit('error', JSON.stringify(err)); }
-
- toBundleStream(src, bundledFileHeader, result.files, fileContentMapper).pipe(bundlesStream);
+ const bundlesStream = es.through(); // this stream will contain the bundled files
- // Remove css inlined resources
- const filteredResources = resources.slice();
- result.cssInlinedResources.forEach(function (resource) {
- if (process.env['VSCODE_BUILD_VERBOSE']) {
- log('optimizer', 'excluding inlined: ' + resource);
- }
- filteredResources.push('!' + resource);
- });
- gulp.src(filteredResources, { base: `${src}`, allowEmpty: true }).pipe(resourcesStream);
-
- const bundleInfoArray: VinylFile[] = [];
- if (opts.bundleInfo) {
- bundleInfoArray.push(new VinylFile({
- path: 'bundleInfo.json',
- base: '.',
- contents: Buffer.from(JSON.stringify(result.bundleData, null, '\t'))
- }));
+ const entryPoints = opts.entryPoints.map(entryPoint => {
+ if (typeof entryPoint === 'string') {
+ return { name: path.parse(entryPoint).name };
}
- es.readArray(bundleInfoArray).pipe(bundleInfoStream);
- });
-
- const result = es.merge(
- loader(src, bundledFileHeader, false, opts.externalLoaderInfo),
- bundlesStream,
- resourcesStream,
- bundleInfoStream
- );
-
- return result
- .pipe(sourcemaps.write('./', {
- sourceRoot: undefined,
- addComment: true,
- includeContent: true
- }))
- .pipe(opts.languages && opts.languages.length ? processNlsFiles({
- out: opts.src,
- fileHeader: bundledFileHeader,
- languages: opts.languages
- }) : es.through());
-}
-
-function optimizeESMTask(opts: IOptimizeAMDTaskOpts, cjsOpts?: IOptimizeCommonJSTaskOpts): NodeJS.ReadWriteStream {
- const resourcesStream = es.through(); // this stream will contain the resources
- const bundlesStream = es.through(); // this stream will contain the bundled files
- const entryPoints = opts.entryPoints.filter(d => d.target !== 'amd');
- if (cjsOpts) {
- cjsOpts.entryPoints.forEach(entryPoint => entryPoints.push({ name: path.parse(entryPoint).name }));
- }
+ return entryPoint;
+ });
const allMentionedModules = new Set();
for (const entryPoint of entryPoints) {
@@ -289,44 +69,63 @@ function optimizeESMTask(opts: IOptimizeAMDTaskOpts, cjsOpts?: IOptimizeCommonJS
entryPoint.exclude?.forEach(allMentionedModules.add, allMentionedModules);
}
- allMentionedModules.delete('vs/css'); // TODO@esm remove this when vs/css is removed
-
const bundleAsync = async () => {
-
const files: VinylFile[] = [];
const tasks: Promise[] = [];
for (const entryPoint of entryPoints) {
-
- console.log(`[bundle] '${entryPoint.name}'`);
+ fancyLog(`Bundled entry point: ${ansiColors.yellow(entryPoint.name)}...`);
// support for 'dest' via esbuild#in/out
const dest = entryPoint.dest?.replace(/\.[^/.]+$/, '') ?? entryPoint.name;
- // boilerplate massage
- const banner = { js: '' };
- const tslibPath = path.join(require.resolve('tslib'), '../tslib.es6.js');
- banner.js += await fs.promises.readFile(tslibPath, 'utf-8');
+ // banner contents
+ const banner = {
+ js: DEFAULT_FILE_HEADER,
+ css: DEFAULT_FILE_HEADER
+ };
+
+ // TS Boilerplate
+ if (!opts.skipTSBoilerplateRemoval?.(entryPoint.name)) {
+ const tslibPath = path.join(require.resolve('tslib'), '../tslib.es6.js');
+ banner.js += await fs.promises.readFile(tslibPath, 'utf-8');
+ }
- const boilerplateTrimmer: esbuild.Plugin = {
- name: 'boilerplate-trimmer',
+ const contentsMapper: esbuild.Plugin = {
+ name: 'contents-mapper',
setup(build) {
- build.onLoad({ filter: /\.js$/ }, async args => {
- const contents = await fs.promises.readFile(args.path, 'utf-8');
- const newContents = bundle.removeAllTSBoilerplate(contents);
+ build.onLoad({ filter: /\.js$/ }, async ({ path }) => {
+ const contents = await fs.promises.readFile(path, 'utf-8');
+
+ // TS Boilerplate
+ let newContents: string;
+ if (!opts.skipTSBoilerplateRemoval?.(entryPoint.name)) {
+ newContents = bundle.removeAllTSBoilerplate(contents);
+ } else {
+ newContents = contents;
+ }
+
+ // File Content Mapper
+ const mapper = opts.fileContentMapper?.(path);
+ if (mapper) {
+ newContents = await mapper(newContents);
+ }
+
return { contents: newContents };
});
}
};
- // support for 'preprend' via the esbuild#banner
- if (entryPoint.prepend?.length) {
- for (const item of entryPoint.prepend) {
- const fullpath = path.join(REPO_ROOT_PATH, opts.src, item.path);
- const source = await fs.promises.readFile(fullpath, 'utf8');
- banner.js += source + '\n';
- }
- }
+ const externalOverride: esbuild.Plugin = {
+ name: 'external-override',
+ setup(build) {
+ // We inline selected modules that are we depend on on startup without
+ // a conditional `await import(...)` by hooking into the resolution.
+ build.onResolve({ filter: /^minimist$/ }, () => {
+ return { path: path.join(REPO_ROOT_PATH, 'node_modules', 'minimist', 'index.js'), external: false };
+ });
+ },
+ };
const task = esbuild.build({
bundle: true,
@@ -334,7 +133,8 @@ function optimizeESMTask(opts: IOptimizeAMDTaskOpts, cjsOpts?: IOptimizeCommonJS
packages: 'external', // "external all the things", see https://esbuild.github.io/api/#packages
platform: 'neutral', // makes esm
format: 'esm',
- plugins: [boilerplateTrimmer],
+ sourcemap: 'external',
+ plugins: [contentsMapper, externalOverride],
target: ['es2022'],
loader: {
'.ttf': 'file',
@@ -343,7 +143,7 @@ function optimizeESMTask(opts: IOptimizeAMDTaskOpts, cjsOpts?: IOptimizeCommonJS
'.sh': 'file',
},
assetNames: 'media/[name]', // moves media assets into a sub-folder "media"
- banner,
+ banner: entryPoint.name === 'vs/workbench/workbench.web.main' ? undefined : banner, // TODO@esm remove line when we stop supporting web-amd-esm-bridge
entryPoints: [
{
in: path.join(REPO_ROOT_PATH, opts.src, `${entryPoint.name}.js`),
@@ -353,35 +153,24 @@ function optimizeESMTask(opts: IOptimizeAMDTaskOpts, cjsOpts?: IOptimizeCommonJS
outdir: path.join(REPO_ROOT_PATH, opts.src),
write: false, // enables res.outputFiles
metafile: true, // enables res.metafile
-
+ // minify: NOT enabled because we have a separate minify task that takes care of the TSLib banner as well
}).then(res => {
for (const file of res.outputFiles) {
-
- let contents = file.contents;
-
+ let sourceMapFile: esbuild.OutputFile | undefined = undefined;
if (file.path.endsWith('.js')) {
-
- if (opts.fileContentMapper) {
- // UGLY the fileContentMapper is per file but at this point we have all files
- // bundled already. So, we call the mapper for the same contents but each file
- // that has been included in the bundle...
- let newText = file.text;
- for (const input of Object.keys(res.metafile.inputs)) {
- newText = opts.fileContentMapper(newText, input);
- }
- contents = Buffer.from(newText);
- }
+ sourceMapFile = res.outputFiles.find(f => f.path === `${file.path}.map`);
}
- files.push(new VinylFile({
- contents: Buffer.from(contents),
+ const fileProps = {
+ contents: Buffer.from(file.contents),
+ sourceMap: sourceMapFile ? JSON.parse(sourceMapFile.text) : undefined, // support gulp-sourcemaps
path: file.path,
base: path.join(REPO_ROOT_PATH, opts.src)
- }));
+ };
+ files.push(new VinylFile(fileProps));
}
});
- // await task; // FORCE serial bundling (makes debugging easier)
tasks.push(task);
}
@@ -395,7 +184,7 @@ function optimizeESMTask(opts: IOptimizeAMDTaskOpts, cjsOpts?: IOptimizeCommonJS
es.readArray(output.files).pipe(bundlesStream);
// forward all resources
- gulp.src(opts.resources, { base: `${opts.src}`, allowEmpty: true }).pipe(resourcesStream);
+ gulp.src(opts.resources ?? [], { base: `${opts.src}`, allowEmpty: true }).pipe(resourcesStream);
});
const result = es.merge(
@@ -408,117 +197,23 @@ function optimizeESMTask(opts: IOptimizeAMDTaskOpts, cjsOpts?: IOptimizeCommonJS
sourceRoot: undefined,
addComment: true,
includeContent: true
- }))
- .pipe(opts.languages && opts.languages.length ? processNlsFiles({
- out: opts.src,
- fileHeader: opts.header || DEFAULT_FILE_HEADER,
- languages: opts.languages
- }) : es.through());
-}
-
-export interface IOptimizeCommonJSTaskOpts {
- /**
- * The paths to consider for optimizing.
- */
- entryPoints: string[];
- /**
- * The folder to read files from.
- */
- src: string;
- /**
- * ESBuild `platform` option: https://esbuild.github.io/api/#platform
- */
- platform: 'browser' | 'node' | 'neutral';
- /**
- * ESBuild `external` option: https://esbuild.github.io/api/#external
- */
- external: string[];
-}
-
-function optimizeCommonJSTask(opts: IOptimizeCommonJSTaskOpts): NodeJS.ReadWriteStream {
- const src = opts.src;
- const entryPoints = opts.entryPoints;
-
- return gulp.src(entryPoints, { base: `${src}`, allowEmpty: true })
- .pipe(es.map((f: any, cb) => {
- esbuild.build({
- entryPoints: [f.path],
- bundle: true,
- platform: opts.platform,
- write: false,
- external: opts.external
- }).then(res => {
- const jsFile = res.outputFiles[0];
- f.contents = Buffer.from(jsFile.contents);
-
- cb(undefined, f);
- });
}));
}
-export interface IOptimizeManualTaskOpts {
- /**
- * The paths to consider for concatenation. The entries
- * will be concatenated in the order they are provided.
- */
- src: string[];
- /**
- * Destination target to concatenate the entryPoints into.
- */
- out: string;
-}
-
-function optimizeManualTask(options: IOptimizeManualTaskOpts[]): NodeJS.ReadWriteStream {
- const concatenations = options.map(opt => {
- return gulp
- .src(opt.src)
- .pipe(concat(opt.out));
- });
-
- return es.merge(...concatenations);
-}
-
-export function optimizeLoaderTask(src: string, out: string, bundleLoader: boolean, bundledFileHeader = '', externalLoaderInfo?: util.IExternalLoaderInfo): () => NodeJS.ReadWriteStream {
- return () => loader(src, bundledFileHeader, bundleLoader, externalLoaderInfo).pipe(gulp.dest(out));
-}
-
-export interface IOptimizeTaskOpts {
+export interface IBundleESMTaskOpts {
/**
- * Destination folder for the optimized files.
+ * Destination folder for the bundled files.
*/
out: string;
/**
- * Optimize AMD modules (using our AMD loader).
- */
- amd: IOptimizeAMDTaskOpts;
- /**
- * Optimize CommonJS modules (using esbuild).
- */
- commonJS?: IOptimizeCommonJSTaskOpts;
- /**
- * Optimize manually by concatenating files.
- */
- manual?: IOptimizeManualTaskOpts[];
+ * Bundle ESM modules (using esbuild).
+ */
+ esm: IBundleESMTaskOpts;
}
-export function optimizeTask(opts: IOptimizeTaskOpts): () => NodeJS.ReadWriteStream {
+export function bundleTask(opts: IBundleESMTaskOpts): () => NodeJS.ReadWriteStream {
return function () {
- const optimizers: NodeJS.ReadWriteStream[] = [];
- if (isESM('Running optimizer in ESM mode')) {
- optimizers.push(optimizeESMTask(opts.amd, opts.commonJS));
- } else {
- optimizers.push(optimizeAMDTask(opts.amd));
-
- if (opts.commonJS) {
- optimizers.push(optimizeCommonJSTask(opts.commonJS));
- }
- }
-
- if (opts.manual) {
- optimizers.push(optimizeManualTask(opts.manual));
- }
-
- return es.merge(...optimizers).pipe(gulp.dest(opts.out));
+ return bundleESMTask(opts.esm).pipe(gulp.dest(opts.out));
};
}
@@ -543,7 +238,8 @@ export function minifyTask(src: string, sourceMapBaseUrl?: string): (cb: any) =>
minify: true,
sourcemap: 'external',
outdir: '.',
- platform: 'node',
+ packages: 'external', // "external all the things", see https://esbuild.github.io/api/#packages
+ platform: 'neutral', // makes esm
target: ['es2022'],
write: false
}).then(res => {
@@ -569,13 +265,6 @@ export function minifyTask(src: string, sourceMapBaseUrl?: string): (cb: any) =>
svgFilter,
svgmin(),
svgFilter.restore,
- (sourcemaps).mapSources((sourcePath: string) => {
- if (sourcePath === 'bootstrap-fork.js') {
- return 'bootstrap-fork.orig.js';
- }
-
- return sourcePath;
- }),
sourcemaps.write('./', {
sourceMappingURL,
sourceRoot: undefined,
diff --git a/build/lib/preLaunch.js b/build/lib/preLaunch.js
index 1bfe7f573f6..4791514fdfe 100644
--- a/build/lib/preLaunch.js
+++ b/build/lib/preLaunch.js
@@ -8,7 +8,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
const path = require("path");
const child_process_1 = require("child_process");
const fs_1 = require("fs");
-const yarn = process.platform === 'win32' ? 'yarn.cmd' : 'yarn';
+const npm = process.platform === 'win32' ? 'npm.cmd' : 'npm';
const rootDir = path.resolve(__dirname, '..', '..');
function runProcess(command, args = []) {
return new Promise((resolve, reject) => {
@@ -28,15 +28,15 @@ async function exists(subdir) {
}
async function ensureNodeModules() {
if (!(await exists('node_modules'))) {
- await runProcess(yarn);
+ await runProcess(npm, ['ci']);
}
}
async function getElectron() {
- await runProcess(yarn, ['electron']);
+ await runProcess(npm, ['run', 'electron']);
}
async function ensureCompiled() {
if (!(await exists('out'))) {
- await runProcess(yarn, ['compile']);
+ await runProcess(npm, ['run', 'compile']);
}
}
async function main() {
diff --git a/build/lib/preLaunch.ts b/build/lib/preLaunch.ts
index d6776e62798..e0ea274458a 100644
--- a/build/lib/preLaunch.ts
+++ b/build/lib/preLaunch.ts
@@ -9,7 +9,7 @@ import * as path from 'path';
import { spawn } from 'child_process';
import { promises as fs } from 'fs';
-const yarn = process.platform === 'win32' ? 'yarn.cmd' : 'yarn';
+const npm = process.platform === 'win32' ? 'npm.cmd' : 'npm';
const rootDir = path.resolve(__dirname, '..', '..');
function runProcess(command: string, args: ReadonlyArray = []) {
@@ -31,17 +31,17 @@ async function exists(subdir: string) {
async function ensureNodeModules() {
if (!(await exists('node_modules'))) {
- await runProcess(yarn);
+ await runProcess(npm, ['ci']);
}
}
async function getElectron() {
- await runProcess(yarn, ['electron']);
+ await runProcess(npm, ['run', 'electron']);
}
async function ensureCompiled() {
if (!(await exists('out'))) {
- await runProcess(yarn, ['compile']);
+ await runProcess(npm, ['run', 'compile']);
}
}
diff --git a/build/lib/standalone.js b/build/lib/standalone.js
index 78030842569..16ae1e2b2d8 100644
--- a/build/lib/standalone.js
+++ b/build/lib/standalone.js
@@ -51,7 +51,12 @@ function extractEditor(options) {
// Add extra .d.ts files from `node_modules/@types/`
if (Array.isArray(options.compilerOptions?.types)) {
options.compilerOptions.types.forEach((type) => {
- options.typings.push(`../node_modules/@types/${type}/index.d.ts`);
+ if (type === '@webgpu/types') {
+ options.typings.push(`../node_modules/${type}/dist/index.d.ts`);
+ }
+ else {
+ options.typings.push(`../node_modules/@types/${type}/index.d.ts`);
+ }
});
}
const result = tss.shake(options);
@@ -79,13 +84,7 @@ function extractEditor(options) {
const info = ts.preProcessFile(fileContents);
for (let i = info.importedFiles.length - 1; i >= 0; i--) {
const importedFileName = info.importedFiles[i].fileName;
- let importedFilePath;
- if (/^vs\/css!/.test(importedFileName)) {
- importedFilePath = importedFileName.substr('vs/css!'.length) + '.css';
- }
- else {
- importedFilePath = importedFileName;
- }
+ let importedFilePath = importedFileName;
if (/(^\.\/)|(^\.\.\/)/.test(importedFilePath)) {
importedFilePath = path.join(path.dirname(fileName), importedFilePath);
}
@@ -93,8 +92,9 @@ function extractEditor(options) {
transportCSS(importedFilePath, copyFile, writeOutputFile);
}
else {
- if (fs.existsSync(path.join(options.sourcesRoot, importedFilePath + '.js'))) {
- copyFile(importedFilePath + '.js');
+ const pathToCopy = path.join(options.sourcesRoot, importedFilePath);
+ if (fs.existsSync(pathToCopy) && !fs.statSync(pathToCopy).isDirectory()) {
+ copyFile(importedFilePath);
}
}
}
@@ -103,14 +103,10 @@ function extractEditor(options) {
delete tsConfig.compilerOptions.moduleResolution;
writeOutputFile('tsconfig.json', JSON.stringify(tsConfig, null, '\t'));
[
- 'vs/css.build.ts',
- 'vs/css.ts',
- 'vs/loader.js',
- 'vs/loader.d.ts'
+ 'vs/loader.js'
].forEach(copyFile);
}
function createESMSourcesAndResources2(options) {
- const ts = require('typescript');
const SRC_FOLDER = path.join(REPO_ROOT, options.srcFolder);
const OUT_FOLDER = path.join(REPO_ROOT, options.outFolder);
const OUT_RESOURCES_FOLDER = path.join(REPO_ROOT, options.outResourcesFolder);
@@ -136,53 +132,11 @@ function createESMSourcesAndResources2(options) {
write(getDestAbsoluteFilePath(file), JSON.stringify(tsConfig, null, '\t'));
continue;
}
- if (/\.d\.ts$/.test(file) || /\.css$/.test(file) || /\.js$/.test(file) || /\.ttf$/.test(file)) {
+ if (/\.ts$/.test(file) || /\.d\.ts$/.test(file) || /\.css$/.test(file) || /\.js$/.test(file) || /\.ttf$/.test(file)) {
// Transport the files directly
write(getDestAbsoluteFilePath(file), fs.readFileSync(path.join(SRC_FOLDER, file)));
continue;
}
- if (/\.ts$/.test(file)) {
- // Transform the .ts file
- let fileContents = fs.readFileSync(path.join(SRC_FOLDER, file)).toString();
- const info = ts.preProcessFile(fileContents);
- for (let i = info.importedFiles.length - 1; i >= 0; i--) {
- const importedFilename = info.importedFiles[i].fileName;
- const pos = info.importedFiles[i].pos;
- const end = info.importedFiles[i].end;
- let importedFilepath;
- if (/^vs\/css!/.test(importedFilename)) {
- importedFilepath = importedFilename.substr('vs/css!'.length) + '.css';
- }
- else {
- importedFilepath = importedFilename;
- }
- if (/(^\.\/)|(^\.\.\/)/.test(importedFilepath)) {
- importedFilepath = path.join(path.dirname(file), importedFilepath);
- }
- let relativePath;
- if (importedFilepath === path.dirname(file).replace(/\\/g, '/')) {
- relativePath = '../' + path.basename(path.dirname(file));
- }
- else if (importedFilepath === path.dirname(path.dirname(file)).replace(/\\/g, '/')) {
- relativePath = '../../' + path.basename(path.dirname(path.dirname(file)));
- }
- else {
- relativePath = path.relative(path.dirname(file), importedFilepath);
- }
- relativePath = relativePath.replace(/\\/g, '/');
- if (!/(^\.\/)|(^\.\.\/)/.test(relativePath)) {
- relativePath = './' + relativePath;
- }
- fileContents = (fileContents.substring(0, pos + 1)
- + relativePath
- + fileContents.substring(end + 1));
- }
- fileContents = fileContents.replace(/import ([a-zA-Z0-9]+) = require\(('[^']+')\);/g, function (_, m1, m2) {
- return `import * as ${m1} from ${m2};`;
- });
- write(getDestAbsoluteFilePath(file), fileContents);
- continue;
- }
console.log(`UNKNOWN FILE: ${file}`);
}
function walkDirRecursive(dir) {
diff --git a/build/lib/standalone.ts b/build/lib/standalone.ts
index e1b9db65e12..8736583fb09 100644
--- a/build/lib/standalone.ts
+++ b/build/lib/standalone.ts
@@ -59,7 +59,11 @@ export function extractEditor(options: tss.ITreeShakingOptions & { destRoot: str
// Add extra .d.ts files from `node_modules/@types/`
if (Array.isArray(options.compilerOptions?.types)) {
options.compilerOptions.types.forEach((type: string) => {
- options.typings.push(`../node_modules/@types/${type}/index.d.ts`);
+ if (type === '@webgpu/types') {
+ options.typings.push(`../node_modules/${type}/dist/index.d.ts`);
+ } else {
+ options.typings.push(`../node_modules/@types/${type}/index.d.ts`);
+ }
});
}
@@ -90,12 +94,7 @@ export function extractEditor(options: tss.ITreeShakingOptions & { destRoot: str
for (let i = info.importedFiles.length - 1; i >= 0; i--) {
const importedFileName = info.importedFiles[i].fileName;
- let importedFilePath: string;
- if (/^vs\/css!/.test(importedFileName)) {
- importedFilePath = importedFileName.substr('vs/css!'.length) + '.css';
- } else {
- importedFilePath = importedFileName;
- }
+ let importedFilePath = importedFileName;
if (/(^\.\/)|(^\.\.\/)/.test(importedFilePath)) {
importedFilePath = path.join(path.dirname(fileName), importedFilePath);
}
@@ -103,8 +102,9 @@ export function extractEditor(options: tss.ITreeShakingOptions & { destRoot: str
if (/\.css$/.test(importedFilePath)) {
transportCSS(importedFilePath, copyFile, writeOutputFile);
} else {
- if (fs.existsSync(path.join(options.sourcesRoot, importedFilePath + '.js'))) {
- copyFile(importedFilePath + '.js');
+ const pathToCopy = path.join(options.sourcesRoot, importedFilePath);
+ if (fs.existsSync(pathToCopy) && !fs.statSync(pathToCopy).isDirectory()) {
+ copyFile(importedFilePath);
}
}
}
@@ -115,10 +115,7 @@ export function extractEditor(options: tss.ITreeShakingOptions & { destRoot: str
writeOutputFile('tsconfig.json', JSON.stringify(tsConfig, null, '\t'));
[
- 'vs/css.build.ts',
- 'vs/css.ts',
- 'vs/loader.js',
- 'vs/loader.d.ts'
+ 'vs/loader.js'
].forEach(copyFile);
}
@@ -131,7 +128,6 @@ export interface IOptions2 {
}
export function createESMSourcesAndResources2(options: IOptions2): void {
- const ts = require('typescript') as typeof import('typescript');
const SRC_FOLDER = path.join(REPO_ROOT, options.srcFolder);
const OUT_FOLDER = path.join(REPO_ROOT, options.outFolder);
@@ -163,60 +159,12 @@ export function createESMSourcesAndResources2(options: IOptions2): void {
continue;
}
- if (/\.d\.ts$/.test(file) || /\.css$/.test(file) || /\.js$/.test(file) || /\.ttf$/.test(file)) {
+ if (/\.ts$/.test(file) || /\.d\.ts$/.test(file) || /\.css$/.test(file) || /\.js$/.test(file) || /\.ttf$/.test(file)) {
// Transport the files directly
write(getDestAbsoluteFilePath(file), fs.readFileSync(path.join(SRC_FOLDER, file)));
continue;
}
- if (/\.ts$/.test(file)) {
- // Transform the .ts file
- let fileContents = fs.readFileSync(path.join(SRC_FOLDER, file)).toString();
-
- const info = ts.preProcessFile(fileContents);
-
- for (let i = info.importedFiles.length - 1; i >= 0; i--) {
- const importedFilename = info.importedFiles[i].fileName;
- const pos = info.importedFiles[i].pos;
- const end = info.importedFiles[i].end;
-
- let importedFilepath: string;
- if (/^vs\/css!/.test(importedFilename)) {
- importedFilepath = importedFilename.substr('vs/css!'.length) + '.css';
- } else {
- importedFilepath = importedFilename;
- }
- if (/(^\.\/)|(^\.\.\/)/.test(importedFilepath)) {
- importedFilepath = path.join(path.dirname(file), importedFilepath);
- }
-
- let relativePath: string;
- if (importedFilepath === path.dirname(file).replace(/\\/g, '/')) {
- relativePath = '../' + path.basename(path.dirname(file));
- } else if (importedFilepath === path.dirname(path.dirname(file)).replace(/\\/g, '/')) {
- relativePath = '../../' + path.basename(path.dirname(path.dirname(file)));
- } else {
- relativePath = path.relative(path.dirname(file), importedFilepath);
- }
- relativePath = relativePath.replace(/\\/g, '/');
- if (!/(^\.\/)|(^\.\.\/)/.test(relativePath)) {
- relativePath = './' + relativePath;
- }
- fileContents = (
- fileContents.substring(0, pos + 1)
- + relativePath
- + fileContents.substring(end + 1)
- );
- }
-
- fileContents = fileContents.replace(/import ([a-zA-Z0-9]+) = require\(('[^']+')\);/g, function (_, m1, m2) {
- return `import * as ${m1} from ${m2};`;
- });
-
- write(getDestAbsoluteFilePath(file), fileContents);
- continue;
- }
-
console.log(`UNKNOWN FILE: ${file}`);
}
diff --git a/build/lib/stylelint/vscode-known-variables.json b/build/lib/stylelint/vscode-known-variables.json
index 1e58abe1cc4..2ff57afce9e 100644
--- a/build/lib/stylelint/vscode-known-variables.json
+++ b/build/lib/stylelint/vscode-known-variables.json
@@ -17,6 +17,10 @@
"--vscode-activityBarTop-dropBorder",
"--vscode-activityBarTop-foreground",
"--vscode-activityBarTop-inactiveForeground",
+ "--vscode-activityErrorBadge-background",
+ "--vscode-activityErrorBadge-foreground",
+ "--vscode-activityWarningBadge-background",
+ "--vscode-activityWarningBadge-foreground",
"--vscode-badge-background",
"--vscode-badge-foreground",
"--vscode-banner-background",
@@ -45,6 +49,7 @@
"--vscode-charts-yellow",
"--vscode-chat-avatarBackground",
"--vscode-chat-avatarForeground",
+ "--vscode-chat-editedFileForeground",
"--vscode-chat-requestBackground",
"--vscode-chat-requestBorder",
"--vscode-chat-slashCommandBackground",
@@ -128,6 +133,7 @@
"--vscode-dropdown-foreground",
"--vscode-dropdown-listBackground",
"--vscode-editor-background",
+ "--vscode-editor-compositionBorder",
"--vscode-editor-findMatchBackground",
"--vscode-editor-findMatchBorder",
"--vscode-editor-findMatchForeground",
@@ -167,6 +173,10 @@
"--vscode-editor-wordHighlightStrongBorder",
"--vscode-editor-wordHighlightTextBackground",
"--vscode-editor-wordHighlightTextBorder",
+ "--vscode-editorActionList-background",
+ "--vscode-editorActionList-focusBackground",
+ "--vscode-editorActionList-focusForeground",
+ "--vscode-editorActionList-foreground",
"--vscode-editorActiveLineNumber-foreground",
"--vscode-editorBracketHighlight-foreground1",
"--vscode-editorBracketHighlight-foreground2",
@@ -255,10 +265,6 @@
"--vscode-editorLightBulb-foreground",
"--vscode-editorLightBulbAi-foreground",
"--vscode-editorLightBulbAutoFix-foreground",
- "--vscode-editorActionList-background",
- "--vscode-editorActionList-foreground",
- "--vscode-editorActionList-focusForeground",
- "--vscode-editorActionList-focusBackground",
"--vscode-editorLineNumber-activeForeground",
"--vscode-editorLineNumber-dimmedForeground",
"--vscode-editorLineNumber-foreground",
@@ -351,6 +357,12 @@
"--vscode-inlineChatInput-border",
"--vscode-inlineChatInput-focusBorder",
"--vscode-inlineChatInput-placeholderForeground",
+ "--vscode-inlineEdit-border",
+ "--vscode-inlineEdit-indicator-background",
+ "--vscode-inlineEdit-indicator-border",
+ "--vscode-inlineEdit-indicator-foreground",
+ "--vscode-inlineEdit-modifiedBackground",
+ "--vscode-inlineEdit-originalBackground",
"--vscode-input-background",
"--vscode-input-border",
"--vscode-input-foreground",
@@ -715,17 +727,19 @@
"--vscode-radio-inactiveForeground",
"--vscode-radio-inactiveHoverBackground",
"--vscode-sash-hoverBorder",
- "--vscode-scm-historyGraph-green",
- "--vscode-scm-historyGraph-historyItemGroupBase",
- "--vscode-scm-historyGraph-historyItemGroupHoverLabelForeground",
- "--vscode-scm-historyGraph-historyItemGroupLocal",
- "--vscode-scm-historyGraph-historyItemGroupRemote",
- "--vscode-scm-historyGraph-red",
- "--vscode-scm-historyGraph-yellow",
- "--vscode-scm-historyItemAdditionsForeground",
- "--vscode-scm-historyItemDeletionsForeground",
- "--vscode-scm-historyItemSelectedStatisticsBorder",
- "--vscode-scm-historyItemStatisticsBorder",
+ "--vscode-scmGraph-foreground1",
+ "--vscode-scmGraph-foreground2",
+ "--vscode-scmGraph-foreground3",
+ "--vscode-scmGraph-foreground4",
+ "--vscode-scmGraph-foreground5",
+ "--vscode-scmGraph-historyItemBaseRefColor",
+ "--vscode-scmGraph-historyItemHoverAdditionsForeground",
+ "--vscode-scmGraph-historyItemHoverDefaultLabelBackground",
+ "--vscode-scmGraph-historyItemHoverDefaultLabelForeground",
+ "--vscode-scmGraph-historyItemHoverDeletionsForeground",
+ "--vscode-scmGraph-historyItemHoverLabelForeground",
+ "--vscode-scmGraph-historyItemRefColor",
+ "--vscode-scmGraph-historyItemRemoteRefColor",
"--vscode-scrollbar-shadow",
"--vscode-scrollbarSlider-activeBackground",
"--vscode-scrollbarSlider-background",
@@ -976,6 +990,7 @@
"others": [
"--background-dark",
"--background-light",
+ "--chat-current-response-min-height",
"--dropdown-padding-bottom",
"--dropdown-padding-top",
"--insert-border-color",
@@ -1061,4 +1076,4 @@
"--positron-data-grid-column-header-sort-index-font-weight",
"--positron-data-grid-column-header-title-font-weight"
]
-}
+}
\ No newline at end of file
diff --git a/build/lib/treeshaking.js b/build/lib/treeshaking.js
index 842f691af8f..af06f4e3ec5 100644
--- a/build/lib/treeshaking.js
+++ b/build/lib/treeshaking.js
@@ -121,12 +121,15 @@ function discoverAndReadFiles(ts, options) {
for (let i = info.importedFiles.length - 1; i >= 0; i--) {
const importedFileName = info.importedFiles[i].fileName;
if (options.importIgnorePattern.test(importedFileName)) {
- // Ignore vs/css! imports
+ // Ignore *.css imports
continue;
}
let importedModuleId = importedFileName;
if (/(^\.\/)|(^\.\.\/)/.test(importedModuleId)) {
importedModuleId = path.join(path.dirname(moduleId), importedModuleId);
+ if (importedModuleId.endsWith('.js')) { // ESM: code imports require to be relative and have a '.js' file extension
+ importedModuleId = importedModuleId.substr(0, importedModuleId.length - 3);
+ }
}
enqueue(importedModuleId);
}
@@ -453,6 +456,9 @@ function markNodes(ts, languageService, options) {
const nodeSourceFile = node.getSourceFile();
let fullPath;
if (/(^\.\/)|(^\.\.\/)/.test(importText)) {
+ if (importText.endsWith('.js')) { // ESM: code imports require to be relative and to have a '.js' file extension
+ importText = importText.substr(0, importText.length - 3);
+ }
fullPath = path.join(path.dirname(nodeSourceFile.fileName), importText) + '.ts';
}
else {
diff --git a/build/lib/treeshaking.ts b/build/lib/treeshaking.ts
index d01b34d264f..cd17c5f0278 100644
--- a/build/lib/treeshaking.ts
+++ b/build/lib/treeshaking.ts
@@ -53,7 +53,7 @@ export interface ITreeShakingOptions {
*/
shakeLevel: ShakeLevel;
/**
- * regex pattern to ignore certain imports e.g. `vs/css!` imports
+ * regex pattern to ignore certain imports e.g. `.css` imports
*/
importIgnorePattern: RegExp;
@@ -182,13 +182,16 @@ function discoverAndReadFiles(ts: typeof import('typescript'), options: ITreeSha
const importedFileName = info.importedFiles[i].fileName;
if (options.importIgnorePattern.test(importedFileName)) {
- // Ignore vs/css! imports
+ // Ignore *.css imports
continue;
}
let importedModuleId = importedFileName;
if (/(^\.\/)|(^\.\.\/)/.test(importedModuleId)) {
importedModuleId = path.join(path.dirname(moduleId), importedModuleId);
+ if (importedModuleId.endsWith('.js')) { // ESM: code imports require to be relative and have a '.js' file extension
+ importedModuleId = importedModuleId.substr(0, importedModuleId.length - 3);
+ }
}
enqueue(importedModuleId);
}
@@ -567,6 +570,9 @@ function markNodes(ts: typeof import('typescript'), languageService: ts.Language
const nodeSourceFile = node.getSourceFile();
let fullPath: string;
if (/(^\.\/)|(^\.\.\/)/.test(importText)) {
+ if (importText.endsWith('.js')) { // ESM: code imports require to be relative and to have a '.js' file extension
+ importText = importText.substr(0, importText.length - 3);
+ }
fullPath = path.join(path.dirname(nodeSourceFile.fileName), importText) + '.ts';
} else {
fullPath = importText + '.ts';
diff --git a/build/lib/tsb/builder.js b/build/lib/tsb/builder.js
index fc74bfa8acc..cee2758e896 100644
--- a/build/lib/tsb/builder.js
+++ b/build/lib/tsb/builder.js
@@ -355,7 +355,7 @@ function createTypeScriptBuilder(config, projectFile, cmd) {
// print stats
const headNow = process.memoryUsage().heapUsed;
const MB = 1024 * 1024;
- _log('[tsb]', `time: ${colors.yellow((Date.now() - t1) + 'ms')} + \nmem: ${colors.cyan(Math.ceil(headNow / MB) + 'MB')} ${colors.bgCyan('delta: ' + Math.ceil((headNow - headUsed) / MB))}`);
+ _log('[tsb]', `time: ${colors.yellow((Date.now() - t1) + 'ms')} + \nmem: ${colors.cyan(Math.ceil(headNow / MB) + 'MB')} ${colors.bgcyan('delta: ' + Math.ceil((headNow - headUsed) / MB))}`);
headUsed = headNow;
});
}
@@ -550,7 +550,10 @@ class LanguageServiceHost {
let found = false;
while (!found && dirname.indexOf(stopDirname) === 0) {
dirname = path.dirname(dirname);
- const resolvedPath = path.resolve(dirname, ref.fileName);
+ let resolvedPath = path.resolve(dirname, ref.fileName);
+ if (resolvedPath.endsWith('.js')) {
+ resolvedPath = resolvedPath.slice(0, -3);
+ }
const normalizedPath = normalize(resolvedPath);
if (this.getScriptSnapshot(normalizedPath + '.ts')) {
this._dependencies.inertEdge(filename, normalizedPath + '.ts');
diff --git a/build/lib/tsb/builder.ts b/build/lib/tsb/builder.ts
index 9fc476ae702..70c71591a6e 100644
--- a/build/lib/tsb/builder.ts
+++ b/build/lib/tsb/builder.ts
@@ -427,7 +427,7 @@ export function createTypeScriptBuilder(config: IConfiguration, projectFile: str
const MB = 1024 * 1024;
_log(
'[tsb]',
- `time: ${colors.yellow((Date.now() - t1) + 'ms')} + \nmem: ${colors.cyan(Math.ceil(headNow / MB) + 'MB')} ${colors.bgCyan('delta: ' + Math.ceil((headNow - headUsed) / MB))}`
+ `time: ${colors.yellow((Date.now() - t1) + 'ms')} + \nmem: ${colors.cyan(Math.ceil(headNow / MB) + 'MB')} ${colors.bgcyan('delta: ' + Math.ceil((headNow - headUsed) / MB))}`
);
headUsed = headNow;
});
@@ -660,7 +660,10 @@ class LanguageServiceHost implements ts.LanguageServiceHost {
while (!found && dirname.indexOf(stopDirname) === 0) {
dirname = path.dirname(dirname);
- const resolvedPath = path.resolve(dirname, ref.fileName);
+ let resolvedPath = path.resolve(dirname, ref.fileName);
+ if (resolvedPath.endsWith('.js')) {
+ resolvedPath = resolvedPath.slice(0, -3);
+ }
const normalizedPath = normalize(resolvedPath);
if (this.getScriptSnapshot(normalizedPath + '.ts')) {
diff --git a/build/lib/tsb/index.js b/build/lib/tsb/index.js
index 8b8116d5a49..204c06e80ac 100644
--- a/build/lib/tsb/index.js
+++ b/build/lib/tsb/index.js
@@ -14,8 +14,8 @@ const path_1 = require("path");
const utils_1 = require("./utils");
const fs_1 = require("fs");
const log = require("fancy-log");
-const colors = require("ansi-colors");
const transpiler_1 = require("./transpiler");
+const colors = require("ansi-colors");
class EmptyDuplex extends stream_1.Duplex {
_write(_chunk, _encoding, callback) { callback(); }
_read() { this.push(null); }
@@ -97,7 +97,7 @@ function create(projectPath, existingOptions, config, onError = _defaultOnError)
if (config.transpileOnly) {
const transpiler = !config.transpileWithSwc
? new transpiler_1.TscTranspiler(logFn, printDiagnostic, projectPath, cmdLine)
- : new transpiler_1.SwcTranspiler(logFn, printDiagnostic, projectPath, cmdLine);
+ : new transpiler_1.ESBuildTranspiler(logFn, printDiagnostic, projectPath, cmdLine);
result = (() => createTranspileStream(transpiler));
}
else {
diff --git a/build/lib/tsb/index.ts b/build/lib/tsb/index.ts
index 670ac6542e7..53c752d2655 100644
--- a/build/lib/tsb/index.ts
+++ b/build/lib/tsb/index.ts
@@ -12,8 +12,8 @@ import { dirname } from 'path';
import { strings } from './utils';
import { readFileSync, statSync } from 'fs';
import * as log from 'fancy-log';
+import { ESBuildTranspiler, ITranspiler, TscTranspiler } from './transpiler';
import colors = require('ansi-colors');
-import { ITranspiler, SwcTranspiler, TscTranspiler } from './transpiler';
export interface IncrementalCompiler {
(token?: any): Readable & Writable;
@@ -130,7 +130,7 @@ export function create(
if (config.transpileOnly) {
const transpiler = !config.transpileWithSwc
? new TscTranspiler(logFn, printDiagnostic, projectPath, cmdLine)
- : new SwcTranspiler(logFn, printDiagnostic, projectPath, cmdLine);
+ : new ESBuildTranspiler(logFn, printDiagnostic, projectPath, cmdLine);
result = (() => createTranspileStream(transpiler));
} else {
const _builder = builder.createTypeScriptBuilder({ logFn }, projectPath, cmdLine);
diff --git a/build/lib/tsb/transpiler.js b/build/lib/tsb/transpiler.js
index 5dcc4ca1ed3..a4439b8d7ae 100644
--- a/build/lib/tsb/transpiler.js
+++ b/build/lib/tsb/transpiler.js
@@ -4,8 +4,8 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
Object.defineProperty(exports, "__esModule", { value: true });
-exports.SwcTranspiler = exports.TscTranspiler = void 0;
-const swc = require("@swc/core");
+exports.ESBuildTranspiler = exports.TscTranspiler = void 0;
+const esbuild = require("esbuild");
const ts = require("typescript");
const threads = require("node:worker_threads");
const Vinyl = require("vinyl");
@@ -62,7 +62,7 @@ class OutputFileNameOracle {
catch (err) {
console.error(file, cmdLine.fileNames);
console.error(err);
- throw new err;
+ throw err;
}
};
}
@@ -224,25 +224,41 @@ class TscTranspiler {
}
}
exports.TscTranspiler = TscTranspiler;
-function _isDefaultEmpty(src) {
- return src
- .replace('"use strict";', '')
- .replace(/\/\*[\s\S]*?\*\/|([^\\:]|^)\/\/.*$/gm, '$1')
- .trim().length === 0;
-}
-class SwcTranspiler {
+class ESBuildTranspiler {
_logFn;
_onError;
_cmdLine;
- onOutfile;
_outputFileNames;
_jobs = [];
+ onOutfile;
+ _transformOpts;
constructor(_logFn, _onError, configFilePath, _cmdLine) {
this._logFn = _logFn;
this._onError = _onError;
this._cmdLine = _cmdLine;
- _logFn('Transpile', `will use SWC to transpile source files`);
+ _logFn('Transpile', `will use ESBuild to transpile source files`);
this._outputFileNames = new OutputFileNameOracle(_cmdLine, configFilePath);
+ const isExtension = configFilePath.includes('extensions');
+ this._transformOpts = {
+ target: ['es2022'],
+ format: isExtension ? 'cjs' : 'esm',
+ platform: isExtension ? 'node' : undefined,
+ loader: 'ts',
+ sourcemap: 'inline',
+ tsconfigRaw: JSON.stringify({
+ compilerOptions: {
+ ...this._cmdLine.options,
+ ...{
+ module: isExtension ? ts.ModuleKind.CommonJS : undefined
+ }
+ }
+ }),
+ supported: {
+ 'class-static-blocks': false, // SEE https://github.com/evanw/esbuild/issues/3823,
+ 'dynamic-import': !isExtension, // see https://github.com/evanw/esbuild/issues/1281
+ 'class-field': !isExtension
+ }
+ };
}
async join() {
const jobs = this._jobs.slice();
@@ -250,26 +266,17 @@ class SwcTranspiler {
await Promise.allSettled(jobs);
}
transpile(file) {
- if (this._cmdLine.options.noEmit) {
- // not doing ANYTHING here
- return;
+ if (!(file.contents instanceof Buffer)) {
+ throw Error('file.contents must be a Buffer');
}
- const tsSrc = String(file.contents);
const t1 = Date.now();
- let options = SwcTranspiler._swcrcEsm;
- if (this._cmdLine.options.module === ts.ModuleKind.AMD) {
- const isAmd = /\n(import|export)/m.test(tsSrc);
- if (isAmd) {
- options = SwcTranspiler._swcrcAmd;
- }
- }
- else if (this._cmdLine.options.module === ts.ModuleKind.CommonJS) {
- options = SwcTranspiler._swcrcCommonJS;
- }
- this._jobs.push(swc.transform(tsSrc, options).then(output => {
+ this._jobs.push(esbuild.transform(file.contents, {
+ ...this._transformOpts,
+ sourcefile: file.path,
+ }).then(result => {
// check if output of a DTS-files isn't just "empty" and iff so
// skip this file
- if (file.path.endsWith('.d.ts') && _isDefaultEmpty(output.code)) {
+ if (file.path.endsWith('.d.ts') && _isDefaultEmpty(result.code)) {
return;
}
const outBase = this._cmdLine.options.outDir ?? file.base;
@@ -277,51 +284,20 @@ class SwcTranspiler {
this.onOutfile(new Vinyl({
path: outPath,
base: outBase,
- contents: Buffer.from(output.code),
+ contents: Buffer.from(result.code),
}));
- this._logFn('Transpile', `swc took ${Date.now() - t1}ms for ${file.path}`);
+ this._logFn('Transpile', `esbuild took ${Date.now() - t1}ms for ${file.path}`);
}).catch(err => {
this._onError(err);
}));
}
- // --- .swcrc
- static _swcrcAmd = {
- exclude: '\.js$',
- jsc: {
- parser: {
- syntax: 'typescript',
- tsx: false,
- decorators: true
- },
- target: 'es2022',
- loose: false,
- minify: {
- compress: false,
- mangle: false
- },
- transform: {
- useDefineForClassFields: false,
- },
- },
- module: {
- type: 'amd',
- noInterop: false
- },
- minify: false,
- };
- static _swcrcCommonJS = {
- ...this._swcrcAmd,
- module: {
- type: 'commonjs',
- importInterop: 'swc'
- }
- };
- static _swcrcEsm = {
- ...this._swcrcAmd,
- module: {
- type: 'es6'
- }
- };
}
-exports.SwcTranspiler = SwcTranspiler;
+exports.ESBuildTranspiler = ESBuildTranspiler;
+function _isDefaultEmpty(src) {
+ return src
+ .replace('"use strict";', '')
+ .replace(/\/\/# sourceMappingURL.*^/, '')
+ .replace(/\/\*[\s\S]*?\*\/|([^\\:]|^)\/\/.*$/gm, '$1')
+ .trim().length === 0;
+}
//# sourceMappingURL=transpiler.js.map
\ No newline at end of file
diff --git a/build/lib/tsb/transpiler.ts b/build/lib/tsb/transpiler.ts
index cbc3d9e8eee..ae841dcf88b 100644
--- a/build/lib/tsb/transpiler.ts
+++ b/build/lib/tsb/transpiler.ts
@@ -3,7 +3,7 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
-import * as swc from '@swc/core';
+import * as esbuild from 'esbuild';
import * as ts from 'typescript';
import * as threads from 'node:worker_threads';
import * as Vinyl from 'vinyl';
@@ -84,7 +84,7 @@ class OutputFileNameOracle {
} catch (err) {
console.error(file, cmdLine.fileNames);
console.error(err);
- throw new err;
+ throw err;
}
};
}
@@ -291,20 +291,14 @@ export class TscTranspiler implements ITranspiler {
}
}
-function _isDefaultEmpty(src: string): boolean {
- return src
- .replace('"use strict";', '')
- .replace(/\/\*[\s\S]*?\*\/|([^\\:]|^)\/\/.*$/gm, '$1')
- .trim().length === 0;
-}
-
+export class ESBuildTranspiler implements ITranspiler {
-export class SwcTranspiler implements ITranspiler {
+ private readonly _outputFileNames: OutputFileNameOracle;
+ private _jobs: Promise[] = [];
onOutfile?: ((file: Vinyl) => void) | undefined;
- private readonly _outputFileNames: OutputFileNameOracle;
- private _jobs: Promise[] = [];
+ private readonly _transformOpts: esbuild.TransformOptions;
constructor(
private readonly _logFn: (topic: string, message: string) => void,
@@ -312,8 +306,31 @@ export class SwcTranspiler implements ITranspiler {
configFilePath: string,
private readonly _cmdLine: ts.ParsedCommandLine
) {
- _logFn('Transpile', `will use SWC to transpile source files`);
+ _logFn('Transpile', `will use ESBuild to transpile source files`);
this._outputFileNames = new OutputFileNameOracle(_cmdLine, configFilePath);
+
+ const isExtension = configFilePath.includes('extensions');
+
+ this._transformOpts = {
+ target: ['es2022'],
+ format: isExtension ? 'cjs' : 'esm',
+ platform: isExtension ? 'node' : undefined,
+ loader: 'ts',
+ sourcemap: 'inline',
+ tsconfigRaw: JSON.stringify({
+ compilerOptions: {
+ ...this._cmdLine.options,
+ ...{
+ module: isExtension ? ts.ModuleKind.CommonJS : undefined
+ } satisfies ts.CompilerOptions
+ }
+ }),
+ supported: {
+ 'class-static-blocks': false, // SEE https://github.com/evanw/esbuild/issues/3823,
+ 'dynamic-import': !isExtension, // see https://github.com/evanw/esbuild/issues/1281
+ 'class-field': !isExtension
+ }
+ };
}
async join(): Promise {
@@ -323,29 +340,18 @@ export class SwcTranspiler implements ITranspiler {
}
transpile(file: Vinyl): void {
- if (this._cmdLine.options.noEmit) {
- // not doing ANYTHING here
- return;
+ if (!(file.contents instanceof Buffer)) {
+ throw Error('file.contents must be a Buffer');
}
-
- const tsSrc = String(file.contents);
const t1 = Date.now();
-
- let options: swc.Options = SwcTranspiler._swcrcEsm;
- if (this._cmdLine.options.module === ts.ModuleKind.AMD) {
- const isAmd = /\n(import|export)/m.test(tsSrc);
- if (isAmd) {
- options = SwcTranspiler._swcrcAmd;
- }
- } else if (this._cmdLine.options.module === ts.ModuleKind.CommonJS) {
- options = SwcTranspiler._swcrcCommonJS;
- }
-
- this._jobs.push(swc.transform(tsSrc, options).then(output => {
+ this._jobs.push(esbuild.transform(file.contents, {
+ ...this._transformOpts,
+ sourcefile: file.path,
+ }).then(result => {
// check if output of a DTS-files isn't just "empty" and iff so
// skip this file
- if (file.path.endsWith('.d.ts') && _isDefaultEmpty(output.code)) {
+ if (file.path.endsWith('.d.ts') && _isDefaultEmpty(result.code)) {
return;
}
@@ -355,56 +361,21 @@ export class SwcTranspiler implements ITranspiler {
this.onOutfile!(new Vinyl({
path: outPath,
base: outBase,
- contents: Buffer.from(output.code),
+ contents: Buffer.from(result.code),
}));
- this._logFn('Transpile', `swc took ${Date.now() - t1}ms for ${file.path}`);
+ this._logFn('Transpile', `esbuild took ${Date.now() - t1}ms for ${file.path}`);
}).catch(err => {
this._onError(err);
}));
}
+}
- // --- .swcrc
-
-
- private static readonly _swcrcAmd: swc.Options = {
- exclude: '\.js$',
- jsc: {
- parser: {
- syntax: 'typescript',
- tsx: false,
- decorators: true
- },
- target: 'es2022',
- loose: false,
- minify: {
- compress: false,
- mangle: false
- },
- transform: {
- useDefineForClassFields: false,
- },
- },
- module: {
- type: 'amd',
- noInterop: false
- },
- minify: false,
- };
-
- private static readonly _swcrcCommonJS: swc.Options = {
- ...this._swcrcAmd,
- module: {
- type: 'commonjs',
- importInterop: 'swc'
- }
- };
-
- private static readonly _swcrcEsm: swc.Options = {
- ...this._swcrcAmd,
- module: {
- type: 'es6'
- }
- };
+function _isDefaultEmpty(src: string): boolean {
+ return src
+ .replace('"use strict";', '')
+ .replace(/\/\/# sourceMappingURL.*^/, '')
+ .replace(/\/\*[\s\S]*?\*\/|([^\\:]|^)\/\/.*$/gm, '$1')
+ .trim().length === 0;
}
diff --git a/build/lib/util.js b/build/lib/util.js
index 82e1fdfdd8b..14042bf5b06 100644
--- a/build/lib/util.js
+++ b/build/lib/util.js
@@ -23,12 +23,8 @@ exports.rreddir = rreddir;
exports.ensureDir = ensureDir;
exports.rebase = rebase;
exports.filter = filter;
-exports.versionStringToNumber = versionStringToNumber;
exports.streamToPromise = streamToPromise;
exports.getElectronVersion = getElectronVersion;
-exports.acquireWebNodePaths = acquireWebNodePaths;
-exports.createExternalLoaderConfig = createExternalLoaderConfig;
-exports.buildWebNodePaths = buildWebNodePaths;
const es = require("event-stream");
const _debounce = require("debounce");
const _filter = require("gulp-filter");
@@ -361,14 +357,6 @@ function filter(fn) {
result.restore = es.through();
return result;
}
-function versionStringToNumber(versionStr) {
- const semverRegex = /(\d+)\.(\d+)\.(\d+)/;
- const match = versionStr.match(semverRegex);
- if (!match) {
- throw new Error('Version string is not properly formatted: ' + versionStr);
- }
- return parseInt(match[1], 10) * 1e4 + parseInt(match[2], 10) * 1e2 + parseInt(match[3], 10);
-}
function streamToPromise(stream) {
return new Promise((c, e) => {
stream.on('error', err => e(err));
@@ -376,103 +364,9 @@ function streamToPromise(stream) {
});
}
function getElectronVersion() {
- const yarnrc = fs.readFileSync(path.join(root, '.yarnrc'), 'utf8');
- const electronVersion = /^target "(.*)"$/m.exec(yarnrc)[1];
- const msBuildId = /^ms_build_id "(.*)"$/m.exec(yarnrc)[1];
+ const npmrc = fs.readFileSync(path.join(root, '.npmrc'), 'utf8');
+ const electronVersion = /^target="(.*)"$/m.exec(npmrc)[1];
+ const msBuildId = /^ms_build_id="(.*)"$/m.exec(npmrc)[1];
return { electronVersion, msBuildId };
}
-function acquireWebNodePaths() {
- const root = path.join(__dirname, '..', '..');
- const webPackageJSON = path.join(root, '/remote/web', 'package.json');
- const webPackages = JSON.parse(fs.readFileSync(webPackageJSON, 'utf8')).dependencies;
- const distroWebPackageJson = path.join(root, '.build/distro/npm/remote/web/package.json');
- if (fs.existsSync(distroWebPackageJson)) {
- const distroWebPackages = JSON.parse(fs.readFileSync(distroWebPackageJson, 'utf8')).dependencies;
- Object.assign(webPackages, distroWebPackages);
- }
- const nodePaths = {};
- for (const key of Object.keys(webPackages)) {
- const packageJSON = path.join(root, 'node_modules', key, 'package.json');
- const packageData = JSON.parse(fs.readFileSync(packageJSON, 'utf8'));
- // Only cases where the browser is a string are handled
- let entryPoint = typeof packageData.browser === 'string' ? packageData.browser : packageData.main;
- // On rare cases a package doesn't have an entrypoint so we assume it has a dist folder with a min.js
- if (!entryPoint) {
- // TODO @lramos15 remove this when jschardet adds an entrypoint so we can warn on all packages w/out entrypoint
- if (key !== 'jschardet') {
- console.warn(`No entry point for ${key} assuming dist/${key}.min.js`);
- }
- entryPoint = `dist/${key}.min.js`;
- }
- // Remove any starting path information so it's all relative info
- if (entryPoint.startsWith('./')) {
- entryPoint = entryPoint.substring(2);
- }
- else if (entryPoint.startsWith('/')) {
- entryPoint = entryPoint.substring(1);
- }
- // Search for a minified entrypoint as well
- if (/(? new Promise((resolve, _) => {
- const root = path.join(__dirname, '..', '..');
- const nodePaths = acquireWebNodePaths();
- // Now we write the node paths to out/vs
- const outDirectory = path.join(root, outDir, 'vs');
- fs.mkdirSync(outDirectory, { recursive: true });
- const headerWithGeneratedFileWarning = `/*---------------------------------------------------------------------------------------------
- * Copyright (c) Microsoft Corporation. All rights reserved.
- * Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-
- // This file is generated by build/npm/postinstall.js. Do not edit.`;
- const fileContents = `${headerWithGeneratedFileWarning}\nself.webPackagePaths = ${JSON.stringify(nodePaths, null, 2)};`;
- fs.writeFileSync(path.join(outDirectory, 'webPackagePaths.js'), fileContents, 'utf8');
- resolve();
- });
- result.taskName = 'build-web-node-paths';
- return result;
-}
//# sourceMappingURL=util.js.map
\ No newline at end of file
diff --git a/build/lib/util.ts b/build/lib/util.ts
index 2477736f34f..92008bfffe0 100644
--- a/build/lib/util.ts
+++ b/build/lib/util.ts
@@ -436,16 +436,6 @@ export function filter(fn: (data: any) => boolean): FilterStream {
return result;
}
-export function versionStringToNumber(versionStr: string) {
- const semverRegex = /(\d+)\.(\d+)\.(\d+)/;
- const match = versionStr.match(semverRegex);
- if (!match) {
- throw new Error('Version string is not properly formatted: ' + versionStr);
- }
-
- return parseInt(match[1], 10) * 1e4 + parseInt(match[2], 10) * 1e2 + parseInt(match[3], 10);
-}
-
export function streamToPromise(stream: NodeJS.ReadWriteStream): Promise {
return new Promise((c, e) => {
stream.on('error', err => e(err));
@@ -454,119 +444,9 @@ export function streamToPromise(stream: NodeJS.ReadWriteStream): Promise {
}
export function getElectronVersion(): Record {
- const yarnrc = fs.readFileSync(path.join(root, '.yarnrc'), 'utf8');
- const electronVersion = /^target "(.*)"$/m.exec(yarnrc)![1];
- const msBuildId = /^ms_build_id "(.*)"$/m.exec(yarnrc)![1];
+ const npmrc = fs.readFileSync(path.join(root, '.npmrc'), 'utf8');
+ const electronVersion = /^target="(.*)"$/m.exec(npmrc)![1];
+ const msBuildId = /^ms_build_id="(.*)"$/m.exec(npmrc)![1];
return { electronVersion, msBuildId };
}
-export function acquireWebNodePaths() {
- const root = path.join(__dirname, '..', '..');
- const webPackageJSON = path.join(root, '/remote/web', 'package.json');
- const webPackages = JSON.parse(fs.readFileSync(webPackageJSON, 'utf8')).dependencies;
-
- const distroWebPackageJson = path.join(root, '.build/distro/npm/remote/web/package.json');
- if (fs.existsSync(distroWebPackageJson)) {
- const distroWebPackages = JSON.parse(fs.readFileSync(distroWebPackageJson, 'utf8')).dependencies;
- Object.assign(webPackages, distroWebPackages);
- }
-
- const nodePaths: { [key: string]: string } = {};
- for (const key of Object.keys(webPackages)) {
- const packageJSON = path.join(root, 'node_modules', key, 'package.json');
- const packageData = JSON.parse(fs.readFileSync(packageJSON, 'utf8'));
- // Only cases where the browser is a string are handled
- let entryPoint: string = typeof packageData.browser === 'string' ? packageData.browser : packageData.main;
-
- // On rare cases a package doesn't have an entrypoint so we assume it has a dist folder with a min.js
- if (!entryPoint) {
- // TODO @lramos15 remove this when jschardet adds an entrypoint so we can warn on all packages w/out entrypoint
- if (key !== 'jschardet') {
- console.warn(`No entry point for ${key} assuming dist/${key}.min.js`);
- }
-
- entryPoint = `dist/${key}.min.js`;
- }
-
- // Remove any starting path information so it's all relative info
- if (entryPoint.startsWith('./')) {
- entryPoint = entryPoint.substring(2);
- } else if (entryPoint.startsWith('/')) {
- entryPoint = entryPoint.substring(1);
- }
-
- // Search for a minified entrypoint as well
- if (/(? new Promise((resolve, _) => {
- const root = path.join(__dirname, '..', '..');
- const nodePaths = acquireWebNodePaths();
- // Now we write the node paths to out/vs
- const outDirectory = path.join(root, outDir, 'vs');
- fs.mkdirSync(outDirectory, { recursive: true });
- const headerWithGeneratedFileWarning = `/*---------------------------------------------------------------------------------------------
- * Copyright (c) Microsoft Corporation. All rights reserved.
- * Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-
- // This file is generated by build/npm/postinstall.js. Do not edit.`;
- const fileContents = `${headerWithGeneratedFileWarning}\nself.webPackagePaths = ${JSON.stringify(nodePaths, null, 2)};`;
- fs.writeFileSync(path.join(outDirectory, 'webPackagePaths.js'), fileContents, 'utf8');
- resolve();
- });
- result.taskName = 'build-web-node-paths';
- return result;
-}
diff --git a/build/linux/debian/calculate-deps.js b/build/linux/debian/calculate-deps.js
index bbcb6bfc3de..57934e65799 100644
--- a/build/linux/debian/calculate-deps.js
+++ b/build/linux/debian/calculate-deps.js
@@ -72,13 +72,19 @@ function calculatePackageDeps(binaryPath, arch, chromiumSysroot, vscodeSysroot)
// libgcc-s1 is a dependency of libc6. This hack can be removed once
// support for Debian Buster and Ubuntu Bionic are dropped.
//
+ // libgdk-pixbuf package has been renamed from libgdk-pixbuf2.0-0 to
+ // libgdk-pixbuf-2.0-0 in recent distros. Since we only ship a single
+ // linux package we cannot declare a dependeny on it. We can safely
+ // exclude this dependency as GTK depends on it and we depend on GTK.
+ //
// Remove kerberos native module related dependencies as the versions
// computed from sysroot will not satisfy the minimum supported distros
// Refs https://github.com/microsoft/vscode/issues/188881.
// TODO(deepak1556): remove this workaround in favor of computing the
// versions from build container for native modules.
const filteredDeps = depsStr.split(', ').filter(dependency => {
- return !dependency.startsWith('libgcc-s1');
+ return !dependency.startsWith('libgcc-s1') &&
+ !dependency.startsWith('libgdk-pixbuf');
}).sort();
const requires = new Set(filteredDeps);
return requires;
diff --git a/build/linux/debian/calculate-deps.ts b/build/linux/debian/calculate-deps.ts
index 92f8065f262..c44e241388b 100644
--- a/build/linux/debian/calculate-deps.ts
+++ b/build/linux/debian/calculate-deps.ts
@@ -84,13 +84,19 @@ function calculatePackageDeps(binaryPath: string, arch: DebianArchString, chromi
// libgcc-s1 is a dependency of libc6. This hack can be removed once
// support for Debian Buster and Ubuntu Bionic are dropped.
//
+ // libgdk-pixbuf package has been renamed from libgdk-pixbuf2.0-0 to
+ // libgdk-pixbuf-2.0-0 in recent distros. Since we only ship a single
+ // linux package we cannot declare a dependeny on it. We can safely
+ // exclude this dependency as GTK depends on it and we depend on GTK.
+ //
// Remove kerberos native module related dependencies as the versions
// computed from sysroot will not satisfy the minimum supported distros
// Refs https://github.com/microsoft/vscode/issues/188881.
// TODO(deepak1556): remove this workaround in favor of computing the
// versions from build container for native modules.
const filteredDeps = depsStr.split(', ').filter(dependency => {
- return !dependency.startsWith('libgcc-s1');
+ return !dependency.startsWith('libgcc-s1') &&
+ !dependency.startsWith('libgdk-pixbuf');
}).sort();
const requires = new Set(filteredDeps);
return requires;
diff --git a/build/linux/debian/install-sysroot.js b/build/linux/debian/install-sysroot.js
index feca7d3fa9d..354c67a2909 100644
--- a/build/linux/debian/install-sysroot.js
+++ b/build/linux/debian/install-sysroot.js
@@ -14,7 +14,7 @@ const path = require("path");
const crypto_1 = require("crypto");
const ansiColors = require("ansi-colors");
// Based on https://source.chromium.org/chromium/chromium/src/+/main:build/linux/sysroot_scripts/install-sysroot.py.
-const URL_PREFIX = 'https://msftelectron.blob.core.windows.net';
+const URL_PREFIX = 'https://msftelectronbuild.z5.web.core.windows.net';
const URL_PATH = 'sysroots/toolchain';
const REPO_ROOT = path.dirname(path.dirname(path.dirname(__dirname)));
const ghApiHeaders = {
@@ -29,14 +29,13 @@ const ghDownloadHeaders = {
Accept: 'application/octet-stream',
};
function getElectronVersion() {
- const yarnrc = fs.readFileSync(path.join(REPO_ROOT, '.yarnrc'), 'utf8');
- const electronVersion = /^target "(.*)"$/m.exec(yarnrc)[1];
- const msBuildId = /^ms_build_id "(.*)"$/m.exec(yarnrc)[1];
+ const npmrc = fs.readFileSync(path.join(REPO_ROOT, '.npmrc'), 'utf8');
+ const electronVersion = /^target="(.*)"$/m.exec(npmrc)[1];
+ const msBuildId = /^ms_build_id="(.*)"$/m.exec(npmrc)[1];
return { electronVersion, msBuildId };
}
function getSha(filename) {
- // CodeQL [SM04514] Hash logic cannot be changed due to external dependency, also the code is only used during build.
- const hash = (0, crypto_1.createHash)('sha1');
+ const hash = (0, crypto_1.createHash)('sha256');
// Read file 1 MB at a time
const fd = fs.openSync(filename, 'r');
const buffer = Buffer.alloc(1024 * 1024);
@@ -168,9 +167,9 @@ async function getChromiumSysroot(arch) {
const sysrootArch = `bullseye_${arch}`;
const sysrootDict = sysrootInfo[sysrootArch];
const tarballFilename = sysrootDict['Tarball'];
- const tarballSha = sysrootDict['Sha1Sum'];
+ const tarballSha = sysrootDict['Sha256Sum'];
const sysroot = path.join((0, os_1.tmpdir)(), sysrootDict['SysrootDir']);
- const url = [URL_PREFIX, URL_PATH, tarballSha, tarballFilename].join('/');
+ const url = [URL_PREFIX, URL_PATH, tarballSha].join('/');
const stamp = path.join(sysroot, '.stamp');
if (fs.existsSync(stamp) && fs.readFileSync(stamp).toString() === url) {
return sysroot;
diff --git a/build/linux/debian/install-sysroot.ts b/build/linux/debian/install-sysroot.ts
index aa417dcc722..8ea43a523cf 100644
--- a/build/linux/debian/install-sysroot.ts
+++ b/build/linux/debian/install-sysroot.ts
@@ -13,7 +13,7 @@ import { DebianArchString } from './types';
import * as ansiColors from 'ansi-colors';
// Based on https://source.chromium.org/chromium/chromium/src/+/main:build/linux/sysroot_scripts/install-sysroot.py.
-const URL_PREFIX = 'https://msftelectron.blob.core.windows.net';
+const URL_PREFIX = 'https://msftelectronbuild.z5.web.core.windows.net';
const URL_PATH = 'sysroots/toolchain';
const REPO_ROOT = path.dirname(path.dirname(path.dirname(__dirname)));
@@ -38,15 +38,14 @@ interface IFetchOptions {
}
function getElectronVersion(): Record {
- const yarnrc = fs.readFileSync(path.join(REPO_ROOT, '.yarnrc'), 'utf8');
- const electronVersion = /^target "(.*)"$/m.exec(yarnrc)![1];
- const msBuildId = /^ms_build_id "(.*)"$/m.exec(yarnrc)![1];
+ const npmrc = fs.readFileSync(path.join(REPO_ROOT, '.npmrc'), 'utf8');
+ const electronVersion = /^target="(.*)"$/m.exec(npmrc)![1];
+ const msBuildId = /^ms_build_id="(.*)"$/m.exec(npmrc)![1];
return { electronVersion, msBuildId };
}
function getSha(filename: fs.PathLike): string {
- // CodeQL [SM04514] Hash logic cannot be changed due to external dependency, also the code is only used during build.
- const hash = createHash('sha1');
+ const hash = createHash('sha256');
// Read file 1 MB at a time
const fd = fs.openSync(filename, 'r');
const buffer = Buffer.alloc(1024 * 1024);
@@ -129,7 +128,7 @@ async function fetchUrl(options: IFetchOptions, retries = 10, retryDelay = 1000)
}
type SysrootDictEntry = {
- Sha1Sum: string;
+ Sha256Sum: string;
SysrootDir: string;
Tarball: string;
};
@@ -186,9 +185,9 @@ export async function getChromiumSysroot(arch: DebianArchString): Promise=0?!0:typeof process<"u"?process.platform==="win32":!1}}d.Environment=_})(AMDLoader||(AMDLoader={}));var AMDLoader;(function(d){class _{constructor(n,c,a){this.type=n,this.detail=c,this.timestamp=a}}d.LoaderEvent=_;class v{constructor(n){this._events=[new _(1,"",n)]}record(n,c){this._events.push(new _(n,c,d.Utilities.getHighPerformanceTimestamp()))}getEvents(){return this._events}}d.LoaderEventRecorder=v;class f{record(n,c){}getEvents(){return[]}}f.INSTANCE=new f,d.NullLoaderEventRecorder=f})(AMDLoader||(AMDLoader={}));var AMDLoader;(function(d){class _{static fileUriToFilePath(f,h){if(h=decodeURI(h).replace(/%23/g,"#"),f){if(/^file:\/\/\//.test(h))return h.substr(8);if(/^file:\/\//.test(h))return h.substr(5)}else if(/^file:\/\//.test(h))return h.substr(7);return h}static startsWith(f,h){return f.length>=h.length&&f.substr(0,h.length)===h}static endsWith(f,h){return f.length>=h.length&&f.substr(f.length-h.length)===h}static containsQueryString(f){return/^[^\#]*\?/gi.test(f)}static isAbsolutePath(f){return/^((http:\/\/)|(https:\/\/)|(file:\/\/)|(\/))/.test(f)}static forEachProperty(f,h){if(f){let n;for(n in f)f.hasOwnProperty(n)&&h(n,f[n])}}static isEmpty(f){let h=!0;return _.forEachProperty(f,()=>{h=!1}),h}static recursiveClone(f){if(!f||typeof f!="object"||f instanceof RegExp||!Array.isArray(f)&&Object.getPrototypeOf(f)!==Object.prototype)return f;let h=Array.isArray(f)?[]:{};return _.forEachProperty(f,(n,c)=>{c&&typeof c=="object"?h[n]=_.recursiveClone(c):h[n]=c}),h}static generateAnonymousModule(){return"===anonymous"+_.NEXT_ANONYMOUS_ID+++"==="}static isAnonymousModule(f){return _.startsWith(f,"===anonymous")}static getHighPerformanceTimestamp(){return this.PERFORMANCE_NOW_PROBED||(this.PERFORMANCE_NOW_PROBED=!0,this.HAS_PERFORMANCE_NOW=d.global.performance&&typeof d.global.performance.now=="function"),this.HAS_PERFORMANCE_NOW?d.global.performance.now():Date.now()}}_.NEXT_ANONYMOUS_ID=1,_.PERFORMANCE_NOW_PROBED=!1,_.HAS_PERFORMANCE_NOW=!1,d.Utilities=_})(AMDLoader||(AMDLoader={}));var AMDLoader;(function(d){function _(h){if(h instanceof Error)return h;const n=new Error(h.message||String(h)||"Unknown Error");return h.stack&&(n.stack=h.stack),n}d.ensureError=_;class v{static validateConfigurationOptions(n){function c(a){if(a.phase==="loading"){console.error('Loading "'+a.moduleId+'" failed'),console.error(a),console.error("Here are the modules that depend on it:"),console.error(a.neededBy);return}if(a.phase==="factory"){console.error('The factory function of "'+a.moduleId+'" has thrown an exception'),console.error(a),console.error("Here are the modules that depend on it:"),console.error(a.neededBy);return}}if(n=n||{},typeof n.baseUrl!="string"&&(n.baseUrl=""),typeof n.isBuild!="boolean"&&(n.isBuild=!1),typeof n.paths!="object"&&(n.paths={}),typeof n.config!="object"&&(n.config={}),typeof n.catchError>"u"&&(n.catchError=!1),typeof n.recordStats>"u"&&(n.recordStats=!1),typeof n.urlArgs!="string"&&(n.urlArgs=""),typeof n.onError!="function"&&(n.onError=c),Array.isArray(n.ignoreDuplicateModules)||(n.ignoreDuplicateModules=[]),n.baseUrl.length>0&&(d.Utilities.endsWith(n.baseUrl,"/")||(n.baseUrl+="/")),typeof n.cspNonce!="string"&&(n.cspNonce=""),typeof n.preferScriptTags>"u"&&(n.preferScriptTags=!1),n.nodeCachedData&&typeof n.nodeCachedData=="object"&&(typeof n.nodeCachedData.seed!="string"&&(n.nodeCachedData.seed="seed"),(typeof n.nodeCachedData.writeDelay!="number"||n.nodeCachedData.writeDelay<0)&&(n.nodeCachedData.writeDelay=1e3*7),!n.nodeCachedData.path||typeof n.nodeCachedData.path!="string")){const a=_(new Error("INVALID cached data configuration, 'path' MUST be set"));a.phase="configuration",n.onError(a),n.nodeCachedData=void 0}return n}static mergeConfigurationOptions(n=null,c=null){let a=d.Utilities.recursiveClone(c||{});return d.Utilities.forEachProperty(n,(t,e)=>{t==="ignoreDuplicateModules"&&typeof a.ignoreDuplicateModules<"u"?a.ignoreDuplicateModules=a.ignoreDuplicateModules.concat(e):t==="paths"&&typeof a.paths<"u"?d.Utilities.forEachProperty(e,(i,s)=>a.paths[i]=s):t==="config"&&typeof a.config<"u"?d.Utilities.forEachProperty(e,(i,s)=>a.config[i]=s):a[t]=d.Utilities.recursiveClone(e)}),v.validateConfigurationOptions(a)}}d.ConfigurationOptionsUtil=v;class f{constructor(n,c){if(this._env=n,this.options=v.mergeConfigurationOptions(c),this._createIgnoreDuplicateModulesMap(),this._createSortedPathsRules(),this.options.baseUrl===""&&this.options.nodeRequire&&this.options.nodeRequire.main&&this.options.nodeRequire.main.filename&&this._env.isNode){let a=this.options.nodeRequire.main.filename,t=Math.max(a.lastIndexOf("/"),a.lastIndexOf("\\"));this.options.baseUrl=a.substring(0,t+1)}}_createIgnoreDuplicateModulesMap(){this.ignoreDuplicateModulesMap={};for(let n=0;n{Array.isArray(c)?this.sortedPathsRules.push({from:n,to:c}):this.sortedPathsRules.push({from:n,to:[c]})}),this.sortedPathsRules.sort((n,c)=>c.from.length-n.from.length)}cloneAndMerge(n){return new f(this._env,v.mergeConfigurationOptions(n,this.options))}getOptionsLiteral(){return this.options}_applyPaths(n){let c;for(let a=0,t=this.sortedPathsRules.length;athis.triggerCallback(i),u=>this.triggerErrorback(i,u))}triggerCallback(e){let i=this._callbackMap[e];delete this._callbackMap[e];for(let s=0;s{e.removeEventListener("load",o),e.removeEventListener("error",u)},o=l=>{r(),i()},u=l=>{r(),s(l)};e.addEventListener("load",o),e.addEventListener("error",u)}load(e,i,s,r){if(/^node\|/.test(i)){let o=e.getConfig().getOptionsLiteral(),u=c(e.getRecorder(),o.nodeRequire||d.global.nodeRequire),l=i.split("|"),g=null;try{g=u(l[1])}catch(p){r(p);return}e.enqueueDefineAnonymousModule([],()=>g),s()}else{let o=document.createElement("script");o.setAttribute("async","async"),o.setAttribute("type","text/javascript"),this.attachListeners(o,s,r);const{trustedTypesPolicy:u}=e.getConfig().getOptionsLiteral();u&&(i=u.createScriptURL(i)),o.setAttribute("src",i);const{cspNonce:l}=e.getConfig().getOptionsLiteral();l&&o.setAttribute("nonce",l),document.getElementsByTagName("head")[0].appendChild(o)}}}function f(t){const{trustedTypesPolicy:e}=t.getConfig().getOptionsLiteral();try{return(e?self.eval(e.createScript("","true")):new Function("true")).call(self),!0}catch{return!1}}class h{constructor(){this._cachedCanUseEval=null}_canUseEval(e){return this._cachedCanUseEval===null&&(this._cachedCanUseEval=f(e)),this._cachedCanUseEval}load(e,i,s,r){if(/^node\|/.test(i)){const o=e.getConfig().getOptionsLiteral(),u=c(e.getRecorder(),o.nodeRequire||d.global.nodeRequire),l=i.split("|");let g=null;try{g=u(l[1])}catch(p){r(p);return}e.enqueueDefineAnonymousModule([],function(){return g}),s()}else{const{trustedTypesPolicy:o}=e.getConfig().getOptionsLiteral();if(!(/^((http:)|(https:)|(file:))/.test(i)&&i.substring(0,self.origin.length)!==self.origin)&&this._canUseEval(e)){fetch(i).then(l=>{if(l.status!==200)throw new Error(l.statusText);return l.text()}).then(l=>{l=`${l}
+//# sourceURL=${i}`,(o?self.eval(o.createScript("",l)):new Function(l)).call(self),s()}).then(void 0,r);return}try{o&&(i=o.createScriptURL(i)),importScripts(i),s()}catch(l){r(l)}}}}class n{constructor(e){this._env=e,this._didInitialize=!1,this._didPatchNodeRequire=!1}_init(e){this._didInitialize||(this._didInitialize=!0,this._fs=e("fs"),this._vm=e("vm"),this._path=e("path"),this._crypto=e("crypto"))}_initNodeRequire(e,i){const{nodeCachedData:s}=i.getConfig().getOptionsLiteral();if(!s||this._didPatchNodeRequire)return;this._didPatchNodeRequire=!0;const r=this,o=e("module");function u(l){const g=l.constructor;let p=function(y){try{return l.require(y)}finally{}};return p.resolve=function(y,E){return g._resolveFilename(y,l,!1,E)},p.resolve.paths=function(y){return g._resolveLookupPaths(y,l)},p.main=process.mainModule,p.extensions=g._extensions,p.cache=g._cache,p}o.prototype._compile=function(l,g){const p=o.wrap(l.replace(/^#!.*/,"")),m=i.getRecorder(),y=r._getCachedDataPath(s,g),E={filename:g};let R;try{const x=r._fs.readFileSync(y);R=x.slice(0,16),E.cachedData=x.slice(16),m.record(60,y)}catch{m.record(61,y)}const C=new r._vm.Script(p,E),I=C.runInThisContext(E),w=r._path.dirname(g),b=u(this),U=[this.exports,b,this,g,w,process,_commonjsGlobal,Buffer],P=I.apply(this.exports,U);return r._handleCachedData(C,p,y,!E.cachedData,i),r._verifyCachedData(C,p,y,R,i),P}}load(e,i,s,r){const o=e.getConfig().getOptionsLiteral(),u=c(e.getRecorder(),o.nodeRequire||d.global.nodeRequire),l=o.nodeInstrumenter||function(p){return p};this._init(u),this._initNodeRequire(u,e);let g=e.getRecorder();if(/^node\|/.test(i)){let p=i.split("|"),m=null;try{m=u(p[1])}catch(y){r(y);return}e.enqueueDefineAnonymousModule([],()=>m),s()}else{i=d.Utilities.fileUriToFilePath(this._env.isWindows,i);const p=this._path.normalize(i),m=this._getElectronRendererScriptPathOrUri(p),y=!!o.nodeCachedData,E=y?this._getCachedDataPath(o.nodeCachedData,i):void 0;this._readSourceAndCachedData(p,E,g,(R,C,I,w)=>{if(R){r(R);return}let b;C.charCodeAt(0)===n._BOM?b=n._PREFIX+C.substring(1)+n._SUFFIX:b=n._PREFIX+C+n._SUFFIX,b=l(b,p);const U={filename:m,cachedData:I},P=this._createAndEvalScript(e,b,U,s,r);this._handleCachedData(P,b,E,y&&!I,e),this._verifyCachedData(P,b,E,w,e)})}}_createAndEvalScript(e,i,s,r,o){const u=e.getRecorder();u.record(31,s.filename);const l=new this._vm.Script(i,s),g=l.runInThisContext(s),p=e.getGlobalAMDDefineFunc();let m=!1;const y=function(){return m=!0,p.apply(null,arguments)};return y.amd=p.amd,g.call(d.global,e.getGlobalAMDRequireFunc(),y,s.filename,this._path.dirname(s.filename)),u.record(32,s.filename),m?r():o(new Error(`Didn't receive define call in ${s.filename}!`)),l}_getElectronRendererScriptPathOrUri(e){if(!this._env.isElectronRenderer)return e;let i=e.match(/^([a-z])\:(.*)/i);return i?`file:///${(i[1].toUpperCase()+":"+i[2]).replace(/\\/g,"/")}`:`file://${e}`}_getCachedDataPath(e,i){const s=this._crypto.createHash("md5").update(i,"utf8").update(e.seed,"utf8").update(process.arch,"").digest("hex"),r=this._path.basename(i).replace(/\.js$/,"");return this._path.join(e.path,`${r}-${s}.code`)}_handleCachedData(e,i,s,r,o){e.cachedDataRejected?this._fs.unlink(s,u=>{o.getRecorder().record(62,s),this._createAndWriteCachedData(e,i,s,o),u&&o.getConfig().onError(u)}):r&&this._createAndWriteCachedData(e,i,s,o)}_createAndWriteCachedData(e,i,s,r){let o=Math.ceil(r.getConfig().getOptionsLiteral().nodeCachedData.writeDelay*(1+Math.random())),u=-1,l=0,g;const p=()=>{setTimeout(()=>{g||(g=this._crypto.createHash("md5").update(i,"utf8").digest());const m=e.createCachedData();if(!(m.length===0||m.length===u||l>=5)){if(m.length{y&&r.getConfig().onError(y),r.getRecorder().record(63,s),p()})}},o*Math.pow(4,l++))};p()}_readSourceAndCachedData(e,i,s,r){if(!i)this._fs.readFile(e,{encoding:"utf8"},r);else{let o,u,l,g=2;const p=m=>{m?r(m):--g===0&&r(void 0,o,u,l)};this._fs.readFile(e,{encoding:"utf8"},(m,y)=>{o=y,p(m)}),this._fs.readFile(i,(m,y)=>{!m&&y&&y.length>0?(l=y.slice(0,16),u=y.slice(16),s.record(60,i)):s.record(61,i),p()})}}_verifyCachedData(e,i,s,r,o){r&&(e.cachedDataRejected||setTimeout(()=>{const u=this._crypto.createHash("md5").update(i,"utf8").digest();r.equals(u)||(o.getConfig().onError(new Error(`FAILED TO VERIFY CACHED DATA, deleting stale '${s}' now, but a RESTART IS REQUIRED`)),this._fs.unlink(s,l=>{l&&o.getConfig().onError(l)}))},Math.ceil(5e3*(1+Math.random()))))}}n._BOM=65279,n._PREFIX="(function (require, define, __filename, __dirname) { ",n._SUFFIX=`
+});`;function c(t,e){if(e.__$__isRecorded)return e;const i=function(r){t.record(33,r);try{return e(r)}finally{t.record(34,r)}};return i.__$__isRecorded=!0,i}d.ensureRecordedNodeRequire=c;function a(t){return new _(t)}d.createScriptLoader=a})(AMDLoader||(AMDLoader={}));var AMDLoader;(function(d){class _{constructor(t){let e=t.lastIndexOf("/");e!==-1?this.fromModulePath=t.substr(0,e+1):this.fromModulePath=""}static _normalizeModuleId(t){let e=t,i;for(i=/\/\.\//;i.test(e);)e=e.replace(i,"/");for(e=e.replace(/^\.\//g,""),i=/\/(([^\/])|([^\/][^\/\.])|([^\/\.][^\/])|([^\/][^\/][^\/]+))\/\.\.\//;i.test(e);)e=e.replace(i,"/");return e=e.replace(/^(([^\/])|([^\/][^\/\.])|([^\/\.][^\/])|([^\/][^\/][^\/]+))\/\.\.\//,""),e}resolveModule(t){let e=t;return d.Utilities.isAbsolutePath(e)||(d.Utilities.startsWith(e,"./")||d.Utilities.startsWith(e,"../"))&&(e=_._normalizeModuleId(this.fromModulePath+e)),e}}_.ROOT=new _(""),d.ModuleIdResolver=_;class v{constructor(t,e,i,s,r,o){this.id=t,this.strId=e,this.dependencies=i,this._callback=s,this._errorback=r,this.moduleIdResolver=o,this.exports={},this.error=null,this.exportsPassedIn=!1,this.unresolvedDependenciesCount=this.dependencies.length,this._isComplete=!1}static _safeInvokeFunction(t,e){try{return{returnedValue:t.apply(d.global,e),producedError:null}}catch(i){return{returnedValue:null,producedError:i}}}static _invokeFactory(t,e,i,s){return t.shouldInvokeFactory(e)?t.shouldCatchError()?this._safeInvokeFunction(i,s):{returnedValue:i.apply(d.global,s),producedError:null}:{returnedValue:null,producedError:null}}complete(t,e,i,s){this._isComplete=!0;let r=null;if(this._callback)if(typeof this._callback=="function"){t.record(21,this.strId);let o=v._invokeFactory(e,this.strId,this._callback,i);r=o.producedError,t.record(22,this.strId),!r&&typeof o.returnedValue<"u"&&(!this.exportsPassedIn||d.Utilities.isEmpty(this.exports))&&(this.exports=o.returnedValue)}else this.exports=this._callback;if(r){let o=d.ensureError(r);o.phase="factory",o.moduleId=this.strId,o.neededBy=s(this.id),this.error=o,e.onError(o)}this.dependencies=null,this._callback=null,this._errorback=null,this.moduleIdResolver=null}onDependencyError(t){return this._isComplete=!0,this.error=t,this._errorback?(this._errorback(t),!0):!1}isComplete(){return this._isComplete}}d.Module=v;class f{constructor(){this._nextId=0,this._strModuleIdToIntModuleId=new Map,this._intModuleIdToStrModuleId=[],this.getModuleId("exports"),this.getModuleId("module"),this.getModuleId("require")}getMaxModuleId(){return this._nextId}getModuleId(t){let e=this._strModuleIdToIntModuleId.get(t);return typeof e>"u"&&(e=this._nextId++,this._strModuleIdToIntModuleId.set(t,e),this._intModuleIdToStrModuleId[e]=t),e}getStrModuleId(t){return this._intModuleIdToStrModuleId[t]}}class h{constructor(t){this.id=t}}h.EXPORTS=new h(0),h.MODULE=new h(1),h.REQUIRE=new h(2),d.RegularDependency=h;class n{constructor(t,e,i){this.id=t,this.pluginId=e,this.pluginParam=i}}d.PluginDependency=n;class c{constructor(t,e,i,s,r=0){this._env=t,this._scriptLoader=e,this._loaderAvailableTimestamp=r,this._defineFunc=i,this._requireFunc=s,this._moduleIdProvider=new f,this._config=new d.Configuration(this._env),this._hasDependencyCycle=!1,this._modules2=[],this._knownModules2=[],this._inverseDependencies2=[],this._inversePluginDependencies2=new Map,this._currentAnonymousDefineCall=null,this._recorder=null,this._buildInfoPath=[],this._buildInfoDefineStack=[],this._buildInfoDependencies=[],this._requireFunc.moduleManager=this}reset(){return new c(this._env,this._scriptLoader,this._defineFunc,this._requireFunc,this._loaderAvailableTimestamp)}getGlobalAMDDefineFunc(){return this._defineFunc}getGlobalAMDRequireFunc(){return this._requireFunc}static _findRelevantLocationInStack(t,e){let i=o=>o.replace(/\\/g,"/"),s=i(t),r=e.split(/\n/);for(let o=0;othis._moduleIdProvider.getStrModuleId(g.id))),this._resolve(l)}_normalizeDependency(t,e){if(t==="exports")return h.EXPORTS;if(t==="module")return h.MODULE;if(t==="require")return h.REQUIRE;let i=t.indexOf("!");if(i>=0){let s=e.resolveModule(t.substr(0,i)),r=e.resolveModule(t.substr(i+1)),o=this._moduleIdProvider.getModuleId(s+"!"+r),u=this._moduleIdProvider.getModuleId(s);return new n(o,u,r)}return new h(this._moduleIdProvider.getModuleId(e.resolveModule(t)))}_normalizeDependencies(t,e){let i=[],s=0;for(let r=0,o=t.length;rthis._moduleIdProvider.getStrModuleId(o));const r=d.ensureError(e);return r.phase="loading",r.moduleId=i,r.neededBy=s,r}_onLoadError(t,e){const i=this._createLoadError(t,e);this._modules2[t]||(this._modules2[t]=new v(t,this._moduleIdProvider.getStrModuleId(t),[],()=>{},null,null));let s=[];for(let u=0,l=this._moduleIdProvider.getMaxModuleId();u0;){let u=o.shift(),l=this._modules2[u];l&&(r=l.onDependencyError(i)||r);let g=this._inverseDependencies2[u];if(g)for(let p=0,m=g.length;p0;){let u=r.shift().dependencies;if(u)for(let l=0,g=u.length;lthis._relativeRequire(t,i,s,r);return e.toUrl=i=>this._config.requireToUrl(t.resolveModule(i)),e.getStats=()=>this.getLoaderEvents(),e.hasDependencyCycle=()=>this._hasDependencyCycle,e.config=(i,s=!1)=>{this.configure(i,s)},e.__$__nodeRequire=d.global.nodeRequire,e}_loadModule(t){if(this._modules2[t]||this._knownModules2[t])return;this._knownModules2[t]=!0;let e=this._moduleIdProvider.getStrModuleId(t),i=this._config.moduleIdToPaths(e),s=/^@[^\/]+\/[^\/]+$/;this._env.isNode&&(e.indexOf("/")===-1||s.test(e))&&i.push("node|"+e);let r=-1,o=u=>{if(r++,r>=i.length)this._onLoadError(t,u);else{let l=i[r],g=this.getRecorder();if(this._config.isBuild()&&l==="empty:"){this._buildInfoPath[t]=l,this.defineModule(this._moduleIdProvider.getStrModuleId(t),[],null,null,null),this._onLoad(t);return}g.record(10,l),this._scriptLoader.load(this,l,()=>{this._config.isBuild()&&(this._buildInfoPath[t]=l),g.record(11,l),this._onLoad(t)},p=>{g.record(12,l),o(p)})}};o(null)}_loadPluginDependency(t,e){if(this._modules2[e.id]||this._knownModules2[e.id])return;this._knownModules2[e.id]=!0;let i=s=>{this.defineModule(this._moduleIdProvider.getStrModuleId(e.id),[],s,null,null)};i.error=s=>{this._config.onError(this._createLoadError(e.id,s))},t.load(e.pluginParam,this._createRequire(_.ROOT),i,this._config.getOptionsLiteral())}_resolve(t){let e=t.dependencies;if(e)for(let i=0,s=e.length;ithis._moduleIdProvider.getStrModuleId(l)).join(` =>
+`)),t.unresolvedDependenciesCount--;continue}if(this._inverseDependencies2[r.id]=this._inverseDependencies2[r.id]||[],this._inverseDependencies2[r.id].push(t.id),r instanceof n){let u=this._modules2[r.pluginId];if(u&&u.isComplete()){this._loadPluginDependency(u.exports,r);continue}let l=this._inversePluginDependencies2.get(r.pluginId);l||(l=[],this._inversePluginDependencies2.set(r.pluginId,l)),l.push(r),this._loadModule(r.pluginId);continue}this._loadModule(r.id)}t.unresolvedDependenciesCount===0&&this._onModuleComplete(t)}_onModuleComplete(t){let e=this.getRecorder();if(t.isComplete())return;let i=t.dependencies,s=[];if(i)for(let l=0,g=i.length;lthis._config.getConfigForModule(t.strId)};continue}if(p===h.REQUIRE){s[l]=this._createRequire(t.moduleIdResolver);continue}let m=this._modules2[p.id];if(m){s[l]=m.exports;continue}s[l]=null}const r=l=>(this._inverseDependencies2[l]||[]).map(g=>this._moduleIdProvider.getStrModuleId(g));t.complete(e,this._config,s,r);let o=this._inverseDependencies2[t.id];if(this._inverseDependencies2[t.id]=null,o)for(let l=0,g=o.length;l"u"&&c())})(AMDLoader||(AMDLoader={})),define("vs/css",["require","exports"],function(d,_){"use strict";Object.defineProperty(_,"__esModule",{value:!0}),_.load=v;function v(a,t,e,i){if(i=i||{},(i["vs/css"]||{}).disabled){e({});return}const r=t.toUrl(a+".css");f(a,r,()=>{e({})},o=>{typeof e.error=="function"&&e.error("Could not find "+r+".")})}function f(a,t,e,i){if(h(a,t)){e();return}n(a,t,e,i)}function h(a,t){const e=window.document.getElementsByTagName("link");for(let i=0,s=e.length;i{t.removeEventListener("load",r),t.removeEventListener("error",o)},r=u=>{s(),e()},o=u=>{s(),i(u)};t.addEventListener("load",r),t.addEventListener("error",o)}}),function(){const d=require.getConfig().baseUrl||"https://main.vscode-cdn.net/insider/336db9ece67f682159078ea1b54212de7636d88a/out";require.config({baseUrl:d,recordStats:!0,paths:{"@microsoft/1ds-core-js":"../node_modules/@microsoft/1ds-core-js/dist/ms.core.min.js","@microsoft/1ds-post-js":"../node_modules/@microsoft/1ds-post-js/dist/ms.post.min.js","@vscode/iconv-lite-umd":"../node_modules/@vscode/iconv-lite-umd/lib/iconv-lite-umd.js","@vscode/tree-sitter-wasm":"../node_modules/@vscode/tree-sitter-wasm/wasm/tree-sitter.js","@vscode/vscode-languagedetection":"../node_modules/@vscode/vscode-languagedetection/dist/lib/index.js","@xterm/addon-clipboard":"../node_modules/@xterm/addon-clipboard/lib/addon-clipboard.js","@xterm/addon-image":"../node_modules/@xterm/addon-image/lib/addon-image.js","@xterm/addon-search":"../node_modules/@xterm/addon-search/lib/addon-search.js","@xterm/addon-serialize":"../node_modules/@xterm/addon-serialize/lib/addon-serialize.js","@xterm/addon-unicode11":"../node_modules/@xterm/addon-unicode11/lib/addon-unicode11.js","@xterm/addon-webgl":"../node_modules/@xterm/addon-webgl/lib/addon-webgl.js","@xterm/xterm":"../node_modules/@xterm/xterm/lib/xterm.js",jschardet:"../node_modules/jschardet/dist/jschardet.min.js","tas-client-umd":"../node_modules/tas-client-umd/lib/tas-client-umd.js","vscode-oniguruma":"../node_modules/vscode-oniguruma/release/main.js","vscode-textmate":"../node_modules/vscode-textmate/release/main.js","vscode-regexp-languagedetection":"../node_modules/vscode-regexp-languagedetection/dist/index.js",vsda:"../node_modules/vsda/rust/web/vsda.js","@microsoft/dynamicproto-js":"../node_modules/@microsoft/dynamicproto-js/lib/dist/umd/dynamicproto-js.min.js","@microsoft/applicationinsights-shims":"../node_modules/@microsoft/applicationinsights-shims/dist/umd/applicationinsights-shims.min.js","@microsoft/applicationinsights-core-js":"../node_modules/@microsoft/applicationinsights-core-js/browser/applicationinsights-core-js.min.js"}})}();
+
+//# sourceMappingURL=https://main.vscode-cdn.net/sourcemaps/336db9ece67f682159078ea1b54212de7636d88a/core/vs/loader.js.map
diff --git a/build/npm/dirs.js b/build/npm/dirs.js
index 198f7e0aad8..167b5e3c18b 100644
--- a/build/npm/dirs.js
+++ b/build/npm/dirs.js
@@ -5,7 +5,7 @@
const fs = require('fs');
-// Complete list of directories where yarn should be executed to install node modules
+// Complete list of directories where npm should be executed to install node modules
const dirs = [
'',
'build',
@@ -78,6 +78,7 @@ const dirs = [
// 'test/automation',
// 'test/smoke',
// --- End Positron ---
+ '.vscode/extensions/vscode-selfhost-import-aid',
'.vscode/extensions/vscode-selfhost-test-provider',
];
diff --git a/build/npm/gyp/package-lock.json b/build/npm/gyp/package-lock.json
new file mode 100644
index 00000000000..a20d85c70dc
--- /dev/null
+++ b/build/npm/gyp/package-lock.json
@@ -0,0 +1,1321 @@
+{
+ "name": "code-oss-dev-build",
+ "version": "1.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "code-oss-dev-build",
+ "version": "1.0.0",
+ "license": "MIT",
+ "devDependencies": {
+ "node-gyp": "^10.1.0"
+ }
+ },
+ "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",
+ "strip-ansi": "^7.0.1",
+ "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+ "wrap-ansi": "^8.1.0",
+ "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@npmcli/agent": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz",
+ "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "agent-base": "^7.1.0",
+ "http-proxy-agent": "^7.0.0",
+ "https-proxy-agent": "^7.0.1",
+ "lru-cache": "^10.0.1",
+ "socks-proxy-agent": "^8.0.3"
+ },
+ "engines": {
+ "node": "^16.14.0 || >=18.0.0"
+ }
+ },
+ "node_modules/@npmcli/fs": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz",
+ "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "semver": "^7.3.5"
+ },
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ }
+ },
+ "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"
+ }
+ },
+ "node_modules/abbrev": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz",
+ "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ }
+ },
+ "node_modules/agent-base": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
+ "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/aggregate-error": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
+ "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "clean-stack": "^2.0.0",
+ "indent-string": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "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"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "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"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/cacache": {
+ "version": "18.0.3",
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.3.tgz",
+ "integrity": "sha512-qXCd4rh6I07cnDqh8V48/94Tc/WSfj+o3Gn6NZ0aZovS255bUx8O13uKxRFd2eWG0xgsco7+YItQNPaa5E85hg==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "@npmcli/fs": "^3.1.0",
+ "fs-minipass": "^3.0.0",
+ "glob": "^10.2.2",
+ "lru-cache": "^10.0.1",
+ "minipass": "^7.0.3",
+ "minipass-collect": "^2.0.1",
+ "minipass-flush": "^1.0.5",
+ "minipass-pipeline": "^1.2.4",
+ "p-map": "^4.0.0",
+ "ssri": "^10.0.0",
+ "tar": "^6.1.11",
+ "unique-filename": "^3.0.0"
+ },
+ "engines": {
+ "node": "^16.14.0 || >=18.0.0"
+ }
+ },
+ "node_modules/chownr": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
+ "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/clean-stack": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "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"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/cross-spawn/node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/cross-spawn/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"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.3.5",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz",
+ "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eastasianwidth": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/encoding": {
+ "version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
+ "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "iconv-lite": "^0.6.2"
+ }
+ },
+ "node_modules/env-paths": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
+ "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/err-code": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz",
+ "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/exponential-backoff": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz",
+ "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/foreground-child": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz",
+ "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "cross-spawn": "^7.0.0",
+ "signal-exit": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/fs-minipass": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz",
+ "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "minipass": "^7.0.3"
+ },
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ }
+ },
+ "node_modules/glob": {
+ "version": "10.4.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz",
+ "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.10",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
+ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/http-cache-semantics": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz",
+ "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==",
+ "dev": true,
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/http-proxy-agent": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
+ "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "^7.1.0",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/https-proxy-agent": {
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz",
+ "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "^7.0.2",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/indent-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ip-address": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz",
+ "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "jsbn": "1.1.0",
+ "sprintf-js": "^1.1.3"
+ },
+ "engines": {
+ "node": ">= 12"
+ }
+ },
+ "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-lambda": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz",
+ "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/isexe": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz",
+ "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/jackspeak": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz",
+ "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==",
+ "dev": true,
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "@isaacs/cliui": "^8.0.2"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ },
+ "optionalDependencies": {
+ "@pkgjs/parseargs": "^0.11.0"
+ }
+ },
+ "node_modules/jsbn": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz",
+ "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "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/make-fetch-happen": {
+ "version": "13.0.1",
+ "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz",
+ "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "@npmcli/agent": "^2.0.0",
+ "cacache": "^18.0.0",
+ "http-cache-semantics": "^4.1.1",
+ "is-lambda": "^1.0.1",
+ "minipass": "^7.0.2",
+ "minipass-fetch": "^3.0.0",
+ "minipass-flush": "^1.0.5",
+ "minipass-pipeline": "^1.2.4",
+ "negotiator": "^0.6.3",
+ "proc-log": "^4.2.0",
+ "promise-retry": "^2.0.1",
+ "ssri": "^10.0.0"
+ },
+ "engines": {
+ "node": "^16.14.0 || >=18.0.0"
+ }
+ },
+ "node_modules/make-fetch-happen/node_modules/proc-log": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz",
+ "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ }
+ },
+ "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": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "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/minipass-collect": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz",
+ "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "minipass": "^7.0.3"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/minipass-fetch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz",
+ "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "minipass": "^7.0.3",
+ "minipass-sized": "^1.0.3",
+ "minizlib": "^2.1.2"
+ },
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ },
+ "optionalDependencies": {
+ "encoding": "^0.1.13"
+ }
+ },
+ "node_modules/minipass-flush": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz",
+ "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/minipass-flush/node_modules/minipass": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/minipass-pipeline": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz",
+ "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/minipass-pipeline/node_modules/minipass": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/minipass-sized": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz",
+ "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/minipass-sized/node_modules/minipass": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/minizlib": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
+ "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "minipass": "^3.0.0",
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/minizlib/node_modules/minipass": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/mkdirp": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/negotiator": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/node-gyp": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.1.0.tgz",
+ "integrity": "sha512-B4J5M1cABxPc5PwfjhbV5hoy2DP9p8lFXASnEN6hugXOa61416tnTZ29x9sSwAd0o99XNIcpvDDy1swAExsVKA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "env-paths": "^2.2.0",
+ "exponential-backoff": "^3.1.1",
+ "glob": "^10.3.10",
+ "graceful-fs": "^4.2.6",
+ "make-fetch-happen": "^13.0.0",
+ "nopt": "^7.0.0",
+ "proc-log": "^3.0.0",
+ "semver": "^7.3.5",
+ "tar": "^6.1.2",
+ "which": "^4.0.0"
+ },
+ "bin": {
+ "node-gyp": "bin/node-gyp.js"
+ },
+ "engines": {
+ "node": "^16.14.0 || >=18.0.0"
+ }
+ },
+ "node_modules/nopt": {
+ "version": "7.2.1",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz",
+ "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "abbrev": "^2.0.0"
+ },
+ "bin": {
+ "nopt": "bin/nopt.js"
+ },
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ }
+ },
+ "node_modules/p-map": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
+ "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "aggregate-error": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/package-json-from-dist": {
+ "version": "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,
+ "license": "BlueOak-1.0.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-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"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/proc-log": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz",
+ "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ }
+ },
+ "node_modules/promise-retry": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz",
+ "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "err-code": "^2.0.2",
+ "retry": "^0.12.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/retry": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
+ "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true
+ },
+ "node_modules/semver": {
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/semver/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==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "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"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "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/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"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/smart-buffer": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
+ "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6.0.0",
+ "npm": ">= 3.0.0"
+ }
+ },
+ "node_modules/socks": {
+ "version": "2.8.3",
+ "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz",
+ "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ip-address": "^9.0.5",
+ "smart-buffer": "^4.2.0"
+ },
+ "engines": {
+ "node": ">= 10.0.0",
+ "npm": ">= 3.0.0"
+ }
+ },
+ "node_modules/socks-proxy-agent": {
+ "version": "8.0.4",
+ "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz",
+ "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "^7.1.1",
+ "debug": "^4.3.4",
+ "socks": "^2.8.3"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/sprintf-js": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz",
+ "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==",
+ "dev": true,
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/ssri": {
+ "version": "10.0.6",
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz",
+ "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "minipass": "^7.0.3"
+ },
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ }
+ },
+ "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",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/string-width-cjs": {
+ "name": "string-width",
+ "version": "4.2.3",
+ "resolved": "https://registry.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",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string-width-cjs/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/string-width-cjs/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/string-width-cjs/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"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "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"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "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"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi-cjs/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/tar": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz",
+ "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "chownr": "^2.0.0",
+ "fs-minipass": "^2.0.0",
+ "minipass": "^5.0.0",
+ "minizlib": "^2.1.1",
+ "mkdirp": "^1.0.3",
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/tar/node_modules/fs-minipass": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
+ "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "minipass": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/tar/node_modules/minipass": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
+ "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/unique-filename": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz",
+ "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "unique-slug": "^4.0.0"
+ },
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ }
+ },
+ "node_modules/unique-slug": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz",
+ "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "imurmurhash": "^0.1.4"
+ },
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ }
+ },
+ "node_modules/which": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz",
+ "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^3.1.1"
+ },
+ "bin": {
+ "node-which": "bin/which.js"
+ },
+ "engines": {
+ "node": "^16.13.0 || >=18.0.0"
+ }
+ },
+ "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",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi-cjs": {
+ "name": "wrap-ansi",
+ "version": "7.0.0",
+ "resolved": "https://registry.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",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/ansi-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/wrap-ansi-cjs/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.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",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi-cjs/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"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true,
+ "license": "ISC"
+ }
+ }
+}
diff --git a/build/npm/gyp/yarn.lock b/build/npm/gyp/yarn.lock
deleted file mode 100644
index a9bf901727e..00000000000
--- a/build/npm/gyp/yarn.lock
+++ /dev/null
@@ -1,657 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
-"@isaacs/cliui@^8.0.2":
- version "8.0.2"
- resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550"
- integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==
- dependencies:
- string-width "^5.1.2"
- string-width-cjs "npm:string-width@^4.2.0"
- strip-ansi "^7.0.1"
- strip-ansi-cjs "npm:strip-ansi@^6.0.1"
- wrap-ansi "^8.1.0"
- wrap-ansi-cjs "npm:wrap-ansi@^7.0.0"
-
-"@npmcli/agent@^2.0.0":
- version "2.2.2"
- resolved "https://registry.yarnpkg.com/@npmcli/agent/-/agent-2.2.2.tgz#967604918e62f620a648c7975461c9c9e74fc5d5"
- integrity sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==
- dependencies:
- agent-base "^7.1.0"
- http-proxy-agent "^7.0.0"
- https-proxy-agent "^7.0.1"
- lru-cache "^10.0.1"
- socks-proxy-agent "^8.0.3"
-
-"@npmcli/fs@^3.1.0":
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-3.1.1.tgz#59cdaa5adca95d135fc00f2bb53f5771575ce726"
- integrity sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==
- dependencies:
- semver "^7.3.5"
-
-"@pkgjs/parseargs@^0.11.0":
- version "0.11.0"
- resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33"
- integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==
-
-abbrev@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-2.0.0.tgz#cf59829b8b4f03f89dda2771cb7f3653828c89bf"
- integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==
-
-agent-base@^7.0.2, agent-base@^7.1.0, agent-base@^7.1.1:
- version "7.1.1"
- resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.1.tgz#bdbded7dfb096b751a2a087eeeb9664725b2e317"
- integrity sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==
- dependencies:
- debug "^4.3.4"
-
-aggregate-error@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"
- integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==
- dependencies:
- clean-stack "^2.0.0"
- indent-string "^4.0.0"
-
-ansi-regex@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
- integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
-
-ansi-regex@^6.0.1:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a"
- integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==
-
-ansi-styles@^4.0.0:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
- integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
- dependencies:
- color-convert "^2.0.1"
-
-ansi-styles@^6.1.0:
- version "6.2.1"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5"
- integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
-
-balanced-match@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
- integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
-
-brace-expansion@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
- integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
- dependencies:
- balanced-match "^1.0.0"
-
-cacache@^18.0.0:
- version "18.0.3"
- resolved "https://registry.yarnpkg.com/cacache/-/cacache-18.0.3.tgz#864e2c18414e1e141ae8763f31e46c2cb96d1b21"
- integrity sha512-qXCd4rh6I07cnDqh8V48/94Tc/WSfj+o3Gn6NZ0aZovS255bUx8O13uKxRFd2eWG0xgsco7+YItQNPaa5E85hg==
- dependencies:
- "@npmcli/fs" "^3.1.0"
- fs-minipass "^3.0.0"
- glob "^10.2.2"
- lru-cache "^10.0.1"
- minipass "^7.0.3"
- minipass-collect "^2.0.1"
- minipass-flush "^1.0.5"
- minipass-pipeline "^1.2.4"
- p-map "^4.0.0"
- ssri "^10.0.0"
- tar "^6.1.11"
- unique-filename "^3.0.0"
-
-chownr@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece"
- integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==
-
-clean-stack@^2.0.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
- integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==
-
-color-convert@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
- integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
- dependencies:
- color-name "~1.1.4"
-
-color-name@~1.1.4:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
- integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
-
-cross-spawn@^7.0.0:
- version "7.0.3"
- resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
- integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
- dependencies:
- path-key "^3.1.0"
- shebang-command "^2.0.0"
- which "^2.0.1"
-
-debug@4:
- version "4.3.4"
- resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
- integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
- dependencies:
- ms "2.1.2"
-
-debug@^4.3.4:
- version "4.3.5"
- resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e"
- integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==
- dependencies:
- ms "2.1.2"
-
-eastasianwidth@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
- integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
-
-emoji-regex@^8.0.0:
- version "8.0.0"
- resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
- integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
-
-emoji-regex@^9.2.2:
- version "9.2.2"
- resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
- integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
-
-encoding@^0.1.13:
- version "0.1.13"
- resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9"
- integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==
- dependencies:
- iconv-lite "^0.6.2"
-
-env-paths@^2.2.0:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2"
- integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==
-
-err-code@^2.0.2:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9"
- integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==
-
-exponential-backoff@^3.1.1:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6"
- integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==
-
-foreground-child@^3.1.0:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.2.1.tgz#767004ccf3a5b30df39bed90718bab43fe0a59f7"
- integrity sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==
- dependencies:
- cross-spawn "^7.0.0"
- signal-exit "^4.0.1"
-
-fs-minipass@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb"
- integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==
- dependencies:
- minipass "^3.0.0"
-
-fs-minipass@^3.0.0:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.3.tgz#79a85981c4dc120065e96f62086bf6f9dc26cc54"
- integrity sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==
- dependencies:
- minipass "^7.0.3"
-
-glob@^10.2.2, glob@^10.3.10:
- version "10.4.2"
- resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.2.tgz#bed6b95dade5c1f80b4434daced233aee76160e5"
- integrity sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==
- dependencies:
- foreground-child "^3.1.0"
- jackspeak "^3.1.2"
- minimatch "^9.0.4"
- minipass "^7.1.2"
- package-json-from-dist "^1.0.0"
- path-scurry "^1.11.1"
-
-graceful-fs@^4.2.6:
- version "4.2.10"
- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c"
- integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==
-
-http-cache-semantics@^4.1.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a"
- integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==
-
-http-proxy-agent@^7.0.0:
- version "7.0.2"
- resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e"
- integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==
- dependencies:
- agent-base "^7.1.0"
- debug "^4.3.4"
-
-https-proxy-agent@^7.0.1:
- version "7.0.5"
- resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz#9e8b5013873299e11fab6fd548405da2d6c602b2"
- integrity sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==
- dependencies:
- agent-base "^7.0.2"
- debug "4"
-
-iconv-lite@^0.6.2:
- version "0.6.3"
- resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
- integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
- dependencies:
- safer-buffer ">= 2.1.2 < 3.0.0"
-
-imurmurhash@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
- integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
-
-indent-string@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
- integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
-
-ip-address@^9.0.5:
- version "9.0.5"
- resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a"
- integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==
- dependencies:
- jsbn "1.1.0"
- sprintf-js "^1.1.3"
-
-is-fullwidth-code-point@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
- integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
-
-is-lambda@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5"
- integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==
-
-isexe@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
- integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
-
-isexe@^3.1.1:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/isexe/-/isexe-3.1.1.tgz#4a407e2bd78ddfb14bea0c27c6f7072dde775f0d"
- integrity sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==
-
-jackspeak@^3.1.2:
- version "3.4.0"
- resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.0.tgz#a75763ff36ad778ede6a156d8ee8b124de445b4a"
- integrity sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==
- dependencies:
- "@isaacs/cliui" "^8.0.2"
- optionalDependencies:
- "@pkgjs/parseargs" "^0.11.0"
-
-jsbn@1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040"
- integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==
-
-lru-cache@^10.0.1, lru-cache@^10.2.0:
- version "10.3.0"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.3.0.tgz#4a4aaf10c84658ab70f79a85a9a3f1e1fb11196b"
- integrity sha512-CQl19J/g+Hbjbv4Y3mFNNXFEL/5t/KCg8POCuUqd4rMKjGG+j1ybER83hxV58zL+dFI1PTkt3GNFSHRt+d8qEQ==
-
-lru-cache@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
- integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
- dependencies:
- yallist "^4.0.0"
-
-make-fetch-happen@^13.0.0:
- version "13.0.1"
- resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz#273ba2f78f45e1f3a6dca91cede87d9fa4821e36"
- integrity sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==
- dependencies:
- "@npmcli/agent" "^2.0.0"
- cacache "^18.0.0"
- http-cache-semantics "^4.1.1"
- is-lambda "^1.0.1"
- minipass "^7.0.2"
- minipass-fetch "^3.0.0"
- minipass-flush "^1.0.5"
- minipass-pipeline "^1.2.4"
- negotiator "^0.6.3"
- proc-log "^4.2.0"
- promise-retry "^2.0.1"
- ssri "^10.0.0"
-
-minimatch@^9.0.4:
- version "9.0.5"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5"
- integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==
- dependencies:
- brace-expansion "^2.0.1"
-
-minipass-collect@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-2.0.1.tgz#1621bc77e12258a12c60d34e2276ec5c20680863"
- integrity sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==
- dependencies:
- minipass "^7.0.3"
-
-minipass-fetch@^3.0.0:
- version "3.0.5"
- resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.5.tgz#f0f97e40580affc4a35cc4a1349f05ae36cb1e4c"
- integrity sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==
- dependencies:
- minipass "^7.0.3"
- minipass-sized "^1.0.3"
- minizlib "^2.1.2"
- optionalDependencies:
- encoding "^0.1.13"
-
-minipass-flush@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373"
- integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==
- dependencies:
- minipass "^3.0.0"
-
-minipass-pipeline@^1.2.4:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c"
- integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==
- dependencies:
- minipass "^3.0.0"
-
-minipass-sized@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70"
- integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==
- dependencies:
- minipass "^3.0.0"
-
-minipass@^3.0.0:
- version "3.3.6"
- resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a"
- integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==
- dependencies:
- yallist "^4.0.0"
-
-minipass@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d"
- integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==
-
-"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.2, minipass@^7.0.3, minipass@^7.1.2:
- version "7.1.2"
- resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707"
- integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==
-
-minizlib@^2.1.1, minizlib@^2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931"
- integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==
- dependencies:
- minipass "^3.0.0"
- yallist "^4.0.0"
-
-mkdirp@^1.0.3:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
- integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
-
-ms@2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
- integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
-
-negotiator@^0.6.3:
- version "0.6.3"
- resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd"
- integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==
-
-node-gyp@^10.1.0:
- version "10.1.0"
- resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-10.1.0.tgz#75e6f223f2acb4026866c26a2ead6aab75a8ca7e"
- integrity sha512-B4J5M1cABxPc5PwfjhbV5hoy2DP9p8lFXASnEN6hugXOa61416tnTZ29x9sSwAd0o99XNIcpvDDy1swAExsVKA==
- dependencies:
- env-paths "^2.2.0"
- exponential-backoff "^3.1.1"
- glob "^10.3.10"
- graceful-fs "^4.2.6"
- make-fetch-happen "^13.0.0"
- nopt "^7.0.0"
- proc-log "^3.0.0"
- semver "^7.3.5"
- tar "^6.1.2"
- which "^4.0.0"
-
-nopt@^7.0.0:
- version "7.2.1"
- resolved "https://registry.yarnpkg.com/nopt/-/nopt-7.2.1.tgz#1cac0eab9b8e97c9093338446eddd40b2c8ca1e7"
- integrity sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==
- dependencies:
- abbrev "^2.0.0"
-
-p-map@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b"
- integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==
- dependencies:
- aggregate-error "^3.0.0"
-
-package-json-from-dist@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz#e501cd3094b278495eb4258d4c9f6d5ac3019f00"
- integrity sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==
-
-path-key@^3.1.0:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
- integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
-
-path-scurry@^1.11.1:
- version "1.11.1"
- resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2"
- integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==
- dependencies:
- lru-cache "^10.2.0"
- minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
-
-proc-log@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-3.0.0.tgz#fb05ef83ccd64fd7b20bbe9c8c1070fc08338dd8"
- integrity sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==
-
-proc-log@^4.2.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-4.2.0.tgz#b6f461e4026e75fdfe228b265e9f7a00779d7034"
- integrity sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==
-
-promise-retry@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22"
- integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==
- dependencies:
- err-code "^2.0.2"
- retry "^0.12.0"
-
-retry@^0.12.0:
- version "0.12.0"
- resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b"
- integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==
-
-"safer-buffer@>= 2.1.2 < 3.0.0":
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
- integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
-
-semver@^7.3.5:
- version "7.5.4"
- resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e"
- integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==
- dependencies:
- lru-cache "^6.0.0"
-
-shebang-command@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
- integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
- dependencies:
- shebang-regex "^3.0.0"
-
-shebang-regex@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
- integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
-
-signal-exit@^4.0.1:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04"
- integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==
-
-smart-buffer@^4.2.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae"
- integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==
-
-socks-proxy-agent@^8.0.3:
- version "8.0.4"
- resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz#9071dca17af95f483300316f4b063578fa0db08c"
- integrity sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==
- dependencies:
- agent-base "^7.1.1"
- debug "^4.3.4"
- socks "^2.8.3"
-
-socks@^2.8.3:
- version "2.8.3"
- resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.3.tgz#1ebd0f09c52ba95a09750afe3f3f9f724a800cb5"
- integrity sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==
- dependencies:
- ip-address "^9.0.5"
- smart-buffer "^4.2.0"
-
-sprintf-js@^1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a"
- integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==
-
-ssri@^10.0.0:
- version "10.0.6"
- resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.6.tgz#a8aade2de60ba2bce8688e3fa349bad05c7dc1e5"
- integrity sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==
- dependencies:
- minipass "^7.0.3"
-
-"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0:
- version "4.2.3"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
- integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
- dependencies:
- emoji-regex "^8.0.0"
- is-fullwidth-code-point "^3.0.0"
- strip-ansi "^6.0.1"
-
-string-width@^5.0.1, string-width@^5.1.2:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794"
- integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==
- dependencies:
- eastasianwidth "^0.2.0"
- emoji-regex "^9.2.2"
- strip-ansi "^7.0.1"
-
-"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1:
- name strip-ansi-cjs
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
- integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
- dependencies:
- ansi-regex "^5.0.1"
-
-strip-ansi@^7.0.1:
- version "7.1.0"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
- integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==
- dependencies:
- ansi-regex "^6.0.1"
-
-tar@^6.1.11, tar@^6.1.2:
- version "6.2.1"
- resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a"
- integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==
- dependencies:
- chownr "^2.0.0"
- fs-minipass "^2.0.0"
- minipass "^5.0.0"
- minizlib "^2.1.1"
- mkdirp "^1.0.3"
- yallist "^4.0.0"
-
-unique-filename@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea"
- integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==
- dependencies:
- unique-slug "^4.0.0"
-
-unique-slug@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3"
- integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==
- dependencies:
- imurmurhash "^0.1.4"
-
-which@^2.0.1:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
- integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
- dependencies:
- isexe "^2.0.0"
-
-which@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/which/-/which-4.0.0.tgz#cd60b5e74503a3fbcfbf6cd6b4138a8bae644c1a"
- integrity sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==
- dependencies:
- isexe "^3.1.1"
-
-"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
- integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
- dependencies:
- ansi-styles "^4.0.0"
- string-width "^4.1.0"
- strip-ansi "^6.0.0"
-
-wrap-ansi@^8.1.0:
- version "8.1.0"
- resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"
- integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==
- dependencies:
- ansi-styles "^6.1.0"
- string-width "^5.0.1"
- strip-ansi "^7.0.1"
-
-yallist@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
- integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
diff --git a/build/npm/postinstall.js b/build/npm/postinstall.js
index 9c404552356..59f717b8920 100644
--- a/build/npm/postinstall.js
+++ b/build/npm/postinstall.js
@@ -8,12 +8,19 @@ const path = require('path');
const os = require('os');
const cp = require('child_process');
const { dirs } = require('./dirs');
-const { setupBuildYarnrc } = require('./setupBuildYarnrc');
-const yarn = process.platform === 'win32' ? 'yarn.cmd' : 'yarn';
+const npm = process.platform === 'win32' ? 'npm.cmd' : 'npm';
const root = path.dirname(path.dirname(__dirname));
+function log(dir, message) {
+ if (process.stdout.isTTY) {
+ console.log(`\x1b[34m[${dir}]\x1b[0m`, message);
+ } else {
+ console.log(`[${dir}]`, message);
+ }
+}
+
function run(command, args, opts) {
- console.log('$ ' + command + ' ' + args.join(' '));
+ log(opts.cwd || '.', '$ ' + command + ' ' + args.join(' '));
const result = cp.spawnSync(command, args, opts);
@@ -30,7 +37,7 @@ function run(command, args, opts) {
* @param {string} dir
* @param {*} [opts]
*/
-function yarnInstall(dir, opts) {
+function npmInstall(dir, opts) {
opts = {
env: { ...process.env },
...(opts ?? {}),
@@ -39,29 +46,53 @@ function yarnInstall(dir, opts) {
shell: true
};
- const raw = process.env['npm_config_argv'] || '{}';
- const argv = JSON.parse(raw);
- const original = argv.original || [];
- const args = original.filter(arg => arg === '--ignore-optional' || arg === '--frozen-lockfile' || arg === '--check-files');
-
- if (opts.ignoreEngines) {
- args.push('--ignore-engines');
- delete opts.ignoreEngines;
- }
+ const command = process.env['npm_command'] || 'install';
if (process.env['VSCODE_REMOTE_DEPENDENCIES_CONTAINER_NAME'] && /^(.build\/distro\/npm\/)?remote$/.test(dir)) {
const userinfo = os.userInfo();
- console.log(`Installing dependencies in ${dir} inside container ${process.env['VSCODE_REMOTE_DEPENDENCIES_CONTAINER_NAME']}...`);
+ log(dir, `Installing dependencies inside container ${process.env['VSCODE_REMOTE_DEPENDENCIES_CONTAINER_NAME']}...`);
opts.cwd = root;
if (process.env['npm_config_arch'] === 'arm64') {
run('sudo', ['docker', 'run', '--rm', '--privileged', 'multiarch/qemu-user-static', '--reset', '-p', 'yes'], opts);
}
- run('sudo', ['docker', 'run', '-e', 'GITHUB_TOKEN', '-e', 'npm_config_arch', '-v', `${process.env['VSCODE_HOST_MOUNT']}:/root/vscode`, '-v', `${process.env['VSCODE_HOST_MOUNT']}/.build/.netrc:/root/.netrc`, process.env['VSCODE_REMOTE_DEPENDENCIES_CONTAINER_NAME'], 'yarn', '--cwd', dir, ...args], opts);
- run('sudo', ['chown', '-R', `${userinfo.uid}:${userinfo.gid}`, `${dir}/node_modules`], opts);
+ run('sudo', ['docker', 'run', '-e', 'GITHUB_TOKEN', '-v', `${process.env['VSCODE_HOST_MOUNT']}:/root/vscode`, '-v', `${process.env['VSCODE_HOST_MOUNT']}/.build/.netrc:/root/.netrc`, '-w', path.resolve('/root/vscode', dir), process.env['VSCODE_REMOTE_DEPENDENCIES_CONTAINER_NAME'], 'sh', '-c', `\"chown -R root:root ${path.resolve('/root/vscode', dir)} && npm i -g node-gyp-build && npm ci\"`], opts);
+ run('sudo', ['chown', '-R', `${userinfo.uid}:${userinfo.gid}`, `${path.resolve(root, dir)}`], opts);
+ } else {
+ log(dir, 'Installing dependencies...');
+ run(npm, command.split(' '), opts);
+ }
+}
+
+function setNpmrcConfig(dir, env) {
+ const npmrcPath = path.join(root, dir, '.npmrc');
+ const lines = fs.readFileSync(npmrcPath, 'utf8').split('\n');
+
+ for (const line of lines) {
+ const trimmedLine = line.trim();
+ if (trimmedLine && !trimmedLine.startsWith('#')) {
+ const [key, value] = trimmedLine.split('=');
+ env[`npm_config_${key}`] = value.replace(/^"(.*)"$/, '$1');
+ }
+ }
+
+ // Force node-gyp to use process.config on macOS
+ // which defines clang variable as expected. Otherwise we
+ // run into compilation errors due to incorrect compiler
+ // configuration.
+ // NOTE: This means the process.config should contain
+ // the correct clang variable. So keep the version check
+ // in preinstall sync with this logic.
+ // Change was first introduced in https://github.com/nodejs/node/commit/6e0a2bb54c5bbeff0e9e33e1a0c683ed980a8a0f
+ if (dir === 'remote' && process.platform === 'darwin') {
+ env['npm_config_force_process_config'] = 'true';
} else {
- console.log(`Installing dependencies in ${dir}...`);
- run(yarn, args, opts);
+ delete env['npm_config_force_process_config'];
+ }
+
+ if (dir === 'build') {
+ env['npm_config_target'] = process.versions.node;
+ env['npm_config_arch'] = process.arch;
}
}
@@ -124,30 +155,25 @@ function generateRehWebPackageJson() {
for (let dir of dirs) {
if (dir === '') {
- // `yarn` already executed in root
+ // already executed in root
continue;
}
- if (/^.build\/distro\/npm(\/?)/.test(dir)) {
- const ossPath = path.relative('.build/distro/npm', dir);
- const ossYarnRc = path.join(ossPath, '.yarnrc');
-
- if (fs.existsSync(ossYarnRc)) {
- fs.cpSync(ossYarnRc, path.join(dir, '.yarnrc'));
- }
- }
-
let opts;
if (dir === 'build') {
- const env = { ...process.env };
- setupBuildYarnrc();
- opts = { env };
- if (process.env['CC']) { env['CC'] = 'gcc'; }
- if (process.env['CXX']) { env['CXX'] = 'g++'; }
- if (process.env['CXXFLAGS']) { env['CXXFLAGS'] = ''; }
- if (process.env['LDFLAGS']) { env['LDFLAGS'] = ''; }
- yarnInstall('build', opts);
+ opts = {
+ env: {
+ ...process.env
+ },
+ }
+ if (process.env['CC']) { opts.env['CC'] = 'gcc'; }
+ if (process.env['CXX']) { opts.env['CXX'] = 'g++'; }
+ if (process.env['CXXFLAGS']) { opts.env['CXXFLAGS'] = ''; }
+ if (process.env['LDFLAGS']) { opts.env['LDFLAGS'] = ''; }
+
+ setNpmrcConfig('build', opts.env);
+ npmInstall('build', opts);
continue;
}
@@ -157,25 +183,27 @@ for (let dir of dirs) {
if (/^(.build\/distro\/npm\/)?remote$/.test(dir) || isRehWebDir) {
// --- End Positron ---
// node modules used by vscode server
- const env = { ...process.env };
+ opts = {
+ env: {
+ ...process.env
+ },
+ }
if (process.env['VSCODE_REMOTE_CC']) {
- env['CC'] = process.env['VSCODE_REMOTE_CC'];
+ opts.env['CC'] = process.env['VSCODE_REMOTE_CC'];
} else {
- delete env['CC'];
+ delete opts.env['CC'];
}
if (process.env['VSCODE_REMOTE_CXX']) {
- env['CXX'] = process.env['VSCODE_REMOTE_CXX'];
+ opts.env['CXX'] = process.env['VSCODE_REMOTE_CXX'];
} else {
- delete env['CXX'];
+ delete opts.env['CXX'];
}
- if (process.env['CXXFLAGS']) { delete env['CXXFLAGS']; }
- if (process.env['CFLAGS']) { delete env['CFLAGS']; }
- if (process.env['LDFLAGS']) { delete env['LDFLAGS']; }
- if (process.env['VSCODE_REMOTE_CXXFLAGS']) { env['CXXFLAGS'] = process.env['VSCODE_REMOTE_CXXFLAGS']; }
- if (process.env['VSCODE_REMOTE_LDFLAGS']) { env['LDFLAGS'] = process.env['VSCODE_REMOTE_LDFLAGS']; }
- if (process.env['VSCODE_REMOTE_NODE_GYP']) { env['npm_config_node_gyp'] = process.env['VSCODE_REMOTE_NODE_GYP']; }
-
- opts = { env };
+ if (process.env['CXXFLAGS']) { delete opts.env['CXXFLAGS']; }
+ if (process.env['CFLAGS']) { delete opts.env['CFLAGS']; }
+ if (process.env['LDFLAGS']) { delete opts.env['LDFLAGS']; }
+ if (process.env['VSCODE_REMOTE_CXXFLAGS']) { opts.env['CXXFLAGS'] = process.env['VSCODE_REMOTE_CXXFLAGS']; }
+ if (process.env['VSCODE_REMOTE_LDFLAGS']) { opts.env['LDFLAGS'] = process.env['VSCODE_REMOTE_LDFLAGS']; }
+ if (process.env['VSCODE_REMOTE_NODE_GYP']) { opts.env['npm_config_node_gyp'] = process.env['VSCODE_REMOTE_NODE_GYP']; }
// --- Start Positron ---
if (isRehWebDir) {
@@ -186,11 +214,30 @@ for (let dir of dirs) {
generateRehWebPackageJson();
}
// --- End Positron ---
- } else if (/^extensions\//.test(dir)) {
- opts = { ignoreEngines: true };
+ const globalGypPath = path.join(os.homedir(), '.gyp');
+ const globalInclude = path.join(globalGypPath, 'include.gypi');
+ const tempGlobalInclude = path.join(globalGypPath, 'include.gypi.bak');
+ if (process.platform === 'linux' &&
+ (process.env['CI'] || process.env['BUILD_ARTIFACTSTAGINGDIRECTORY'])) {
+ // Following include file rename should be removed
+ // when `Override gnu target for arm64 and arm` step
+ // is removed from the product build pipeline.
+ if (fs.existsSync(globalInclude)) {
+ fs.renameSync(globalInclude, tempGlobalInclude);
+ }
+ }
+ setNpmrcConfig('remote', opts.env);
+ npmInstall(dir, opts);
+ if (process.platform === 'linux' &&
+ (process.env['CI'] || process.env['BUILD_ARTIFACTSTAGINGDIRECTORY'])) {
+ if (fs.existsSync(tempGlobalInclude)) {
+ fs.renameSync(tempGlobalInclude, globalInclude);
+ }
+ }
+ continue;
}
- yarnInstall(dir, opts);
+ npmInstall(dir, opts);
}
cp.execSync('git config pull.rebase merges');
diff --git a/build/npm/preinstall.js b/build/npm/preinstall.js
index f359215ec8e..6619382d247 100644
--- a/build/npm/preinstall.js
+++ b/build/npm/preinstall.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.
*--------------------------------------------------------------------------------------------*/
-let err = false;
const nodeVersion = /^(\d+)\.(\d+)\.(\d+)/.exec(process.versions.node);
const majorNodeVersion = parseInt(nodeVersion[1]);
@@ -10,50 +9,27 @@ const minorNodeVersion = parseInt(nodeVersion[2]);
const patchNodeVersion = parseInt(nodeVersion[3]);
if (!process.env['VSCODE_SKIP_NODE_VERSION_CHECK']) {
- if (majorNodeVersion < 20) {
- console.error('\x1b[1;31m*** Please use latest Node.js v20 LTS for development.\x1b[0;0m');
- err = true;
+ if (majorNodeVersion < 20 || (majorNodeVersion === 20 && minorNodeVersion < 18)) {
+ console.error('\x1b[1;31m*** Please use Node.js v20.18.0 or later for development.\x1b[0;0m');
+ throw new Error();
}
}
+if (process.env['npm_execpath'].includes('yarn')) {
+ console.error('\x1b[1;31m*** Seems like you are using `yarn` which is not supported in this repo any more, please use `npm i` instead. ***\x1b[0;0m');
+ throw new Error();
+}
+
const path = require('path');
const fs = require('fs');
const cp = require('child_process');
-const yarnVersion = cp.execSync('yarn -v', { encoding: 'utf8' }).trim();
-const parsedYarnVersion = /^(\d+)\.(\d+)\.(\d+)/.exec(yarnVersion);
-const majorYarnVersion = parseInt(parsedYarnVersion[1]);
-const minorYarnVersion = parseInt(parsedYarnVersion[2]);
-const patchYarnVersion = parseInt(parsedYarnVersion[3]);
-
-if (
- majorYarnVersion < 1 ||
- majorYarnVersion === 1 && (
- minorYarnVersion < 10 || (minorYarnVersion === 10 && patchYarnVersion < 1)
- ) ||
- majorYarnVersion >= 2
-) {
- console.error('\x1b[1;31m*** Please use yarn >=1.10.1 and <2.\x1b[0;0m');
- err = true;
-}
-
-if (!/yarn[\w-.]*\.c?js$|yarnpkg$/.test(process.env['npm_execpath'])) {
- console.error('\x1b[1;31m*** Please use yarn to install dependencies.\x1b[0;0m');
- err = true;
-}
if (process.platform === 'win32') {
if (!hasSupportedVisualStudioVersion()) {
console.error('\x1b[1;31m*** Invalid C/C++ Compiler Toolchain. Please check https://github.com/microsoft/vscode/wiki/How-to-Contribute#prerequisites.\x1b[0;0m');
- err = true;
- }
- if (!err) {
- installHeaders();
+ throw new Error();
}
-}
-
-if (err) {
- console.error('');
- process.exit(1);
+ installHeaders();
}
function hasSupportedVisualStudioVersion() {
@@ -94,28 +70,21 @@ function hasSupportedVisualStudioVersion() {
}
function installHeaders() {
- const yarn = 'yarn.cmd';
- const yarnResult = cp.spawnSync(yarn, ['install'], {
+ cp.execSync(`npm.cmd ${process.env['npm_command'] || 'ci'}`, {
env: process.env,
cwd: path.join(__dirname, 'gyp'),
- stdio: 'inherit',
- shell: true
+ stdio: 'inherit'
});
- if (yarnResult.error || yarnResult.status !== 0) {
- console.error(`Installing node-gyp failed`);
- err = true;
- return;
- }
- // The node gyp package got installed using the above yarn command using the gyp/package.json
+ // The node gyp package got installed using the above npm command using the gyp/package.json
// file checked into our repository. So from that point it is save to construct the path
// to that executable
const node_gyp = path.join(__dirname, 'gyp', 'node_modules', '.bin', 'node-gyp.cmd');
const result = cp.execFileSync(node_gyp, ['list'], { encoding: 'utf8', shell: true });
const versions = new Set(result.split(/\n/g).filter(line => !line.startsWith('gyp info')).map(value => value));
- const local = getHeaderInfo(path.join(__dirname, '..', '..', '.yarnrc'));
- const remote = getHeaderInfo(path.join(__dirname, '..', '..', 'remote', '.yarnrc'));
+ const local = getHeaderInfo(path.join(__dirname, '..', '..', '.npmrc'));
+ const remote = getHeaderInfo(path.join(__dirname, '..', '..', 'remote', '.npmrc'));
if (local !== undefined && !versions.has(local.target)) {
// Both disturl and target come from a file checked into our repository
@@ -136,11 +105,11 @@ function getHeaderInfo(rcFile) {
const lines = fs.readFileSync(rcFile, 'utf8').split(/\r\n?/g);
let disturl, target;
for (const line of lines) {
- let match = line.match(/\s*disturl\s*\"(.*)\"\s*$/);
+ let match = line.match(/\s*disturl=*\"(.*)\"\s*$/);
if (match !== null && match.length >= 1) {
disturl = match[1];
}
- match = line.match(/\s*target\s*\"(.*)\"\s*$/);
+ match = line.match(/\s*target=*\"(.*)\"\s*$/);
if (match !== null && match.length >= 1) {
target = match[1];
}
diff --git a/build/npm/setupBuildYarnrc.js b/build/npm/setupBuildYarnrc.js
deleted file mode 100644
index f8027dcfcb0..00000000000
--- a/build/npm/setupBuildYarnrc.js
+++ /dev/null
@@ -1,25 +0,0 @@
-/*---------------------------------------------------------------------------------------------
- * Copyright (c) Microsoft Corporation. All rights reserved.
- * Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-
-const path = require('path');
-const fs = require('fs');
-
-// make sure we install the deps of build for the system installed
-// node, since that is the driver of gulp
-function setupBuildYarnrc() {
- const yarnrcPath = path.join(path.dirname(__dirname), '.yarnrc');
- const yarnrc = `disturl "https://nodejs.org/download/release"
-target "${process.versions.node}"
-runtime "node"
-arch "${process.arch}"`;
-
- fs.writeFileSync(yarnrcPath, yarnrc, 'utf8');
-}
-
-exports.setupBuildYarnrc = setupBuildYarnrc;
-
-if (require.main === module) {
- setupBuildYarnrc();
-}
diff --git a/build/npm/update-all-grammars.mjs b/build/npm/update-all-grammars.mjs
index e0d34e42beb..7e303a655f7 100644
--- a/build/npm/update-all-grammars.mjs
+++ b/build/npm/update-all-grammars.mjs
@@ -16,7 +16,7 @@ async function spawn(cmd, args, opts) {
}
async function main() {
- await spawn('yarn', [], { cwd: 'extensions' });
+ await spawn('npm', ['ci'], { cwd: 'extensions' });
for (const extension of readdirSync('extensions')) {
try {
diff --git a/build/package-lock.json b/build/package-lock.json
new file mode 100644
index 00000000000..1e373f2e68f
--- /dev/null
+++ b/build/package-lock.json
@@ -0,0 +1,4396 @@
+{
+ "name": "code-oss-dev-build",
+ "version": "1.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "code-oss-dev-build",
+ "version": "1.0.0",
+ "license": "MIT",
+ "devDependencies": {
+ "@azure/cosmos": "^3",
+ "@azure/identity": "^4.2.1",
+ "@electron/get": "^2.0.0",
+ "@types/ansi-colors": "^3.2.0",
+ "@types/byline": "^4.2.32",
+ "@types/debounce": "^1.0.0",
+ "@types/debug": "^4.1.5",
+ "@types/fancy-log": "^1.3.0",
+ "@types/fs-extra": "^9.0.12",
+ "@types/glob": "^7.1.1",
+ "@types/gulp": "^4.0.17",
+ "@types/gulp-filter": "^3.0.32",
+ "@types/gulp-gzip": "^0.0.31",
+ "@types/gulp-json-editor": "^2.2.31",
+ "@types/gulp-rename": "^0.0.33",
+ "@types/gulp-sort": "^2.0.4",
+ "@types/gulp-sourcemaps": "^0.0.32",
+ "@types/mime": "0.0.29",
+ "@types/minimatch": "^3.0.3",
+ "@types/minimist": "^1.2.1",
+ "@types/mocha": "^9.1.1",
+ "@types/node": "20.x",
+ "@types/pump": "^1.0.1",
+ "@types/rimraf": "^2.0.4",
+ "@types/through": "^0.0.29",
+ "@types/through2": "^2.0.36",
+ "@types/workerpool": "^6.4.0",
+ "@types/xml2js": "0.0.33",
+ "@vscode/iconv-lite-umd": "0.7.0",
+ "@vscode/vsce": "2.20.1",
+ "byline": "^5.0.0",
+ "debug": "^4.3.2",
+ "electron-osx-sign": "^0.4.16",
+ "esbuild": "0.23.0",
+ "extract-zip": "^2.0.1",
+ "gulp-merge-json": "^2.1.1",
+ "gulp-sort": "^2.0.0",
+ "jsonc-parser": "^2.3.0",
+ "mime": "^1.4.1",
+ "source-map": "0.6.1",
+ "ternary-stream": "^3.0.0",
+ "through2": "^4.0.2",
+ "tree-sitter": "^0.20.5",
+ "vscode-universal-bundler": "^0.1.3",
+ "workerpool": "^6.4.0",
+ "yauzl": "^2.10.0"
+ },
+ "optionalDependencies": {
+ "tree-sitter-typescript": "^0.20.5",
+ "vscode-gulp-watch": "^5.0.3"
+ }
+ },
+ "node_modules/@azure/abort-controller": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.0.2.tgz",
+ "integrity": "sha512-XUyTo+bcyxHEf+jlN2MXA7YU9nxVehaubngHV1MIZZaqYmZqykkoeAz/JMMEeR7t3TcyDwbFa3Zw8BZywmIx4g==",
+ "dev": true,
+ "dependencies": {
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/@azure/core-asynciterator-polyfill": {
+ "version": "1.0.0",
+ "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.5.0",
+ "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.5.0.tgz",
+ "integrity": "sha512-udzoBuYG1VBoHVohDTrvKjyzel34zt77Bhp7dQntVGGD0ehVq48owENbBG8fIgkHRNUBQH5k1r0hpoMu5L8+kw==",
+ "dev": true,
+ "dependencies": {
+ "@azure/abort-controller": "^1.0.0",
+ "@azure/core-util": "^1.1.0",
+ "tslib": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@azure/core-client": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.5.0.tgz",
+ "integrity": "sha512-YNk8i9LT6YcFdFO+RRU0E4Ef+A8Y5lhXo6lz61rwbG8Uo7kSqh0YqK04OexiilM43xd6n3Y9yBhLnb1NFNI9dA==",
+ "dev": true,
+ "dependencies": {
+ "@azure/abort-controller": "^1.0.0",
+ "@azure/core-asynciterator-polyfill": "^1.0.0",
+ "@azure/core-auth": "^1.3.0",
+ "@azure/core-rest-pipeline": "^1.5.0",
+ "@azure/core-tracing": "1.0.0-preview.13",
+ "@azure/logger": "^1.0.0",
+ "tslib": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/@azure/core-client/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,
+ "dependencies": {
+ "@opentelemetry/api": "^1.0.1",
+ "tslib": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/@azure/core-rest-pipeline": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.7.0.tgz",
+ "integrity": "sha512-e2awPzwMKHrmvYgZ0qIKNkqnCM1QoDs7A0rOiS3OSAlOQOz/kL7PPKHXwFMuBeaRvS8i7fgobJn79q2Cji5f+Q==",
+ "dev": true,
+ "dependencies": {
+ "@azure/abort-controller": "^1.0.0",
+ "@azure/core-auth": "^1.3.0",
+ "@azure/core-tracing": "1.0.0-preview.13",
+ "@azure/logger": "^1.0.0",
+ "form-data": "^4.0.0",
+ "http-proxy-agent": "^4.0.1",
+ "https-proxy-agent": "^5.0.0",
+ "tslib": "^2.2.0",
+ "uuid": "^8.3.0"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/@azure/core-rest-pipeline/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,
+ "dependencies": {
+ "@opentelemetry/api": "^1.0.1",
+ "tslib": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/@azure/core-tracing": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.1.tgz",
+ "integrity": "sha512-I5CGMoLtX+pI17ZdiFJZgxMJApsK6jjfm85hpgp3oazCdq5Wxgh4wMr7ge/TTWW1B5WBuvIOI1fMU/FrOAMKrw==",
+ "dev": true,
+ "dependencies": {
+ "tslib": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "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,
+ "dependencies": {
+ "@azure/abort-controller": "^2.0.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@azure/core-util/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,
+ "dependencies": {
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@azure/cosmos": {
+ "version": "3.17.3",
+ "resolved": "https://registry.npmjs.org/@azure/cosmos/-/cosmos-3.17.3.tgz",
+ "integrity": "sha512-wBglkQ6Irjv5Vo2iw8fd6eYj60WYRSSg4/0DBkeOP6BwQ4RA91znsOHd6s3qG6UAbNgYuzC9Nnq07vlFFZkHEw==",
+ "dev": true,
+ "dependencies": {
+ "@azure/abort-controller": "^1.0.0",
+ "@azure/core-auth": "^1.3.0",
+ "@azure/core-rest-pipeline": "^1.2.0",
+ "@azure/core-tracing": "^1.0.0",
+ "debug": "^4.1.1",
+ "fast-json-stable-stringify": "^2.1.0",
+ "jsbi": "^3.1.3",
+ "node-abort-controller": "^3.0.0",
+ "priorityqueuejs": "^1.0.0",
+ "semaphore": "^1.0.5",
+ "tslib": "^2.2.0",
+ "universal-user-agent": "^6.0.0",
+ "uuid": "^8.3.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@azure/identity": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-4.2.1.tgz",
+ "integrity": "sha512-U8hsyC9YPcEIzoaObJlRDvp7KiF0MGS7xcWbyJSVvXRkC/HXo1f0oYeBYmEvVgRfacw7GHf6D6yAoh9JHz6A5Q==",
+ "dev": true,
+ "dependencies": {
+ "@azure/abort-controller": "^1.0.0",
+ "@azure/core-auth": "^1.5.0",
+ "@azure/core-client": "^1.4.0",
+ "@azure/core-rest-pipeline": "^1.1.0",
+ "@azure/core-tracing": "^1.0.0",
+ "@azure/core-util": "^1.3.0",
+ "@azure/logger": "^1.0.0",
+ "@azure/msal-browser": "^3.11.1",
+ "@azure/msal-node": "^2.9.2",
+ "events": "^3.0.0",
+ "jws": "^4.0.0",
+ "open": "^8.0.0",
+ "stoppable": "^1.1.0",
+ "tslib": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@azure/logger": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.0.1.tgz",
+ "integrity": "sha512-QYQeaJ+A5x6aMNu8BG5qdsVBnYBop9UMwgUvGihSjf1PdZZXB+c/oMdM2ajKwzobLBh9e9QuMQkN9iL+IxLBLA==",
+ "dev": true,
+ "dependencies": {
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/@azure/msal-browser": {
+ "version": "3.17.0",
+ "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-3.17.0.tgz",
+ "integrity": "sha512-csccKXmW2z7EkZ0I3yAoW/offQt+JECdTIV/KrnRoZyM7wCSsQWODpwod8ZhYy7iOyamcHApR9uCh0oD1M+0/A==",
+ "dev": true,
+ "dependencies": {
+ "@azure/msal-common": "14.12.0"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/@azure/msal-common": {
+ "version": "14.12.0",
+ "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.12.0.tgz",
+ "integrity": "sha512-IDDXmzfdwmDkv4SSmMEyAniJf6fDu3FJ7ncOjlxkDuT85uSnLEhZi3fGZpoR7T4XZpOMx9teM9GXBgrfJgyeBw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/@azure/msal-node": {
+ "version": "2.9.2",
+ "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-2.9.2.tgz",
+ "integrity": "sha512-8tvi6Cos3m+0KmRbPjgkySXi+UQU/QiuVRFnrxIwt5xZlEEFa69O04RTaNESGgImyBBlYbo2mfE8/U8Bbdk1WQ==",
+ "dev": true,
+ "dependencies": {
+ "@azure/msal-common": "14.12.0",
+ "jsonwebtoken": "^9.0.0",
+ "uuid": "^8.3.0"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/@electron/asar": {
+ "version": "3.2.10",
+ "resolved": "https://registry.npmjs.org/@electron/asar/-/asar-3.2.10.tgz",
+ "integrity": "sha512-mvBSwIBUeiRscrCeJE1LwctAriBj65eUDm0Pc11iE5gRwzkmsdbS7FnZ1XUWjpSeQWL1L5g12Fc/SchPM9DUOw==",
+ "dev": true,
+ "dependencies": {
+ "commander": "^5.0.0",
+ "glob": "^7.1.6",
+ "minimatch": "^3.0.4"
+ },
+ "bin": {
+ "asar": "bin/asar.js"
+ },
+ "engines": {
+ "node": ">=10.12.0"
+ }
+ },
+ "node_modules/@electron/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,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/@electron/get": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.3.tgz",
+ "integrity": "sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^4.1.1",
+ "env-paths": "^2.2.0",
+ "fs-extra": "^8.1.0",
+ "got": "^11.8.5",
+ "progress": "^2.0.3",
+ "semver": "^6.2.0",
+ "sumchecker": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "optionalDependencies": {
+ "global-agent": "^3.0.0"
+ }
+ },
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.0.tgz",
+ "integrity": "sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.0.tgz",
+ "integrity": "sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.0.tgz",
+ "integrity": "sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.0.tgz",
+ "integrity": "sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.0.tgz",
+ "integrity": "sha512-YLntie/IdS31H54Ogdn+v50NuoWF5BDkEUFpiOChVa9UnKpftgwzZRrI4J132ETIi+D8n6xh9IviFV3eXdxfow==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.0.tgz",
+ "integrity": "sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.0.tgz",
+ "integrity": "sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.0.tgz",
+ "integrity": "sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.0.tgz",
+ "integrity": "sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.0.tgz",
+ "integrity": "sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.0.tgz",
+ "integrity": "sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.0.tgz",
+ "integrity": "sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.0.tgz",
+ "integrity": "sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.0.tgz",
+ "integrity": "sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.0.tgz",
+ "integrity": "sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.0.tgz",
+ "integrity": "sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.0.tgz",
+ "integrity": "sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.0.tgz",
+ "integrity": "sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-arm64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.0.tgz",
+ "integrity": "sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.0.tgz",
+ "integrity": "sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.0.tgz",
+ "integrity": "sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.0.tgz",
+ "integrity": "sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.0.tgz",
+ "integrity": "sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.0.tgz",
+ "integrity": "sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@malept/cross-spawn-promise": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-2.0.0.tgz",
+ "integrity": "sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/malept"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/subscription/pkg/npm-.malept-cross-spawn-promise?utm_medium=referral&utm_source=npm_fund"
+ }
+ ],
+ "dependencies": {
+ "cross-spawn": "^7.0.1"
+ },
+ "engines": {
+ "node": ">= 12.13.0"
+ }
+ },
+ "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,
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "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,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/is?sponsor=1"
+ }
+ },
+ "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,
+ "dependencies": {
+ "defer-to-connect": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@tootallnate/once": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
+ "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/@types/ansi-colors": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/@types/ansi-colors/-/ansi-colors-3.2.0.tgz",
+ "integrity": "sha512-0caWAhXht9N2lOdMzJLXybsSkYCx1QOdxx6pae48tswI9QV3DFX26AoOpy0JxwhCb+zISTqmd6H8t9Zby9BoZg==",
+ "dev": true
+ },
+ "node_modules/@types/byline": {
+ "version": "4.2.32",
+ "resolved": "https://registry.npmjs.org/@types/byline/-/byline-4.2.32.tgz",
+ "integrity": "sha512-qtlm/J6XOO9p+Ep/ZB5+mCFEDhzWDDHWU4a1eReN7lkPZXW9rkloq2jcAhvKKmlO5tL2GSvKROb+PTsNVhBiyQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "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,
+ "dependencies": {
+ "@types/http-cache-semantics": "*",
+ "@types/keyv": "^3.1.4",
+ "@types/node": "*",
+ "@types/responselike": "^1.0.0"
+ }
+ },
+ "node_modules/@types/debounce": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@types/debounce/-/debounce-1.0.0.tgz",
+ "integrity": "sha1-QXVgIAMx4buE1y2oU5EQLC/NYbc= sha512-B7FcD9ry40L831t7iuHQyDfYi+qVEV75qkEI2ROOyfjb2PfkAspL+NK6B2A0BceMuNhiYRmtKTNnNP7Ul4N2Pg==",
+ "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,
+ "dependencies": {
+ "@types/ms": "*"
+ }
+ },
+ "node_modules/@types/events": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz",
+ "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==",
+ "dev": true
+ },
+ "node_modules/@types/expect": {
+ "version": "1.20.4",
+ "resolved": "https://registry.npmjs.org/@types/expect/-/expect-1.20.4.tgz",
+ "integrity": "sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==",
+ "dev": true
+ },
+ "node_modules/@types/fancy-log": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@types/fancy-log/-/fancy-log-1.3.0.tgz",
+ "integrity": "sha512-mQjDxyOM1Cpocd+vm1kZBP7smwKZ4TNokFeds9LV7OZibmPJFEzY3+xZMrKfUdNT71lv8GoCPD6upKwHxubClw==",
+ "dev": true
+ },
+ "node_modules/@types/fs-extra": {
+ "version": "9.0.12",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.12.tgz",
+ "integrity": "sha512-I+bsBr67CurCGnSenZZ7v94gd3tc3+Aj2taxMT4yu4ABLuOgOjeFxX3dokG24ztSRg5tnT00sL8BszO7gSMoIw==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "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/glob-stream": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/@types/glob-stream/-/glob-stream-6.1.0.tgz",
+ "integrity": "sha512-RHv6ZQjcTncXo3thYZrsbAVwoy4vSKosSWhuhuQxLOTv74OJuFQxXkmUuZCr3q9uNBEVCvIzmZL/FeRNbHZGUg==",
+ "dev": true,
+ "dependencies": {
+ "@types/glob": "*",
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/gulp": {
+ "version": "4.0.17",
+ "resolved": "https://registry.npmjs.org/@types/gulp/-/gulp-4.0.17.tgz",
+ "integrity": "sha512-+pKQynu2C/HS16kgmDlAicjtFYP8kaa86eE9P0Ae7GB5W29we/E2TIdbOWtEZD5XkpY+jr8fyqfwO6SWZecLpQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*",
+ "@types/undertaker": ">=1.2.6",
+ "@types/vinyl-fs": "*",
+ "chokidar": "^3.3.1"
+ }
+ },
+ "node_modules/@types/gulp-filter": {
+ "version": "3.0.32",
+ "resolved": "https://registry.npmjs.org/@types/gulp-filter/-/gulp-filter-3.0.32.tgz",
+ "integrity": "sha512-JvY4qTxXehoK2yCUxYVxTMvckVbDM5TWHWeUoYJyX31gwFqw4YDD6JNzhuTxI3yHPUTY4BBRTqgm6puQEZVCNg==",
+ "dev": true,
+ "dependencies": {
+ "@types/minimatch": "*",
+ "@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",
+ "integrity": "sha512-KQjHz1FTqLse8/EiktfhN/vo33vamX4gVAQhMTp55STDBA7UToW5CJqYyP7iRorkHK9/aJ2nL2hLkNZkY4M8+w==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/gulp-json-editor": {
+ "version": "2.2.31",
+ "resolved": "https://registry.npmjs.org/@types/gulp-json-editor/-/gulp-json-editor-2.2.31.tgz",
+ "integrity": "sha512-piis0ImYAy0dt18R4EtTbAY+RV8jwTq5VisnUV6OfP8kD4743aHGkAdAd08No4NY3rFa5mD6ytIu8L0YU7nL9w==",
+ "dev": true,
+ "dependencies": {
+ "@types/js-beautify": "*",
+ "@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",
+ "integrity": "sha512-FIZQvbZJj6V1gHPTzO+g/BCWpDur7fJrroae4gwV3LaoHBQ+MrR9sB+2HssK8fHv4WdY6hVNxkcft9bYatuPIA==",
+ "dev": true,
+ "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",
+ "integrity": "sha512-HUHxH+oMox1ct0SnxPqCXBni0MSws1ygcSAoLO4ISRmR/UuvNIz40rgNveZxwxQk+p78kw09z/qKQkgKJmNUOQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/gulp-util": "*",
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/gulp-sourcemaps": {
+ "version": "0.0.32",
+ "resolved": "https://registry.npmjs.org/@types/gulp-sourcemaps/-/gulp-sourcemaps-0.0.32.tgz",
+ "integrity": "sha512-+7BAmptW2bxyJnJcCEuie7vLoop3FwWgCdBMzyv7MYXED/HeNMeQuX7uPCkp4vfU1TTu4CYFH0IckNPvo0VePA==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/gulp-util": {
+ "version": "3.0.41",
+ "resolved": "https://registry.npmjs.org/@types/gulp-util/-/gulp-util-3.0.41.tgz",
+ "integrity": "sha512-BK0kJZ8euQNlISsmD6mBr/1RZkB0mljdtBsz2usv+QHPV10alH2AJw5p05S9LU6S+VdTjbFmGU0OxpH++2W9/Q==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*",
+ "@types/through2": "*",
+ "@types/vinyl": "*",
+ "chalk": "^2.2.0"
+ }
+ },
+ "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
+ },
+ "node_modules/@types/js-beautify": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/@types/js-beautify/-/js-beautify-1.8.0.tgz",
+ "integrity": "sha512-/siF86XrwDKLuHe8l7h6NhrAWgLdgqbxmjZv9NvGWmgYRZoTipkjKiWb0SQHy/jcR+ee0GvbG6uGd+LEBMGNvA==",
+ "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,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/mime": {
+ "version": "0.0.29",
+ "resolved": "https://registry.npmjs.org/@types/mime/-/mime-0.0.29.tgz",
+ "integrity": "sha1-+8/TMFc7kS71nu7hRgK/rOYwdUs= sha512-EqWQSlonwbNgLMq2dMkokuzv/pwevb4q0JrPjfc7zzieG/cpqt+HsCE9dYoQd1snp2zlksl6k3rQ4LLfyQbQdA==",
+ "dev": true
+ },
+ "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/minimist": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.1.tgz",
+ "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",
+ "integrity": "sha512-xPSg0jm4mqgEkNhowKgZFBNtwoEwF6gJ4Dhww+GFpm3IgtNseHQZ5IqdNwnquZEoANxyDAKDRAdVo4Z72VvD/g==",
+ "dev": true
+ },
+ "node_modules/@types/node": {
+ "version": "20.11.24",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.24.tgz",
+ "integrity": "sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long==",
+ "dev": true,
+ "dependencies": {
+ "undici-types": "~5.26.4"
+ }
+ },
+ "node_modules/@types/pump": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@types/pump/-/pump-1.0.1.tgz",
+ "integrity": "sha1-roFXzv7wTRpNJMHMkdQDwvXaXNA= sha512-WGcg4jdczx60mEh0pWLUhw/2215BFYfSob5fHp/fJFZ+UFOiOxIqCnqRGSLWRsJ6Hvh4u2SBokxHDQ0wF9ujqQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/responselike": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz",
+ "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/rimraf": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@types/rimraf/-/rimraf-2.0.4.tgz",
+ "integrity": "sha512-8gBudvllD2A/c0CcEX/BivIDorHFt5UI5m46TsNj8DjWCCTTZT74kEe4g+QsY7P/B9WdO98d82zZgXO/RQzu2Q==",
+ "dev": true,
+ "dependencies": {
+ "@types/glob": "*",
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/through": {
+ "version": "0.0.29",
+ "resolved": "https://registry.npmjs.org/@types/through/-/through-0.0.29.tgz",
+ "integrity": "sha512-9a7C5VHh+1BKblaYiq+7Tfc+EOmjMdZaD1MYtkQjSoxgB69tBjW98ry6SKsi4zEIWztLOMRuL87A3bdT/Fc/4w==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/through2": {
+ "version": "2.0.36",
+ "resolved": "https://registry.npmjs.org/@types/through2/-/through2-2.0.36.tgz",
+ "integrity": "sha512-vuifQksQHJXhV9McpVsXKuhnf3lsoX70PnhcqIAbs9dqLH2NgrGz0DzZPDY3+Yh6eaRqcE1gnCQ6QhBn1/PT5A==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/undertaker": {
+ "version": "1.2.11",
+ "resolved": "https://registry.npmjs.org/@types/undertaker/-/undertaker-1.2.11.tgz",
+ "integrity": "sha512-j1Z0V2ByRHr8ZK7eOeGq0LGkkdthNFW0uAZGY22iRkNQNL9/vAV0yFPr1QN3FM/peY5bxs9P+1f0PYJTQVa5iA==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*",
+ "@types/undertaker-registry": "*",
+ "async-done": "~1.3.2"
+ }
+ },
+ "node_modules/@types/undertaker-registry": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@types/undertaker-registry/-/undertaker-registry-1.0.1.tgz",
+ "integrity": "sha512-Z4TYuEKn9+RbNVk1Ll2SS4x1JeLHecolIbM/a8gveaHsW0Hr+RQMraZACwTO2VD7JvepgA6UO1A1VrbktQrIbQ==",
+ "dev": true
+ },
+ "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,
+ "dependencies": {
+ "@types/expect": "^1.20.4",
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/vinyl-fs": {
+ "version": "2.4.9",
+ "resolved": "https://registry.npmjs.org/@types/vinyl-fs/-/vinyl-fs-2.4.9.tgz",
+ "integrity": "sha512-Q0EXd6c1fORjiOuK4ZaKdfFcMyFzJlTi56dqktwaWVLIDAzE49wUs3bKnYbZwzyMWoH+NcMWnRuR73S9A0jnRA==",
+ "dev": true,
+ "dependencies": {
+ "@types/events": "*",
+ "@types/glob-stream": "*",
+ "@types/node": "*",
+ "@types/vinyl": "*"
+ }
+ },
+ "node_modules/@types/workerpool": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/@types/workerpool/-/workerpool-6.4.0.tgz",
+ "integrity": "sha512-SIF2/169pDsLKeM8GQGHkOFifGalDbZgiBSaLUnnlVSRsAOenkAvQ6h4uhV2W+PZZczS+8LQxACwNkSykdT91A==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/xml2js": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/@types/xml2js/-/xml2js-0.0.33.tgz",
+ "integrity": "sha1-IMXdZGAkUoTWSlVpABW5XkCft94= sha512-6dx6V6EdddqLjhxGdQrNdSu+O+3F7tOlyj660SpkO4/5uDSZM+LXcGQKAFnIJbvTzkQ6d2g3rWxyEXVwYAUoJg==",
+ "dev": true
+ },
+ "node_modules/@types/yauzl": {
+ "version": "2.9.2",
+ "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz",
+ "integrity": "sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@vscode/iconv-lite-umd": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/@vscode/iconv-lite-umd/-/iconv-lite-umd-0.7.0.tgz",
+ "integrity": "sha512-bRRFxLfg5dtAyl5XyiVWz/ZBPahpOpPrNYnnHpOpUZvam4tKH35wdhP4Kj6PbM0+KdliOsPzbGWpkxcdpNB/sg==",
+ "dev": true
+ },
+ "node_modules/@vscode/vsce": {
+ "version": "2.20.1",
+ "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-2.20.1.tgz",
+ "integrity": "sha512-ilbvoqvR/1/zseRPBAzYR6aKqSJ+jvda4/BqIwOqTxajpvLtEpK3kMLs77+dJdrlygS+VrP7Yhad8j0ukyD96g==",
+ "dev": true,
+ "dependencies": {
+ "azure-devops-node-api": "^11.0.1",
+ "chalk": "^2.4.2",
+ "cheerio": "^1.0.0-rc.9",
+ "commander": "^6.1.0",
+ "glob": "^7.0.6",
+ "hosted-git-info": "^4.0.2",
+ "jsonc-parser": "^3.2.0",
+ "leven": "^3.1.0",
+ "markdown-it": "^12.3.2",
+ "mime": "^1.3.4",
+ "minimatch": "^3.0.3",
+ "parse-semver": "^1.1.1",
+ "read": "^1.0.7",
+ "semver": "^7.5.2",
+ "tmp": "^0.2.1",
+ "typed-rest-client": "^1.8.4",
+ "url-join": "^4.0.1",
+ "xml2js": "^0.5.0",
+ "yauzl": "^2.3.1",
+ "yazl": "^2.2.2"
+ },
+ "bin": {
+ "vsce": "vsce"
+ },
+ "engines": {
+ "node": ">= 14"
+ },
+ "optionalDependencies": {
+ "keytar": "^7.7.0"
+ }
+ },
+ "node_modules/@vscode/vsce/node_modules/commander": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
+ "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/@vscode/vsce/node_modules/jsonc-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz",
+ "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==",
+ "dev": true
+ },
+ "node_modules/@vscode/vsce/node_modules/semver": {
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@xmldom/xmldom": {
+ "version": "0.8.10",
+ "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz",
+ "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/agent-base": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
+ "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+ "dev": true,
+ "dependencies": {
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6.0.0"
+ }
+ },
+ "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==",
+ "devOptional": true,
+ "dependencies": {
+ "ansi-wrap": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "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==",
+ "optional": true,
+ "dependencies": {
+ "ansi-wrap": "0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "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,
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "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==",
+ "devOptional": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "devOptional": true,
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "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==",
+ "devOptional": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "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==",
+ "devOptional": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "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==",
+ "devOptional": true,
+ "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,
+ "dependencies": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.2",
+ "process-nextick-args": "^2.0.0",
+ "stream-exhaust": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k= sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
+ "dev": true
+ },
+ "node_modules/azure-devops-node-api": {
+ "version": "11.2.0",
+ "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-11.2.0.tgz",
+ "integrity": "sha512-XdiGPhrpaT5J8wdERRKs5g8E0Zy1pvOYTli7z9E8nmOn3YGp4FhtjhrOyFmX/8veWCwdI69mCHKJw6l+4J/bHA==",
+ "dev": true,
+ "dependencies": {
+ "tunnel": "0.0.6",
+ "typed-rest-client": "^1.8.4"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "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==",
+ "devOptional": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "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==",
+ "devOptional": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/bl": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
+ "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
+ "devOptional": true,
+ "dependencies": {
+ "buffer": "^5.5.0",
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.4.0"
+ }
+ },
+ "node_modules/bluebird": {
+ "version": "3.7.2",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
+ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
+ "dev": true
+ },
+ "node_modules/boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
+ "dev": true
+ },
+ "node_modules/boolean": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.1.2.tgz",
+ "integrity": "sha512-YN6UmV0FfLlBVvRvNPx3pz5W/mUoYB24J4WSXOKP/OOJpi+Oq6WYqPaNTHzjI0QzwWtnvEd5CGYyQPgp1jFxnw==",
+ "dev": true,
+ "optional": true
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+ "devOptional": true,
+ "dependencies": {
+ "fill-range": "^7.1.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/buffer": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+ "devOptional": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ },
+ "node_modules/buffer-alloc": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
+ "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
+ "dev": true,
+ "dependencies": {
+ "buffer-alloc-unsafe": "^1.1.0",
+ "buffer-fill": "^1.0.0"
+ }
+ },
+ "node_modules/buffer-alloc-unsafe": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
+ "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==",
+ "dev": true
+ },
+ "node_modules/buffer-crc32": {
+ "version": "0.2.13",
+ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
+ "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/buffer-equal-constant-time": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
+ "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==",
+ "dev": true
+ },
+ "node_modules/buffer-fill": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
+ "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw= sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==",
+ "dev": true
+ },
+ "node_modules/byline": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz",
+ "integrity": "sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE= sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "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,
+ "engines": {
+ "node": ">=10.6.0"
+ }
+ },
+ "node_modules/cacheable-request": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz",
+ "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==",
+ "dev": true,
+ "dependencies": {
+ "clone-response": "^1.0.2",
+ "get-stream": "^5.1.0",
+ "http-cache-semantics": "^4.0.0",
+ "keyv": "^4.0.0",
+ "lowercase-keys": "^2.0.0",
+ "normalize-url": "^6.0.1",
+ "responselike": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "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,
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "set-function-length": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "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,
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/cheerio": {
+ "version": "1.0.0-rc.12",
+ "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz",
+ "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==",
+ "dev": true,
+ "dependencies": {
+ "cheerio-select": "^2.1.0",
+ "dom-serializer": "^2.0.0",
+ "domhandler": "^5.0.3",
+ "domutils": "^3.0.1",
+ "htmlparser2": "^8.0.1",
+ "parse5": "^7.0.0",
+ "parse5-htmlparser2-tree-adapter": "^7.0.0"
+ },
+ "engines": {
+ "node": ">= 6"
+ },
+ "funding": {
+ "url": "https://github.com/cheeriojs/cheerio?sponsor=1"
+ }
+ },
+ "node_modules/cheerio-select": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz",
+ "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==",
+ "dev": true,
+ "dependencies": {
+ "boolbase": "^1.0.0",
+ "css-select": "^5.1.0",
+ "css-what": "^6.1.0",
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3",
+ "domutils": "^3.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz",
+ "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==",
+ "devOptional": true,
+ "dependencies": {
+ "anymatch": "~3.1.1",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.0",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.5.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.1"
+ }
+ },
+ "node_modules/chownr": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
+ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
+ "devOptional": true
+ },
+ "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==",
+ "devOptional": true,
+ "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==",
+ "devOptional": true,
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "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,
+ "dependencies": {
+ "mimic-response": "^1.0.0"
+ }
+ },
+ "node_modules/clone-stats": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
+ "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA= sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==",
+ "devOptional": 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==",
+ "devOptional": true,
+ "dependencies": {
+ "inherits": "^2.0.1",
+ "process-nextick-args": "^2.0.0",
+ "readable-stream": "^2.3.5"
+ }
+ },
+ "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==",
+ "devOptional": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/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,
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "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==",
+ "optional": true,
+ "bin": {
+ "color-support": "bin.js"
+ }
+ },
+ "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,
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/compare-version": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz",
+ "integrity": "sha1-AWLsLZNR9d3VmpICy6k1NmpyUIA= sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "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==",
+ "dev": true
+ },
+ "node_modules/core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==",
+ "devOptional": true
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "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,
+ "dependencies": {
+ "boolbase": "^1.0.0",
+ "css-what": "^6.1.0",
+ "domhandler": "^5.0.2",
+ "domutils": "^3.0.1",
+ "nth-check": "^2.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
+ }
+ },
+ "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,
+ "engines": {
+ "node": ">= 6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/fb55"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/decompress-response": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
+ "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
+ "devOptional": true,
+ "dependencies": {
+ "mimic-response": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/decompress-response/node_modules/mimic-response": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
+ "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
+ "devOptional": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/deep-extend": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
+ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
+ "devOptional": true,
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "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,
+ "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,
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/define-lazy-prop": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
+ "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "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,
+ "optional": true,
+ "dependencies": {
+ "object-keys": "^1.0.12"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "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,
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/detect-libc": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz",
+ "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==",
+ "devOptional": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/detect-node": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz",
+ "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==",
+ "dev": true,
+ "optional": true
+ },
+ "node_modules/dir-compare": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-4.2.0.tgz",
+ "integrity": "sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==",
+ "dev": true,
+ "dependencies": {
+ "minimatch": "^3.0.5",
+ "p-limit": "^3.1.0 "
+ }
+ },
+ "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,
+ "dependencies": {
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.2",
+ "entities": "^4.2.0"
+ },
+ "funding": {
+ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
+ }
+ },
+ "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"
+ }
+ ]
+ },
+ "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,
+ "dependencies": {
+ "domelementtype": "^2.3.0"
+ },
+ "engines": {
+ "node": ">= 4"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domhandler?sponsor=1"
+ }
+ },
+ "node_modules/domutils": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz",
+ "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==",
+ "dev": true,
+ "dependencies": {
+ "dom-serializer": "^2.0.0",
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/domutils?sponsor=1"
+ }
+ },
+ "node_modules/duplexify": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz",
+ "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==",
+ "dev": true,
+ "dependencies": {
+ "end-of-stream": "^1.4.1",
+ "inherits": "^2.0.3",
+ "readable-stream": "^3.1.1",
+ "stream-shift": "^1.0.0"
+ }
+ },
+ "node_modules/ecdsa-sig-formatter": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
+ "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/electron-osx-sign": {
+ "version": "0.4.16",
+ "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.4.16.tgz",
+ "integrity": "sha512-ziMWfc3NmQlwnWLW6EaZq8nH2BWVng/atX5GWsGwhexJYpdW6hsg//MkAfRTRx1kR3Veiqkeiog1ibkbA4x0rg==",
+ "deprecated": "Please use @electron/osx-sign moving forward. Be aware the API is slightly different",
+ "dev": true,
+ "dependencies": {
+ "bluebird": "^3.5.0",
+ "compare-version": "^0.1.2",
+ "debug": "^2.6.8",
+ "isbinaryfile": "^3.0.2",
+ "minimist": "^1.2.0",
+ "plist": "^3.0.1"
+ },
+ "bin": {
+ "electron-osx-flat": "bin/electron-osx-flat.js",
+ "electron-osx-sign": "bin/electron-osx-sign.js"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/electron-osx-sign/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,
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/electron-osx-sign/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "dev": true
+ },
+ "node_modules/end-of-stream": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+ "devOptional": true,
+ "dependencies": {
+ "once": "^1.4.0"
+ }
+ },
+ "node_modules/entities": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz",
+ "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/env-paths": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
+ "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "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,
+ "dependencies": {
+ "get-intrinsic": "^1.2.4"
+ },
+ "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,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "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,
+ "optional": true
+ },
+ "node_modules/esbuild": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.0.tgz",
+ "integrity": "sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==",
+ "dev": true,
+ "hasInstallScript": true,
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.23.0",
+ "@esbuild/android-arm": "0.23.0",
+ "@esbuild/android-arm64": "0.23.0",
+ "@esbuild/android-x64": "0.23.0",
+ "@esbuild/darwin-arm64": "0.23.0",
+ "@esbuild/darwin-x64": "0.23.0",
+ "@esbuild/freebsd-arm64": "0.23.0",
+ "@esbuild/freebsd-x64": "0.23.0",
+ "@esbuild/linux-arm": "0.23.0",
+ "@esbuild/linux-arm64": "0.23.0",
+ "@esbuild/linux-ia32": "0.23.0",
+ "@esbuild/linux-loong64": "0.23.0",
+ "@esbuild/linux-mips64el": "0.23.0",
+ "@esbuild/linux-ppc64": "0.23.0",
+ "@esbuild/linux-riscv64": "0.23.0",
+ "@esbuild/linux-s390x": "0.23.0",
+ "@esbuild/linux-x64": "0.23.0",
+ "@esbuild/netbsd-x64": "0.23.0",
+ "@esbuild/openbsd-arm64": "0.23.0",
+ "@esbuild/openbsd-x64": "0.23.0",
+ "@esbuild/sunos-x64": "0.23.0",
+ "@esbuild/win32-arm64": "0.23.0",
+ "@esbuild/win32-ia32": "0.23.0",
+ "@esbuild/win32-x64": "0.23.0"
+ }
+ },
+ "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,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/events": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz",
+ "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.x"
+ }
+ },
+ "node_modules/expand-template": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz",
+ "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==",
+ "devOptional": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "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==",
+ "devOptional": true,
+ "dependencies": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "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,
+ "dependencies": {
+ "debug": "^4.1.1",
+ "get-stream": "^5.1.0",
+ "yauzl": "^2.10.0"
+ },
+ "bin": {
+ "extract-zip": "cli.js"
+ },
+ "engines": {
+ "node": ">= 10.17.0"
+ },
+ "optionalDependencies": {
+ "@types/yauzl": "^2.9.1"
+ }
+ },
+ "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==",
+ "optional": true,
+ "dependencies": {
+ "ansi-gray": "^0.1.1",
+ "color-support": "^1.1.3",
+ "parse-node-version": "^1.0.0",
+ "time-stamp": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "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/fd-slicer": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
+ "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==",
+ "dev": true,
+ "dependencies": {
+ "pend": "~1.2.0"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "devOptional": true,
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/first-chunk-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-2.0.0.tgz",
+ "integrity": "sha1-G97NuOCDwGZLkZRVgVd6Q6nzHXA= sha512-X8Z+b/0L4lToKYq+lwnKqi9X/Zek0NibLpsJgVsSxpoYq7JtiCtRb5HqKVEjEw/qAb/4AKKRLOwwKHlWNpm2Eg==",
+ "optional": true,
+ "dependencies": {
+ "readable-stream": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/first-chunk-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==",
+ "optional": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/fork-stream": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/fork-stream/-/fork-stream-0.0.4.tgz",
+ "integrity": "sha512-Pqq5NnT78ehvUnAk/We/Jr22vSvanRlFTpAmQ88xBY/M1TlHe+P0ILuEyXS595ysdGfaj22634LBkGMA2GTcpA==",
+ "dev": true
+ },
+ "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,
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fs-constants": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
+ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
+ "devOptional": true
+ },
+ "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,
+ "dependencies": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=6 <7 || >=8"
+ }
+ },
+ "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==",
+ "dev": true
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "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,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "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,
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "hasown": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "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,
+ "dependencies": {
+ "pump": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/github-from-package": {
+ "version": "0.0.0",
+ "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==",
+ "devOptional": true
+ },
+ "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,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "devOptional": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "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,
+ "optional": true,
+ "dependencies": {
+ "boolean": "^3.0.1",
+ "es6-error": "^4.1.1",
+ "matcher": "^3.0.0",
+ "roarr": "^2.15.3",
+ "semver": "^7.3.2",
+ "serialize-error": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=10.0"
+ }
+ },
+ "node_modules/global-agent/node_modules/semver": {
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/globalthis": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.2.tgz",
+ "integrity": "sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "define-properties": "^1.1.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/gopd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+ "dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.1.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/got": {
+ "version": "11.8.6",
+ "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz",
+ "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==",
+ "dev": true,
+ "dependencies": {
+ "@sindresorhus/is": "^4.0.0",
+ "@szmarczak/http-timer": "^4.0.5",
+ "@types/cacheable-request": "^6.0.1",
+ "@types/responselike": "^1.0.0",
+ "cacheable-lookup": "^5.0.3",
+ "cacheable-request": "^7.0.2",
+ "decompress-response": "^6.0.0",
+ "http2-wrapper": "^1.0.0-beta.5.2",
+ "lowercase-keys": "^2.0.0",
+ "p-cancelable": "^2.0.0",
+ "responselike": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10.19.0"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/got?sponsor=1"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.8",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
+ "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==",
+ "devOptional": true
+ },
+ "node_modules/gulp-merge-json": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/gulp-merge-json/-/gulp-merge-json-2.1.1.tgz",
+ "integrity": "sha512-VhvAlcf+dcCb94j/2yDPWxJ3X7x4P/Xwcrv1dhjYuRgvADwFJmaQwl4zbuq+GDZvzMacbVncWtEdsETpUSkhYw==",
+ "dev": true,
+ "dependencies": {
+ "json5": "^2.1.3",
+ "lodash.mergewith": "^4.6.1",
+ "plugin-error": "^1.0.1",
+ "through": "^2.3.8",
+ "vinyl": "^2.1.0"
+ }
+ },
+ "node_modules/gulp-sort": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/gulp-sort/-/gulp-sort-2.0.0.tgz",
+ "integrity": "sha512-MyTel3FXOdh1qhw1yKhpimQrAmur9q1X0ZigLmCOxouQD+BD3za9/89O+HfbgBQvvh4igEbp0/PUWO+VqGYG1g==",
+ "dev": true,
+ "dependencies": {
+ "through2": "^2.0.1"
+ }
+ },
+ "node_modules/gulp-sort/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "dev": true,
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/gulp-sort/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,
+ "dependencies": {
+ "readable-stream": "~2.3.6",
+ "xtend": "~4.0.1"
+ }
+ },
+ "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,
+ "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,
+ "dependencies": {
+ "es-define-property": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-proto": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
+ "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "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,
+ "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,
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/hosted-git-info": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz",
+ "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/htmlparser2": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz",
+ "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==",
+ "dev": true,
+ "funding": [
+ "https://github.com/fb55/htmlparser2?sponsor=1",
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fb55"
+ }
+ ],
+ "dependencies": {
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.2",
+ "domutils": "^3.0.1",
+ "entities": "^4.3.0"
+ }
+ },
+ "node_modules/http-cache-semantics": {
+ "version": "4.1.1",
+ "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-proxy-agent": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
+ "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
+ "dev": true,
+ "dependencies": {
+ "@tootallnate/once": "1",
+ "agent-base": "6",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "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,
+ "dependencies": {
+ "quick-lru": "^5.1.1",
+ "resolve-alpn": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=10.19.0"
+ }
+ },
+ "node_modules/https-proxy-agent": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
+ "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
+ "dev": true,
+ "dependencies": {
+ "agent-base": "6",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/ieee754": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+ "devOptional": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "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,
+ "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==",
+ "devOptional": true
+ },
+ "node_modules/ini": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
+ "devOptional": 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==",
+ "devOptional": true,
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "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,
+ "bin": {
+ "is-docker": "cli.js"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "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==",
+ "devOptional": true,
+ "dependencies": {
+ "is-plain-object": "^2.0.4"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "devOptional": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "devOptional": true,
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "devOptional": true,
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "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==",
+ "devOptional": true,
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==",
+ "optional": true
+ },
+ "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,
+ "dependencies": {
+ "is-docker": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "devOptional": true
+ },
+ "node_modules/isbinaryfile": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz",
+ "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==",
+ "dev": true,
+ "dependencies": {
+ "buffer-alloc": "^1.2.0"
+ },
+ "engines": {
+ "node": ">=0.6.0"
+ }
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "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==",
+ "devOptional": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/jsbi": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/jsbi/-/jsbi-3.1.4.tgz",
+ "integrity": "sha512-52QRRFSsi9impURE8ZUbzAMCLjPm4THO7H2fcuIvaaeFTbSysvkodbQQXIVsNgq/ypDbq6dJiuGKL0vZ/i9hUg==",
+ "dev": true
+ },
+ "node_modules/json-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
+ "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,
+ "optional": true
+ },
+ "node_modules/json5": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.2.tgz",
+ "integrity": "sha512-46Tk9JiOL2z7ytNQWFLpj99RZkVgeHf87yGQKsIkaPz1qSH9UczKH1rO7K3wgRselo0tYMUNfecYpm/p1vC7tQ==",
+ "dev": true,
+ "bin": {
+ "json5": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/jsonc-parser": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.3.0.tgz",
+ "integrity": "sha512-b0EBt8SWFNnixVdvoR2ZtEGa9ZqLhbJnOjezn+WP+8kspFm+PFYDN8Z4Bc7pRlDjvuVcADSUkroIuTWWn/YiIA==",
+ "dev": true
+ },
+ "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,
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "node_modules/jsonwebtoken": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz",
+ "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==",
+ "dev": true,
+ "dependencies": {
+ "jws": "^3.2.2",
+ "lodash": "^4.17.21",
+ "ms": "^2.1.1",
+ "semver": "^7.3.8"
+ },
+ "engines": {
+ "node": ">=12",
+ "npm": ">=6"
+ }
+ },
+ "node_modules/jsonwebtoken/node_modules/jwa": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
+ "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==",
+ "dev": true,
+ "dependencies": {
+ "buffer-equal-constant-time": "1.0.1",
+ "ecdsa-sig-formatter": "1.0.11",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/jsonwebtoken/node_modules/jws": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
+ "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
+ "dev": true,
+ "dependencies": {
+ "jwa": "^1.4.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/jsonwebtoken/node_modules/semver": {
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/jwa": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz",
+ "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==",
+ "dev": true,
+ "dependencies": {
+ "buffer-equal-constant-time": "1.0.1",
+ "ecdsa-sig-formatter": "1.0.11",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/jws": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz",
+ "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==",
+ "dev": true,
+ "dependencies": {
+ "jwa": "^2.0.0",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/keytar": {
+ "version": "7.9.0",
+ "resolved": "https://registry.npmjs.org/keytar/-/keytar-7.9.0.tgz",
+ "integrity": "sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==",
+ "dev": true,
+ "hasInstallScript": true,
+ "optional": true,
+ "dependencies": {
+ "node-addon-api": "^4.3.0",
+ "prebuild-install": "^7.0.1"
+ }
+ },
+ "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,
+ "dependencies": {
+ "json-buffer": "3.0.1"
+ }
+ },
+ "node_modules/leven": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
+ "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/linkify-it": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz",
+ "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==",
+ "dev": true,
+ "dependencies": {
+ "uc.micro": "^1.0.1"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "dev": true
+ },
+ "node_modules/lodash.mergewith": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz",
+ "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==",
+ "dev": true
+ },
+ "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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "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==",
+ "devOptional": true,
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/markdown-it": {
+ "version": "12.3.2",
+ "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz",
+ "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^2.0.1",
+ "entities": "~2.1.0",
+ "linkify-it": "^3.0.1",
+ "mdurl": "^1.0.1",
+ "uc.micro": "^1.0.5"
+ },
+ "bin": {
+ "markdown-it": "bin/markdown-it.js"
+ }
+ },
+ "node_modules/markdown-it/node_modules/entities": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz",
+ "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "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,
+ "optional": true,
+ "dependencies": {
+ "escape-string-regexp": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/matcher/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,
+ "optional": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/mdurl": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
+ "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==",
+ "dev": true
+ },
+ "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
+ },
+ "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,
+ "bin": {
+ "mime": "cli.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "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,
+ "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,
+ "dependencies": {
+ "mime-db": "1.45.0"
+ },
+ "engines": {
+ "node": ">= 0.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,
+ "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,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
+ "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
+ "devOptional": true
+ },
+ "node_modules/mkdirp-classic": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
+ "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==",
+ "devOptional": true
+ },
+ "node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "node_modules/mute-stream": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
+ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
+ "dev": true
+ },
+ "node_modules/nan": {
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.19.0.tgz",
+ "integrity": "sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw==",
+ "devOptional": true
+ },
+ "node_modules/napi-build-utils": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz",
+ "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==",
+ "devOptional": true
+ },
+ "node_modules/node-abi": {
+ "version": "3.30.0",
+ "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.30.0.tgz",
+ "integrity": "sha512-qWO5l3SCqbwQavymOmtTVuCWZE23++S+rxyoHjXqUmPyzRcaoI4lA2gO55/drddGnedAyjA7sk76SfQ5lfUMnw==",
+ "devOptional": true,
+ "dependencies": {
+ "semver": "^7.3.5"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/node-abi/node_modules/semver": {
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "devOptional": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/node-abort-controller": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz",
+ "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==",
+ "dev": true
+ },
+ "node_modules/node-addon-api": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz",
+ "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==",
+ "dev": true,
+ "optional": true
+ },
+ "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==",
+ "devOptional": true,
+ "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,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/nth-check": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
+ "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
+ "dev": true,
+ "dependencies": {
+ "boolbase": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/nth-check?sponsor=1"
+ }
+ },
+ "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==",
+ "optional": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "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,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "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,
+ "optional": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "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==",
+ "devOptional": true,
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/open": {
+ "version": "8.4.0",
+ "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz",
+ "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==",
+ "dev": true,
+ "dependencies": {
+ "define-lazy-prop": "^2.0.0",
+ "is-docker": "^2.1.1",
+ "is-wsl": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "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,
+ "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,
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "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==",
+ "optional": true,
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/parse-semver": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz",
+ "integrity": "sha512-Eg1OuNntBMH0ojvEKSrvDSnwLmvVuUOSdylH/pSCPNMIspLlweJyIWXCE+k/5hm3cj/EBUYwmWkjhBALNP4LXQ==",
+ "dev": true,
+ "dependencies": {
+ "semver": "^5.1.0"
+ }
+ },
+ "node_modules/parse-semver/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,
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/parse5": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
+ "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==",
+ "dev": true,
+ "dependencies": {
+ "entities": "^4.4.0"
+ },
+ "funding": {
+ "url": "https://github.com/inikulin/parse5?sponsor=1"
+ }
+ },
+ "node_modules/parse5-htmlparser2-tree-adapter": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz",
+ "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==",
+ "dev": true,
+ "dependencies": {
+ "domhandler": "^5.0.2",
+ "parse5": "^7.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/inikulin/parse5?sponsor=1"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18= sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "dev": true,
+ "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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/pend": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
+ "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA= sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==",
+ "dev": true
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
+ "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
+ "devOptional": true,
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+ "optional": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/plist": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz",
+ "integrity": "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==",
+ "dev": true,
+ "dependencies": {
+ "@xmldom/xmldom": "^0.8.8",
+ "base64-js": "^1.5.1",
+ "xmlbuilder": "^15.1.1"
+ },
+ "engines": {
+ "node": ">=10.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==",
+ "devOptional": true,
+ "dependencies": {
+ "ansi-colors": "^1.0.1",
+ "arr-diff": "^4.0.0",
+ "arr-union": "^3.1.0",
+ "extend-shallow": "^3.0.2"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/prebuild-install": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz",
+ "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==",
+ "devOptional": true,
+ "dependencies": {
+ "detect-libc": "^2.0.0",
+ "expand-template": "^2.0.3",
+ "github-from-package": "0.0.0",
+ "minimist": "^1.2.3",
+ "mkdirp-classic": "^0.5.3",
+ "napi-build-utils": "^1.0.1",
+ "node-abi": "^3.3.0",
+ "pump": "^3.0.0",
+ "rc": "^1.2.7",
+ "simple-get": "^4.0.0",
+ "tar-fs": "^2.0.0",
+ "tunnel-agent": "^0.6.0"
+ },
+ "bin": {
+ "prebuild-install": "bin.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/priorityqueuejs": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/priorityqueuejs/-/priorityqueuejs-1.0.0.tgz",
+ "integrity": "sha1-LuTyPCVgkT4IwHzlzN1t498sWvg= sha512-lg++21mreCEOuGWTbO5DnJKAdxfjrdN0S9ysoW9SzdSJvbkWpkaDdpG/cdsPCsEnoLUwmd9m3WcZhngW7yKA2g==",
+ "dev": true
+ },
+ "node_modules/process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+ "devOptional": true
+ },
+ "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,
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "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==",
+ "devOptional": true,
+ "dependencies": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "node_modules/qs": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
+ "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
+ "dev": true,
+ "dependencies": {
+ "side-channel": "^1.0.6"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "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,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/rc": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
+ "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
+ "devOptional": true,
+ "dependencies": {
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "bin": {
+ "rc": "cli.js"
+ }
+ },
+ "node_modules/read": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz",
+ "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==",
+ "dev": true,
+ "dependencies": {
+ "mute-stream": "~0.0.4"
+ },
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "devOptional": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz",
+ "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==",
+ "devOptional": true,
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8= sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==",
+ "devOptional": true
+ },
+ "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==",
+ "devOptional": true,
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/resolve-alpn": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz",
+ "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==",
+ "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,
+ "dependencies": {
+ "lowercase-keys": "^2.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "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,
+ "optional": true,
+ "dependencies": {
+ "boolean": "^3.0.1",
+ "detect-node": "^2.0.4",
+ "globalthis": "^1.0.1",
+ "json-stringify-safe": "^5.0.1",
+ "semver-compare": "^1.0.0",
+ "sprintf-js": "^1.1.2"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "devOptional": true
+ },
+ "node_modules/sax": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
+ "dev": true
+ },
+ "node_modules/semaphore": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/semaphore/-/semaphore-1.1.0.tgz",
+ "integrity": "sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "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,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "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,
+ "optional": true
+ },
+ "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,
+ "optional": true,
+ "dependencies": {
+ "type-fest": "^0.13.1"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "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,
+ "dependencies": {
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "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,
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "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,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/side-channel": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
+ "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.4",
+ "object-inspect": "^1.13.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "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==",
+ "devOptional": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "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==",
+ "devOptional": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "decompress-response": "^6.0.0",
+ "once": "^1.3.1",
+ "simple-concat": "^1.0.0"
+ }
+ },
+ "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,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/sprintf-js": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz",
+ "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==",
+ "dev": true,
+ "optional": true
+ },
+ "node_modules/stoppable": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz",
+ "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4",
+ "npm": ">=6"
+ }
+ },
+ "node_modules/stream-exhaust": {
+ "version": "1.0.2",
+ "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",
+ "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
+ "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==",
+ "dev": true
+ },
+ "node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "devOptional": true,
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "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==",
+ "optional": true,
+ "dependencies": {
+ "is-utf8": "^0.2.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/strip-bom-buf": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom-buf/-/strip-bom-buf-1.0.0.tgz",
+ "integrity": "sha1-HLRar1dTD0yvhsf3UXnSyaUd1XI= sha512-1sUIL1jck0T1mhOLP2c696BIznzT525Lkub+n4jjMHjhjhoAQA6Ye659DxdlZBr0aLDMQoTxKIpnlqxgtwjsuQ==",
+ "optional": true,
+ "dependencies": {
+ "is-utf8": "^0.2.1"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/strip-bom-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-2.0.0.tgz",
+ "integrity": "sha1-+H217yYT9paKpUWr/h7HKLaoKco= sha512-yH0+mD8oahBZWnY43vxs4pSinn8SMKAdml/EOGBewoe1Y0Eitd0h2Mg3ZRiXruUW6L4P+lvZiEgbh0NgUGia1w==",
+ "optional": true,
+ "dependencies": {
+ "first-chunk-stream": "^2.0.0",
+ "strip-bom": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo= sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
+ "devOptional": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "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,
+ "dependencies": {
+ "debug": "^4.1.0"
+ },
+ "engines": {
+ "node": ">= 8.0"
+ }
+ },
+ "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,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/tar-fs": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz",
+ "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==",
+ "devOptional": true,
+ "dependencies": {
+ "chownr": "^1.1.1",
+ "mkdirp-classic": "^0.5.2",
+ "pump": "^3.0.0",
+ "tar-stream": "^2.1.4"
+ }
+ },
+ "node_modules/tar-stream": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
+ "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
+ "devOptional": true,
+ "dependencies": {
+ "bl": "^4.0.3",
+ "end-of-stream": "^1.4.1",
+ "fs-constants": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^3.1.1"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/ternary-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ternary-stream/-/ternary-stream-3.0.0.tgz",
+ "integrity": "sha512-oIzdi+UL/JdktkT+7KU5tSIQjj8pbShj3OASuvDEhm0NT5lppsm7aXWAmAq4/QMaBIyfuEcNLbAQA+HpaISobQ==",
+ "dev": true,
+ "dependencies": {
+ "duplexify": "^4.1.1",
+ "fork-stream": "^0.0.4",
+ "merge-stream": "^2.0.0",
+ "through2": "^3.0.1"
+ }
+ },
+ "node_modules/ternary-stream/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,
+ "dependencies": {
+ "inherits": "^2.0.4",
+ "readable-stream": "2 || 3"
+ }
+ },
+ "node_modules/through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
+ "dev": true
+ },
+ "node_modules/through2": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz",
+ "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==",
+ "dev": true,
+ "dependencies": {
+ "readable-stream": "3"
+ }
+ },
+ "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==",
+ "optional": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/tmp": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz",
+ "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==",
+ "dev": true,
+ "engines": {
+ "node": ">=14.14"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "devOptional": true,
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/tree-sitter": {
+ "version": "0.20.6",
+ "resolved": "https://registry.npmjs.org/tree-sitter/-/tree-sitter-0.20.6.tgz",
+ "integrity": "sha512-GxJodajVpfgb3UREzzIbtA1hyRnTxVbWVXrbC6sk4xTMH5ERMBJk9HJNq4c8jOJeUaIOmLcwg+t6mez/PDvGqg==",
+ "devOptional": true,
+ "hasInstallScript": true,
+ "dependencies": {
+ "nan": "^2.18.0",
+ "prebuild-install": "^7.1.1"
+ }
+ },
+ "node_modules/tree-sitter-typescript": {
+ "version": "0.20.5",
+ "resolved": "https://registry.npmjs.org/tree-sitter-typescript/-/tree-sitter-typescript-0.20.5.tgz",
+ "integrity": "sha512-RzK/Pc6k4GiXvInIBlo8ZggekP6rODfW2P6KHFCTSUHENsw6ynh+iacFhfkJRa4MT8EIN2WHygFJ7076/+eHKg==",
+ "hasInstallScript": true,
+ "optional": true,
+ "dependencies": {
+ "nan": "^2.18.0",
+ "tree-sitter": "^0.20.6"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
+ "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==",
+ "dev": true
+ },
+ "node_modules/tunnel": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
+ "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.6.11 <=0.7.0 || >=0.7.3"
+ }
+ },
+ "node_modules/tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
+ "devOptional": true,
+ "dependencies": {
+ "safe-buffer": "^5.0.1"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "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,
+ "optional": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/typed-rest-client": {
+ "version": "1.8.11",
+ "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz",
+ "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==",
+ "dev": true,
+ "dependencies": {
+ "qs": "^6.9.1",
+ "tunnel": "0.0.6",
+ "underscore": "^1.12.1"
+ }
+ },
+ "node_modules/uc.micro": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz",
+ "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==",
+ "dev": true
+ },
+ "node_modules/underscore": {
+ "version": "1.13.7",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz",
+ "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==",
+ "dev": true
+ },
+ "node_modules/undici-types": {
+ "version": "5.26.5",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
+ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
+ "dev": true
+ },
+ "node_modules/universal-user-agent": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz",
+ "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==",
+ "dev": true
+ },
+ "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,
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
+ "node_modules/url-join": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz",
+ "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==",
+ "dev": true
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+ "devOptional": true
+ },
+ "node_modules/uuid": {
+ "version": "8.3.1",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.1.tgz",
+ "integrity": "sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg==",
+ "dev": true,
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/vinyl": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz",
+ "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==",
+ "devOptional": true,
+ "dependencies": {
+ "clone": "^2.1.1",
+ "clone-buffer": "^1.0.0",
+ "clone-stats": "^1.0.0",
+ "cloneable-readable": "^1.0.0",
+ "remove-trailing-separator": "^1.0.1",
+ "replace-ext": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
+ "node_modules/vinyl-file": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/vinyl-file/-/vinyl-file-3.0.0.tgz",
+ "integrity": "sha1-sQTZ5ECf+jJfqt1SBkLQo7SIs2U= sha512-BoJDj+ca3D9xOuPEM6RWVtWQtvEPQiQYn82LvdxhLWplfQsBzBqtgK0yhCP0s1BNTi6dH9BO+dzybvyQIacifg==",
+ "optional": true,
+ "dependencies": {
+ "graceful-fs": "^4.1.2",
+ "pify": "^2.3.0",
+ "strip-bom-buf": "^1.0.0",
+ "strip-bom-stream": "^2.0.0",
+ "vinyl": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/vscode-gulp-watch": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/vscode-gulp-watch/-/vscode-gulp-watch-5.0.3.tgz",
+ "integrity": "sha512-MTUp2yLE9CshhkNSNV58EQNxQSeF8lIj3mkXZX9a1vAk+EQNM2PAYdPUDSd/P/08W3PMHGznEiZyfK7JAjLosg==",
+ "optional": true,
+ "dependencies": {
+ "ansi-colors": "4.1.1",
+ "anymatch": "^3.1.1",
+ "chokidar": "3.5.1",
+ "fancy-log": "^1.3.3",
+ "glob-parent": "^5.1.1",
+ "normalize-path": "^3.0.0",
+ "object-assign": "^4.1.1",
+ "plugin-error": "1.0.1",
+ "readable-stream": "^3.6.0",
+ "vinyl": "^2.2.0",
+ "vinyl-file": "^3.0.0"
+ }
+ },
+ "node_modules/vscode-gulp-watch/node_modules/ansi-colors": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
+ "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
+ "optional": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/vscode-universal-bundler": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/vscode-universal-bundler/-/vscode-universal-bundler-0.1.3.tgz",
+ "integrity": "sha512-USXJqgD+ySROqgjl+KrGjlF7MvNnqsI6my1kUOsAXARmNqBjXk38w8g2BF6PEXVOYOQ+npRcTA7athXNU4Jjog==",
+ "dev": true,
+ "dependencies": {
+ "@electron/asar": "^3.2.7",
+ "@malept/cross-spawn-promise": "^2.0.0",
+ "debug": "^4.3.1",
+ "dir-compare": "^4.2.0",
+ "fs-extra": "^11.1.1",
+ "minimatch": "^9.0.3",
+ "plist": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=16.4"
+ }
+ },
+ "node_modules/vscode-universal-bundler/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/vscode-universal-bundler/node_modules/fs-extra": {
+ "version": "11.2.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
+ "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=14.14"
+ }
+ },
+ "node_modules/vscode-universal-bundler/node_modules/jsonfile": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+ "dev": true,
+ "dependencies": {
+ "universalify": "^2.0.0"
+ },
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "node_modules/vscode-universal-bundler/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,
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/vscode-universal-bundler/node_modules/universalify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
+ "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 10.0.0"
+ }
+ },
+ "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,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/workerpool": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.0.tgz",
+ "integrity": "sha512-r64Ea3glXY2RVzMeNxB+4J+0YHAVzUdV4cM5nHi4BBC2LvnO1pWFAIYKYuGcPElbg1/7eEiaPtZ/jzCjIUuGBg==",
+ "dev": true
+ },
+ "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==",
+ "devOptional": 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,
+ "dependencies": {
+ "sax": ">=0.6.0",
+ "xmlbuilder": "~11.0.0"
+ },
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "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,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/xmlbuilder": {
+ "version": "15.1.1",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz",
+ "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.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,
+ "engines": {
+ "node": ">=0.4"
+ }
+ },
+ "node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "devOptional": true
+ },
+ "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,
+ "dependencies": {
+ "buffer-crc32": "~0.2.3",
+ "fd-slicer": "~1.1.0"
+ }
+ },
+ "node_modules/yazl": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz",
+ "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==",
+ "dev": true,
+ "dependencies": {
+ "buffer-crc32": "~0.2.3"
+ }
+ },
+ "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,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ }
+ }
+}
diff --git a/build/package.json b/build/package.json
index c93b66e03dc..aa94a210e9c 100644
--- a/build/package.json
+++ b/build/package.json
@@ -5,7 +5,6 @@
"devDependencies": {
"@azure/cosmos": "^3",
"@azure/identity": "^4.2.1",
- "@azure/storage-blob": "^12.17.0",
"@electron/get": "^2.0.0",
"@types/ansi-colors": "^3.2.0",
"@types/byline": "^4.2.32",
@@ -15,7 +14,6 @@
"@types/fs-extra": "^9.0.12",
"@types/glob": "^7.1.1",
"@types/gulp": "^4.0.17",
- "@types/gulp-concat": "^0.0.32",
"@types/gulp-filter": "^3.0.32",
"@types/gulp-gzip": "^0.0.31",
"@types/gulp-json-editor": "^2.2.31",
@@ -25,21 +23,17 @@
"@types/mime": "0.0.29",
"@types/minimatch": "^3.0.3",
"@types/minimist": "^1.2.1",
- "@types/mkdirp": "^1.0.1",
"@types/mocha": "^9.1.1",
"@types/node": "20.x",
"@types/pump": "^1.0.1",
"@types/rimraf": "^2.0.4",
"@types/through": "^0.0.29",
"@types/through2": "^2.0.36",
- "@types/tmp": "^0.2.1",
"@types/workerpool": "^6.4.0",
"@types/xml2js": "0.0.33",
"@vscode/iconv-lite-umd": "0.7.0",
- "@vscode/vsce": "^2.16.0",
+ "@vscode/vsce": "2.20.1",
"byline": "^5.0.0",
- "colors": "^1.4.0",
- "commander": "^7.0.0",
"debug": "^4.3.2",
"electron-osx-sign": "^0.4.16",
"esbuild": "0.23.0",
@@ -48,11 +42,10 @@
"gulp-sort": "^2.0.0",
"jsonc-parser": "^2.3.0",
"mime": "^1.4.1",
- "mkdirp": "^1.0.4",
"source-map": "0.6.1",
"ternary-stream": "^3.0.0",
"through2": "^4.0.2",
- "tmp": "^0.2.1",
+ "tree-sitter": "^0.20.5",
"vscode-universal-bundler": "^0.1.3",
"workerpool": "^6.4.0",
"yauzl": "^2.10.0"
@@ -64,7 +57,6 @@
"npmCheckJs": "../node_modules/.bin/tsc --noEmit"
},
"optionalDependencies": {
- "tree-sitter": "^0.20.5",
"tree-sitter-typescript": "^0.20.5",
"vscode-gulp-watch": "^5.0.3"
}
diff --git a/build/secrets/.secrets.baseline b/build/secrets/.secrets.baseline
index 0ecdb23ceea..c037d870c67 100644
--- a/build/secrets/.secrets.baseline
+++ b/build/secrets/.secrets.baseline
@@ -94,6 +94,10 @@
"path": "detect_secrets.filters.common.is_baseline_file",
"filename": "build/secrets/.secrets.baseline"
},
+ {
+ "path": "detect_secrets.filters.common.is_ignored_due_to_verification_policies",
+ "min_level": 2
+ },
{
"path": "detect_secrets.filters.heuristic.is_indirect_reference"
},
@@ -139,7 +143,8 @@
"filename": ".github/workflows/test-full-suite.yml",
"hashed_secret": "3e26d6750975d678acb8fa35a0f69237881576b0",
"is_verified": false,
- "line_number": 53
+ "line_number": 53,
+ "is_secret": false
}
],
".github/workflows/test-merge.yml": [
@@ -148,7 +153,8 @@
"filename": ".github/workflows/test-merge.yml",
"hashed_secret": "3e26d6750975d678acb8fa35a0f69237881576b0",
"is_verified": false,
- "line_number": 18
+ "line_number": 18,
+ "is_secret": false
}
],
".github/workflows/test-pull-request.yml": [
@@ -157,7 +163,8 @@
"filename": ".github/workflows/test-pull-request.yml",
"hashed_secret": "3e26d6750975d678acb8fa35a0f69237881576b0",
"is_verified": false,
- "line_number": 34
+ "line_number": 34,
+ "is_secret": false
}
],
"build/azure-pipelines/alpine/product-build-alpine.yml": [
@@ -216,7 +223,7 @@
"filename": "build/azure-pipelines/darwin/product-build-darwin.yml",
"hashed_secret": "d8368fc8fec27a14a70083cc2cd6d959085086a9",
"is_verified": false,
- "line_number": 36,
+ "line_number": 33,
"is_secret": false
}
],
@@ -236,7 +243,7 @@
"filename": "build/azure-pipelines/linux/product-build-linux-legacy-server.yml",
"hashed_secret": "6bca595fb7e6690f8bacc9e0c1e056cd60e4b7cb",
"is_verified": false,
- "line_number": 26,
+ "line_number": 23,
"is_secret": false
}
],
@@ -246,7 +253,7 @@
"filename": "build/azure-pipelines/linux/product-build-linux.yml",
"hashed_secret": "256e334e9cc8b59bb08501110e1c729c9b2edec4",
"is_verified": false,
- "line_number": 38,
+ "line_number": 35,
"is_secret": false
}
],
@@ -256,7 +263,7 @@
"filename": "build/azure-pipelines/product-compile.yml",
"hashed_secret": "6bca595fb7e6690f8bacc9e0c1e056cd60e4b7cb",
"is_verified": false,
- "line_number": 23,
+ "line_number": 20,
"is_secret": false
}
],
@@ -286,7 +293,7 @@
"filename": "build/azure-pipelines/win32/product-build-win32.yml",
"hashed_secret": "256e334e9cc8b59bb08501110e1c729c9b2edec4",
"is_verified": false,
- "line_number": 43,
+ "line_number": 40,
"is_secret": false
}
],
@@ -300,6 +307,16 @@
"is_secret": false
}
],
+ "build/lib/stylelint/vscode-known-variables.json": [
+ {
+ "type": "Base64 High Entropy String",
+ "filename": "build/lib/stylelint/vscode-known-variables.json",
+ "hashed_secret": "bebac042cf8ae1cf5954a7f233759a1373a1bd5b",
+ "is_verified": false,
+ "line_number": 737,
+ "is_secret": false
+ }
+ ],
"build/secrets/README.md": [
{
"type": "Secret Keyword",
@@ -310,6 +327,16 @@
"is_secret": false
}
],
+ "cli/Cargo.toml": [
+ {
+ "type": "Hex High Entropy String",
+ "filename": "cli/Cargo.toml",
+ "hashed_secret": "c9f4c5531397166586187c7c9fac98fc1f5624e6",
+ "is_verified": false,
+ "line_number": 37,
+ "is_secret": false
+ }
+ ],
"cli/src/auth.rs": [
{
"type": "Hex High Entropy String",
@@ -326,7 +353,7 @@
"filename": "cli/src/desktop/version_manager.rs",
"hashed_secret": "4f29d0426d3ecc42e70ac2127ee3d7fd9d23f5c7",
"is_verified": false,
- "line_number": 332,
+ "line_number": 329,
"is_secret": false
}
],
@@ -560,7 +587,7 @@
{
"type": "Hex High Entropy String",
"filename": "package.json",
- "hashed_secret": "c635602d4b9175ddc1638f98082d7703c4b80f2b",
+ "hashed_secret": "04afe1a8a133cb0c3a3639ca1c80428871746a15",
"is_verified": false,
"line_number": 4,
"is_secret": false
@@ -578,7 +605,7 @@
{
"type": "Hex High Entropy String",
"filename": "product.json",
- "hashed_secret": "1b012f829c16ba44801ba646cd54b79048d53ae9",
+ "hashed_secret": "6dddc5671d5ed146759f817632cbb0c2d278fdd0",
"is_verified": false,
"line_number": 59,
"is_secret": false
@@ -586,7 +613,7 @@
{
"type": "Hex High Entropy String",
"filename": "product.json",
- "hashed_secret": "ef77c8ceb4ee9293470dfd0c995a7841dad5d8f4",
+ "hashed_secret": "98f6b0e364fc315e344dd24ce8ccd59b9a827ccd",
"is_verified": false,
"line_number": 75,
"is_secret": false
@@ -596,7 +623,8 @@
"filename": "product.json",
"hashed_secret": "aa5db2e10c46111cbb98fa5d5bf0f7a51937dbfe",
"is_verified": false,
- "line_number": 229
+ "line_number": 229,
+ "is_secret": false
}
],
"scripts/playground-server.ts": [
@@ -609,13 +637,23 @@
"is_secret": false
}
],
- "src/bootstrap-window.js": [
+ "src/bootstrap-external.ts": [
{
"type": "Hex High Entropy String",
- "filename": "src/bootstrap-window.js",
+ "filename": "src/bootstrap-external.ts",
"hashed_secret": "b6cb3f02e20180320687f4905a9c795d72e0ad3a",
"is_verified": false,
- "line_number": 133,
+ "line_number": 72,
+ "is_secret": false
+ }
+ ],
+ "src/bootstrap-window.ts": [
+ {
+ "type": "Hex High Entropy String",
+ "filename": "src/bootstrap-window.ts",
+ "hashed_secret": "b6cb3f02e20180320687f4905a9c795d72e0ad3a",
+ "is_verified": false,
+ "line_number": 222,
"is_secret": false
}
],
@@ -645,7 +683,7 @@
"filename": "src/vs/base/test/browser/hash.test.ts",
"hashed_secret": "66b60e6a2bcec249f7467e10476123722475d77f",
"is_verified": false,
- "line_number": 91,
+ "line_number": 90,
"is_secret": false
},
{
@@ -653,7 +691,7 @@
"filename": "src/vs/base/test/browser/hash.test.ts",
"hashed_secret": "80b90c522083cd51a34e3f10ded8ff5f8a9897ad",
"is_verified": false,
- "line_number": 99,
+ "line_number": 98,
"is_secret": false
},
{
@@ -661,7 +699,7 @@
"filename": "src/vs/base/test/browser/hash.test.ts",
"hashed_secret": "9cf5caf6c36f5cccde8c73fad8894c958f4983da",
"is_verified": false,
- "line_number": 103,
+ "line_number": 102,
"is_secret": false
}
],
@@ -917,15 +955,7 @@
"filename": "src/vs/server/node/webClientServer.ts",
"hashed_secret": "66e26ed510af41f1d322d1ebda4389302f4a03c7",
"is_verified": false,
- "line_number": 450,
- "is_secret": false
- },
- {
- "type": "Base64 High Entropy String",
- "filename": "src/vs/server/node/webClientServer.ts",
- "hashed_secret": "f769de45d1747b634dfe3d7eb842f6967c4c5e98",
- "is_verified": false,
- "line_number": 450,
+ "line_number": 453,
"is_secret": false
},
{
@@ -933,7 +963,7 @@
"filename": "src/vs/server/node/webClientServer.ts",
"hashed_secret": "93f2efffc36c6e096cdb21d6aadb7087dc0d7478",
"is_verified": false,
- "line_number": 457,
+ "line_number": 459,
"is_secret": false
}
],
@@ -1875,30 +1905,11 @@
"is_secret": false
}
],
- "src/vs/workbench/services/extensions/browser/webWorkerExtensionHost.ts": [
- {
- "type": "IBM Cloud IAM Key",
- "filename": "src/vs/workbench/services/extensions/browser/webWorkerExtensionHost.ts",
- "hashed_secret": "0d43d6e259826e4ecbda1644424b26de54faa665",
- "is_verified": false,
- "line_number": 97
- }
- ],
- "src/vs/workbench/services/extensions/worker/webWorkerExtensionHostIframe.esm.html": [
- {
- "type": "Base64 High Entropy String",
- "filename": "src/vs/workbench/services/extensions/worker/webWorkerExtensionHostIframe.esm.html",
- "hashed_secret": "b6d602bc7fc2b53ca2a176860f06c731ff0dfaf4",
- "is_verified": false,
- "line_number": 7,
- "is_secret": false
- }
- ],
"src/vs/workbench/services/extensions/worker/webWorkerExtensionHostIframe.html": [
{
"type": "Base64 High Entropy String",
"filename": "src/vs/workbench/services/extensions/worker/webWorkerExtensionHostIframe.html",
- "hashed_secret": "9d2f1684b9408fdc43d928422965a743ef0f2e9e",
+ "hashed_secret": "76e4a11f0ba2f563c70f196469eb86bc12172ae4",
"is_verified": false,
"line_number": 8,
"is_secret": false
@@ -1933,5 +1944,5 @@
}
]
},
- "generated_at": "2024-12-12T14:56:00Z"
+ "generated_at": "2024-12-12T17:09:05Z"
}
diff --git a/build/setup-npm-registry.js b/build/setup-npm-registry.js
index 98bc836b072..24c850dbb84 100644
--- a/build/setup-npm-registry.js
+++ b/build/setup-npm-registry.js
@@ -8,7 +8,7 @@
const fs = require('fs').promises;
const path = require('path');
-async function* getYarnLockFiles(dir) {
+async function* getPackageLockFiles(dir) {
const files = await fs.readdir(dir);
for (const file of files) {
@@ -16,8 +16,8 @@ async function* getYarnLockFiles(dir) {
const stat = await fs.stat(fullPath);
if (stat.isDirectory()) {
- yield* getYarnLockFiles(fullPath);
- } else if (file === 'yarn.lock') {
+ yield* getPackageLockFiles(fullPath);
+ } else if (file === 'package-lock.json') {
yield fullPath;
}
}
@@ -32,7 +32,7 @@ async function setup(url, file) {
async function main(url, dir) {
const root = dir ?? process.cwd();
- for await (const file of getYarnLockFiles(root)) {
+ for await (const file of getPackageLockFiles(root)) {
console.log(`Enabling custom NPM registry: ${path.relative(root, file)}`);
await setup(url, file);
}
diff --git a/build/utils.js b/build/utils.js
index 1a4e8ec415c..71080512260 100644
--- a/build/utils.js
+++ b/build/utils.js
@@ -15,5 +15,5 @@ const REPO_ROOT = path.dirname(__dirname);
*/
const positronBuildNumber =
process.env.POSITRON_BUILD_NUMBER ??
- child_process.execSync(`node ${REPO_ROOT}/versions/show-version.js --build`).toString().trim();
+ child_process.execSync(`node ${REPO_ROOT}/versions/show-version.cjs --build`).toString().trim();
exports.positronBuildNumber = positronBuildNumber;
diff --git a/build/yarn.lock b/build/yarn.lock
deleted file mode 100644
index 1e3928aa0cf..00000000000
--- a/build/yarn.lock
+++ /dev/null
@@ -1,2831 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
-"@azure/abort-controller@^1.0.0":
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/@azure/abort-controller/-/abort-controller-1.0.2.tgz#822405c966b2aec16fb62c1b19d37eaccf231995"
- integrity sha512-XUyTo+bcyxHEf+jlN2MXA7YU9nxVehaubngHV1MIZZaqYmZqykkoeAz/JMMEeR7t3TcyDwbFa3Zw8BZywmIx4g==
- dependencies:
- tslib "^2.0.0"
-
-"@azure/abort-controller@^2.0.0":
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/@azure/abort-controller/-/abort-controller-2.1.2.tgz#42fe0ccab23841d9905812c58f1082d27784566d"
- integrity sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==
- dependencies:
- tslib "^2.6.2"
-
-"@azure/core-asynciterator-polyfill@^1.0.0":
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/@azure/core-asynciterator-polyfill/-/core-asynciterator-polyfill-1.0.0.tgz#dcccebb88406e5c76e0e1d52e8cc4c43a68b3ee7"
- integrity sha512-kmv8CGrPfN9SwMwrkiBK9VTQYxdFQEGe0BmQk+M8io56P9KNzpAxcWE/1fxJj7uouwN4kXF0BHW8DNlgx+wtCg==
-
-"@azure/core-auth@^1.3.0", "@azure/core-auth@^1.5.0":
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/@azure/core-auth/-/core-auth-1.5.0.tgz#a41848c5c31cb3b7c84c409885267d55a2c92e44"
- integrity sha512-udzoBuYG1VBoHVohDTrvKjyzel34zt77Bhp7dQntVGGD0ehVq48owENbBG8fIgkHRNUBQH5k1r0hpoMu5L8+kw==
- dependencies:
- "@azure/abort-controller" "^1.0.0"
- "@azure/core-util" "^1.1.0"
- tslib "^2.2.0"
-
-"@azure/core-client@^1.4.0":
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/@azure/core-client/-/core-client-1.5.0.tgz#7aabb87d20e08db3683a117191c844bc19adb74e"
- integrity sha512-YNk8i9LT6YcFdFO+RRU0E4Ef+A8Y5lhXo6lz61rwbG8Uo7kSqh0YqK04OexiilM43xd6n3Y9yBhLnb1NFNI9dA==
- dependencies:
- "@azure/abort-controller" "^1.0.0"
- "@azure/core-asynciterator-polyfill" "^1.0.0"
- "@azure/core-auth" "^1.3.0"
- "@azure/core-rest-pipeline" "^1.5.0"
- "@azure/core-tracing" "1.0.0-preview.13"
- "@azure/logger" "^1.0.0"
- tslib "^2.2.0"
-
-"@azure/core-http@^3.0.0":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@azure/core-http/-/core-http-3.0.0.tgz#345845f9ba479a5ee41efc3fd7a13e82d2a0ec47"
- integrity sha512-BxI2SlGFPPz6J1XyZNIVUf0QZLBKFX+ViFjKOkzqD18J1zOINIQ8JSBKKr+i+v8+MB6LacL6Nn/sP/TE13+s2Q==
- dependencies:
- "@azure/abort-controller" "^1.0.0"
- "@azure/core-auth" "^1.3.0"
- "@azure/core-tracing" "1.0.0-preview.13"
- "@azure/core-util" "^1.1.1"
- "@azure/logger" "^1.0.0"
- "@types/node-fetch" "^2.5.0"
- "@types/tunnel" "^0.0.3"
- form-data "^4.0.0"
- node-fetch "^2.6.7"
- process "^0.11.10"
- tslib "^2.2.0"
- tunnel "^0.0.6"
- uuid "^8.3.0"
- xml2js "^0.4.19"
-
-"@azure/core-lro@^2.2.0":
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/@azure/core-lro/-/core-lro-2.2.1.tgz#5527b41037c658d3aefc19d68633e51e53d6e6a3"
- integrity sha512-HE6PBl+mlKa0eBsLwusHqAqjLc5n9ByxeDo3Hz4kF3B1hqHvRkBr4oMgoT6tX7Hc3q97KfDctDUon7EhvoeHPA==
- dependencies:
- "@azure/abort-controller" "^1.0.0"
- "@azure/core-tracing" "1.0.0-preview.13"
- "@azure/logger" "^1.0.0"
- tslib "^2.2.0"
-
-"@azure/core-paging@^1.1.1":
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/@azure/core-paging/-/core-paging-1.1.3.tgz#3587c9898a0530cacb64bab216d7318468aa5efc"
- integrity sha512-his7Ah40ThEYORSpIAwuh6B8wkGwO/zG7gqVtmSE4WAJ46e36zUDXTKReUCLBDc6HmjjApQQxxcRFy5FruG79A==
- dependencies:
- "@azure/core-asynciterator-polyfill" "^1.0.0"
-
-"@azure/core-rest-pipeline@^1.1.0", "@azure/core-rest-pipeline@^1.2.0", "@azure/core-rest-pipeline@^1.5.0":
- version "1.7.0"
- resolved "https://registry.yarnpkg.com/@azure/core-rest-pipeline/-/core-rest-pipeline-1.7.0.tgz#71f42c19af160422cc84513809ff9668d8047087"
- integrity sha512-e2awPzwMKHrmvYgZ0qIKNkqnCM1QoDs7A0rOiS3OSAlOQOz/kL7PPKHXwFMuBeaRvS8i7fgobJn79q2Cji5f+Q==
- dependencies:
- "@azure/abort-controller" "^1.0.0"
- "@azure/core-auth" "^1.3.0"
- "@azure/core-tracing" "1.0.0-preview.13"
- "@azure/logger" "^1.0.0"
- form-data "^4.0.0"
- http-proxy-agent "^4.0.1"
- https-proxy-agent "^5.0.0"
- tslib "^2.2.0"
- uuid "^8.3.0"
-
-"@azure/core-tracing@1.0.0-preview.13":
- version "1.0.0-preview.13"
- resolved "https://registry.yarnpkg.com/@azure/core-tracing/-/core-tracing-1.0.0-preview.13.tgz#55883d40ae2042f6f1e12b17dd0c0d34c536d644"
- integrity sha512-KxDlhXyMlh2Jhj2ykX6vNEU0Vou4nHr025KoSEiz7cS3BNiHNaZcdECk/DmLkEB0as5T7b/TpRcehJ5yV6NeXQ==
- dependencies:
- "@opentelemetry/api" "^1.0.1"
- tslib "^2.2.0"
-
-"@azure/core-tracing@^1.0.0":
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/@azure/core-tracing/-/core-tracing-1.0.1.tgz#352a38cbea438c4a83c86b314f48017d70ba9503"
- integrity sha512-I5CGMoLtX+pI17ZdiFJZgxMJApsK6jjfm85hpgp3oazCdq5Wxgh4wMr7ge/TTWW1B5WBuvIOI1fMU/FrOAMKrw==
- dependencies:
- tslib "^2.2.0"
-
-"@azure/core-util@^1.1.0", "@azure/core-util@^1.1.1", "@azure/core-util@^1.3.0":
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/@azure/core-util/-/core-util-1.9.0.tgz#469afd7e6452d5388b189f90d33f7756b0b210d1"
- integrity sha512-AfalUQ1ZppaKuxPPMsFEUdX6GZPB3d9paR9d/TTL7Ow2De8cJaC7ibi7kWVlFAVPCYo31OcnGymc0R89DX8Oaw==
- dependencies:
- "@azure/abort-controller" "^2.0.0"
- tslib "^2.6.2"
-
-"@azure/cosmos@^3":
- version "3.17.3"
- resolved "https://registry.yarnpkg.com/@azure/cosmos/-/cosmos-3.17.3.tgz#380398496af8ef3473ae0a9ad8cdbab32d91eb08"
- integrity sha512-wBglkQ6Irjv5Vo2iw8fd6eYj60WYRSSg4/0DBkeOP6BwQ4RA91znsOHd6s3qG6UAbNgYuzC9Nnq07vlFFZkHEw==
- dependencies:
- "@azure/abort-controller" "^1.0.0"
- "@azure/core-auth" "^1.3.0"
- "@azure/core-rest-pipeline" "^1.2.0"
- "@azure/core-tracing" "^1.0.0"
- debug "^4.1.1"
- fast-json-stable-stringify "^2.1.0"
- jsbi "^3.1.3"
- node-abort-controller "^3.0.0"
- priorityqueuejs "^1.0.0"
- semaphore "^1.0.5"
- tslib "^2.2.0"
- universal-user-agent "^6.0.0"
- uuid "^8.3.0"
-
-"@azure/identity@^4.2.1":
- version "4.2.1"
- resolved "https://registry.yarnpkg.com/@azure/identity/-/identity-4.2.1.tgz#22b366201e989b7b41c0e1690e103bd579c31e4c"
- integrity sha512-U8hsyC9YPcEIzoaObJlRDvp7KiF0MGS7xcWbyJSVvXRkC/HXo1f0oYeBYmEvVgRfacw7GHf6D6yAoh9JHz6A5Q==
- dependencies:
- "@azure/abort-controller" "^1.0.0"
- "@azure/core-auth" "^1.5.0"
- "@azure/core-client" "^1.4.0"
- "@azure/core-rest-pipeline" "^1.1.0"
- "@azure/core-tracing" "^1.0.0"
- "@azure/core-util" "^1.3.0"
- "@azure/logger" "^1.0.0"
- "@azure/msal-browser" "^3.11.1"
- "@azure/msal-node" "^2.9.2"
- events "^3.0.0"
- jws "^4.0.0"
- open "^8.0.0"
- stoppable "^1.1.0"
- tslib "^2.2.0"
-
-"@azure/logger@^1.0.0":
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/@azure/logger/-/logger-1.0.1.tgz#19b333203d1b2931353d8879e814b64a7274837a"
- integrity sha512-QYQeaJ+A5x6aMNu8BG5qdsVBnYBop9UMwgUvGihSjf1PdZZXB+c/oMdM2ajKwzobLBh9e9QuMQkN9iL+IxLBLA==
- dependencies:
- tslib "^2.0.0"
-
-"@azure/msal-browser@^3.11.1":
- version "3.17.0"
- resolved "https://registry.yarnpkg.com/@azure/msal-browser/-/msal-browser-3.17.0.tgz#dee9ccae586239e7e0708b261f7ffa5bc7e00fb7"
- integrity sha512-csccKXmW2z7EkZ0I3yAoW/offQt+JECdTIV/KrnRoZyM7wCSsQWODpwod8ZhYy7iOyamcHApR9uCh0oD1M+0/A==
- dependencies:
- "@azure/msal-common" "14.12.0"
-
-"@azure/msal-common@14.12.0":
- version "14.12.0"
- resolved "https://registry.yarnpkg.com/@azure/msal-common/-/msal-common-14.12.0.tgz#844abe269b071f8fa8949dadc2a7b65bbb147588"
- integrity sha512-IDDXmzfdwmDkv4SSmMEyAniJf6fDu3FJ7ncOjlxkDuT85uSnLEhZi3fGZpoR7T4XZpOMx9teM9GXBgrfJgyeBw==
-
-"@azure/msal-node@^2.9.2":
- version "2.9.2"
- resolved "https://registry.yarnpkg.com/@azure/msal-node/-/msal-node-2.9.2.tgz#e6d3c1661012c1bd0ef68e328f73a2fdede52931"
- integrity sha512-8tvi6Cos3m+0KmRbPjgkySXi+UQU/QiuVRFnrxIwt5xZlEEFa69O04RTaNESGgImyBBlYbo2mfE8/U8Bbdk1WQ==
- dependencies:
- "@azure/msal-common" "14.12.0"
- jsonwebtoken "^9.0.0"
- uuid "^8.3.0"
-
-"@azure/storage-blob@^12.17.0":
- version "12.17.0"
- resolved "https://registry.yarnpkg.com/@azure/storage-blob/-/storage-blob-12.17.0.tgz#04aad7f59cb08dbbe5b1b672a9f5b6256c8c9006"
- integrity sha512-sM4vpsCpcCApagRW5UIjQNlNylo02my2opgp0Emi8x888hZUvJ3dN69Oq20cEGXkMUWnoCrBaB0zyS3yeB87sQ==
- dependencies:
- "@azure/abort-controller" "^1.0.0"
- "@azure/core-http" "^3.0.0"
- "@azure/core-lro" "^2.2.0"
- "@azure/core-paging" "^1.1.1"
- "@azure/core-tracing" "1.0.0-preview.13"
- "@azure/logger" "^1.0.0"
- events "^3.0.0"
- tslib "^2.2.0"
-
-"@electron/asar@^3.2.7":
- version "3.2.10"
- resolved "https://registry.yarnpkg.com/@electron/asar/-/asar-3.2.10.tgz#615cf346b734b23cafa4e0603551010bd0e50aa8"
- integrity sha512-mvBSwIBUeiRscrCeJE1LwctAriBj65eUDm0Pc11iE5gRwzkmsdbS7FnZ1XUWjpSeQWL1L5g12Fc/SchPM9DUOw==
- dependencies:
- commander "^5.0.0"
- glob "^7.1.6"
- minimatch "^3.0.4"
-
-"@electron/get@^2.0.0":
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/@electron/get/-/get-2.0.3.tgz#fba552683d387aebd9f3fcadbcafc8e12ee4f960"
- integrity sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==
- dependencies:
- debug "^4.1.1"
- env-paths "^2.2.0"
- fs-extra "^8.1.0"
- got "^11.8.5"
- progress "^2.0.3"
- semver "^6.2.0"
- sumchecker "^3.0.1"
- optionalDependencies:
- global-agent "^3.0.0"
-
-"@esbuild/aix-ppc64@0.23.0":
- version "0.23.0"
- resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.23.0.tgz#145b74d5e4a5223489cabdc238d8dad902df5259"
- integrity sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ==
-
-"@esbuild/android-arm64@0.23.0":
- version "0.23.0"
- resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.23.0.tgz#453bbe079fc8d364d4c5545069e8260228559832"
- integrity sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ==
-
-"@esbuild/android-arm@0.23.0":
- version "0.23.0"
- resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.23.0.tgz#26c806853aa4a4f7e683e519cd9d68e201ebcf99"
- integrity sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g==
-
-"@esbuild/android-x64@0.23.0":
- version "0.23.0"
- resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.23.0.tgz#1e51af9a6ac1f7143769f7ee58df5b274ed202e6"
- integrity sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ==
-
-"@esbuild/darwin-arm64@0.23.0":
- version "0.23.0"
- resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.23.0.tgz#d996187a606c9534173ebd78c58098a44dd7ef9e"
- integrity sha512-YLntie/IdS31H54Ogdn+v50NuoWF5BDkEUFpiOChVa9UnKpftgwzZRrI4J132ETIi+D8n6xh9IviFV3eXdxfow==
-
-"@esbuild/darwin-x64@0.23.0":
- version "0.23.0"
- resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.23.0.tgz#30c8f28a7ef4e32fe46501434ebe6b0912e9e86c"
- integrity sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ==
-
-"@esbuild/freebsd-arm64@0.23.0":
- version "0.23.0"
- resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.0.tgz#30f4fcec8167c08a6e8af9fc14b66152232e7fb4"
- integrity sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw==
-
-"@esbuild/freebsd-x64@0.23.0":
- version "0.23.0"
- resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.23.0.tgz#1003a6668fe1f5d4439e6813e5b09a92981bc79d"
- integrity sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ==
-
-"@esbuild/linux-arm64@0.23.0":
- version "0.23.0"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.23.0.tgz#3b9a56abfb1410bb6c9138790f062587df3e6e3a"
- integrity sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw==
-
-"@esbuild/linux-arm@0.23.0":
- version "0.23.0"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.23.0.tgz#237a8548e3da2c48cd79ae339a588f03d1889aad"
- integrity sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw==
-
-"@esbuild/linux-ia32@0.23.0":
- version "0.23.0"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.23.0.tgz#4269cd19cb2de5de03a7ccfc8855dde3d284a238"
- integrity sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA==
-
-"@esbuild/linux-loong64@0.23.0":
- version "0.23.0"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.23.0.tgz#82b568f5658a52580827cc891cb69d2cb4f86280"
- integrity sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A==
-
-"@esbuild/linux-mips64el@0.23.0":
- version "0.23.0"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.23.0.tgz#9a57386c926262ae9861c929a6023ed9d43f73e5"
- integrity sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w==
-
-"@esbuild/linux-ppc64@0.23.0":
- version "0.23.0"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.23.0.tgz#f3a79fd636ba0c82285d227eb20ed8e31b4444f6"
- integrity sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw==
-
-"@esbuild/linux-riscv64@0.23.0":
- version "0.23.0"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.23.0.tgz#f9d2ef8356ce6ce140f76029680558126b74c780"
- integrity sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw==
-
-"@esbuild/linux-s390x@0.23.0":
- version "0.23.0"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.23.0.tgz#45390f12e802201f38a0229e216a6aed4351dfe8"
- integrity sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg==
-
-"@esbuild/linux-x64@0.23.0":
- version "0.23.0"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.23.0.tgz#c8409761996e3f6db29abcf9b05bee8d7d80e910"
- integrity sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==
-
-"@esbuild/netbsd-x64@0.23.0":
- version "0.23.0"
- resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.23.0.tgz#ba70db0114380d5f6cfb9003f1d378ce989cd65c"
- integrity sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw==
-
-"@esbuild/openbsd-arm64@0.23.0":
- version "0.23.0"
- resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.0.tgz#72fc55f0b189f7a882e3cf23f332370d69dfd5db"
- integrity sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==
-
-"@esbuild/openbsd-x64@0.23.0":
- version "0.23.0"
- resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.23.0.tgz#b6ae7a0911c18fe30da3db1d6d17a497a550e5d8"
- integrity sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg==
-
-"@esbuild/sunos-x64@0.23.0":
- version "0.23.0"
- resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.23.0.tgz#58f0d5e55b9b21a086bfafaa29f62a3eb3470ad8"
- integrity sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA==
-
-"@esbuild/win32-arm64@0.23.0":
- version "0.23.0"
- resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.23.0.tgz#b858b2432edfad62e945d5c7c9e5ddd0f528ca6d"
- integrity sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ==
-
-"@esbuild/win32-ia32@0.23.0":
- version "0.23.0"
- resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.23.0.tgz#167ef6ca22a476c6c0c014a58b4f43ae4b80dec7"
- integrity sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA==
-
-"@esbuild/win32-x64@0.23.0":
- version "0.23.0"
- resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.23.0.tgz#db44a6a08520b5f25bbe409f34a59f2d4bcc7ced"
- integrity sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g==
-
-"@malept/cross-spawn-promise@^2.0.0":
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/@malept/cross-spawn-promise/-/cross-spawn-promise-2.0.0.tgz#d0772de1aa680a0bfb9ba2f32b4c828c7857cb9d"
- integrity sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==
- dependencies:
- cross-spawn "^7.0.1"
-
-"@opentelemetry/api@^1.0.1":
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.0.3.tgz#13a12ae9e05c2a782f7b5e84c3cbfda4225eaf80"
- integrity sha512-puWxACExDe9nxbBB3lOymQFrLYml2dVOrd7USiVRnSbgXE+KwBu+HxFvxrzfqsiSda9IWsXJG1ef7C1O2/GmKQ==
-
-"@sindresorhus/is@^4.0.0":
- version "4.6.0"
- resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f"
- integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==
-
-"@szmarczak/http-timer@^4.0.5":
- version "4.0.6"
- resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807"
- integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==
- dependencies:
- defer-to-connect "^2.0.0"
-
-"@tootallnate/once@1":
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82"
- integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==
-
-"@types/ansi-colors@^3.2.0":
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/@types/ansi-colors/-/ansi-colors-3.2.0.tgz#3e4fe85d9131ce1c6994f3040bd0b25306c16a6e"
- integrity sha512-0caWAhXht9N2lOdMzJLXybsSkYCx1QOdxx6pae48tswI9QV3DFX26AoOpy0JxwhCb+zISTqmd6H8t9Zby9BoZg==
-
-"@types/byline@^4.2.32":
- version "4.2.32"
- resolved "https://registry.yarnpkg.com/@types/byline/-/byline-4.2.32.tgz#9d35ec15968056118548412ee24c2c3026c997dc"
- integrity sha512-qtlm/J6XOO9p+Ep/ZB5+mCFEDhzWDDHWU4a1eReN7lkPZXW9rkloq2jcAhvKKmlO5tL2GSvKROb+PTsNVhBiyQ==
- dependencies:
- "@types/node" "*"
-
-"@types/cacheable-request@^6.0.1":
- version "6.0.3"
- resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183"
- integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==
- dependencies:
- "@types/http-cache-semantics" "*"
- "@types/keyv" "^3.1.4"
- "@types/node" "*"
- "@types/responselike" "^1.0.0"
-
-"@types/debounce@^1.0.0":
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/@types/debounce/-/debounce-1.0.0.tgz#417560200331e1bb84d72da85391102c2fcd61b7"
- integrity sha1-QXVgIAMx4buE1y2oU5EQLC/NYbc=
-
-"@types/debug@^4.1.5":
- version "4.1.9"
- resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.9.tgz#906996938bc672aaf2fb8c0d3733ae1dda05b005"
- integrity sha512-8Hz50m2eoS56ldRlepxSBa6PWEVCtzUo/92HgLc2qTMnotJNIm7xP+UZhyWoYsyOdd5dxZ+NZLb24rsKyFs2ow==
- dependencies:
- "@types/ms" "*"
-
-"@types/events@*":
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/@types/events/-/events-1.2.0.tgz#81a6731ce4df43619e5c8c945383b3e62a89ea86"
- integrity sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==
-
-"@types/expect@^1.20.4":
- version "1.20.4"
- resolved "https://registry.yarnpkg.com/@types/expect/-/expect-1.20.4.tgz#8288e51737bf7e3ab5d7c77bfa695883745264e5"
- integrity sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==
-
-"@types/fancy-log@^1.3.0":
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/@types/fancy-log/-/fancy-log-1.3.0.tgz#a61ab476e5e628cd07a846330df53b85e05c8ce0"
- integrity sha512-mQjDxyOM1Cpocd+vm1kZBP7smwKZ4TNokFeds9LV7OZibmPJFEzY3+xZMrKfUdNT71lv8GoCPD6upKwHxubClw==
-
-"@types/fs-extra@^9.0.12":
- version "9.0.12"
- resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-9.0.12.tgz#9b8f27973df8a7a3920e8461517ebf8a7d4fdfaf"
- integrity sha512-I+bsBr67CurCGnSenZZ7v94gd3tc3+Aj2taxMT4yu4ABLuOgOjeFxX3dokG24ztSRg5tnT00sL8BszO7gSMoIw==
- dependencies:
- "@types/node" "*"
-
-"@types/glob-stream@*":
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/@types/glob-stream/-/glob-stream-6.1.0.tgz#7ede8a33e59140534f8d8adfb8ac9edfb31897bc"
- integrity sha512-RHv6ZQjcTncXo3thYZrsbAVwoy4vSKosSWhuhuQxLOTv74OJuFQxXkmUuZCr3q9uNBEVCvIzmZL/FeRNbHZGUg==
- dependencies:
- "@types/glob" "*"
- "@types/node" "*"
-
-"@types/glob@*", "@types/glob@^7.1.1":
- version "7.1.1"
- resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575"
- integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==
- dependencies:
- "@types/events" "*"
- "@types/minimatch" "*"
- "@types/node" "*"
-
-"@types/gulp-concat@^0.0.32":
- version "0.0.32"
- resolved "https://registry.yarnpkg.com/@types/gulp-concat/-/gulp-concat-0.0.32.tgz#72486028b1cf5faa94c8c1cf34c626531cecacd6"
- integrity sha512-CUCFADlITzzBfBa2bdGzhKtvBr4eFh+evb+4igVbvPoO5RyPfHifmyQlZl6lM7q19+OKncRlFXDU7B4X9Ayo2g==
- dependencies:
- "@types/node" "*"
-
-"@types/gulp-filter@^3.0.32":
- version "3.0.32"
- resolved "https://registry.yarnpkg.com/@types/gulp-filter/-/gulp-filter-3.0.32.tgz#eeff3e9dbc092268fed01f2421ab00f6c8cb4848"
- integrity sha512-JvY4qTxXehoK2yCUxYVxTMvckVbDM5TWHWeUoYJyX31gwFqw4YDD6JNzhuTxI3yHPUTY4BBRTqgm6puQEZVCNg==
- dependencies:
- "@types/minimatch" "*"
- "@types/node" "*"
- "@types/vinyl" "*"
-
-"@types/gulp-gzip@^0.0.31":
- version "0.0.31"
- resolved "https://registry.yarnpkg.com/@types/gulp-gzip/-/gulp-gzip-0.0.31.tgz#9358def25540442138fd61a7227f40d4c1e26760"
- integrity sha512-KQjHz1FTqLse8/EiktfhN/vo33vamX4gVAQhMTp55STDBA7UToW5CJqYyP7iRorkHK9/aJ2nL2hLkNZkY4M8+w==
- dependencies:
- "@types/node" "*"
-
-"@types/gulp-json-editor@^2.2.31":
- version "2.2.31"
- resolved "https://registry.yarnpkg.com/@types/gulp-json-editor/-/gulp-json-editor-2.2.31.tgz#3c1a8950556c109a0e2d0ab11d5f2a2443665ed2"
- integrity sha512-piis0ImYAy0dt18R4EtTbAY+RV8jwTq5VisnUV6OfP8kD4743aHGkAdAd08No4NY3rFa5mD6ytIu8L0YU7nL9w==
- dependencies:
- "@types/js-beautify" "*"
- "@types/node" "*"
-
-"@types/gulp-rename@^0.0.33":
- version "0.0.33"
- resolved "https://registry.yarnpkg.com/@types/gulp-rename/-/gulp-rename-0.0.33.tgz#38d146e97786569f74f5391a1b1f9b5198674b6c"
- integrity sha512-FIZQvbZJj6V1gHPTzO+g/BCWpDur7fJrroae4gwV3LaoHBQ+MrR9sB+2HssK8fHv4WdY6hVNxkcft9bYatuPIA==
- dependencies:
- "@types/node" "*"
-
-"@types/gulp-sort@^2.0.4":
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/@types/gulp-sort/-/gulp-sort-2.0.4.tgz#60625bf608dbac8f03644c6785d25c616f1b7d8c"
- integrity sha512-HUHxH+oMox1ct0SnxPqCXBni0MSws1ygcSAoLO4ISRmR/UuvNIz40rgNveZxwxQk+p78kw09z/qKQkgKJmNUOQ==
- dependencies:
- "@types/gulp-util" "*"
- "@types/node" "*"
-
-"@types/gulp-sourcemaps@^0.0.32":
- version "0.0.32"
- resolved "https://registry.yarnpkg.com/@types/gulp-sourcemaps/-/gulp-sourcemaps-0.0.32.tgz#e79ee617e0cb15729874be4533fe59c07793a175"
- integrity sha512-+7BAmptW2bxyJnJcCEuie7vLoop3FwWgCdBMzyv7MYXED/HeNMeQuX7uPCkp4vfU1TTu4CYFH0IckNPvo0VePA==
- dependencies:
- "@types/node" "*"
-
-"@types/gulp-util@*":
- version "3.0.41"
- resolved "https://registry.yarnpkg.com/@types/gulp-util/-/gulp-util-3.0.41.tgz#52868a6f8b6af55a099fe48ea20736833c02bed4"
- integrity sha512-BK0kJZ8euQNlISsmD6mBr/1RZkB0mljdtBsz2usv+QHPV10alH2AJw5p05S9LU6S+VdTjbFmGU0OxpH++2W9/Q==
- dependencies:
- "@types/node" "*"
- "@types/through2" "*"
- "@types/vinyl" "*"
- chalk "^2.2.0"
-
-"@types/gulp@^4.0.17":
- version "4.0.17"
- resolved "https://registry.yarnpkg.com/@types/gulp/-/gulp-4.0.17.tgz#b314c3762d08d8d69b7c0b86f78d069bafd65009"
- integrity sha512-+pKQynu2C/HS16kgmDlAicjtFYP8kaa86eE9P0Ae7GB5W29we/E2TIdbOWtEZD5XkpY+jr8fyqfwO6SWZecLpQ==
- dependencies:
- "@types/node" "*"
- "@types/undertaker" ">=1.2.6"
- "@types/vinyl-fs" "*"
- chokidar "^3.3.1"
-
-"@types/http-cache-semantics@*":
- version "4.0.4"
- resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4"
- integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==
-
-"@types/js-beautify@*":
- version "1.8.0"
- resolved "https://registry.yarnpkg.com/@types/js-beautify/-/js-beautify-1.8.0.tgz#0369d3d0e1f35a6aec07cb4da2ee2bcda111367c"
- integrity sha512-/siF86XrwDKLuHe8l7h6NhrAWgLdgqbxmjZv9NvGWmgYRZoTipkjKiWb0SQHy/jcR+ee0GvbG6uGd+LEBMGNvA==
-
-"@types/keyv@^3.1.4":
- version "3.1.4"
- resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6"
- integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==
- dependencies:
- "@types/node" "*"
-
-"@types/mime@0.0.29":
- version "0.0.29"
- resolved "https://registry.yarnpkg.com/@types/mime/-/mime-0.0.29.tgz#fbcfd330573b912ef59eeee14602bface630754b"
- integrity sha1-+8/TMFc7kS71nu7hRgK/rOYwdUs=
-
-"@types/minimatch@*", "@types/minimatch@^3.0.3":
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
- integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
-
-"@types/minimist@^1.2.1":
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.1.tgz#283f669ff76d7b8260df8ab7a4262cc83d988256"
- integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg==
-
-"@types/mkdirp@^1.0.1":
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/@types/mkdirp/-/mkdirp-1.0.1.tgz#0930b948914a78587de35458b86c907b6e98bbf6"
- integrity sha512-HkGSK7CGAXncr8Qn/0VqNtExEE+PHMWb+qlR1faHMao7ng6P3tAaoWWBMdva0gL5h4zprjIO89GJOLXsMcDm1Q==
- dependencies:
- "@types/node" "*"
-
-"@types/mocha@^9.1.1":
- version "9.1.1"
- resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-9.1.1.tgz#e7c4f1001eefa4b8afbd1eee27a237fee3bf29c4"
- integrity sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==
-
-"@types/ms@*":
- version "0.7.32"
- resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.32.tgz#f6cd08939ae3ad886fcc92ef7f0109dacddf61ab"
- integrity sha512-xPSg0jm4mqgEkNhowKgZFBNtwoEwF6gJ4Dhww+GFpm3IgtNseHQZ5IqdNwnquZEoANxyDAKDRAdVo4Z72VvD/g==
-
-"@types/node-fetch@^2.5.0":
- version "2.5.8"
- resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.8.tgz#e199c835d234c7eb0846f6618012e558544ee2fb"
- integrity sha512-fbjI6ja0N5ZA8TV53RUqzsKNkl9fv8Oj3T7zxW7FGv1GSH7gwJaNF8dzCjrqKaxKeUpTz4yT1DaJFq/omNpGfw==
- dependencies:
- "@types/node" "*"
- form-data "^3.0.0"
-
-"@types/node@*":
- version "8.0.51"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.51.tgz#b31d716fb8d58eeb95c068a039b9b6292817d5fb"
- integrity sha512-El3+WJk2D/ppWNd2X05aiP5l2k4EwF7KwheknQZls+I26eSICoWRhRIJ56jGgw2dqNGQ5LtNajmBU2ajS28EvQ==
-
-"@types/node@20.x":
- version "20.11.24"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.24.tgz#cc207511104694e84e9fb17f9a0c4c42d4517792"
- integrity sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long==
- dependencies:
- undici-types "~5.26.4"
-
-"@types/pump@^1.0.1":
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/@types/pump/-/pump-1.0.1.tgz#ae8157cefef04d1a4d24c1cc91d403c2f5da5cd0"
- integrity sha1-roFXzv7wTRpNJMHMkdQDwvXaXNA=
- dependencies:
- "@types/node" "*"
-
-"@types/responselike@^1.0.0":
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.3.tgz#cc29706f0a397cfe6df89debfe4bf5cea159db50"
- integrity sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==
- dependencies:
- "@types/node" "*"
-
-"@types/rimraf@^2.0.4":
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/@types/rimraf/-/rimraf-2.0.4.tgz#403887b0b53c6100a6c35d2ab24f6ccc042fec46"
- integrity sha512-8gBudvllD2A/c0CcEX/BivIDorHFt5UI5m46TsNj8DjWCCTTZT74kEe4g+QsY7P/B9WdO98d82zZgXO/RQzu2Q==
- dependencies:
- "@types/glob" "*"
- "@types/node" "*"
-
-"@types/through2@*":
- version "2.0.41"
- resolved "https://registry.yarnpkg.com/@types/through2/-/through2-2.0.41.tgz#3e5e1720d71ffdfa03c22f2aad6593d12a47034f"
- integrity sha512-ryQ0tidWkb1O1JuYvWKyMLYEtOWDqF5mHerJzKz/gQpoAaJq2l/dsMPBF0B5BNVT34rbARYJ5/tsZwLfUi2kwQ==
- dependencies:
- "@types/node" "*"
-
-"@types/through2@^2.0.36":
- version "2.0.36"
- resolved "https://registry.yarnpkg.com/@types/through2/-/through2-2.0.36.tgz#35fda0db635827d44c0e08e2c94653e647574a00"
- integrity sha512-vuifQksQHJXhV9McpVsXKuhnf3lsoX70PnhcqIAbs9dqLH2NgrGz0DzZPDY3+Yh6eaRqcE1gnCQ6QhBn1/PT5A==
- dependencies:
- "@types/node" "*"
-
-"@types/through@^0.0.29":
- version "0.0.29"
- resolved "https://registry.yarnpkg.com/@types/through/-/through-0.0.29.tgz#72943aac922e179339c651fa34a4428a4d722f93"
- integrity sha512-9a7C5VHh+1BKblaYiq+7Tfc+EOmjMdZaD1MYtkQjSoxgB69tBjW98ry6SKsi4zEIWztLOMRuL87A3bdT/Fc/4w==
- dependencies:
- "@types/node" "*"
-
-"@types/tmp@^0.2.1":
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/@types/tmp/-/tmp-0.2.1.tgz#83ecf4ec22a8c218c71db25f316619fe5b986011"
- integrity sha512-7cTXwKP/HLOPVgjg+YhBdQ7bMiobGMuoBmrGmqwIWJv8elC6t1DfVc/mn4fD9UE1IjhwmhaQ5pGVXkmXbH0rhg==
-
-"@types/tunnel@^0.0.3":
- version "0.0.3"
- resolved "https://registry.yarnpkg.com/@types/tunnel/-/tunnel-0.0.3.tgz#f109e730b072b3136347561fc558c9358bb8c6e9"
- integrity sha512-sOUTGn6h1SfQ+gbgqC364jLFBw2lnFqkgF3q0WovEHRLMrVD1sd5aufqi/aJObLekJO+Aq5z646U4Oxy6shXMA==
- dependencies:
- "@types/node" "*"
-
-"@types/undertaker-registry@*":
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/@types/undertaker-registry/-/undertaker-registry-1.0.1.tgz#4306d4a03d7acedb974b66530832b90729e1d1da"
- integrity sha512-Z4TYuEKn9+RbNVk1Ll2SS4x1JeLHecolIbM/a8gveaHsW0Hr+RQMraZACwTO2VD7JvepgA6UO1A1VrbktQrIbQ==
-
-"@types/undertaker@>=1.2.6":
- version "1.2.11"
- resolved "https://registry.yarnpkg.com/@types/undertaker/-/undertaker-1.2.11.tgz#d9e08b72c4bea5fc40e5bad63ad5a1a2b675e3ca"
- integrity sha512-j1Z0V2ByRHr8ZK7eOeGq0LGkkdthNFW0uAZGY22iRkNQNL9/vAV0yFPr1QN3FM/peY5bxs9P+1f0PYJTQVa5iA==
- dependencies:
- "@types/node" "*"
- "@types/undertaker-registry" "*"
- async-done "~1.3.2"
-
-"@types/vinyl-fs@*":
- version "2.4.9"
- resolved "https://registry.yarnpkg.com/@types/vinyl-fs/-/vinyl-fs-2.4.9.tgz#d312c24b5ba8d2db456d23ee4a66f9d016af82ea"
- integrity sha512-Q0EXd6c1fORjiOuK4ZaKdfFcMyFzJlTi56dqktwaWVLIDAzE49wUs3bKnYbZwzyMWoH+NcMWnRuR73S9A0jnRA==
- dependencies:
- "@types/events" "*"
- "@types/glob-stream" "*"
- "@types/node" "*"
- "@types/vinyl" "*"
-
-"@types/vinyl@*":
- version "2.0.12"
- resolved "https://registry.yarnpkg.com/@types/vinyl/-/vinyl-2.0.12.tgz#17642ca9a8ae10f3db018e9f885da4188db4c6e6"
- integrity sha512-Sr2fYMBUVGYq8kj3UthXFAu5UN6ZW+rYr4NACjZQJvHvj+c8lYv0CahmZ2P/r7iUkN44gGUBwqxZkrKXYPb7cw==
- dependencies:
- "@types/expect" "^1.20.4"
- "@types/node" "*"
-
-"@types/workerpool@^6.4.0":
- version "6.4.0"
- resolved "https://registry.yarnpkg.com/@types/workerpool/-/workerpool-6.4.0.tgz#c79292915dd08350d10e78e74687b6f401f270b8"
- integrity sha512-SIF2/169pDsLKeM8GQGHkOFifGalDbZgiBSaLUnnlVSRsAOenkAvQ6h4uhV2W+PZZczS+8LQxACwNkSykdT91A==
- dependencies:
- "@types/node" "*"
-
-"@types/xml2js@0.0.33":
- version "0.0.33"
- resolved "https://registry.yarnpkg.com/@types/xml2js/-/xml2js-0.0.33.tgz#20c5dd6460245284d64a55690015b95e409fb7de"
- integrity sha1-IMXdZGAkUoTWSlVpABW5XkCft94=
-
-"@types/yauzl@^2.9.1":
- version "2.9.2"
- resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.9.2.tgz#c48e5d56aff1444409e39fa164b0b4d4552a7b7a"
- integrity sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==
- dependencies:
- "@types/node" "*"
-
-"@vscode/iconv-lite-umd@0.7.0":
- version "0.7.0"
- resolved "https://registry.yarnpkg.com/@vscode/iconv-lite-umd/-/iconv-lite-umd-0.7.0.tgz#d2f1e0664ee6036408f9743fee264ea0699b0e48"
- integrity sha512-bRRFxLfg5dtAyl5XyiVWz/ZBPahpOpPrNYnnHpOpUZvam4tKH35wdhP4Kj6PbM0+KdliOsPzbGWpkxcdpNB/sg==
-
-"@vscode/vsce@^2.16.0":
- version "2.16.0"
- resolved "https://registry.yarnpkg.com/@vscode/vsce/-/vsce-2.16.0.tgz#a3ddcf7e84914576f35d891e236bc496c568776f"
- integrity sha512-BhJ0zO7UxShLFBZM6jwOLt1ZVoqQ4r5Lj/kHNeYp0ICPXhz/erqBSMQnHkRgkjn2L/bh+TYFGkZyguhu/SKsjw==
- dependencies:
- azure-devops-node-api "^11.0.1"
- chalk "^2.4.2"
- cheerio "^1.0.0-rc.9"
- commander "^6.1.0"
- glob "^7.0.6"
- hosted-git-info "^4.0.2"
- leven "^3.1.0"
- markdown-it "^12.3.2"
- mime "^1.3.4"
- minimatch "^3.0.3"
- parse-semver "^1.1.1"
- read "^1.0.7"
- semver "^5.1.0"
- tmp "^0.2.1"
- typed-rest-client "^1.8.4"
- url-join "^4.0.1"
- xml2js "^0.4.23"
- yauzl "^2.3.1"
- yazl "^2.2.2"
- optionalDependencies:
- keytar "^7.7.0"
-
-"@xmldom/xmldom@^0.8.8":
- version "0.8.10"
- resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.10.tgz#a1337ca426aa61cef9fe15b5b28e340a72f6fa99"
- integrity sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==
-
-agent-base@6:
- version "6.0.2"
- resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
- integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==
- dependencies:
- debug "4"
-
-ansi-colors@4.1.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348"
- integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==
-
-ansi-colors@^1.0.1:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-1.1.0.tgz#6374b4dd5d4718ff3ce27a671a3b1cad077132a9"
- integrity sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==
- dependencies:
- ansi-wrap "^0.1.0"
-
-ansi-gray@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251"
- integrity sha1-KWLPVOyXksSFEKPetSRDaGHvclE=
- dependencies:
- ansi-wrap "0.1.0"
-
-ansi-styles@^3.2.1:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
- integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
- dependencies:
- color-convert "^1.9.0"
-
-ansi-wrap@0.1.0, ansi-wrap@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf"
- integrity sha1-qCJQ3bABXponyoLoLqYDu/pF768=
-
-anymatch@^3.1.1, anymatch@~3.1.1:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716"
- integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==
- dependencies:
- normalize-path "^3.0.0"
- picomatch "^2.0.4"
-
-anymatch@~3.1.2:
- version "3.1.3"
- resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
- integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
- dependencies:
- normalize-path "^3.0.0"
- picomatch "^2.0.4"
-
-argparse@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
- integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
-
-arr-diff@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
- integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=
-
-arr-union@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
- integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
-
-assign-symbols@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
- integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
-
-async-done@~1.3.2:
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/async-done/-/async-done-1.3.2.tgz#5e15aa729962a4b07414f528a88cdf18e0b290a2"
- integrity sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==
- dependencies:
- end-of-stream "^1.1.0"
- once "^1.3.2"
- process-nextick-args "^2.0.0"
- stream-exhaust "^1.0.1"
-
-asynckit@^0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
- integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
-
-azure-devops-node-api@^11.0.1:
- version "11.2.0"
- resolved "https://registry.yarnpkg.com/azure-devops-node-api/-/azure-devops-node-api-11.2.0.tgz#bf04edbef60313117a0507415eed4790a420ad6b"
- integrity sha512-XdiGPhrpaT5J8wdERRKs5g8E0Zy1pvOYTli7z9E8nmOn3YGp4FhtjhrOyFmX/8veWCwdI69mCHKJw6l+4J/bHA==
- dependencies:
- tunnel "0.0.6"
- typed-rest-client "^1.8.4"
-
-balanced-match@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
- integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
-
-base64-js@^1.3.1, base64-js@^1.5.1:
- version "1.5.1"
- resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
- integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
-
-binary-extensions@^2.0.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
- integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
-
-bl@^4.0.3:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a"
- integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==
- dependencies:
- buffer "^5.5.0"
- inherits "^2.0.4"
- readable-stream "^3.4.0"
-
-bluebird@^3.5.0:
- version "3.7.2"
- resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
- integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
-
-boolbase@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
- integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==
-
-boolean@^3.0.1:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.1.2.tgz#e30f210a26b02458482a8cc353ab06f262a780c2"
- integrity sha512-YN6UmV0FfLlBVvRvNPx3pz5W/mUoYB24J4WSXOKP/OOJpi+Oq6WYqPaNTHzjI0QzwWtnvEd5CGYyQPgp1jFxnw==
-
-brace-expansion@^1.1.7:
- version "1.1.11"
- resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
- integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
- dependencies:
- balanced-match "^1.0.0"
- concat-map "0.0.1"
-
-brace-expansion@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
- integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
- dependencies:
- balanced-match "^1.0.0"
-
-braces@~3.0.2:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789"
- integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==
- dependencies:
- fill-range "^7.1.1"
-
-buffer-alloc-unsafe@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0"
- integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==
-
-buffer-alloc@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec"
- integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==
- dependencies:
- buffer-alloc-unsafe "^1.1.0"
- buffer-fill "^1.0.0"
-
-buffer-crc32@~0.2.3:
- version "0.2.13"
- resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
- integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=
-
-buffer-equal-constant-time@1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819"
- integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=
-
-buffer-fill@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c"
- integrity sha1-+PeLdniYiO858gXNY39o5wISKyw=
-
-buffer@^5.5.0:
- version "5.7.1"
- resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"
- integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==
- dependencies:
- base64-js "^1.3.1"
- ieee754 "^1.1.13"
-
-byline@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1"
- integrity sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE=
-
-cacheable-lookup@^5.0.3:
- version "5.0.4"
- resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005"
- integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==
-
-cacheable-request@^7.0.2:
- version "7.0.4"
- resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.4.tgz#7a33ebf08613178b403635be7b899d3e69bbe817"
- integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==
- dependencies:
- clone-response "^1.0.2"
- get-stream "^5.1.0"
- http-cache-semantics "^4.0.0"
- keyv "^4.0.0"
- lowercase-keys "^2.0.0"
- normalize-url "^6.0.1"
- responselike "^2.0.0"
-
-call-bind@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
- integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
- dependencies:
- function-bind "^1.1.1"
- get-intrinsic "^1.0.2"
-
-chalk@^2.2.0, chalk@^2.4.2:
- version "2.4.2"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
- integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
- dependencies:
- ansi-styles "^3.2.1"
- escape-string-regexp "^1.0.5"
- supports-color "^5.3.0"
-
-cheerio-select@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4"
- integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==
- dependencies:
- boolbase "^1.0.0"
- css-select "^5.1.0"
- css-what "^6.1.0"
- domelementtype "^2.3.0"
- domhandler "^5.0.3"
- domutils "^3.0.1"
-
-cheerio@^1.0.0-rc.9:
- version "1.0.0-rc.12"
- resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683"
- integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==
- dependencies:
- cheerio-select "^2.1.0"
- dom-serializer "^2.0.0"
- domhandler "^5.0.3"
- domutils "^3.0.1"
- htmlparser2 "^8.0.1"
- parse5 "^7.0.0"
- parse5-htmlparser2-tree-adapter "^7.0.0"
-
-chokidar@3.5.1:
- version "3.5.1"
- resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a"
- integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==
- dependencies:
- anymatch "~3.1.1"
- braces "~3.0.2"
- glob-parent "~5.1.0"
- is-binary-path "~2.1.0"
- is-glob "~4.0.1"
- normalize-path "~3.0.0"
- readdirp "~3.5.0"
- optionalDependencies:
- fsevents "~2.3.1"
-
-chokidar@^3.3.1:
- version "3.6.0"
- resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b"
- integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==
- dependencies:
- anymatch "~3.1.2"
- braces "~3.0.2"
- glob-parent "~5.1.2"
- is-binary-path "~2.1.0"
- is-glob "~4.0.1"
- normalize-path "~3.0.0"
- readdirp "~3.6.0"
- optionalDependencies:
- fsevents "~2.3.2"
-
-chownr@^1.1.1:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
- integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
-
-clone-buffer@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58"
- integrity sha1-4+JbIHrE5wGvch4staFnksrD3Fg=
-
-clone-response@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b"
- integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=
- dependencies:
- mimic-response "^1.0.0"
-
-clone-stats@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680"
- integrity sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=
-
-clone@^2.1.1:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f"
- integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=
-
-cloneable-readable@^1.0.0:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.1.3.tgz#120a00cb053bfb63a222e709f9683ea2e11d8cec"
- integrity sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==
- dependencies:
- inherits "^2.0.1"
- process-nextick-args "^2.0.0"
- readable-stream "^2.3.5"
-
-color-convert@^1.9.0:
- version "1.9.3"
- resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
- integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
- dependencies:
- color-name "1.1.3"
-
-color-name@1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
- integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
-
-color-support@^1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2"
- integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==
-
-colors@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78"
- integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==
-
-combined-stream@^1.0.8:
- version "1.0.8"
- resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
- integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
- dependencies:
- delayed-stream "~1.0.0"
-
-commander@^5.0.0:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae"
- integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==
-
-commander@^6.1.0:
- version "6.2.1"
- resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c"
- integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==
-
-commander@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/commander/-/commander-7.0.0.tgz#3e2bbfd8bb6724760980988fb5b22b7ee6b71ab2"
- integrity sha512-ovx/7NkTrnPuIV8sqk/GjUIIM1+iUQeqA3ye2VNpq9sVoiZsooObWlQy+OPWGI17GDaEoybuAGJm6U8yC077BA==
-
-compare-version@^0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/compare-version/-/compare-version-0.1.2.tgz#0162ec2d9351f5ddd59a9202cba935366a725080"
- integrity sha1-AWLsLZNR9d3VmpICy6k1NmpyUIA=
-
-concat-map@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
- integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
-
-core-util-is@~1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
- integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
-
-cross-spawn@^7.0.1:
- version "7.0.3"
- resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
- integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
- dependencies:
- path-key "^3.1.0"
- shebang-command "^2.0.0"
- which "^2.0.1"
-
-css-select@^5.1.0:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6"
- integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==
- dependencies:
- boolbase "^1.0.0"
- css-what "^6.1.0"
- domhandler "^5.0.2"
- domutils "^3.0.1"
- nth-check "^2.0.1"
-
-css-what@^6.1.0:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4"
- integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==
-
-debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2:
- version "4.3.4"
- resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
- integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
- dependencies:
- ms "2.1.2"
-
-debug@^2.6.8:
- version "2.6.9"
- resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
- integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
- dependencies:
- ms "2.0.0"
-
-decompress-response@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc"
- integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==
- dependencies:
- mimic-response "^3.1.0"
-
-deep-extend@^0.6.0:
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
- integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
-
-defer-to-connect@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587"
- integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==
-
-define-lazy-prop@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f"
- integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==
-
-define-properties@^1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
- integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
- dependencies:
- object-keys "^1.0.12"
-
-delayed-stream@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
- integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
-
-detect-libc@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.1.tgz#e1897aa88fa6ad197862937fbc0441ef352ee0cd"
- integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==
-
-detect-node@^2.0.4:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1"
- integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==
-
-dir-compare@^4.2.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/dir-compare/-/dir-compare-4.2.0.tgz#d1d4999c14fbf55281071fdae4293b3b9ce86f19"
- integrity sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==
- dependencies:
- minimatch "^3.0.5"
- p-limit "^3.1.0 "
-
-dom-serializer@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53"
- integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==
- dependencies:
- domelementtype "^2.3.0"
- domhandler "^5.0.2"
- entities "^4.2.0"
-
-domelementtype@^2.3.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d"
- integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==
-
-domhandler@^5.0.1, domhandler@^5.0.2, domhandler@^5.0.3:
- version "5.0.3"
- resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31"
- integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==
- dependencies:
- domelementtype "^2.3.0"
-
-domutils@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.0.1.tgz#696b3875238338cb186b6c0612bd4901c89a4f1c"
- integrity sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==
- dependencies:
- dom-serializer "^2.0.0"
- domelementtype "^2.3.0"
- domhandler "^5.0.1"
-
-duplexify@^4.1.1:
- version "4.1.2"
- resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.2.tgz#18b4f8d28289132fa0b9573c898d9f903f81c7b0"
- integrity sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==
- dependencies:
- end-of-stream "^1.4.1"
- inherits "^2.0.3"
- readable-stream "^3.1.1"
- stream-shift "^1.0.0"
-
-ecdsa-sig-formatter@1.0.11:
- version "1.0.11"
- resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf"
- integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==
- dependencies:
- safe-buffer "^5.0.1"
-
-electron-osx-sign@^0.4.16:
- version "0.4.16"
- resolved "https://registry.yarnpkg.com/electron-osx-sign/-/electron-osx-sign-0.4.16.tgz#0be8e579b2d9fa4c12d2a21f063898294b3434aa"
- integrity sha512-ziMWfc3NmQlwnWLW6EaZq8nH2BWVng/atX5GWsGwhexJYpdW6hsg//MkAfRTRx1kR3Veiqkeiog1ibkbA4x0rg==
- dependencies:
- bluebird "^3.5.0"
- compare-version "^0.1.2"
- debug "^2.6.8"
- isbinaryfile "^3.0.2"
- minimist "^1.2.0"
- plist "^3.0.1"
-
-end-of-stream@^1.1.0, end-of-stream@^1.4.1:
- version "1.4.4"
- resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
- integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
- dependencies:
- once "^1.4.0"
-
-entities@^4.2.0, entities@^4.3.0, entities@^4.4.0:
- version "4.4.0"
- resolved "https://registry.yarnpkg.com/entities/-/entities-4.4.0.tgz#97bdaba170339446495e653cfd2db78962900174"
- integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==
-
-entities@~2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5"
- integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==
-
-env-paths@^2.2.0:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2"
- integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==
-
-es6-error@^4.1.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d"
- integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==
-
-esbuild@0.23.0:
- version "0.23.0"
- resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.23.0.tgz#de06002d48424d9fdb7eb52dbe8e95927f852599"
- integrity sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==
- optionalDependencies:
- "@esbuild/aix-ppc64" "0.23.0"
- "@esbuild/android-arm" "0.23.0"
- "@esbuild/android-arm64" "0.23.0"
- "@esbuild/android-x64" "0.23.0"
- "@esbuild/darwin-arm64" "0.23.0"
- "@esbuild/darwin-x64" "0.23.0"
- "@esbuild/freebsd-arm64" "0.23.0"
- "@esbuild/freebsd-x64" "0.23.0"
- "@esbuild/linux-arm" "0.23.0"
- "@esbuild/linux-arm64" "0.23.0"
- "@esbuild/linux-ia32" "0.23.0"
- "@esbuild/linux-loong64" "0.23.0"
- "@esbuild/linux-mips64el" "0.23.0"
- "@esbuild/linux-ppc64" "0.23.0"
- "@esbuild/linux-riscv64" "0.23.0"
- "@esbuild/linux-s390x" "0.23.0"
- "@esbuild/linux-x64" "0.23.0"
- "@esbuild/netbsd-x64" "0.23.0"
- "@esbuild/openbsd-arm64" "0.23.0"
- "@esbuild/openbsd-x64" "0.23.0"
- "@esbuild/sunos-x64" "0.23.0"
- "@esbuild/win32-arm64" "0.23.0"
- "@esbuild/win32-ia32" "0.23.0"
- "@esbuild/win32-x64" "0.23.0"
-
-escape-string-regexp@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
- integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
-
-escape-string-regexp@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
- integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
-
-events@^3.0.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/events/-/events-3.2.0.tgz#93b87c18f8efcd4202a461aec4dfc0556b639379"
- integrity sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==
-
-expand-template@^2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c"
- integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==
-
-extend-shallow@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
- integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=
- dependencies:
- assign-symbols "^1.0.0"
- is-extendable "^1.0.1"
-
-extract-zip@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a"
- integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==
- dependencies:
- debug "^4.1.1"
- get-stream "^5.1.0"
- yauzl "^2.10.0"
- optionalDependencies:
- "@types/yauzl" "^2.9.1"
-
-fancy-log@^1.3.3:
- version "1.3.3"
- resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.3.tgz#dbc19154f558690150a23953a0adbd035be45fc7"
- integrity sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==
- dependencies:
- ansi-gray "^0.1.1"
- color-support "^1.1.3"
- parse-node-version "^1.0.0"
- time-stamp "^1.0.0"
-
-fast-json-stable-stringify@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
- integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
-
-fd-slicer@~1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e"
- integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=
- dependencies:
- pend "~1.2.0"
-
-fill-range@^7.1.1:
- version "7.1.1"
- resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292"
- integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==
- dependencies:
- to-regex-range "^5.0.1"
-
-first-chunk-stream@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-2.0.0.tgz#1bdecdb8e083c0664b91945581577a43a9f31d70"
- integrity sha1-G97NuOCDwGZLkZRVgVd6Q6nzHXA=
- dependencies:
- readable-stream "^2.0.2"
-
-fork-stream@^0.0.4:
- version "0.0.4"
- resolved "https://registry.yarnpkg.com/fork-stream/-/fork-stream-0.0.4.tgz#db849fce77f6708a5f8f386ae533a0907b54ae70"
- integrity sha512-Pqq5NnT78ehvUnAk/We/Jr22vSvanRlFTpAmQ88xBY/M1TlHe+P0ILuEyXS595ysdGfaj22634LBkGMA2GTcpA==
-
-form-data@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.0.tgz#31b7e39c85f1355b7139ee0c647cf0de7f83c682"
- integrity sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==
- dependencies:
- asynckit "^0.4.0"
- combined-stream "^1.0.8"
- mime-types "^2.1.12"
-
-form-data@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
- integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
- dependencies:
- asynckit "^0.4.0"
- combined-stream "^1.0.8"
- mime-types "^2.1.12"
-
-fs-constants@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
- integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
-
-fs-extra@^11.1.1:
- version "11.2.0"
- resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b"
- integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==
- dependencies:
- graceful-fs "^4.2.0"
- jsonfile "^6.0.1"
- universalify "^2.0.0"
-
-fs-extra@^8.1.0:
- version "8.1.0"
- resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
- integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
- dependencies:
- graceful-fs "^4.2.0"
- jsonfile "^4.0.0"
- universalify "^0.1.0"
-
-fs.realpath@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
- integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
-
-fsevents@~2.3.1:
- version "2.3.2"
- resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
- integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
-
-fsevents@~2.3.2:
- version "2.3.3"
- resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
- integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
-
-function-bind@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
- integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
-
-get-intrinsic@^1.0.2:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385"
- integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==
- dependencies:
- function-bind "^1.1.1"
- has "^1.0.3"
- has-symbols "^1.0.3"
-
-get-stream@^5.1.0:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3"
- integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==
- dependencies:
- pump "^3.0.0"
-
-github-from-package@0.0.0:
- version "0.0.0"
- resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce"
- integrity sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=
-
-glob-parent@^5.1.1, glob-parent@~5.1.0, glob-parent@~5.1.2:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
- integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
- dependencies:
- is-glob "^4.0.1"
-
-glob@^7.0.6:
- version "7.2.3"
- resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
- integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
- dependencies:
- fs.realpath "^1.0.0"
- inflight "^1.0.4"
- inherits "2"
- minimatch "^3.1.1"
- once "^1.3.0"
- path-is-absolute "^1.0.0"
-
-glob@^7.1.3, glob@^7.1.6:
- version "7.1.7"
- resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90"
- integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==
- 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"
-
-global-agent@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/global-agent/-/global-agent-3.0.0.tgz#ae7cd31bd3583b93c5a16437a1afe27cc33a1ab6"
- integrity sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==
- dependencies:
- boolean "^3.0.1"
- es6-error "^4.1.1"
- matcher "^3.0.0"
- roarr "^2.15.3"
- semver "^7.3.2"
- serialize-error "^7.0.1"
-
-globalthis@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.2.tgz#2a235d34f4d8036219f7e34929b5de9e18166b8b"
- integrity sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ==
- dependencies:
- define-properties "^1.1.3"
-
-got@^11.8.5:
- version "11.8.6"
- resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a"
- integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==
- dependencies:
- "@sindresorhus/is" "^4.0.0"
- "@szmarczak/http-timer" "^4.0.5"
- "@types/cacheable-request" "^6.0.1"
- "@types/responselike" "^1.0.0"
- cacheable-lookup "^5.0.3"
- cacheable-request "^7.0.2"
- decompress-response "^6.0.0"
- http2-wrapper "^1.0.0-beta.5.2"
- lowercase-keys "^2.0.0"
- p-cancelable "^2.0.0"
- responselike "^2.0.0"
-
-graceful-fs@^4.1.2:
- version "4.2.10"
- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c"
- integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==
-
-graceful-fs@^4.1.6, graceful-fs@^4.2.0:
- version "4.2.8"
- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a"
- integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==
-
-gulp-merge-json@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/gulp-merge-json/-/gulp-merge-json-2.1.1.tgz#cfb1d066467577545b8c1c289a278e6ef4b4e0de"
- integrity sha512-VhvAlcf+dcCb94j/2yDPWxJ3X7x4P/Xwcrv1dhjYuRgvADwFJmaQwl4zbuq+GDZvzMacbVncWtEdsETpUSkhYw==
- dependencies:
- json5 "^2.1.3"
- lodash.mergewith "^4.6.1"
- plugin-error "^1.0.1"
- through "^2.3.8"
- vinyl "^2.1.0"
-
-gulp-sort@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/gulp-sort/-/gulp-sort-2.0.0.tgz#c6762a2f1f0de0a3fc595a21599d3fac8dba1aca"
- integrity sha512-MyTel3FXOdh1qhw1yKhpimQrAmur9q1X0ZigLmCOxouQD+BD3za9/89O+HfbgBQvvh4igEbp0/PUWO+VqGYG1g==
- dependencies:
- through2 "^2.0.1"
-
-has-flag@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
- integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
-
-has-symbols@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
- integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
-
-has@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
- integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
- dependencies:
- function-bind "^1.1.1"
-
-hosted-git-info@^4.0.2:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224"
- integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==
- dependencies:
- lru-cache "^6.0.0"
-
-htmlparser2@^8.0.1:
- version "8.0.1"
- resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.1.tgz#abaa985474fcefe269bc761a779b544d7196d010"
- integrity sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==
- dependencies:
- domelementtype "^2.3.0"
- domhandler "^5.0.2"
- domutils "^3.0.1"
- entities "^4.3.0"
-
-http-cache-semantics@^4.0.0:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a"
- integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==
-
-http-proxy-agent@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a"
- integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==
- dependencies:
- "@tootallnate/once" "1"
- agent-base "6"
- debug "4"
-
-http2-wrapper@^1.0.0-beta.5.2:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d"
- integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==
- dependencies:
- quick-lru "^5.1.1"
- resolve-alpn "^1.0.0"
-
-https-proxy-agent@^5.0.0:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6"
- integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==
- dependencies:
- agent-base "6"
- debug "4"
-
-ieee754@^1.1.13:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
- integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
-
-inflight@^1.0.4:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
- integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
- dependencies:
- once "^1.3.0"
- wrappy "1"
-
-inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
- integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
-
-ini@~1.3.0:
- version "1.3.8"
- resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
- integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
-
-is-binary-path@~2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
- integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
- dependencies:
- binary-extensions "^2.0.0"
-
-is-docker@^2.0.0, is-docker@^2.1.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
- integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
-
-is-extendable@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
- integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
- dependencies:
- is-plain-object "^2.0.4"
-
-is-extglob@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
- integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
-
-is-glob@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
- integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
- dependencies:
- is-extglob "^2.1.1"
-
-is-glob@~4.0.1:
- version "4.0.3"
- resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
- integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
- dependencies:
- is-extglob "^2.1.1"
-
-is-number@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
- integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
-
-is-plain-object@^2.0.4:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
- integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
- dependencies:
- isobject "^3.0.1"
-
-is-utf8@^0.2.0, is-utf8@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
- integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=
-
-is-wsl@^2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
- integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==
- dependencies:
- is-docker "^2.0.0"
-
-isarray@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
- integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
-
-isbinaryfile@^3.0.2:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.3.tgz#5d6def3edebf6e8ca8cae9c30183a804b5f8be80"
- integrity sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==
- dependencies:
- buffer-alloc "^1.2.0"
-
-isexe@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
- integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
-
-isobject@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
- integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
-
-jsbi@^3.1.3:
- version "3.1.4"
- resolved "https://registry.yarnpkg.com/jsbi/-/jsbi-3.1.4.tgz#9654dd02207a66a4911b4e4bb74265bc2cbc9dd0"
- integrity sha512-52QRRFSsi9impURE8ZUbzAMCLjPm4THO7H2fcuIvaaeFTbSysvkodbQQXIVsNgq/ypDbq6dJiuGKL0vZ/i9hUg==
-
-json-buffer@3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13"
- integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==
-
-json-stringify-safe@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
- integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
-
-json5@^2.1.3:
- version "2.2.2"
- resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.2.tgz#64471c5bdcc564c18f7c1d4df2e2297f2457c5ab"
- integrity sha512-46Tk9JiOL2z7ytNQWFLpj99RZkVgeHf87yGQKsIkaPz1qSH9UczKH1rO7K3wgRselo0tYMUNfecYpm/p1vC7tQ==
-
-jsonc-parser@^2.3.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-2.3.0.tgz#7c7fc988ee1486d35734faaaa866fadb00fa91ee"
- integrity sha512-b0EBt8SWFNnixVdvoR2ZtEGa9ZqLhbJnOjezn+WP+8kspFm+PFYDN8Z4Bc7pRlDjvuVcADSUkroIuTWWn/YiIA==
-
-jsonfile@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
- integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=
- optionalDependencies:
- graceful-fs "^4.1.6"
-
-jsonfile@^6.0.1:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
- integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
- dependencies:
- universalify "^2.0.0"
- optionalDependencies:
- graceful-fs "^4.1.6"
-
-jsonwebtoken@^9.0.0:
- version "9.0.0"
- resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz#d0faf9ba1cc3a56255fe49c0961a67e520c1926d"
- integrity sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==
- dependencies:
- jws "^3.2.2"
- lodash "^4.17.21"
- ms "^2.1.1"
- semver "^7.3.8"
-
-jwa@^1.4.1:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a"
- integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==
- dependencies:
- buffer-equal-constant-time "1.0.1"
- ecdsa-sig-formatter "1.0.11"
- safe-buffer "^5.0.1"
-
-jwa@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/jwa/-/jwa-2.0.0.tgz#a7e9c3f29dae94027ebcaf49975c9345593410fc"
- integrity sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==
- dependencies:
- buffer-equal-constant-time "1.0.1"
- ecdsa-sig-formatter "1.0.11"
- safe-buffer "^5.0.1"
-
-jws@^3.2.2:
- version "3.2.2"
- resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304"
- integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==
- dependencies:
- jwa "^1.4.1"
- safe-buffer "^5.0.1"
-
-jws@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/jws/-/jws-4.0.0.tgz#2d4e8cf6a318ffaa12615e9dec7e86e6c97310f4"
- integrity sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==
- dependencies:
- jwa "^2.0.0"
- safe-buffer "^5.0.1"
-
-keytar@^7.7.0:
- version "7.9.0"
- resolved "https://registry.yarnpkg.com/keytar/-/keytar-7.9.0.tgz#4c6225708f51b50cbf77c5aae81721964c2918cb"
- integrity sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==
- dependencies:
- node-addon-api "^4.3.0"
- prebuild-install "^7.0.1"
-
-keyv@^4.0.0:
- version "4.5.4"
- resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93"
- integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==
- dependencies:
- json-buffer "3.0.1"
-
-leven@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"
- integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==
-
-linkify-it@^3.0.1:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-3.0.3.tgz#a98baf44ce45a550efb4d49c769d07524cc2fa2e"
- integrity sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==
- dependencies:
- uc.micro "^1.0.1"
-
-lodash.mergewith@^4.6.1:
- version "4.6.2"
- resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz#617121f89ac55f59047c7aec1ccd6654c6590f55"
- integrity sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==
-
-lodash@^4.17.21:
- version "4.17.21"
- resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
- integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
-
-lowercase-keys@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479"
- integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==
-
-lru-cache@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
- integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
- dependencies:
- yallist "^4.0.0"
-
-markdown-it@^12.3.2:
- version "12.3.2"
- resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-12.3.2.tgz#bf92ac92283fe983fe4de8ff8abfb5ad72cd0c90"
- integrity sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==
- dependencies:
- argparse "^2.0.1"
- entities "~2.1.0"
- linkify-it "^3.0.1"
- mdurl "^1.0.1"
- uc.micro "^1.0.5"
-
-matcher@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/matcher/-/matcher-3.0.0.tgz#bd9060f4c5b70aa8041ccc6f80368760994f30ca"
- integrity sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==
- dependencies:
- escape-string-regexp "^4.0.0"
-
-mdurl@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e"
- integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==
-
-merge-stream@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
- integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
-
-mime-db@1.45.0:
- version "1.45.0"
- resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea"
- integrity sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==
-
-mime-types@^2.1.12:
- version "2.1.28"
- resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.28.tgz#1160c4757eab2c5363888e005273ecf79d2a0ecd"
- integrity sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==
- dependencies:
- mime-db "1.45.0"
-
-mime@^1.3.4, mime@^1.4.1:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
- integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
-
-mimic-response@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b"
- integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==
-
-mimic-response@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9"
- integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==
-
-minimatch@^3.0.3, minimatch@^3.0.5, minimatch@^3.1.1:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
- integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
- dependencies:
- brace-expansion "^1.1.7"
-
-minimatch@^3.0.4:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
- integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
- dependencies:
- brace-expansion "^1.1.7"
-
-minimatch@^9.0.3:
- version "9.0.5"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5"
- integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==
- dependencies:
- brace-expansion "^2.0.1"
-
-minimist@^1.2.0, minimist@^1.2.3:
- version "1.2.6"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44"
- integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==
-
-mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3:
- version "0.5.3"
- resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113"
- integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==
-
-mkdirp@^1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
- integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
-
-ms@2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
- integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
-
-ms@2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
- integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
-
-ms@^2.1.1:
- version "2.1.3"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
- integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
-
-mute-stream@~0.0.4:
- version "0.0.8"
- resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
- integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
-
-nan@^2.18.0:
- version "2.19.0"
- resolved "https://registry.yarnpkg.com/nan/-/nan-2.19.0.tgz#bb58122ad55a6c5bc973303908d5b16cfdd5a8c0"
- integrity sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw==
-
-napi-build-utils@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806"
- integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==
-
-node-abi@^3.3.0:
- version "3.30.0"
- resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.30.0.tgz#d84687ad5d24ca81cdfa912a36f2c5c19b137359"
- integrity sha512-qWO5l3SCqbwQavymOmtTVuCWZE23++S+rxyoHjXqUmPyzRcaoI4lA2gO55/drddGnedAyjA7sk76SfQ5lfUMnw==
- dependencies:
- semver "^7.3.5"
-
-node-abort-controller@^3.0.0:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/node-abort-controller/-/node-abort-controller-3.1.1.tgz#a94377e964a9a37ac3976d848cb5c765833b8548"
- integrity sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==
-
-node-addon-api@^4.3.0:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-4.3.0.tgz#52a1a0b475193e0928e98e0426a0d1254782b77f"
- integrity sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==
-
-node-fetch@^2.6.7:
- version "2.6.9"
- resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.9.tgz#7c7f744b5cc6eb5fd404e0c7a9fec630a55657e6"
- integrity sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==
- dependencies:
- whatwg-url "^5.0.0"
-
-normalize-path@^3.0.0, normalize-path@~3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
- integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
-
-normalize-url@^6.0.1:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a"
- integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==
-
-nth-check@^2.0.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d"
- integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==
- dependencies:
- boolbase "^1.0.0"
-
-object-assign@^4.1.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
- integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
-
-object-inspect@^1.9.0:
- version "1.12.2"
- resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea"
- integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==
-
-object-keys@^1.0.12:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
- integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
-
-once@^1.3.0, once@^1.3.1, once@^1.3.2, once@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
- integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
- dependencies:
- wrappy "1"
-
-open@^8.0.0:
- version "8.4.0"
- resolved "https://registry.yarnpkg.com/open/-/open-8.4.0.tgz#345321ae18f8138f82565a910fdc6b39e8c244f8"
- integrity sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==
- dependencies:
- define-lazy-prop "^2.0.0"
- is-docker "^2.1.1"
- is-wsl "^2.2.0"
-
-p-cancelable@^2.0.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf"
- integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==
-
-"p-limit@^3.1.0 ":
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
- integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
- dependencies:
- yocto-queue "^0.1.0"
-
-parse-node-version@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b"
- integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==
-
-parse-semver@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/parse-semver/-/parse-semver-1.1.1.tgz#9a4afd6df063dc4826f93fba4a99cf223f666cb8"
- integrity sha512-Eg1OuNntBMH0ojvEKSrvDSnwLmvVuUOSdylH/pSCPNMIspLlweJyIWXCE+k/5hm3cj/EBUYwmWkjhBALNP4LXQ==
- dependencies:
- semver "^5.1.0"
-
-parse5-htmlparser2-tree-adapter@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1"
- integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==
- dependencies:
- domhandler "^5.0.2"
- parse5 "^7.0.0"
-
-parse5@^7.0.0:
- version "7.1.2"
- resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32"
- integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==
- dependencies:
- entities "^4.4.0"
-
-path-is-absolute@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
- integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
-
-path-key@^3.1.0:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
- integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
-
-pend@~1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
- integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA=
-
-picomatch@^2.0.4:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972"
- integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==
-
-picomatch@^2.2.1:
- version "2.3.1"
- resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
- integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
-
-pify@^2.3.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
- integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==
-
-plist@^3.0.1:
- version "3.0.5"
- resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.5.tgz#2cbeb52d10e3cdccccf0c11a63a85d830970a987"
- integrity sha512-83vX4eYdQp3vP9SxuYgEM/G/pJQqLUz/V/xzPrzruLs7fz7jxGQ1msZ/mg1nwZxUSuOp4sb+/bEIbRrbzZRxDA==
- dependencies:
- base64-js "^1.5.1"
- xmlbuilder "^9.0.7"
-
-plist@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/plist/-/plist-3.1.0.tgz#797a516a93e62f5bde55e0b9cc9c967f860893c9"
- integrity sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==
- dependencies:
- "@xmldom/xmldom" "^0.8.8"
- base64-js "^1.5.1"
- xmlbuilder "^15.1.1"
-
-plugin-error@1.0.1, plugin-error@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/plugin-error/-/plugin-error-1.0.1.tgz#77016bd8919d0ac377fdcdd0322328953ca5781c"
- integrity sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==
- dependencies:
- ansi-colors "^1.0.1"
- arr-diff "^4.0.0"
- arr-union "^3.1.0"
- extend-shallow "^3.0.2"
-
-prebuild-install@^7.0.1:
- version "7.1.1"
- resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.1.tgz#de97d5b34a70a0c81334fd24641f2a1702352e45"
- integrity sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==
- dependencies:
- detect-libc "^2.0.0"
- expand-template "^2.0.3"
- github-from-package "0.0.0"
- minimist "^1.2.3"
- mkdirp-classic "^0.5.3"
- napi-build-utils "^1.0.1"
- node-abi "^3.3.0"
- pump "^3.0.0"
- rc "^1.2.7"
- simple-get "^4.0.0"
- tar-fs "^2.0.0"
- tunnel-agent "^0.6.0"
-
-prebuild-install@^7.1.1:
- version "7.1.2"
- resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.2.tgz#a5fd9986f5a6251fbc47e1e5c65de71e68c0a056"
- integrity sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==
- dependencies:
- detect-libc "^2.0.0"
- expand-template "^2.0.3"
- github-from-package "0.0.0"
- minimist "^1.2.3"
- mkdirp-classic "^0.5.3"
- napi-build-utils "^1.0.1"
- node-abi "^3.3.0"
- pump "^3.0.0"
- rc "^1.2.7"
- simple-get "^4.0.0"
- tar-fs "^2.0.0"
- tunnel-agent "^0.6.0"
-
-priorityqueuejs@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/priorityqueuejs/-/priorityqueuejs-1.0.0.tgz#2ee4f23c2560913e08c07ce5ccdd6de3df2c5af8"
- integrity sha1-LuTyPCVgkT4IwHzlzN1t498sWvg=
-
-process-nextick-args@^2.0.0, process-nextick-args@~2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
- integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
-
-process@^0.11.10:
- version "0.11.10"
- resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
- integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI=
-
-progress@^2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
- integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
-
-pump@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
- integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
- dependencies:
- end-of-stream "^1.1.0"
- once "^1.3.1"
-
-qs@^6.9.1:
- version "6.11.0"
- resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a"
- integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==
- dependencies:
- side-channel "^1.0.4"
-
-quick-lru@^5.1.1:
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932"
- integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==
-
-rc@^1.2.7:
- version "1.2.8"
- resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
- integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
- dependencies:
- deep-extend "^0.6.0"
- ini "~1.3.0"
- minimist "^1.2.0"
- strip-json-comments "~2.0.1"
-
-read@^1.0.7:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4"
- integrity sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==
- dependencies:
- mute-stream "~0.0.4"
-
-"readable-stream@2 || 3", readable-stream@3, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0:
- version "3.6.0"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
- integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
- dependencies:
- inherits "^2.0.3"
- string_decoder "^1.1.1"
- util-deprecate "^1.0.1"
-
-readable-stream@^2.0.2, readable-stream@^2.3.5:
- version "2.3.7"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
- integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
- dependencies:
- core-util-is "~1.0.0"
- inherits "~2.0.3"
- isarray "~1.0.0"
- process-nextick-args "~2.0.0"
- safe-buffer "~5.1.1"
- string_decoder "~1.1.1"
- util-deprecate "~1.0.1"
-
-readable-stream@~2.3.6:
- version "2.3.8"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b"
- integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==
- dependencies:
- core-util-is "~1.0.0"
- inherits "~2.0.3"
- isarray "~1.0.0"
- process-nextick-args "~2.0.0"
- safe-buffer "~5.1.1"
- string_decoder "~1.1.1"
- util-deprecate "~1.0.1"
-
-readdirp@~3.5.0:
- version "3.5.0"
- resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e"
- integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==
- dependencies:
- picomatch "^2.2.1"
-
-readdirp@~3.6.0:
- version "3.6.0"
- resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
- integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
- dependencies:
- picomatch "^2.2.1"
-
-remove-trailing-separator@^1.0.1:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
- integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8=
-
-replace-ext@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.1.tgz#2d6d996d04a15855d967443631dd5f77825b016a"
- integrity sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==
-
-resolve-alpn@^1.0.0:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9"
- integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==
-
-responselike@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc"
- integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==
- dependencies:
- lowercase-keys "^2.0.0"
-
-rimraf@^3.0.0:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
- integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
- dependencies:
- glob "^7.1.3"
-
-roarr@^2.15.3:
- version "2.15.4"
- resolved "https://registry.yarnpkg.com/roarr/-/roarr-2.15.4.tgz#f5fe795b7b838ccfe35dc608e0282b9eba2e7afd"
- integrity sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==
- dependencies:
- boolean "^3.0.1"
- detect-node "^2.0.4"
- globalthis "^1.0.1"
- json-stringify-safe "^5.0.1"
- semver-compare "^1.0.0"
- sprintf-js "^1.1.2"
-
-safe-buffer@^5.0.1, safe-buffer@~5.2.0:
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
- integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
-
-safe-buffer@~5.1.0, safe-buffer@~5.1.1:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
- integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
-
-sax@>=0.6.0:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
- integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
-
-semaphore@^1.0.5:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/semaphore/-/semaphore-1.1.0.tgz#aaad8b86b20fe8e9b32b16dc2ee682a8cd26a8aa"
- integrity sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==
-
-semver-compare@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc"
- integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w=
-
-semver@^5.1.0:
- version "5.7.2"
- resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8"
- integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==
-
-semver@^6.2.0:
- version "6.3.1"
- resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
- integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
-
-semver@^7.3.2, semver@^7.3.5, semver@^7.3.8:
- version "7.5.4"
- resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e"
- integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==
- dependencies:
- lru-cache "^6.0.0"
-
-serialize-error@^7.0.1:
- version "7.0.1"
- resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-7.0.1.tgz#f1360b0447f61ffb483ec4157c737fab7d778e18"
- integrity sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==
- dependencies:
- type-fest "^0.13.1"
-
-shebang-command@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
- integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
- dependencies:
- shebang-regex "^3.0.0"
-
-shebang-regex@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
- integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
-
-side-channel@^1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
- integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==
- dependencies:
- call-bind "^1.0.0"
- get-intrinsic "^1.0.2"
- object-inspect "^1.9.0"
-
-simple-concat@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f"
- integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==
-
-simple-get@^4.0.0:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543"
- integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==
- dependencies:
- decompress-response "^6.0.0"
- once "^1.3.1"
- simple-concat "^1.0.0"
-
-source-map@0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
- integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
-
-sprintf-js@^1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673"
- integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==
-
-stoppable@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/stoppable/-/stoppable-1.1.0.tgz#32da568e83ea488b08e4d7ea2c3bcc9d75015d5b"
- integrity sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==
-
-stream-exhaust@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/stream-exhaust/-/stream-exhaust-1.0.2.tgz#acdac8da59ef2bc1e17a2c0ccf6c320d120e555d"
- integrity sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==
-
-stream-shift@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d"
- integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==
-
-string_decoder@^1.1.1:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
- integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
- dependencies:
- safe-buffer "~5.2.0"
-
-string_decoder@~1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
- integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
- dependencies:
- safe-buffer "~5.1.0"
-
-strip-bom-buf@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/strip-bom-buf/-/strip-bom-buf-1.0.0.tgz#1cb45aaf57530f4caf86c7f75179d2c9a51dd572"
- integrity sha1-HLRar1dTD0yvhsf3UXnSyaUd1XI=
- dependencies:
- is-utf8 "^0.2.1"
-
-strip-bom-stream@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/strip-bom-stream/-/strip-bom-stream-2.0.0.tgz#f87db5ef2613f6968aa545abfe1ec728b6a829ca"
- integrity sha1-+H217yYT9paKpUWr/h7HKLaoKco=
- dependencies:
- first-chunk-stream "^2.0.0"
- strip-bom "^2.0.0"
-
-strip-bom@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
- integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=
- dependencies:
- is-utf8 "^0.2.0"
-
-strip-json-comments@~2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
- integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
-
-sumchecker@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-3.0.1.tgz#6377e996795abb0b6d348e9b3e1dfb24345a8e42"
- integrity sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==
- dependencies:
- debug "^4.1.0"
-
-supports-color@^5.3.0:
- version "5.5.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
- integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
- dependencies:
- has-flag "^3.0.0"
-
-tar-fs@^2.0.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784"
- integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==
- dependencies:
- chownr "^1.1.1"
- mkdirp-classic "^0.5.2"
- pump "^3.0.0"
- tar-stream "^2.1.4"
-
-tar-stream@^2.1.4:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287"
- integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==
- dependencies:
- bl "^4.0.3"
- end-of-stream "^1.4.1"
- fs-constants "^1.0.0"
- inherits "^2.0.3"
- readable-stream "^3.1.1"
-
-ternary-stream@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/ternary-stream/-/ternary-stream-3.0.0.tgz#7951930ea9e823924d956f03d516151a2d516253"
- integrity sha512-oIzdi+UL/JdktkT+7KU5tSIQjj8pbShj3OASuvDEhm0NT5lppsm7aXWAmAq4/QMaBIyfuEcNLbAQA+HpaISobQ==
- dependencies:
- duplexify "^4.1.1"
- fork-stream "^0.0.4"
- merge-stream "^2.0.0"
- through2 "^3.0.1"
-
-through2@^2.0.1:
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
- integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==
- dependencies:
- readable-stream "~2.3.6"
- xtend "~4.0.1"
-
-through2@^3.0.1:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.2.tgz#99f88931cfc761ec7678b41d5d7336b5b6a07bf4"
- integrity sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==
- dependencies:
- inherits "^2.0.4"
- readable-stream "2 || 3"
-
-through2@^4.0.2:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764"
- integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==
- dependencies:
- readable-stream "3"
-
-through@^2.3.8:
- version "2.3.8"
- resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
- integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==
-
-time-stamp@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3"
- integrity sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=
-
-tmp@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14"
- integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==
- dependencies:
- rimraf "^3.0.0"
-
-to-regex-range@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
- integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
- dependencies:
- is-number "^7.0.0"
-
-tr46@~0.0.3:
- version "0.0.3"
- resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
- integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=
-
-tree-sitter-typescript@^0.20.5:
- version "0.20.5"
- resolved "https://registry.yarnpkg.com/tree-sitter-typescript/-/tree-sitter-typescript-0.20.5.tgz#29e30c052bcb06cb992ffd2d392e010b0e1768b3"
- integrity sha512-RzK/Pc6k4GiXvInIBlo8ZggekP6rODfW2P6KHFCTSUHENsw6ynh+iacFhfkJRa4MT8EIN2WHygFJ7076/+eHKg==
- dependencies:
- nan "^2.18.0"
- tree-sitter "^0.20.6"
-
-tree-sitter@^0.20.5, tree-sitter@^0.20.6:
- version "0.20.6"
- resolved "https://registry.yarnpkg.com/tree-sitter/-/tree-sitter-0.20.6.tgz#fec52e5d7cc6c583135756479f2440dd89b25cbe"
- integrity sha512-GxJodajVpfgb3UREzzIbtA1hyRnTxVbWVXrbC6sk4xTMH5ERMBJk9HJNq4c8jOJeUaIOmLcwg+t6mez/PDvGqg==
- dependencies:
- nan "^2.18.0"
- prebuild-install "^7.1.1"
-
-tslib@^2.0.0, tslib@^2.2.0, tslib@^2.6.2:
- version "2.6.3"
- resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0"
- integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==
-
-tunnel-agent@^0.6.0:
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
- integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
- dependencies:
- safe-buffer "^5.0.1"
-
-tunnel@0.0.6, tunnel@^0.0.6:
- version "0.0.6"
- resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c"
- integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==
-
-type-fest@^0.13.1:
- version "0.13.1"
- resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934"
- integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==
-
-typed-rest-client@^1.8.4:
- version "1.8.9"
- resolved "https://registry.yarnpkg.com/typed-rest-client/-/typed-rest-client-1.8.9.tgz#e560226bcadfe71b0fb5c416b587f8da3b8f92d8"
- integrity sha512-uSmjE38B80wjL85UFX3sTYEUlvZ1JgCRhsWj/fJ4rZ0FqDUFoIuodtiVeE+cUqiVTOKPdKrp/sdftD15MDek6g==
- dependencies:
- qs "^6.9.1"
- tunnel "0.0.6"
- underscore "^1.12.1"
-
-uc.micro@^1.0.1, uc.micro@^1.0.5:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac"
- integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==
-
-underscore@^1.12.1:
- version "1.13.6"
- resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.6.tgz#04786a1f589dc6c09f761fc5f45b89e935136441"
- integrity sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==
-
-undici-types@~5.26.4:
- version "5.26.5"
- resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
- integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
-
-universal-user-agent@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee"
- integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==
-
-universalify@^0.1.0:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
- integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
-
-universalify@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717"
- integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==
-
-url-join@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7"
- integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==
-
-util-deprecate@^1.0.1, util-deprecate@~1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
- integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
-
-uuid@^8.3.0:
- version "8.3.1"
- resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.1.tgz#2ba2e6ca000da60fce5a196954ab241131e05a31"
- integrity sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg==
-
-vinyl-file@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/vinyl-file/-/vinyl-file-3.0.0.tgz#b104d9e4409ffa325faadd520642d0a3b488b365"
- integrity sha1-sQTZ5ECf+jJfqt1SBkLQo7SIs2U=
- dependencies:
- graceful-fs "^4.1.2"
- pify "^2.3.0"
- strip-bom-buf "^1.0.0"
- strip-bom-stream "^2.0.0"
- vinyl "^2.0.1"
-
-vinyl@^2.0.1, vinyl@^2.1.0, vinyl@^2.2.0:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.1.tgz#23cfb8bbab5ece3803aa2c0a1eb28af7cbba1974"
- integrity sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==
- dependencies:
- clone "^2.1.1"
- clone-buffer "^1.0.0"
- clone-stats "^1.0.0"
- cloneable-readable "^1.0.0"
- remove-trailing-separator "^1.0.1"
- replace-ext "^1.0.0"
-
-vscode-gulp-watch@^5.0.3:
- version "5.0.3"
- resolved "https://registry.yarnpkg.com/vscode-gulp-watch/-/vscode-gulp-watch-5.0.3.tgz#1ca1c03581d43692ecb1fe0b9afd4256faeb701b"
- integrity sha512-MTUp2yLE9CshhkNSNV58EQNxQSeF8lIj3mkXZX9a1vAk+EQNM2PAYdPUDSd/P/08W3PMHGznEiZyfK7JAjLosg==
- dependencies:
- ansi-colors "4.1.1"
- anymatch "^3.1.1"
- chokidar "3.5.1"
- fancy-log "^1.3.3"
- glob-parent "^5.1.1"
- normalize-path "^3.0.0"
- object-assign "^4.1.1"
- plugin-error "1.0.1"
- readable-stream "^3.6.0"
- vinyl "^2.2.0"
- vinyl-file "^3.0.0"
-
-vscode-universal-bundler@^0.1.3:
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/vscode-universal-bundler/-/vscode-universal-bundler-0.1.3.tgz#bd223e61ca0ed1d8ebb1c023d5ad99aab92c3d35"
- integrity sha512-USXJqgD+ySROqgjl+KrGjlF7MvNnqsI6my1kUOsAXARmNqBjXk38w8g2BF6PEXVOYOQ+npRcTA7athXNU4Jjog==
- dependencies:
- "@electron/asar" "^3.2.7"
- "@malept/cross-spawn-promise" "^2.0.0"
- debug "^4.3.1"
- dir-compare "^4.2.0"
- fs-extra "^11.1.1"
- minimatch "^9.0.3"
- plist "^3.1.0"
-
-webidl-conversions@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
- integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=
-
-whatwg-url@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
- integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0=
- dependencies:
- tr46 "~0.0.3"
- webidl-conversions "^3.0.0"
-
-which@^2.0.1:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
- integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
- dependencies:
- isexe "^2.0.0"
-
-workerpool@^6.4.0:
- version "6.5.0"
- resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.5.0.tgz#f8474762c5e2f81646994aa113685f6c424a2416"
- integrity sha512-r64Ea3glXY2RVzMeNxB+4J+0YHAVzUdV4cM5nHi4BBC2LvnO1pWFAIYKYuGcPElbg1/7eEiaPtZ/jzCjIUuGBg==
-
-wrappy@1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
- integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
-
-xml2js@^0.4.19, xml2js@^0.4.23:
- version "0.4.23"
- resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66"
- integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==
- dependencies:
- sax ">=0.6.0"
- xmlbuilder "~11.0.0"
-
-xmlbuilder@^15.1.1:
- version "15.1.1"
- resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-15.1.1.tgz#9dcdce49eea66d8d10b42cae94a79c3c8d0c2ec5"
- integrity sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==
-
-xmlbuilder@^9.0.7:
- version "9.0.7"
- resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d"
- integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=
-
-xmlbuilder@~11.0.0:
- version "11.0.1"
- resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3"
- integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==
-
-xtend@~4.0.1:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
- integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
-
-yallist@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
- integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
-
-yauzl@^2.10.0, yauzl@^2.3.1:
- version "2.10.0"
- resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"
- integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=
- dependencies:
- buffer-crc32 "~0.2.3"
- fd-slicer "~1.1.0"
-
-yazl@^2.2.2:
- version "2.5.1"
- resolved "https://registry.yarnpkg.com/yazl/-/yazl-2.5.1.tgz#a3d65d3dd659a5b0937850e8609f22fffa2b5c35"
- integrity sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==
- dependencies:
- buffer-crc32 "~0.2.3"
-
-yocto-queue@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
- integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
diff --git a/cglicenses.json b/cglicenses.json
index 1919c9d293c..0b4e03e502b 100644
--- a/cglicenses.json
+++ b/cglicenses.json
@@ -1,7 +1,7 @@
// -----------------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------------
// This file overrides licenses only for OSS components which do not appear in `cgmanifest.json`.
-// i.e. for OSS components that are detected from `yarn.lock` or `Cargo.lock` files.
+// i.e. for OSS components that are detected from `package-lock.json` or `Cargo.lock` files.
//
// DO NOT EDIT THIS FILE UNLESS THE OSS TOOL INDICATES THAT YOU SHOULD.
//
@@ -241,33 +241,6 @@
"CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."
]
},
- {
- // Reason: The substack org has been deleted on GH
- "name": "mkdirp",
- "fullLicenseText": [
- "Copyright 2010 James Halliday (mail@substack.net)",
- "",
- "This project is free software released under the MIT/X11 license:",
- "",
- "Permission is hereby granted, free of charge, to any person obtaining a copy",
- "of this software and associated documentation files (the \"Software\"), to deal",
- "in the Software without restriction, including without limitation the rights",
- "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell",
- "copies of the Software, and to permit persons to whom the Software is",
- "furnished to do so, subject to the following conditions:",
- "",
- "The above copyright notice and this permission notice shall be included in",
- "all copies or substantial portions of the Software.",
- "",
- "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR",
- "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,",
- "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE",
- "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER",
- "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,",
- "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN",
- "THE SOFTWARE."
- ]
- },
{
// Reason: repo URI is wrong on crate, pending https://github.com/warp-tech/russh/pull/53
"name": "russh-cryptovec",
diff --git a/cgmanifest.json b/cgmanifest.json
index dcb4791c791..57fd8db5f45 100644
--- a/cgmanifest.json
+++ b/cgmanifest.json
@@ -6,7 +6,7 @@
"git": {
"name": "chromium",
"repositoryUrl": "https://chromium.googlesource.com/chromium/src",
- "commitHash": "7fa4f6e14e0707c0e604cf7c1da33566e78169ce"
+ "commitHash": "545591e4a0b85ce8937a0ce751bacdc0fe92f1ed"
}
},
"licenseDetail": [
@@ -40,7 +40,7 @@
"SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
],
"isOnlyProductionDependency": true,
- "version": "124.0.6367.243"
+ "version": "128.0.6613.186"
},
{
"component": {
@@ -48,7 +48,7 @@
"git": {
"name": "ffmpeg",
"repositoryUrl": "https://chromium.googlesource.com/chromium/third_party/ffmpeg",
- "commitHash": "52d8ef3799b2f16b66351dd0972bb0bcee1648ac"
+ "commitHash": "092f84b6141055bfab609b6b2666b724eee2e130"
}
},
"isOnlyProductionDependency": true,
@@ -516,11 +516,11 @@
"git": {
"name": "nodejs",
"repositoryUrl": "https://github.com/nodejs/node",
- "commitHash": "a407d1f0b3669cc82c755700f0d500fb27cc39ea"
+ "commitHash": "7eebd17fa2c1e48e4534f3a69560388fab2f2c07"
}
},
"isOnlyProductionDependency": true,
- "version": "20.15.1"
+ "version": "20.18.0"
},
{
"component": {
@@ -528,12 +528,12 @@
"git": {
"name": "electron",
"repositoryUrl": "https://github.com/electron/electron",
- "commitHash": "ff3d3e69443c1c8939c9ba2d10d40cb65f3ff278"
+ "commitHash": "db2050e9d24022b5d7d1bf4873e4725d75383a1f"
}
},
"isOnlyProductionDependency": true,
"license": "MIT",
- "version": "30.4.0"
+ "version": "32.2.1"
},
{
"component": {
diff --git a/cli/Cargo.toml b/cli/Cargo.toml
index 2274bae516d..bba6eb0bfc5 100644
--- a/cli/Cargo.toml
+++ b/cli/Cargo.toml
@@ -81,6 +81,7 @@ codegen-units = 1
[features]
default = []
+vsda = []
vscode-encrypt = []
# --- Start Positron ---
# Adding in config feature for https://github.com/posit-dev/positron/issues/4225
diff --git a/cli/ThirdPartyNotices.txt b/cli/ThirdPartyNotices.txt
index 4a58801fa12..4bbc90b30ee 100644
--- a/cli/ThirdPartyNotices.txt
+++ b/cli/ThirdPartyNotices.txt
@@ -3259,6 +3259,7 @@ Unless you explicitly state otherwise, any contribution intentionally submitted
[`cmac`]: ./cmac
[`hmac`]: ./hmac
[`pmac`]: ./pmac
+[`retail-mac`]: ./retail-mac
[//]: # (footnotes)
@@ -3271,6 +3272,7 @@ Unless you explicitly state otherwise, any contribution intentionally submitted
[CMAC]: https://en.wikipedia.org/wiki/One-key_MAC
[HMAC]: https://en.wikipedia.org/wiki/HMAC
[PMAC]: https://en.wikipedia.org/wiki/PMAC_(cryptography)
+[Retail MAC]: https://en.wikipedia.org/wiki/ISO/IEC_9797-1#MAC_algorithm_3
---------------------------------------------------------
---------------------------------------------------------
@@ -10707,7 +10709,33 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
zbus 3.15.2 - MIT
https://github.com/dbus2/zbus/
-LICENSE-MIT
+The MIT License (MIT)
+
+Copyright (c) 2024 Zeeshan Ali Khan & zbus contributors
+
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
---------------------------------------------------------
---------------------------------------------------------
@@ -10715,7 +10743,33 @@ LICENSE-MIT
zbus_macros 3.15.2 - MIT
https://github.com/dbus2/zbus/
-LICENSE-MIT
+The MIT License (MIT)
+
+Copyright (c) 2024 Zeeshan Ali Khan & zbus contributors
+
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
---------------------------------------------------------
---------------------------------------------------------
@@ -10723,7 +10777,33 @@ LICENSE-MIT
zbus_names 2.6.1 - MIT
https://github.com/dbus2/zbus/
-LICENSE-MIT
+The MIT License (MIT)
+
+Copyright (c) 2024 Zeeshan Ali Khan & zbus contributors
+
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
---------------------------------------------------------
---------------------------------------------------------
@@ -10816,7 +10896,33 @@ licences; see files named LICENSE.*.txt for details.
zvariant 3.15.2 - MIT
https://github.com/dbus2/zbus/
-LICENSE-MIT
+The MIT License (MIT)
+
+Copyright (c) 2024 Zeeshan Ali Khan & zbus contributors
+
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
---------------------------------------------------------
---------------------------------------------------------
@@ -10824,7 +10930,33 @@ LICENSE-MIT
zvariant_derive 3.15.2 - MIT
https://github.com/dbus2/zbus/
-LICENSE-MIT
+The MIT License (MIT)
+
+Copyright (c) 2024 Zeeshan Ali Khan & zbus contributors
+
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
---------------------------------------------------------
---------------------------------------------------------
@@ -10832,5 +10964,31 @@ LICENSE-MIT
zvariant_utils 1.0.1 - MIT
https://github.com/dbus2/zbus/
-LICENSE-MIT
+The MIT License (MIT)
+
+Copyright (c) 2024 Zeeshan Ali Khan & zbus contributors
+
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
---------------------------------------------------------
\ No newline at end of file
diff --git a/cli/build.rs b/cli/build.rs
index 16078e34044..64a05e88a04 100644
--- a/cli/build.rs
+++ b/cli/build.rs
@@ -133,7 +133,7 @@ fn apply_build_environment_variables() {
} else {
PathBuf::from_str(&v).unwrap()
};
- println!("cargo:warning=loading product.json from <{:?}>", path);
+ println!("cargo:warning=loading product.json from <{path:?}>");
apply_build_from_product_json(&path);
}
diff --git a/cli/src/auth.rs b/cli/src/auth.rs
index 2d9162c5483..9308fa3283b 100644
--- a/cli/src/auth.rs
+++ b/cli/src/auth.rs
@@ -93,10 +93,9 @@ impl AuthProvider {
pub fn get_default_scopes(&self) -> String {
match self {
- AuthProvider::Microsoft => format!(
- "{}/.default+offline_access+profile+openid",
- PROD_FIRST_PARTY_APP_ID
- ),
+ AuthProvider::Microsoft => {
+ format!("{PROD_FIRST_PARTY_APP_ID}/.default+offline_access+profile+openid")
+ }
AuthProvider::Github => "read:user+read:org".to_string(),
}
}
@@ -122,7 +121,7 @@ async fn get_github_user(
) -> Result {
client
.get(GH_USER_ENDPOINT)
- .header("Authorization", format!("token {}", access_token))
+ .header("Authorization", format!("token {access_token}"))
.header("User-Agent", get_default_user_agent())
.send()
.await
@@ -690,7 +689,7 @@ impl Auth {
}
let provider = prompt_options(
- format!("How would you like to log in to {}?", PRODUCT_NAME_LONG),
+ format!("How would you like to log in to {PRODUCT_NAME_LONG}?"),
&[AuthProvider::Microsoft, AuthProvider::Github],
)?;
@@ -723,7 +722,7 @@ impl Auth {
match &init_code_json.message {
Some(m) => self.log.result(m),
- None => self.log.result(&format!(
+ None => self.log.result(format!(
"To grant access to the server, please log into {} and use code {}",
init_code_json.verification_uri, init_code_json.user_code
)),
diff --git a/cli/src/bin/code/main.rs b/cli/src/bin/code/main.rs
index b104976b9ab..0e4809b78c7 100644
--- a/cli/src/bin/code/main.rs
+++ b/cli/src/bin/code/main.rs
@@ -153,7 +153,7 @@ fn print_and_exit(err: E) -> !
where
E: std::fmt::Display,
{
- log::emit(log::Level::Error, "", &format!("{}", err));
+ log::emit(log::Level::Error, "", &format!("{err}"));
std::process::exit(1);
}
diff --git a/cli/src/commands/args.rs b/cli/src/commands/args.rs
index 101f1eac29f..21efc1c6667 100644
--- a/cli/src/commands/args.rs
+++ b/cli/src/commands/args.rs
@@ -226,6 +226,9 @@ pub struct ServeWebArgs {
#[derive(Args, Debug, Clone)]
pub struct CommandShellArgs {
+ #[clap(flatten)]
+ pub server_args: BaseServerArgs,
+
/// Listen on a socket instead of stdin/stdout.
#[clap(long)]
pub on_socket: bool,
@@ -280,12 +283,12 @@ impl ExtensionSubcommand {
target.push("--show-versions".to_string());
}
if let Some(category) = &args.category {
- target.push(format!("--category={}", category));
+ target.push(format!("--category={category}"));
}
}
ExtensionSubcommand::Install(args) => {
for id in args.id_or_path.iter() {
- target.push(format!("--install-extension={}", id));
+ target.push(format!("--install-extension={id}"));
}
if args.pre_release {
target.push("--pre-release".to_string());
@@ -296,7 +299,7 @@ impl ExtensionSubcommand {
}
ExtensionSubcommand::Uninstall(args) => {
for id in args.id.iter() {
- target.push(format!("--uninstall-extension={}", id));
+ target.push(format!("--uninstall-extension={id}"));
}
}
ExtensionSubcommand::Update => {
@@ -436,11 +439,11 @@ impl EditorOptions {
target.push("--wait".to_string());
}
if let Some(locale) = &self.locale {
- target.push(format!("--locale={}", locale));
+ target.push(format!("--locale={locale}"));
}
if !self.enable_proposed_api.is_empty() {
for id in self.enable_proposed_api.iter() {
- target.push(format!("--enable-proposed-api={}", id));
+ target.push(format!("--enable-proposed-api={id}"));
}
}
self.code_options.add_code_args(target);
@@ -477,10 +480,10 @@ pub struct OutputFormatOptions {
impl DesktopCodeOptions {
pub fn add_code_args(&self, target: &mut Vec) {
if let Some(extensions_dir) = &self.extensions_dir {
- target.push(format!("--extensions-dir={}", extensions_dir));
+ target.push(format!("--extensions-dir={extensions_dir}"));
}
if let Some(user_data_dir) = &self.user_data_dir {
- target.push(format!("--user-data-dir={}", user_data_dir));
+ target.push(format!("--user-data-dir={user_data_dir}"));
}
}
}
@@ -519,13 +522,13 @@ impl GlobalOptions {
target.push("--verbose".to_string());
}
if let Some(log) = self.log {
- target.push(format!("--log={}", log));
+ target.push(format!("--log={log}"));
}
if self.disable_telemetry {
target.push("--disable-telemetry".to_string());
}
if let Some(telemetry_level) = &self.telemetry_level {
- target.push(format!("--telemetry-level={}", telemetry_level));
+ target.push(format!("--telemetry-level={telemetry_level}"));
}
}
}
@@ -575,16 +578,16 @@ impl EditorTroubleshooting {
target.push("--disable-extensions".to_string());
}
for id in self.disable_extension.iter() {
- target.push(format!("--disable-extension={}", id));
+ target.push(format!("--disable-extension={id}"));
}
if let Some(sync) = &self.sync {
- target.push(format!("--sync={}", sync));
+ target.push(format!("--sync={sync}"));
}
if let Some(port) = &self.inspect_extensions {
- target.push(format!("--inspect-extensions={}", port));
+ target.push(format!("--inspect-extensions={port}"));
}
if let Some(port) = &self.inspect_brk_extensions {
- target.push(format!("--inspect-brk-extensions={}", port));
+ target.push(format!("--inspect-brk-extensions={port}"));
}
if self.disable_gpu {
target.push("--disable-gpu".to_string());
@@ -638,6 +641,9 @@ pub struct ExistingTunnelArgs {
#[derive(Args, Debug, Clone, Default)]
pub struct TunnelServeArgs {
+ #[clap(flatten)]
+ pub server_args: BaseServerArgs,
+
/// Optional details to connect to an existing tunnel
#[clap(flatten, next_help_heading = Some("ADVANCED OPTIONS"))]
pub tunnel: ExistingTunnelArgs,
@@ -661,7 +667,10 @@ pub struct TunnelServeArgs {
/// If set, the user accepts the server license terms and the server will be started without a user prompt.
#[clap(long)]
pub accept_server_license_terms: bool,
+}
+#[derive(Args, Debug, Clone, Default)]
+pub struct BaseServerArgs {
/// Requests that extensions be preloaded and installed on connecting servers.
#[clap(long)]
pub install_extension: Vec,
@@ -675,8 +684,8 @@ pub struct TunnelServeArgs {
pub extensions_dir: Option,
}
-impl TunnelServeArgs {
- pub fn apply_to_server_args(&self, csa: &mut CodeServerArgs) {
+impl BaseServerArgs {
+ pub fn apply_to(&self, csa: &mut CodeServerArgs) {
csa.install_extensions
.extend_from_slice(&self.install_extension);
diff --git a/cli/src/commands/serve_web.rs b/cli/src/commands/serve_web.rs
index d8d2a49bb1a..eef4f331d10 100644
--- a/cli/src/commands/serve_web.rs
+++ b/cli/src/commands/serve_web.rs
@@ -15,7 +15,7 @@ use std::time::{Duration, Instant};
use hyper::service::{make_service_fn, service_fn};
use hyper::{Body, Request, Response, Server};
use tokio::io::{AsyncBufReadExt, BufReader};
-use tokio::pin;
+use tokio::{pin, time};
use crate::async_pipe::{
get_socket_name, get_socket_rw_stream, listen_socket_rw_stream, AsyncPipe,
@@ -50,7 +50,7 @@ const SERVER_IDLE_TIMEOUT_SECS: u64 = 60 * 60;
/// (should be large enough to basically never happen)
const SERVER_ACTIVE_TIMEOUT_SECS: u64 = SERVER_IDLE_TIMEOUT_SECS * 24 * 30 * 12;
/// How long to cache the "latest" version we get from the update service.
-const RELEASE_CACHE_SECS: u64 = 60 * 60;
+const RELEASE_CHECK_INTERVAL: u64 = 60 * 60;
/// Number of bytes for the secret keys. See workbench.ts for their usage.
const SECRET_KEY_BYTES: usize = 32;
@@ -86,7 +86,11 @@ pub async fn serve_web(ctx: CommandContext, mut args: ServeWebArgs) -> Result = ConnectionManager::new(&ctx, platform, args.clone());
+ let update_check_interval = 3600;
+ cm.clone()
+ .start_update_checker(Duration::from_secs(update_check_interval));
+
let key = get_server_key_half(&ctx.paths);
let make_svc = move || {
let ctx = HandleContext {
@@ -121,7 +125,7 @@ pub async fn serve_web(ctx: CommandContext, mut args: ServeWebArgs) -> Result Result) -> Response r,
Err(e) => {
error!(ctx.log, "error getting latest version: {}", e);
@@ -219,12 +223,9 @@ fn append_secret_headers(
let headers = res.headers_mut();
headers.append(
hyper::header::SET_COOKIE,
- format!(
- "{}={}{}; SameSite=Strict; Path=/",
- PATH_COOKIE_NAME, base_path, SECRET_KEY_MINT_PATH,
- )
- .parse()
- .unwrap(),
+ format!("{PATH_COOKIE_NAME}={base_path}{SECRET_KEY_MINT_PATH}; SameSite=Strict; Path=/",)
+ .parse()
+ .unwrap(),
);
headers.append(
hyper::header::SET_COOKIE,
@@ -441,14 +442,14 @@ mod response {
pub fn connection_err(err: hyper::Error) -> Response {
Response::builder()
.status(503)
- .body(Body::from(format!("Error connecting to server: {:?}", err)))
+ .body(Body::from(format!("Error connecting to server: {err:?}")))
.unwrap()
}
pub fn code_err(err: CodeError) -> Response {
Response::builder()
.status(500)
- .body(Body::from(format!("Error serving request: {}", err)))
+ .body(Body::from(format!("Error serving request: {err}")))
.unwrap()
}
@@ -538,21 +539,67 @@ impl ConnectionManager {
pub fn new(ctx: &CommandContext, platform: Platform, args: ServeWebArgs) -> Arc {
let base_path = normalize_base_path(args.server_base_path.as_deref().unwrap_or_default());
+ let cache = DownloadCache::new(ctx.paths.web_server_storage());
+ let target_kind = TargetKind::Web;
+
+ let quality = VSCODE_CLI_QUALITY.map_or(Quality::Stable, |q| match Quality::try_from(q) {
+ Ok(q) => q,
+ Err(_) => Quality::Stable,
+ });
+
+ let latest_version = tokio::sync::Mutex::new(cache.get().first().map(|latest_commit| {
+ (
+ Instant::now() - Duration::from_secs(RELEASE_CHECK_INTERVAL),
+ Release {
+ name: String::from("0.0.0"), // Version information not stored on cache
+ commit: latest_commit.clone(),
+ platform,
+ target: target_kind,
+ quality,
+ },
+ )
+ }));
+
Arc::new(Self {
platform,
args,
base_path,
log: ctx.log.clone(),
- cache: DownloadCache::new(ctx.paths.web_server_storage()),
+ cache,
update_service: UpdateService::new(
ctx.log.clone(),
Arc::new(ReqwestSimpleHttp::with_client(ctx.http.clone())),
),
state: ConnectionStateMap::default(),
- latest_version: tokio::sync::Mutex::default(),
+ latest_version,
})
}
+ // spawns a task that checks for updates every n seconds duration
+ pub fn start_update_checker(self: Arc, duration: Duration) {
+ tokio::spawn(async move {
+ let mut interval = time::interval(duration);
+ loop {
+ interval.tick().await;
+
+ if let Err(e) = self.get_latest_release().await {
+ warning!(self.log, "error getting latest version: {}", e);
+ }
+ }
+ });
+ }
+
+ // Returns the latest release from the cache, if one exists.
+ pub async fn get_release_from_cache(&self) -> Result {
+ let latest = self.latest_version.lock().await;
+ if let Some((_, release)) = &*latest {
+ return Ok(release.clone());
+ }
+
+ drop(latest);
+ self.get_latest_release().await
+ }
+
/// Gets a connection to a server version
pub async fn get_connection(
&self,
@@ -571,11 +618,7 @@ impl ConnectionManager {
pub async fn get_latest_release(&self) -> Result {
let mut latest = self.latest_version.lock().await;
let now = Instant::now();
- if let Some((checked_at, release)) = &*latest {
- if checked_at.elapsed() < Duration::from_secs(RELEASE_CACHE_SECS) {
- return Ok(release.clone());
- }
- }
+ let target_kind = TargetKind::Web;
let quality = VSCODE_CLI_QUALITY
.ok_or_else(|| CodeError::UpdatesNotConfigured("no configured quality"))
@@ -585,13 +628,14 @@ impl ConnectionManager {
let release = self
.update_service
- .get_latest_commit(self.platform, TargetKind::Web, quality)
+ .get_latest_commit(self.platform, target_kind, quality)
.await
.map_err(|e| CodeError::UpdateCheckFailed(e.to_string()));
// If the update service is unavailable and we have stale data, use that
- if let (Err(e), Some((_, previous))) = (&release, &*latest) {
+ if let (Err(e), Some((_, previous))) = (&release, latest.clone()) {
warning!(self.log, "error getting latest release, using stale: {}", e);
+ *latest = Some((now, previous.clone()));
return Ok(previous.clone());
}
diff --git a/cli/src/commands/tunnels.rs b/cli/src/commands/tunnels.rs
index 2d0014bca55..2a0b4c7ddce 100644
--- a/cli/src/commands/tunnels.rs
+++ b/cli/src/commands/tunnels.rs
@@ -155,6 +155,8 @@ pub async fn command_shell(ctx: CommandContext, args: CommandShellArgs) -> Resul
code_server_args: (&ctx.args).into(),
};
+ args.server_args.apply_to(&mut params.code_server_args);
+
let mut listener: Box =
match (args.on_port.first(), &args.on_host, args.on_socket) {
(_, _, true) => {
@@ -211,7 +213,7 @@ pub async fn command_shell(ctx: CommandContext, args: CommandShellArgs) -> Resul
match socket {
Ok((read, write)) => servers.push(serve_stream(read, write, params.clone())),
Err(e) => {
- error!(params.log, &format!("Error accepting connection: {}", e));
+ error!(params.log, &format!("Error accepting connection: {e}"));
return Ok(1);
}
}
@@ -277,7 +279,7 @@ pub async fn service(
],
)
.await?;
- ctx.log.result(format!("Service successfully installed! You can use `{} tunnel service log` to monitor it, and `{} tunnel service uninstall` to remove it.", APPLICATION_NAME, APPLICATION_NAME));
+ ctx.log.result(format!("Service successfully installed! You can use `{APPLICATION_NAME} tunnel service log` to monitor it, and `{APPLICATION_NAME} tunnel service uninstall` to remove it."));
}
TunnelServiceSubCommands::Uninstall => {
manager.unregister().await?;
@@ -440,7 +442,7 @@ pub async fn serve(ctx: CommandContext, gateway_args: TunnelServeArgs) -> Result
legal::require_consent(&paths, gateway_args.accept_server_license_terms)?;
let mut csa = (&args).into();
- gateway_args.apply_to_server_args(&mut csa);
+ gateway_args.server_args.apply_to(&mut csa);
let result = serve_with_csa(paths, log, gateway_args, csa, TUNNEL_CLI_LOCK_NAME).await;
drop(no_sleep);
@@ -587,7 +589,7 @@ async fn serve_with_csa(
Ok(SingletonConnection::Client(stream)) => {
debug!(log, "starting as client to singleton");
if gateway_args.name.is_some()
- || !gateway_args.install_extension.is_empty()
+ || !gateway_args.server_args.install_extension.is_empty()
|| gateway_args.tunnel.tunnel_id.is_some()
{
warning!(
diff --git a/cli/src/commands/update.rs b/cli/src/commands/update.rs
index 30c918f7e85..c53d9e30218 100644
--- a/cli/src/commands/update.rs
+++ b/cli/src/commands/update.rs
@@ -36,7 +36,7 @@ pub async fn update(ctx: CommandContext, args: StandaloneUpdateArgs) -> Result Result Result {
let vm = CodeVersionManager::new(ctx.log.clone(), &ctx.paths, platform);
let version = vm.get_preferred_version();
- println!("Current quality: {}", version);
+ println!("Current quality: {version}");
match vm.try_get_entrypoint(&version).await {
Some(p) => println!("Installation path: {}", p.display()),
None => println!("No existing installation found"),
diff --git a/cli/src/desktop/version_manager.rs b/cli/src/desktop/version_manager.rs
index f2a093b5c77..f9f307365c8 100644
--- a/cli/src/desktop/version_manager.rs
+++ b/cli/src/desktop/version_manager.rs
@@ -41,13 +41,13 @@ impl RequestedVersion {
pub fn get_command(&self) -> String {
match self {
RequestedVersion::Default => {
- format!("code version use {}", QUALITY)
+ format!("code version use {QUALITY}")
}
RequestedVersion::Commit(commit) => {
- format!("code version use {}/{}", QUALITY, commit)
+ format!("code version use {QUALITY}/{commit}")
}
RequestedVersion::Path(path) => {
- format!("code version use {}", path)
+ format!("code version use {path}")
}
}
}
@@ -57,12 +57,12 @@ impl std::fmt::Display for RequestedVersion {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self {
RequestedVersion::Default => {
- write!(f, "{}", QUALITY)
+ write!(f, "{QUALITY}")
}
RequestedVersion::Commit(commit) => {
- write!(f, "{}/{}", QUALITY, commit)
+ write!(f, "{QUALITY}/{commit}")
}
- RequestedVersion::Path(path) => write!(f, "{}", path),
+ RequestedVersion::Path(path) => write!(f, "{path}"),
}
}
}
@@ -222,17 +222,14 @@ impl CodeVersionManager {
/// Shows a nice UI prompt to users asking them if they want to install the
/// requested version.
pub fn prompt_to_install(version: &RequestedVersion) {
- println!(
- "No installation of {} {} was found.",
- QUALITYLESS_PRODUCT_NAME, version
- );
+ println!("No installation of {QUALITYLESS_PRODUCT_NAME} {version} was found.");
if let RequestedVersion::Default = version {
if let Some(uri) = PRODUCT_DOWNLOAD_URL {
// todo: on some platforms, we may be able to help automate installation. For example,
// we can unzip the app ourselves on macOS and on windows we can download and spawn the GUI installer
#[cfg(target_os = "linux")]
- println!("Install it from your system's package manager or {}, restart your shell, and try again.", uri);
+ println!("Install it from your system's package manager or {uri}, restart your shell, and try again.");
#[cfg(target_os = "macos")]
println!("Download and unzip it from {} and try again.", uri);
#[cfg(target_os = "windows")]
@@ -447,7 +444,7 @@ mod tests {
// developers can run this test and debug output manually; VS Code will not
// be installed in CI, so the test only makes sure it doesn't error out
let result = detect_installed_program(&log::Logger::test());
- println!("result: {:?}", result);
+ println!("result: {result:?}");
assert!(result.is_ok());
}
diff --git a/cli/src/download_cache.rs b/cli/src/download_cache.rs
index d3f05d2237f..87ca1924a79 100644
--- a/cli/src/download_cache.rs
+++ b/cli/src/download_cache.rs
@@ -20,6 +20,7 @@ const KEEP_LRU: usize = 5;
const STAGING_SUFFIX: &str = ".staging";
const RENAME_ATTEMPTS: u32 = 20;
const RENAME_DELAY: std::time::Duration = std::time::Duration::from_millis(200);
+const PERSISTED_STATE_FILE_NAME: &str = "lru.json";
#[derive(Clone)]
pub struct DownloadCache {
@@ -30,11 +31,16 @@ pub struct DownloadCache {
impl DownloadCache {
pub fn new(path: PathBuf) -> DownloadCache {
DownloadCache {
- state: PersistedState::new(path.join("lru.json")),
+ state: PersistedState::new(path.join(PERSISTED_STATE_FILE_NAME)),
path,
}
}
+ /// Gets the value stored on the state
+ pub fn get(&self) -> Vec {
+ self.state.load()
+ }
+
/// Gets the download cache path. Names of cache entries can be formed by
/// joining them to the path.
pub fn path(&self) -> &Path {
@@ -84,7 +90,7 @@ impl DownloadCache {
return Ok(target_dir);
}
- let temp_dir = self.path.join(format!("{}{}", name, STAGING_SUFFIX));
+ let temp_dir = self.path.join(format!("{name}{STAGING_SUFFIX}"));
let _ = remove_dir_all(&temp_dir).await; // cleanup any existing
create_dir_all(&temp_dir).map_err(|e| wrap(e, "error creating server directory"))?;
diff --git a/cli/src/log.rs b/cli/src/log.rs
index 1180f2c82c2..538827ed124 100644
--- a/cli/src/log.rs
+++ b/cli/src/log.rs
@@ -149,7 +149,7 @@ impl LogSink for StdioLogSink {
}
fn write_result(&self, message: &str) {
- println!("{}", message);
+ println!("{message}");
}
}
@@ -214,7 +214,7 @@ impl Logger {
}
pub fn span(&self, name: &str) -> SpanBuilder {
- self.tracer.span_builder(format!("serverlauncher/{}", name))
+ self.tracer.span_builder(format!("serverlauncher/{name}"))
}
pub fn tracer(&self) -> &Tracer {
@@ -237,8 +237,8 @@ impl Logger {
pub fn prefixed(&self, prefix: &str) -> Logger {
Logger {
prefix: Some(match &self.prefix {
- Some(p) => format!("{}{} ", p, prefix),
- None => format!("{} ", prefix),
+ Some(p) => format!("{p}{prefix} "),
+ None => format!("{prefix} "),
}),
..self.clone()
}
@@ -312,22 +312,19 @@ fn format(level: Level, prefix: &str, message: &str, use_colors: bool) -> String
if use_colors {
if let Some(c) = level.color_code() {
- return format!(
- "\x1b[2m[{}]\x1b[0m {}{}\x1b[0m {}{}\n",
- timestamp, c, name, prefix, message
- );
+ return format!("\x1b[2m[{timestamp}]\x1b[0m {c}{name}\x1b[0m {prefix}{message}\n");
}
}
- format!("[{}] {} {}{}\n", timestamp, name, prefix, message)
+ format!("[{timestamp}] {name} {prefix}{message}\n")
}
pub fn emit(level: Level, prefix: &str, message: &str) {
let line = format(level, prefix, message, *COLORS_ENABLED);
if level == Level::Trace && *COLORS_ENABLED {
- print!("\x1b[2m{}\x1b[0m", line);
+ print!("\x1b[2m{line}\x1b[0m");
} else {
- print!("{}", line);
+ print!("{line}");
}
}
diff --git a/cli/src/options.rs b/cli/src/options.rs
index e37a718a49a..7d152c0e1ec 100644
--- a/cli/src/options.rs
+++ b/cli/src/options.rs
@@ -70,8 +70,7 @@ impl TryFrom<&str> for Quality {
"insiders" | "insider" => Ok(Quality::Insiders),
"exploration" => Ok(Quality::Exploration),
_ => Err(format!(
- "Unknown quality: {}. Must be one of stable, insiders, or exploration.",
- s
+ "Unknown quality: {s}. Must be one of stable, insiders, or exploration."
)),
}
}
diff --git a/cli/src/rpc.rs b/cli/src/rpc.rs
index d48d777a5dc..911cb4ccac0 100644
--- a/cli/src/rpc.rs
+++ b/cli/src/rpc.rs
@@ -105,7 +105,7 @@ impl RpcMethodBuilder {
F: Fn(P, &C) -> Result + Send + Sync + 'static,
{
if self.methods.contains_key(method_name) {
- panic!("Method already registered: {}", method_name);
+ panic!("Method already registered: {method_name}");
}
let serial = self.serializer.clone();
@@ -121,7 +121,7 @@ impl RpcMethodBuilder {
id,
error: ResponseError {
code: 0,
- message: format!("{:?}", err),
+ message: format!("{err:?}"),
},
})
})
@@ -135,7 +135,7 @@ impl RpcMethodBuilder {
id,
error: ResponseError {
code: -1,
- message: format!("{:?}", err),
+ message: format!("{err:?}"),
},
})
}),
@@ -165,7 +165,7 @@ impl RpcMethodBuilder {
id,
error: ResponseError {
code: 0,
- message: format!("{:?}", err),
+ message: format!("{err:?}"),
},
})
}))
@@ -186,7 +186,7 @@ impl RpcMethodBuilder {
id,
error: ResponseError {
code: -1,
- message: format!("{:?}", err),
+ message: format!("{err:?}"),
},
})
}),
@@ -226,7 +226,7 @@ impl RpcMethodBuilder {
id,
error: ResponseError {
code: 0,
- message: format!("{:?}", err),
+ message: format!("{err:?}"),
},
})
}))
@@ -259,7 +259,7 @@ impl RpcMethodBuilder {
id,
error: ResponseError {
code: -1,
- message: format!("{:?}", err),
+ message: format!("{err:?}"),
},
})
}),
@@ -431,7 +431,7 @@ impl RpcDispatcher {
id,
error: ResponseError {
code: -1,
- message: format!("Method not found: {}", method_name),
+ message: format!("Method not found: {method_name}"),
},
})
})),
diff --git a/cli/src/self_update.rs b/cli/src/self_update.rs
index 936c6627ac0..45d661e5af9 100644
--- a/cli/src/self_update.rs
+++ b/cli/src/self_update.rs
@@ -122,7 +122,7 @@ fn validate_cli_is_good(exe_path: &Path) -> Result<(), AnyError> {
let o = new_std_command(exe_path)
.args(["--version"])
.output()
- .map_err(|e| CorruptDownload(format!("could not execute new binary, aborting: {}", e)))?;
+ .map_err(|e| CorruptDownload(format!("could not execute new binary, aborting: {e}")))?;
if !o.status.success() {
let msg = format!(
diff --git a/cli/src/state.rs b/cli/src/state.rs
index 534c1556763..5bc655ef2c1 100644
--- a/cli/src/state.rs
+++ b/cli/src/state.rs
@@ -155,17 +155,14 @@ impl LauncherPaths {
if let Err(e) = std::fs::rename(&old_dir, &new_dir) {
// no logger exists at this point in the lifecycle, so just log to stderr
- eprintln!(
- "Failed to migrate old CLI data directory, will create a new one ({})",
- e
- );
+ eprintln!("Failed to migrate old CLI data directory, will create a new one ({e})");
}
Self::new_for_path(new_dir)
}
pub fn new(root: Option) -> Result {
- let root = root.unwrap_or_else(|| format!("~/{}/cli", DEFAULT_DATA_PARENT_DIR));
+ let root = root.unwrap_or_else(|| format!("~/{DEFAULT_DATA_PARENT_DIR}/cli"));
let mut replaced = root.to_owned();
for token in HOME_DIR_ALTS {
if root.contains(token) {
diff --git a/cli/src/tunnels/code_server.rs b/cli/src/tunnels/code_server.rs
index 0579f8ef0dc..d7d91a83c55 100644
--- a/cli/src/tunnels/code_server.rs
+++ b/cli/src/tunnels/code_server.rs
@@ -91,21 +91,21 @@ impl CodeServerArgs {
pub fn command_arguments(&self) -> Vec {
let mut args = Vec::new();
if let Some(i) = &self.socket_path {
- args.push(format!("--socket-path={}", i));
+ args.push(format!("--socket-path={i}"));
} else {
if let Some(i) = &self.host {
- args.push(format!("--host={}", i));
+ args.push(format!("--host={i}"));
}
if let Some(i) = &self.port {
- args.push(format!("--port={}", i));
+ args.push(format!("--port={i}"));
}
}
if let Some(i) = &self.connection_token {
- args.push(format!("--connection-token={}", i));
+ args.push(format!("--connection-token={i}"));
}
if let Some(i) = &self.connection_token_file {
- args.push(format!("--connection-token-file={}", i));
+ args.push(format!("--connection-token-file={i}"));
}
if self.without_connection_token {
args.push(String::from("--without-connection-token"));
@@ -114,14 +114,14 @@ impl CodeServerArgs {
args.push(String::from("--accept-server-license-terms"));
}
if let Some(i) = self.telemetry_level {
- args.push(format!("--telemetry-level={}", i));
+ args.push(format!("--telemetry-level={i}"));
}
if let Some(i) = self.log {
- args.push(format!("--log={}", i));
+ args.push(format!("--log={i}"));
}
for extension in &self.install_extensions {
- args.push(format!("--install-extension={}", extension));
+ args.push(format!("--install-extension={extension}"));
}
if !&self.install_extensions.is_empty() {
if self.pre_release {
@@ -132,7 +132,7 @@ impl CodeServerArgs {
}
}
for extension in &self.uninstall_extensions {
- args.push(format!("--uninstall-extension={}", extension));
+ args.push(format!("--uninstall-extension={extension}"));
}
if self.update_extensions {
args.push(String::from("--update-extensions"));
@@ -143,14 +143,14 @@ impl CodeServerArgs {
args.push(String::from("--show-versions"));
}
if let Some(i) = &self.category {
- args.push(format!("--category={}", i));
+ args.push(format!("--category={i}"));
}
}
if let Some(d) = &self.server_data_dir {
- args.push(format!("--server-data-dir={}", d));
+ args.push(format!("--server-data-dir={d}"));
}
if let Some(d) = &self.extensions_dir {
- args.push(format!("--extensions-dir={}", d));
+ args.push(format!("--extensions-dir={d}"));
}
if self.start_server {
args.push(String::from("--start-server"));
@@ -487,7 +487,7 @@ impl<'a> ServerBuilder<'a> {
let mut cmd = self.get_base_command();
cmd.arg("--start-server")
.arg("--enable-remote-auto-shutdown")
- .arg(format!("--port={}", port));
+ .arg(format!("--port={port}"));
let child = self.spawn_server_process(cmd).await?;
let log_file = self.get_logfile()?;
@@ -503,7 +503,7 @@ impl<'a> ServerBuilder<'a> {
}
Ok(Err(s)) => {
origin.kill().await;
- return Err(CodeError::ServerUnexpectedExit(format!("{}", s)).into());
+ return Err(CodeError::ServerUnexpectedExit(format!("{s}")).into());
}
Ok(Ok(p)) => p,
};
@@ -577,7 +577,7 @@ impl<'a> ServerBuilder<'a> {
}
Ok(Err(s)) => {
origin.kill().await;
- return Err(CodeError::ServerUnexpectedExit(format!("{}", s)).into());
+ return Err(CodeError::ServerUnexpectedExit(format!("{s}")).into());
}
Ok(Ok(socket)) => socket,
};
@@ -616,7 +616,7 @@ impl<'a> ServerBuilder<'a> {
.stderr(std::process::Stdio::piped())
.stdout(std::process::Stdio::piped())
.spawn()
- .map_err(|e| CodeError::ServerUnexpectedExit(format!("{}", e)))?;
+ .map_err(|e| CodeError::ServerUnexpectedExit(format!("{e}")))?;
self.server_paths
.write_pid(child.id().expect("expected server to have pid"))?;
@@ -674,10 +674,10 @@ where
let write_line = |line: &str| -> std::io::Result<()> {
if let Some(mut f) = log_file.as_ref() {
f.write_all(line.as_bytes())?;
- f.write_all(&[b'\n'])?;
+ f.write_all(b"\n")?;
}
if write_directly {
- println!("{}", line);
+ println!("{line}");
} else {
trace!(plog, line);
}
@@ -732,7 +732,7 @@ where
}
fn get_extensions_flag(extension_id: &str) -> String {
- format!("--install-extension={}", extension_id)
+ format!("--install-extension={extension_id}")
}
/// A type that can be used to scan stdout from the VS Code server. Returns
@@ -829,7 +829,7 @@ pub fn print_listening(log: &log::Logger, tunnel_name: &str) {
}
}
- let message = &format!("\nOpen this link in your browser {}\n", addr);
+ let message = &format!("\nOpen this link in your browser {addr}\n");
log.result(message);
}
diff --git a/cli/src/tunnels/control_server.rs b/cli/src/tunnels/control_server.rs
index dfb5e381179..913efdce23e 100644
--- a/cli/src/tunnels/control_server.rs
+++ b/cli/src/tunnels/control_server.rs
@@ -566,7 +566,7 @@ async fn process_socket(
{
debug!(log, "closing socket reader: {}", e);
socket_tx
- .send(SocketSignal::CloseWith(CloseReason(format!("{}", e))))
+ .send(SocketSignal::CloseWith(CloseReason(format!("{e}"))))
.await
.ok();
}
@@ -1192,7 +1192,7 @@ async fn handle_acquire_cli(
let release = match params.commit_id {
Some(commit) => Release {
- name: format!("{} CLI", PRODUCT_NAME_LONG),
+ name: format!("{PRODUCT_NAME_LONG} CLI"),
commit,
platform: params.platform,
quality: params.quality,
diff --git a/cli/src/tunnels/dev_tunnels.rs b/cli/src/tunnels/dev_tunnels.rs
index a964b446384..0168ee60d89 100644
--- a/cli/src/tunnels/dev_tunnels.rs
+++ b/cli/src/tunnels/dev_tunnels.rs
@@ -65,7 +65,7 @@ mod tunnel_flags {
flags |= IS_WSL_INSTALLED;
}
- format!("_flag{}", flags)
+ format!("_flag{flags}")
}
}
@@ -282,8 +282,7 @@ fn get_host_token_from_tunnel(tunnel: &Tunnel) -> String {
fn is_valid_name(name: &str) -> Result<(), InvalidTunnelName> {
if name.len() > MAX_TUNNEL_NAME_LENGTH {
return Err(InvalidTunnelName(format!(
- "Names cannot be longer than {} characters. Please try a different name.",
- MAX_TUNNEL_NAME_LENGTH
+ "Names cannot be longer than {MAX_TUNNEL_NAME_LENGTH} characters. Please try a different name."
)));
}
@@ -617,7 +616,7 @@ impl DevTunnels {
Err(e) => {
return Err(AnyError::from(TunnelCreationFailed(
name.to_string(),
- format!("{:?}", e),
+ format!("{e:?}"),
)))
}
Ok(t) => break t,
@@ -789,7 +788,7 @@ impl DevTunnels {
let mut placeholder_name = Self::get_placeholder_name();
if !is_name_free(&placeholder_name) {
for i in 2.. {
- let fixed_name = format!("{}{}", placeholder_name, i);
+ let fixed_name = format!("{placeholder_name}{i}");
if is_name_free(&fixed_name) {
placeholder_name = fixed_name;
break;
diff --git a/cli/src/tunnels/nosleep_linux.rs b/cli/src/tunnels/nosleep_linux.rs
index 818910fee8e..0559c9abff8 100644
--- a/cli/src/tunnels/nosleep_linux.rs
+++ b/cli/src/tunnels/nosleep_linux.rs
@@ -64,8 +64,7 @@ impl SleepInhibitor {
return Err(wrap(
e2,
format!(
- "error requesting sleep inhibition, pminhibitor gave {}, screensaver gave",
- e1
+ "error requesting sleep inhibition, pminhibitor gave {e1}, screensaver gave"
),
)
.into());
diff --git a/cli/src/tunnels/paths.rs b/cli/src/tunnels/paths.rs
index a0cd43cd83c..3d7d718a3cd 100644
--- a/cli/src/tunnels/paths.rs
+++ b/cli/src/tunnels/paths.rs
@@ -64,7 +64,7 @@ impl ServerPaths {
// VS Code Server pid
pub fn write_pid(&self, pid: u32) -> Result<(), WrappedError> {
- write(&self.pidfile, format!("{}", pid)).map_err(|e| {
+ write(&self.pidfile, format!("{pid}")).map_err(|e| {
wrap(
e,
format!("error writing process id into {}", self.pidfile.display()),
@@ -155,5 +155,5 @@ pub fn get_all_servers(lp: &LauncherPaths) -> Vec {
}
pub fn get_server_folder_name(quality: Quality, commit: &str) -> String {
- format!("{}-{}", quality, commit)
+ format!("{quality}-{commit}")
}
diff --git a/cli/src/tunnels/service.rs b/cli/src/tunnels/service.rs
index dba68f3b614..66bdf7a8e63 100644
--- a/cli/src/tunnels/service.rs
+++ b/cli/src/tunnels/service.rs
@@ -85,7 +85,7 @@ pub(crate) async fn tail_log_file(log_file: &Path) -> Result<(), AnyError> {
let mut rx = tailf(file, 20);
while let Some(line) = rx.recv().await {
match line {
- TailEvent::Line(l) => print!("{}", l),
+ TailEvent::Line(l) => print!("{l}"),
TailEvent::Reset => println!("== Tunnel service restarted =="),
TailEvent::Err(e) => return Err(wrap(e, "error reading log file").into()),
}
diff --git a/cli/src/tunnels/service_linux.rs b/cli/src/tunnels/service_linux.rs
index 80599ba3c32..0a3e2df6ea2 100644
--- a/cli/src/tunnels/service_linux.rs
+++ b/cli/src/tunnels/service_linux.rs
@@ -62,7 +62,7 @@ impl SystemdService {
}
fn service_name_string() -> String {
- format!("{}-tunnel.service", APPLICATION_NAME)
+ format!("{APPLICATION_NAME}-tunnel.service")
}
}
diff --git a/cli/src/tunnels/shutdown_signal.rs b/cli/src/tunnels/shutdown_signal.rs
index 9914b33bb92..1193426abd1 100644
--- a/cli/src/tunnels/shutdown_signal.rs
+++ b/cli/src/tunnels/shutdown_signal.rs
@@ -28,7 +28,7 @@ impl fmt::Display for ShutdownSignal {
match self {
ShutdownSignal::CtrlC => write!(f, "Ctrl-C received"),
ShutdownSignal::ParentProcessKilled(p) => {
- write!(f, "Parent process {} no longer exists", p)
+ write!(f, "Parent process {p} no longer exists")
}
ShutdownSignal::ExeUninstalled => {
write!(f, "Executable no longer exists")
diff --git a/cli/src/tunnels/singleton_server.rs b/cli/src/tunnels/singleton_server.rs
index 6189c06a493..7fbd00d04d3 100644
--- a/cli/src/tunnels/singleton_server.rs
+++ b/cli/src/tunnels/singleton_server.rs
@@ -239,7 +239,8 @@ impl BroadcastLogSink {
fn replay_and_subscribe(
&self,
- ) -> ConcatReceivable, mpsc::UnboundedReceiver>, broadcast::Receiver>> {
+ ) -> ConcatReceivable, mpsc::UnboundedReceiver>, broadcast::Receiver>>
+ {
let (log_replay_tx, log_replay_rx) = mpsc::unbounded_channel();
for log in self.recent.lock().unwrap().iter() {
diff --git a/cli/src/util/command.rs b/cli/src/util/command.rs
index fb9fb4f91d5..19c17b749b2 100644
--- a/cli/src/util/command.rs
+++ b/cli/src/util/command.rs
@@ -146,7 +146,7 @@ pub async fn kill_tree(process_id: u32) -> Result<(), CodeError> {
.stdout(Stdio::piped())
.spawn()
.map_err(|e| CodeError::CommandFailed {
- command: format!("pgrep -P {}", parent_id),
+ command: format!("pgrep -P {parent_id}"),
code: -1,
output: e.to_string(),
})?;
diff --git a/cli/src/util/errors.rs b/cli/src/util/errors.rs
index 67519d5437e..b7ed029bb98 100644
--- a/cli/src/util/errors.rs
+++ b/cli/src/util/errors.rs
@@ -41,7 +41,7 @@ impl From for WrappedError {
"error requesting {}",
e.url().map_or("", |u| u.as_str())
),
- original: format!("{}", e),
+ original: format!("{e}"),
}
}
}
@@ -53,7 +53,7 @@ where
{
WrappedError {
message: message.into(),
- original: format!("{:?}", original),
+ original: format!("{original:?}"),
}
}
@@ -64,7 +64,7 @@ where
{
WrappedError {
message: message.into(),
- original: format!("{}", original),
+ original: format!("{original}"),
}
}
@@ -93,10 +93,7 @@ impl StatusError {
let body = res.text().await.map_err(|e| {
wrap(
e,
- format!(
- "failed to read response body on {} code from {}",
- status_code, url
- ),
+ format!("failed to read response body on {status_code} code from {url}"),
)
})?;
@@ -290,7 +287,7 @@ pub struct CannotForwardControlPort();
impl std::fmt::Display for CannotForwardControlPort {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
- write!(f, "Cannot forward or unforward port {}.", CONTROL_PORT)
+ write!(f, "Cannot forward or unforward port {CONTROL_PORT}.")
}
}
@@ -308,7 +305,7 @@ pub struct ServiceAlreadyRegistered();
impl std::fmt::Display for ServiceAlreadyRegistered {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
- write!(f, "Already registered the service. Run `{} tunnel service uninstall` to unregister it first", APPLICATION_NAME)
+ write!(f, "Already registered the service. Run `{APPLICATION_NAME} tunnel service uninstall` to unregister it first")
}
}
@@ -434,7 +431,7 @@ impl Display for DbusConnectFailedError {
str.push_str(&self.0);
str.push('\n');
- write!(f, "{}", str)
+ write!(f, "{str}")
}
}
diff --git a/cli/src/util/io.rs b/cli/src/util/io.rs
index 93a7efbfdd9..c5816ae55ad 100644
--- a/cli/src/util/io.rs
+++ b/cli/src/util/io.rs
@@ -313,7 +313,7 @@ mod tests {
let base_line = "Elit ipsum cillum ex cillum. Adipisicing consequat cupidatat do proident ut in sunt Lorem ipsum tempor. Eiusmod ipsum Lorem labore exercitation sunt pariatur excepteur fugiat cillum velit cillum enim. Nisi Lorem cupidatat ad enim velit officia eiusmod esse tempor aliquip. Deserunt pariatur tempor in duis culpa esse sit nulla irure ullamco ipsum voluptate non laboris. Occaecat officia nulla officia mollit do aliquip reprehenderit ad incididunt.";
for i in 0..100 {
let line = format!("{}: {}", i, &base_line[..rng.gen_range(0..base_line.len())]);
- writeln!(&mut read_file, "{}", line).unwrap();
+ writeln!(&mut read_file, "{line}").unwrap();
written.push(line);
}
write!(&mut read_file, "partial line").unwrap();
diff --git a/cli/src/util/prereqs.rs b/cli/src/util/prereqs.rs
index 0f49ab20887..e0fba272fcf 100644
--- a/cli/src/util/prereqs.rs
+++ b/cli/src/util/prereqs.rs
@@ -121,7 +121,7 @@ impl PreReqChecker {
let bullets = errors
.iter()
- .map(|e| format!(" - {}", e))
+ .map(|e| format!(" - {e}"))
.collect::>()
.join("\n");
@@ -142,8 +142,7 @@ async fn check_musl_interpreter() -> Result<(), String> {
if fs::metadata(MUSL_PATH).await.is_err() {
return Err(format!(
- "find {}, which is required to run the {} in musl environments",
- MUSL_PATH, QUALITYLESS_SERVER_NAME
+ "find {MUSL_PATH}, which is required to run the {QUALITYLESS_SERVER_NAME} in musl environments"
));
}
@@ -231,8 +230,7 @@ async fn check_glibcxx_version() -> Result {
Some(path) => match fs::read(&path).await {
Ok(contents) => check_for_sufficient_glibcxx_versions(contents),
Err(e) => Err(format!(
- "validate GLIBCXX version for GNU environments, but could not: {}",
- e
+ "validate GLIBCXX version for GNU environments, but could not: {e}"
)),
},
None => Err("find libstdc++.so or ldconfig for GNU environments".to_owned()),
diff --git a/cli/src/util/zipper.rs b/cli/src/util/zipper.rs
index 5521fa42c54..f7b7ab9fe5a 100644
--- a/cli/src/util/zipper.rs
+++ b/cli/src/util/zipper.rs
@@ -60,7 +60,7 @@ where
}
let mut file = archive
.by_index(i)
- .map_err(|e| wrap(e, format!("could not open zip entry {}", i)))?;
+ .map_err(|e| wrap(e, format!("could not open zip entry {i}")))?;
let outpath: PathBuf = match file.enclosed_name() {
Some(path) => {
diff --git a/eslint.config.js b/eslint.config.js
new file mode 100644
index 00000000000..abe14b9038e
--- /dev/null
+++ b/eslint.config.js
@@ -0,0 +1,1425 @@
+/*---------------------------------------------------------------------------------------------
+ * 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 fs from 'fs';
+import path from 'path';
+import tseslint from 'typescript-eslint';
+import { fileURLToPath } from 'url';
+
+import stylisticTs from '@stylistic/eslint-plugin-ts';
+import pluginLocal from 'eslint-plugin-local';
+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')
+ .toString()
+ .split(/\r\n|\n/)
+ .filter(line => line && !line.startsWith('#'));
+
+export default tseslint.config(
+ // Global ignores
+ {
+ ignores,
+ },
+ // All files (JS and TS)
+ {
+ languageOptions: {
+ parser: tseslint.parser,
+ },
+ plugins: {
+ 'local': pluginLocal,
+ 'header': pluginHeader,
+ },
+ rules: {
+ 'constructor-super': 'warn',
+ 'curly': 'warn',
+ 'eqeqeq': 'warn',
+ 'prefer-const': [
+ 'warn',
+ {
+ 'destructuring': 'all'
+ }
+ ],
+ 'no-buffer-constructor': 'warn',
+ 'no-caller': 'warn',
+ 'no-case-declarations': 'warn',
+ 'no-debugger': 'warn',
+ 'no-duplicate-case': 'warn',
+ 'no-duplicate-imports': 'warn',
+ 'no-eval': 'warn',
+ 'no-async-promise-executor': 'warn',
+ 'no-extra-semi': 'warn',
+ 'no-new-wrappers': 'warn',
+ 'no-redeclare': 'off',
+ 'no-sparse-arrays': 'warn',
+ 'no-throw-literal': 'warn',
+ 'no-unsafe-finally': 'warn',
+ 'no-unused-labels': 'warn',
+ 'no-misleading-character-class': 'warn',
+ 'no-restricted-globals': [
+ 'warn',
+ 'name',
+ 'length',
+ 'event',
+ 'closed',
+ 'external',
+ 'status',
+ 'origin',
+ 'orientation',
+ 'context'
+ ], // non-complete list of globals that are easy to access unintentionally
+ 'no-var': 'warn',
+ 'semi': 'off',
+ 'local/code-translation-remind': 'warn',
+ 'local/code-no-native-private': 'warn',
+ 'local/code-parameter-properties-must-have-explicit-accessibility': 'warn',
+ 'local/code-no-nls-in-standalone-editor': 'warn',
+ 'local/code-no-potentially-unsafe-disposables': 'warn',
+ 'local/code-no-dangerous-type-assertions': 'warn',
+ 'local/code-no-standalone-editor': 'warn',
+ 'local/code-no-unexternalized-strings': 'warn',
+ 'local/code-must-use-super-dispose': 'warn',
+ 'local/code-declare-service-brand': 'warn',
+ 'local/code-layering': [
+ 'warn',
+ {
+ 'common': [],
+ 'node': [
+ 'common'
+ ],
+ 'browser': [
+ 'common'
+ ],
+ 'electron-sandbox': [
+ 'common',
+ 'browser'
+ ],
+ 'electron-utility': [
+ 'common',
+ 'node'
+ ],
+ 'electron-main': [
+ 'common',
+ 'node',
+ 'electron-utility'
+ ]
+ }
+ ],
+ 'header/header': [
+ 2,
+ 'block',
+ [
+ {
+ 'pattern': '-{93}\r?\n [*] {2}((Copyright [(]c[)] Microsoft Corporation. All rights reserved.\r?\n [*] {2}Licensed under the MIT License. See License.txt in the project root for license information.)|(Copyright [(][cC]{1}[)]\\s?(20\\d{2})?(-20\\d{2})? Posit Software, PBC\\.( All rights reserved\\.)?\r?\n [*] {2}Licensed under the Elastic License 2\\.0\\. See LICENSE\\.txt for license information\\.))\r?\n [*]-{92}'
+ }
+ ]
+ ],
+ },
+ },
+ // TS
+ {
+ files: [
+ '**/*.ts',
+ ],
+ languageOptions: {
+ parser: tseslint.parser,
+ },
+ plugins: {
+ '@stylistic/ts': stylisticTs,
+ '@typescript-eslint': tseslint.plugin,
+ 'local': pluginLocal,
+ 'jsdoc': pluginJsdoc,
+ },
+ rules: {
+ '@stylistic/ts/semi': 'warn',
+ '@stylistic/ts/member-delimiter-style': 'warn',
+ 'local/code-no-unused-expressions': [
+ 'warn',
+ {
+ 'allowTernary': true
+ }
+ ],
+ 'jsdoc/no-types': 'warn',
+ 'local/code-no-static-self-ref': 'warn'
+ }
+ },
+ // vscode TS
+ {
+ files: [
+ 'src/**/*.ts',
+ ],
+ languageOptions: {
+ parser: tseslint.parser,
+ },
+ plugins: {
+ '@typescript-eslint': tseslint.plugin,
+ },
+ rules: {
+ '@typescript-eslint/naming-convention': [
+ 'warn',
+ {
+ 'selector': 'class',
+ 'format': [
+ 'PascalCase'
+ ]
+ }
+ ]
+ }
+ },
+ // Tests
+ {
+ files: [
+ '**/*.test.ts'
+ ],
+ languageOptions: {
+ parser: tseslint.parser,
+ },
+ plugins: {
+ 'local': pluginLocal,
+ },
+ rules: {
+ 'local/code-must-use-super-dispose': 'off',
+ 'local/code-no-test-only': 'error',
+ 'local/code-no-test-async-suite': 'warn',
+ 'local/code-no-unexternalized-strings': 'off',
+ 'local/code-must-use-result': [
+ 'warn',
+ [
+ {
+ 'message': 'Expression must be awaited',
+ 'functions': [
+ 'assertSnapshot',
+ 'assertHeap'
+ ]
+ }
+ ]
+ ]
+ }
+ },
+ // vscode tests specific rules
+ {
+ files: [
+ 'src/vs/**/*.test.ts'
+ ],
+ languageOptions: {
+ parser: tseslint.parser,
+ },
+ plugins: {
+ 'local': pluginLocal,
+ },
+ rules: {
+ 'local/code-ensure-no-disposables-leak-in-test': [
+ 'warn',
+ {
+ // Files should (only) be removed from the list they adopt the leak detector
+ 'exclude': [
+ 'src/vs/editor/contrib/codeAction/test/browser/codeActionModel.test.ts',
+ 'src/vs/platform/configuration/test/common/configuration.test.ts',
+ 'src/vs/platform/opener/test/common/opener.test.ts',
+ 'src/vs/platform/registry/test/common/platform.test.ts',
+ 'src/vs/platform/workspace/test/common/workspace.test.ts',
+ 'src/vs/platform/workspaces/test/electron-main/workspaces.test.ts',
+ 'src/vs/workbench/api/test/browser/mainThreadConfiguration.test.ts',
+ 'src/vs/workbench/api/test/node/extHostTunnelService.test.ts',
+ 'src/vs/workbench/contrib/bulkEdit/test/browser/bulkCellEdits.test.ts',
+ 'src/vs/workbench/contrib/chat/test/common/chatWordCounter.test.ts',
+ 'src/vs/workbench/contrib/editSessions/test/browser/editSessions.test.ts',
+ 'src/vs/workbench/contrib/extensions/test/common/extensionQuery.test.ts',
+ 'src/vs/workbench/contrib/notebook/test/browser/notebookExecutionService.test.ts',
+ 'src/vs/workbench/contrib/notebook/test/browser/notebookExecutionStateService.test.ts',
+ 'src/vs/workbench/contrib/tasks/test/common/problemMatcher.test.ts',
+ 'src/vs/workbench/contrib/tasks/test/common/taskConfiguration.test.ts',
+ 'src/vs/workbench/services/commands/test/common/commandService.test.ts',
+ 'src/vs/workbench/services/userActivity/test/browser/domActivityTracker.test.ts',
+ 'src/vs/workbench/test/browser/quickAccess.test.ts'
+ ]
+ }
+ ]
+ }
+ },
+ // vscode API
+ {
+ files: [
+ '**/vscode.d.ts',
+ '**/vscode.proposed.*.d.ts'
+ ],
+ languageOptions: {
+ parser: tseslint.parser,
+ },
+ plugins: {
+ 'local': pluginLocal,
+ },
+ rules: {
+ 'local/vscode-dts-create-func': 'warn',
+ 'local/vscode-dts-literal-or-types': 'warn',
+ 'local/vscode-dts-string-type-literals': 'warn',
+ 'local/vscode-dts-interface-naming': 'warn',
+ 'local/vscode-dts-cancellation': 'warn',
+ 'local/vscode-dts-use-thenable': 'warn',
+ 'local/vscode-dts-region-comments': 'warn',
+ 'local/vscode-dts-vscode-in-comments': 'warn',
+ 'local/vscode-dts-provider-naming': [
+ 'warn',
+ {
+ 'allowed': [
+ 'FileSystemProvider',
+ 'TreeDataProvider',
+ 'TestProvider',
+ 'CustomEditorProvider',
+ 'CustomReadonlyEditorProvider',
+ 'TerminalLinkProvider',
+ 'AuthenticationProvider',
+ 'NotebookContentProvider'
+ ]
+ }
+ ],
+ 'local/vscode-dts-event-naming': [
+ 'warn',
+ {
+ 'allowed': [
+ 'onCancellationRequested',
+ 'event'
+ ],
+ 'verbs': [
+ 'accept',
+ 'change',
+ 'close',
+ 'collapse',
+ 'create',
+ 'delete',
+ 'discover',
+ 'dispose',
+ 'drop',
+ 'edit',
+ 'end',
+ 'execute',
+ 'expand',
+ 'grant',
+ 'hide',
+ 'invalidate',
+ 'open',
+ 'override',
+ 'perform',
+ 'receive',
+ 'register',
+ 'remove',
+ 'rename',
+ 'save',
+ 'send',
+ 'start',
+ 'terminate',
+ 'trigger',
+ 'unregister',
+ 'write'
+ ]
+ }
+ ]
+ }
+ },
+ // vscode.d.ts
+ {
+ files: [
+ '**/vscode.d.ts'
+ ],
+ languageOptions: {
+ parser: tseslint.parser,
+ },
+ rules: {
+ 'jsdoc/tag-lines': 'off',
+ 'jsdoc/valid-types': 'off',
+ 'jsdoc/no-multi-asterisks': [
+ 'warn',
+ {
+ 'allowWhitespace': true
+ }
+ ],
+ 'jsdoc/require-jsdoc': [
+ 'warn',
+ {
+ 'enableFixer': false,
+ 'contexts': [
+ 'TSInterfaceDeclaration',
+ 'TSPropertySignature',
+ 'TSMethodSignature',
+ 'TSDeclareFunction',
+ 'ClassDeclaration',
+ 'MethodDefinition',
+ 'PropertyDeclaration',
+ 'TSEnumDeclaration',
+ 'TSEnumMember',
+ 'ExportNamedDeclaration'
+ ]
+ }
+ ],
+ 'jsdoc/check-param-names': [
+ 'warn',
+ {
+ 'enableFixer': false,
+ 'checkDestructured': false
+ }
+ ],
+ 'jsdoc/require-returns': 'warn'
+ }
+ },
+ // common/browser layer
+ {
+ files: [
+ 'src/**/{common,browser}/**/*.ts'
+ ],
+ languageOptions: {
+ parser: tseslint.parser,
+ },
+ plugins: {
+ 'local': pluginLocal,
+ },
+ rules: {
+ 'local/code-amd-node-module': 'warn'
+ }
+ },
+ // node/electron layer
+ {
+ files: [
+ 'src/*.ts',
+ 'src/**/{node,electron-main,electron-utility}/**/*.ts'
+ ],
+ languageOptions: {
+ parser: tseslint.parser,
+ },
+ plugins: {
+ 'local': pluginLocal,
+ },
+ rules: {
+ 'no-restricted-globals': [
+ 'warn',
+ 'name',
+ 'length',
+ 'event',
+ 'closed',
+ 'external',
+ 'status',
+ 'origin',
+ 'orientation',
+ 'context',
+ // Below are globals that are unsupported in ESM
+ '__dirname',
+ '__filename',
+ 'require'
+ ]
+ }
+ },
+ // browser/electron-sandbox layer
+ {
+ files: [
+ 'src/**/{browser,electron-sandbox}/**/*.ts'
+ ],
+ languageOptions: {
+ parser: tseslint.parser,
+ },
+ plugins: {
+ 'local': pluginLocal,
+ },
+ rules: {
+ 'local/code-no-global-document-listener': 'warn',
+ 'no-restricted-syntax': [
+ 'warn',
+ {
+ 'selector': `BinaryExpression[operator='instanceof'][right.name='MouseEvent']`,
+ 'message': 'Use DOM.isMouseEvent() to support multi-window scenarios.'
+ },
+ {
+ 'selector': `BinaryExpression[operator='instanceof'][right.name=/^HTML\\w+/]`,
+ 'message': 'Use DOM.isHTMLElement() and related methods to support multi-window scenarios.'
+ },
+ {
+ 'selector': `BinaryExpression[operator='instanceof'][right.name=/^SVG\\w+/]`,
+ 'message': 'Use DOM.isSVGElement() and related methods to support multi-window scenarios.'
+ },
+ {
+ 'selector': `BinaryExpression[operator='instanceof'][right.name='KeyboardEvent']`,
+ 'message': 'Use DOM.isKeyboardEvent() to support multi-window scenarios.'
+ },
+ {
+ 'selector': `BinaryExpression[operator='instanceof'][right.name='PointerEvent']`,
+ 'message': 'Use DOM.isPointerEvent() to support multi-window scenarios.'
+ },
+ {
+ 'selector': `BinaryExpression[operator='instanceof'][right.name='DragEvent']`,
+ 'message': 'Use DOM.isDragEvent() to support multi-window scenarios.'
+ },
+ {
+ 'selector': `MemberExpression[object.name='document'][property.name='activeElement']`,
+ 'message': 'Use .document.activeElement to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'selector': `MemberExpression[object.name='document'][property.name='contains']`,
+ 'message': 'Use .document.contains to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'selector': `MemberExpression[object.name='document'][property.name='styleSheets']`,
+ 'message': 'Use .document.styleSheets to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'selector': `MemberExpression[object.name='document'][property.name='fullscreenElement']`,
+ 'message': 'Use .document.fullscreenElement to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'selector': `MemberExpression[object.name='document'][property.name='body']`,
+ 'message': 'Use .document.body to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'selector': `MemberExpression[object.name='document'][property.name='addEventListener']`,
+ 'message': 'Use .document.addEventListener to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'selector': `MemberExpression[object.name='document'][property.name='removeEventListener']`,
+ 'message': 'Use .document.removeEventListener to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'selector': `MemberExpression[object.name='document'][property.name='hasFocus']`,
+ 'message': 'Use .document.hasFocus to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'selector': `MemberExpression[object.name='document'][property.name='head']`,
+ 'message': 'Use .document.head to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'selector': `MemberExpression[object.name='document'][property.name='exitFullscreen']`,
+ 'message': 'Use .document.exitFullscreen to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'selector': `MemberExpression[object.name='document'][property.name='getElementById']`,
+ 'message': 'Use .document.getElementById to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'selector': `MemberExpression[object.name='document'][property.name='getElementsByClassName']`,
+ 'message': 'Use .document.getElementsByClassName to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'selector': `MemberExpression[object.name='document'][property.name='getElementsByName']`,
+ 'message': 'Use .document.getElementsByName to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'selector': `MemberExpression[object.name='document'][property.name='getElementsByTagName']`,
+ 'message': 'Use .document.getElementsByTagName to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'selector': `MemberExpression[object.name='document'][property.name='getElementsByTagNameNS']`,
+ 'message': 'Use .document.getElementsByTagNameNS to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'selector': `MemberExpression[object.name='document'][property.name='getSelection']`,
+ 'message': 'Use .document.getSelection to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'selector': `MemberExpression[object.name='document'][property.name='open']`,
+ 'message': 'Use .document.open to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'selector': `MemberExpression[object.name='document'][property.name='close']`,
+ 'message': 'Use .document.close to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'selector': `MemberExpression[object.name='document'][property.name='documentElement']`,
+ 'message': 'Use .document.documentElement to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'selector': `MemberExpression[object.name='document'][property.name='visibilityState']`,
+ 'message': 'Use .document.visibilityState to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'selector': `MemberExpression[object.name='document'][property.name='querySelector']`,
+ 'message': 'Use .document.querySelector to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'selector': `MemberExpression[object.name='document'][property.name='querySelectorAll']`,
+ 'message': 'Use .document.querySelectorAll to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'selector': `MemberExpression[object.name='document'][property.name='elementFromPoint']`,
+ 'message': 'Use .document.elementFromPoint to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'selector': `MemberExpression[object.name='document'][property.name='elementsFromPoint']`,
+ 'message': 'Use .document.elementsFromPoint to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'selector': `MemberExpression[object.name='document'][property.name='onkeydown']`,
+ 'message': 'Use .document.onkeydown to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'selector': `MemberExpression[object.name='document'][property.name='onkeyup']`,
+ 'message': 'Use .document.onkeyup to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'selector': `MemberExpression[object.name='document'][property.name='onmousedown']`,
+ 'message': 'Use .document.onmousedown to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'selector': `MemberExpression[object.name='document'][property.name='onmouseup']`,
+ 'message': 'Use .document.onmouseup to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'selector': `MemberExpression[object.name='document'][property.name='execCommand']`,
+ 'message': 'Use .document.execCommand to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ }
+ ],
+ 'no-restricted-globals': [
+ 'warn',
+ 'name',
+ 'length',
+ 'event',
+ 'closed',
+ 'external',
+ 'status',
+ 'origin',
+ 'orientation',
+ 'context',
+ {
+ 'name': 'setInterval',
+ 'message': 'Use .setInterval to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'name': 'clearInterval',
+ 'message': 'Use .clearInterval to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'name': 'requestAnimationFrame',
+ 'message': 'Use .requestAnimationFrame to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'name': 'cancelAnimationFrame',
+ 'message': 'Use .cancelAnimationFrame to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'name': 'requestIdleCallback',
+ 'message': 'Use .requestIdleCallback to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'name': 'cancelIdleCallback',
+ 'message': 'Use .cancelIdleCallback to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'name': 'window',
+ 'message': 'Use to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'name': 'addEventListener',
+ 'message': 'Use .addEventListener to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'name': 'removeEventListener',
+ 'message': 'Use .removeEventListener to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'name': 'getComputedStyle',
+ 'message': 'Use .getComputedStyle to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'name': 'focus',
+ 'message': 'Use .focus to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'name': 'blur',
+ 'message': 'Use .blur to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'name': 'close',
+ 'message': 'Use .close to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'name': 'dispatchEvent',
+ 'message': 'Use .dispatchEvent to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'name': 'getSelection',
+ 'message': 'Use .getSelection to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'name': 'matchMedia',
+ 'message': 'Use .matchMedia to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'name': 'open',
+ 'message': 'Use .open to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'name': 'parent',
+ 'message': 'Use .parent to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'name': 'postMessage',
+ 'message': 'Use .postMessage to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'name': 'devicePixelRatio',
+ 'message': 'Use .devicePixelRatio to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'name': 'frames',
+ 'message': 'Use .frames to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'name': 'frameElement',
+ 'message': 'Use .frameElement to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'name': 'innerHeight',
+ 'message': 'Use .innerHeight to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'name': 'innerWidth',
+ 'message': 'Use .innerWidth to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'name': 'outerHeight',
+ 'message': 'Use .outerHeight to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'name': 'outerWidth',
+ 'message': 'Use .outerWidth to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'name': 'opener',
+ 'message': 'Use .opener to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'name': 'origin',
+ 'message': 'Use .origin to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'name': 'screen',
+ 'message': 'Use .screen to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'name': 'screenLeft',
+ 'message': 'Use .screenLeft to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'name': 'screenTop',
+ 'message': 'Use .screenTop to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'name': 'screenX',
+ 'message': 'Use .screenX to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'name': 'screenY',
+ 'message': 'Use .screenY to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'name': 'scrollX',
+ 'message': 'Use .scrollX to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'name': 'scrollY',
+ 'message': 'Use .scrollY to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'name': 'top',
+ 'message': 'Use .top to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ },
+ {
+ 'name': 'visualViewport',
+ 'message': 'Use .visualViewport to support multi-window scenarios. Resolve targetWindow with DOM.getWindow(element) or DOM.getActiveWindow() or use the predefined mainWindow constant.'
+ }
+ ]
+ }
+ },
+ // electron-utility layer
+ {
+ files: [
+ 'src/**/electron-utility/**/*.ts'
+ ],
+ languageOptions: {
+ parser: tseslint.parser,
+ },
+ rules: {
+ 'no-restricted-imports': [
+ 'warn',
+ {
+ 'paths': [
+ {
+ 'name': 'electron',
+ 'allowImportNames': [
+ 'net',
+ 'system-preferences',
+ ],
+ 'message': 'Only net and system-preferences are allowed to be imported from electron'
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ files: [
+ 'src/**/*.ts'
+ ],
+ languageOptions: {
+ parser: tseslint.parser,
+ },
+ plugins: {
+ 'local': pluginLocal,
+ },
+ rules: {
+ 'local/code-import-patterns': [
+ 'warn',
+ {
+ // imports that are allowed in all files of layers:
+ // - browser
+ // - electron-sandbox
+ 'when': 'hasBrowser',
+ 'allow': []
+ },
+ {
+ // imports that are allowed in all files of layers:
+ // - node
+ // - electron-utility
+ // - electron-main
+ 'when': 'hasNode',
+ 'allow': [
+ '@parcel/watcher',
+ '@vscode/sqlite3',
+ '@vscode/vscode-languagedetection',
+ '@vscode/ripgrep',
+ '@vscode/iconv-lite-umd',
+ '@vscode/policy-watcher',
+ '@vscode/proxy-agent',
+ '@vscode/spdlog',
+ '@vscode/windows-process-tree',
+ 'assert',
+ 'child_process',
+ 'console',
+ 'cookie',
+ 'crypto',
+ 'dns',
+ 'events',
+ 'fs',
+ 'fs/promises',
+ 'http',
+ 'https',
+ 'minimist',
+ 'node:module',
+ 'native-keymap',
+ 'native-watchdog',
+ 'net',
+ 'node-pty',
+ 'os',
+ 'path',
+ 'perf_hooks',
+ 'readline',
+ 'stream',
+ 'string_decoder',
+ 'tas-client-umd',
+ 'tls',
+ 'url',
+ 'util',
+ 'v8-inspect-profiler',
+ 'vscode-regexpp',
+ 'vscode-textmate',
+ 'worker_threads',
+ '@xterm/addon-clipboard',
+ '@xterm/addon-image',
+ '@xterm/addon-search',
+ '@xterm/addon-serialize',
+ '@xterm/addon-unicode11',
+ '@xterm/addon-webgl',
+ '@xterm/headless',
+ '@xterm/xterm',
+ 'yauzl',
+ 'yazl',
+ 'zlib'
+ ]
+ },
+ {
+ // imports that are allowed in all files of layers:
+ // - electron-utility
+ // - electron-main
+ 'when': 'hasElectron',
+ 'allow': [
+ 'electron'
+ ]
+ },
+ {
+ // imports that are allowed in all /test/ files
+ 'when': 'test',
+ 'allow': [
+ 'assert',
+ 'sinon',
+ 'sinon-test'
+ ]
+ },
+ // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ // !!! Do not relax these rules !!!
+ // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ //
+ // A path ending in /~ has a special meaning. It indicates a template position
+ // which will be substituted with one or more layers.
+ //
+ // When /~ is used in the target, the rule will be expanded to 14 distinct rules.
+ // e.g. 'src/vs/base/~' will be expanded to:
+ // - src/vs/base/common
+ // - src/vs/base/worker
+ // - src/vs/base/browser
+ // - src/vs/base/electron-sandbox
+ // - src/vs/base/node
+ // - src/vs/base/electron-main
+ // - src/vs/base/test/common
+ // - src/vs/base/test/worker
+ // - src/vs/base/test/browser
+ // - src/vs/base/test/electron-sandbox
+ // - src/vs/base/test/node
+ // - src/vs/base/test/electron-main
+ //
+ // When /~ is used in the restrictions, it will be replaced with the correct
+ // layers that can be used e.g. 'src/vs/base/electron-sandbox' will be able
+ // to import '{common,browser,electron-sanbox}', etc.
+ //
+ // It is possible to use /~ in the restrictions property even without using it in
+ // the target property by adding a layer property.
+ {
+ 'target': 'src/vs/base/~',
+ 'restrictions': [
+ 'vs/base/~'
+ ]
+ },
+ {
+ 'target': 'src/vs/base/parts/*/~',
+ 'restrictions': [
+ 'vs/base/~',
+ 'vs/base/parts/*/~'
+ ]
+ },
+ {
+ 'target': 'src/vs/platform/*/~',
+ 'restrictions': [
+ 'vs/base/~',
+ 'vs/base/parts/*/~',
+ 'vs/platform/*/~',
+ 'tas-client-umd', // node module allowed even in /common/
+ '@microsoft/1ds-core-js', // node module allowed even in /common/
+ '@microsoft/1ds-post-js', // node module allowed even in /common/
+ '@xterm/headless' // node module allowed even in /common/
+ ]
+ },
+ {
+ 'target': 'src/vs/editor/~',
+ 'restrictions': [
+ 'vs/base/~',
+ 'vs/base/parts/*/~',
+ 'vs/platform/*/~',
+ 'vs/editor/~',
+ '@vscode/tree-sitter-wasm' // node module allowed even in /common/
+ ]
+ },
+ {
+ 'target': 'src/vs/editor/contrib/*/~',
+ 'restrictions': [
+ 'vs/base/~',
+ 'vs/base/parts/*/~',
+ 'vs/platform/*/~',
+ 'vs/editor/~',
+ 'vs/editor/contrib/*/~'
+ ]
+ },
+ {
+ 'target': 'src/vs/editor/standalone/~',
+ 'restrictions': [
+ 'vs/base/~',
+ 'vs/base/parts/*/~',
+ 'vs/platform/*/~',
+ 'vs/editor/~',
+ 'vs/editor/contrib/*/~',
+ 'vs/editor/standalone/~',
+ '@vscode/tree-sitter-wasm' // type import
+ ]
+ },
+ {
+ 'target': 'src/vs/editor/editor.all.ts',
+ 'layer': 'browser',
+ 'restrictions': [
+ 'vs/base/~',
+ 'vs/base/parts/*/~',
+ 'vs/platform/*/~',
+ 'vs/editor/~',
+ 'vs/editor/contrib/*/~'
+ ]
+ },
+ {
+ 'target': 'src/vs/editor/editor.worker.ts',
+ 'layer': 'worker',
+ 'restrictions': [
+ 'vs/base/~',
+ 'vs/base/parts/*/~',
+ 'vs/platform/*/~',
+ 'vs/editor/~'
+ ]
+ },
+ {
+ 'target': 'src/vs/editor/{editor.api.ts,editor.main.ts}',
+ 'layer': 'browser',
+ 'restrictions': [
+ 'vs/base/~',
+ 'vs/base/parts/*/~',
+ 'vs/editor/~',
+ 'vs/editor/contrib/*/~',
+ 'vs/editor/standalone/~',
+ 'vs/editor/*'
+ ]
+ },
+ {
+ 'target': 'src/vs/workbench/~',
+ 'restrictions': [
+ 'vs/base/~',
+ 'vs/base/parts/*/~',
+ 'vs/platform/*/~',
+ 'vs/editor/~',
+ 'vs/editor/contrib/*/~',
+ 'vs/workbench/~',
+ 'vs/workbench/services/*/~',
+ 'assert',
+ {
+ 'when': 'test',
+ 'pattern': 'vs/workbench/contrib/*/~'
+ } // TODO@layers
+ ]
+ },
+ {
+ 'target': 'src/vs/workbench/api/~',
+ 'restrictions': [
+ 'vscode',
+ 'vs/base/~',
+ 'vs/base/parts/*/~',
+ 'vs/platform/*/~',
+ 'vs/editor/~',
+ 'vs/editor/contrib/*/~',
+ 'vs/workbench/api/~',
+ 'vs/workbench/~',
+ 'vs/workbench/services/*/~',
+ 'vs/workbench/contrib/*/~',
+ 'vs/workbench/contrib/terminalContrib/*/~'
+ ]
+ },
+ {
+ 'target': 'src/vs/workbench/services/*/~',
+ 'restrictions': [
+ 'vs/base/~',
+ 'vs/base/parts/*/~',
+ 'vs/platform/*/~',
+ 'vs/editor/~',
+ 'vs/editor/contrib/*/~',
+ 'vs/workbench/~',
+ 'vs/workbench/services/*/~',
+ {
+ 'when': 'test',
+ 'pattern': 'vs/workbench/contrib/*/~'
+ }, // TODO@layers
+ 'tas-client-umd', // node module allowed even in /common/
+ 'vscode-textmate', // node module allowed even in /common/
+ '@vscode/vscode-languagedetection', // node module allowed even in /common/
+ '@vscode/tree-sitter-wasm', // type import
+ {
+ 'when': 'hasBrowser',
+ 'pattern': '@xterm/xterm'
+ } // node module allowed even in /browser/
+ ]
+ },
+ {
+ 'target': 'src/vs/workbench/contrib/*/~',
+ 'restrictions': [
+ 'vs/base/~',
+ 'vs/base/parts/*/~',
+ 'vs/platform/*/~',
+ 'vs/editor/~',
+ 'vs/editor/contrib/*/~',
+ 'vs/workbench/~',
+ 'vs/workbench/services/*/~',
+ 'vs/workbench/contrib/*/~',
+ 'vs/workbench/contrib/terminal/terminalContribChatExports*',
+ 'vs/workbench/contrib/terminal/terminalContribExports*',
+ 'vscode-notebook-renderer', // Type only import
+ '@vscode/tree-sitter-wasm', // type import
+ {
+ 'when': 'hasBrowser',
+ 'pattern': '@xterm/xterm'
+ }, // node module allowed even in /browser/
+ {
+ 'when': 'hasBrowser',
+ 'pattern': '@xterm/addon-*'
+ }, // node module allowed even in /browser/
+ {
+ 'when': 'hasBrowser',
+ 'pattern': 'vscode-textmate'
+ } // node module allowed even in /browser/
+ ]
+ },
+ {
+ 'target': 'src/vs/workbench/contrib/terminalContrib/*/~',
+ 'restrictions': [
+ 'vs/base/~',
+ 'vs/base/parts/*/~',
+ 'vs/platform/*/~',
+ 'vs/editor/~',
+ 'vs/editor/contrib/*/~',
+ 'vs/workbench/~',
+ 'vs/workbench/services/*/~',
+ 'vs/workbench/contrib/*/~',
+ // Only allow terminalContrib to import from itself, this works because
+ // terminalContrib is one extra folder deep
+ 'vs/workbench/contrib/terminalContrib/*/~',
+ 'vscode-notebook-renderer', // Type only import
+ {
+ 'when': 'hasBrowser',
+ 'pattern': '@xterm/xterm'
+ }, // node module allowed even in /browser/
+ {
+ 'when': 'hasBrowser',
+ 'pattern': '@xterm/addon-*'
+ }, // node module allowed even in /browser/
+ {
+ 'when': 'hasBrowser',
+ 'pattern': 'vscode-textmate'
+ }, // node module allowed even in /browser/
+ '@xterm/headless' // node module allowed even in /common/ and /browser/
+ ]
+ },
+ {
+ 'target': 'src/vs/code/~',
+ 'restrictions': [
+ 'vs/base/~',
+ 'vs/base/parts/*/~',
+ 'vs/platform/*/~',
+ 'vs/editor/~',
+ 'vs/editor/contrib/*/~',
+ 'vs/code/~',
+ {
+ 'when': 'hasBrowser',
+ 'pattern': 'vs/workbench/workbench.web.main.js'
+ },
+ {
+ 'when': 'hasBrowser',
+ 'pattern': 'vs/workbench/workbench.web.main.internal.js'
+ },
+ {
+ 'when': 'hasBrowser',
+ 'pattern': 'vs/workbench/~'
+ },
+ {
+ 'when': 'hasBrowser',
+ 'pattern': 'vs/workbench/services/*/~'
+ }
+ ]
+ },
+ {
+ 'target': 'src/vs/server/~',
+ 'restrictions': [
+ 'vs/base/~',
+ 'vs/base/parts/*/~',
+ 'vs/platform/*/~',
+ 'vs/workbench/~',
+ 'vs/workbench/api/~',
+ 'vs/workbench/services/*/~',
+ 'vs/workbench/contrib/*/~',
+ 'vs/server/~'
+ ]
+ },
+ {
+ 'target': 'src/vs/workbench/contrib/terminal/terminal.all.ts',
+ 'layer': 'browser',
+ 'restrictions': [
+ 'vs/workbench/contrib/**'
+ ]
+ },
+ {
+ 'target': 'src/vs/workbench/contrib/terminal/terminalContribChatExports.ts',
+ 'layer': 'browser',
+ 'restrictions': [
+ 'vs/workbench/contrib/terminalContrib/*/~'
+ ]
+ },
+ {
+ 'target': 'src/vs/workbench/contrib/terminal/terminalContribExports.ts',
+ 'layer': 'browser',
+ 'restrictions': [
+ 'vs/platform/*/~',
+ 'vs/workbench/contrib/terminalContrib/*/~'
+ ]
+ },
+ {
+ 'target': 'src/vs/workbench/workbench.common.main.ts',
+ 'layer': 'browser',
+ 'restrictions': [
+ 'vs/base/~',
+ 'vs/base/parts/*/~',
+ 'vs/platform/*/~',
+ 'vs/editor/~',
+ 'vs/editor/contrib/*/~',
+ 'vs/editor/editor.all.js',
+ 'vs/workbench/~',
+ 'vs/workbench/api/~',
+ 'vs/workbench/services/*/~',
+ 'vs/workbench/contrib/*/~',
+ 'vs/workbench/contrib/terminal/terminal.all.js'
+ ]
+ },
+ {
+ 'target': 'src/vs/workbench/workbench.web.main.ts',
+ 'layer': 'browser',
+ 'restrictions': [
+ 'vs/base/~',
+ 'vs/base/parts/*/~',
+ 'vs/platform/*/~',
+ 'vs/editor/~',
+ 'vs/editor/contrib/*/~',
+ 'vs/editor/editor.all.js',
+ 'vs/workbench/~',
+ 'vs/workbench/api/~',
+ 'vs/workbench/services/*/~',
+ 'vs/workbench/contrib/*/~',
+ 'vs/workbench/workbench.common.main.js'
+ ]
+ },
+ {
+ 'target': 'src/vs/workbench/workbench.web.main.internal.ts',
+ 'layer': 'browser',
+ 'restrictions': [
+ 'vs/base/~',
+ 'vs/base/parts/*/~',
+ 'vs/platform/*/~',
+ 'vs/editor/~',
+ 'vs/editor/contrib/*/~',
+ 'vs/editor/editor.all.js',
+ 'vs/workbench/~',
+ 'vs/workbench/api/~',
+ 'vs/workbench/services/*/~',
+ 'vs/workbench/contrib/*/~',
+ 'vs/workbench/workbench.common.main.js'
+ ]
+ },
+ {
+ 'target': 'src/vs/workbench/workbench.desktop.main.ts',
+ 'layer': 'electron-sandbox',
+ 'restrictions': [
+ 'vs/base/*/~',
+ 'vs/base/parts/*/~',
+ 'vs/platform/*/~',
+ 'vs/editor/~',
+ 'vs/editor/contrib/*/~',
+ 'vs/editor/editor.all.js',
+ 'vs/workbench/~',
+ 'vs/workbench/api/~',
+ 'vs/workbench/services/*/~',
+ 'vs/workbench/contrib/*/~',
+ 'vs/workbench/workbench.common.main.js'
+ ]
+ },
+ {
+ 'target': 'src/vs/amdX.ts',
+ 'restrictions': [
+ 'vs/base/common/*'
+ ]
+ },
+ {
+ 'target': 'src/vs/{loader.d.ts,monaco.d.ts,nls.ts,nls.messages.ts}',
+ 'restrictions': []
+ },
+ {
+ 'target': 'src/vscode-dts/**',
+ 'restrictions': []
+ },
+ {
+ 'target': 'src/bootstrap-window.ts',
+ 'restrictions': []
+ },
+ {
+ 'target': 'src/vs/nls.ts',
+ 'restrictions': [
+ 'vs/*'
+ ]
+ },
+ {
+ 'target': 'src/{bootstrap-cli.ts,bootstrap-esm.ts,bootstrap-fork.ts,bootstrap-import.ts,bootstrap-meta.ts,bootstrap-node.ts,bootstrap-server.ts,cli.ts,main.ts,server-cli.ts,server-main.ts}',
+ 'restrictions': [
+ 'vs/**/common/*',
+ 'vs/**/node/*',
+ 'vs/nls.js',
+ 'src/*.js',
+ '*' // node.js
+ ]
+ }
+ ]
+ }
+ },
+ {
+ files: [
+ 'test/**/*.ts'
+ ],
+ languageOptions: {
+ parser: tseslint.parser,
+ },
+ plugins: {
+ 'local': pluginLocal,
+ },
+ rules: {
+ 'local/code-import-patterns': [
+ 'warn',
+ {
+ 'target': 'test/smoke/**',
+ 'restrictions': [
+ 'test/automation',
+ 'test/smoke/**',
+ '@vscode/*',
+ '@parcel/*',
+ '@playwright/*',
+ '*' // node modules
+ ]
+ },
+ {
+ 'target': 'test/automation/**',
+ 'restrictions': [
+ 'test/automation/**',
+ '@vscode/*',
+ '@parcel/*',
+ 'playwright-core/**',
+ '@playwright/*',
+ '*' // node modules
+ ]
+ },
+ {
+ 'target': 'test/integration/**',
+ 'restrictions': [
+ 'test/integration/**',
+ '@vscode/*',
+ '@parcel/*',
+ '@playwright/*',
+ '*' // node modules
+ ]
+ },
+ {
+ 'target': 'test/monaco/**',
+ 'restrictions': [
+ 'test/monaco/**',
+ '@vscode/*',
+ '@parcel/*',
+ '@playwright/*',
+ '*' // node modules
+ ]
+ }
+ ]
+ }
+ },
+ {
+ files: [
+ 'src/vs/workbench/contrib/notebook/browser/view/renderers/*.ts'
+ ],
+ languageOptions: {
+ parser: tseslint.parser,
+ },
+ plugins: {
+ 'local': pluginLocal,
+ },
+ rules: {
+ 'local/code-no-runtime-import': [
+ 'error',
+ {
+ 'src/vs/workbench/contrib/notebook/browser/view/renderers/webviewPreloads.ts': [
+ '**/*'
+ ]
+ }
+ ],
+ 'local/code-limited-top-functions': [
+ 'error',
+ {
+ 'src/vs/workbench/contrib/notebook/browser/view/renderers/webviewPreloads.ts': [
+ 'webviewPreloads',
+ 'preloadsScriptStr'
+ ]
+ }
+ ]
+ }
+ },
+ // Terminal
+ {
+ files: [
+ 'src/vs/workbench/contrib/terminal/**/*.ts',
+ 'src/vs/workbench/contrib/terminalContrib/**/*.ts',
+ ],
+ languageOptions: {
+ parser: tseslint.parser,
+ },
+ rules: {
+ '@typescript-eslint/naming-convention': [
+ 'warn',
+ // variableLike
+ { 'selector': 'variable', 'format': ['camelCase', 'UPPER_CASE', 'PascalCase'] },
+ { 'selector': 'variable', 'filter': '^I.+Service$', 'format': ['PascalCase'], 'prefix': ['I'] },
+ // memberLike
+ { 'selector': 'memberLike', 'modifiers': ['private'], 'format': ['camelCase'], 'leadingUnderscore': 'require' },
+ { 'selector': 'memberLike', 'modifiers': ['protected'], 'format': ['camelCase'], 'leadingUnderscore': 'require' },
+ { 'selector': 'enumMember', 'format': ['PascalCase'] },
+ // memberLike - Allow enum-like objects to use UPPER_CASE
+ { 'selector': 'method', 'modifiers': ['public'], 'format': ['camelCase', 'UPPER_CASE'] },
+ // typeLike
+ { 'selector': 'typeLike', 'format': ['PascalCase'] },
+ { 'selector': 'interface', 'format': ['PascalCase'] }
+ ],
+ 'comma-dangle': ['warn', 'only-multiline']
+ }
+ },
+ // markdown-language-features
+ {
+ files: [
+ 'extensions/markdown-language-features/**/*.ts',
+ ],
+ languageOptions: {
+ parser: tseslint.parser,
+ },
+ plugins: {
+ '@typescript-eslint': tseslint.plugin,
+ },
+ rules: {
+ '@typescript-eslint/naming-convention': [
+ 'warn',
+ {
+ 'selector': 'default',
+ 'modifiers': ['private'],
+ 'format': null,
+ 'leadingUnderscore': 'require'
+ },
+ {
+ 'selector': 'default',
+ 'modifiers': ['public'],
+ 'format': null,
+ 'leadingUnderscore': 'forbid'
+ }
+ ]
+ }
+ },
+ // typescript-language-features
+ {
+ files: [
+ 'extensions/typescript-language-features/**/*.ts',
+ ],
+ languageOptions: {
+ parser: tseslint.parser,
+ parserOptions: {
+ project: [
+ 'extensions/typescript-language-features/tsconfig.json',
+ 'extensions/typescript-language-features/web/tsconfig.json'
+ ],
+ }
+ },
+ plugins: {
+ '@typescript-eslint': tseslint.plugin,
+ },
+ rules: {
+ '@typescript-eslint/prefer-optional-chain': 'warn',
+ '@typescript-eslint/prefer-readonly': 'warn',
+ }
+ }
+);
diff --git a/extensions/.npmrc b/extensions/.npmrc
new file mode 100644
index 00000000000..a9c57709666
--- /dev/null
+++ b/extensions/.npmrc
@@ -0,0 +1,2 @@
+legacy-peer-deps="true"
+timeout=180000
diff --git a/extensions/bat/yarn.lock b/extensions/bat/yarn.lock
deleted file mode 100644
index fb57ccd13af..00000000000
--- a/extensions/bat/yarn.lock
+++ /dev/null
@@ -1,4 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
diff --git a/extensions/clojure/yarn.lock b/extensions/clojure/yarn.lock
deleted file mode 100644
index fb57ccd13af..00000000000
--- a/extensions/clojure/yarn.lock
+++ /dev/null
@@ -1,4 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
diff --git a/extensions/coffeescript/yarn.lock b/extensions/coffeescript/yarn.lock
deleted file mode 100644
index fb57ccd13af..00000000000
--- a/extensions/coffeescript/yarn.lock
+++ /dev/null
@@ -1,4 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
diff --git a/extensions/configuration-editing/.npmrc b/extensions/configuration-editing/.npmrc
new file mode 100644
index 00000000000..a9c57709666
--- /dev/null
+++ b/extensions/configuration-editing/.npmrc
@@ -0,0 +1,2 @@
+legacy-peer-deps="true"
+timeout=180000
diff --git a/extensions/configuration-editing/.vscodeignore b/extensions/configuration-editing/.vscodeignore
index cfa2d155c50..679a6d6859f 100644
--- a/extensions/configuration-editing/.vscodeignore
+++ b/extensions/configuration-editing/.vscodeignore
@@ -4,7 +4,7 @@ tsconfig.json
out/**
extension.webpack.config.js
extension-browser.webpack.config.js
-yarn.lock
+package-lock.json
build/**
schemas/devContainer.codespaces.schema.json
schemas/devContainer.vscode.schema.json
diff --git a/extensions/configuration-editing/package-lock.json b/extensions/configuration-editing/package-lock.json
new file mode 100644
index 00000000000..199dcf7f755
--- /dev/null
+++ b/extensions/configuration-editing/package-lock.json
@@ -0,0 +1,296 @@
+{
+ "name": "configuration-editing",
+ "version": "1.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "configuration-editing",
+ "version": "1.0.0",
+ "license": "MIT",
+ "dependencies": {
+ "@octokit/rest": "19.0.4",
+ "jsonc-parser": "^3.2.0",
+ "tunnel": "^0.0.6"
+ },
+ "devDependencies": {
+ "@types/node": "20.x"
+ },
+ "engines": {
+ "vscode": "^1.0.0"
+ }
+ },
+ "node_modules/@octokit/auth-token": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.4.tgz",
+ "integrity": "sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ==",
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/@octokit/core": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.2.4.tgz",
+ "integrity": "sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ==",
+ "dependencies": {
+ "@octokit/auth-token": "^3.0.0",
+ "@octokit/graphql": "^5.0.0",
+ "@octokit/request": "^6.0.0",
+ "@octokit/request-error": "^3.0.0",
+ "@octokit/types": "^9.0.0",
+ "before-after-hook": "^2.2.0",
+ "universal-user-agent": "^6.0.0"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/@octokit/endpoint": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz",
+ "integrity": "sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==",
+ "dependencies": {
+ "@octokit/types": "^9.0.0",
+ "is-plain-object": "^5.0.0",
+ "universal-user-agent": "^6.0.0"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/@octokit/graphql": {
+ "version": "5.0.6",
+ "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.6.tgz",
+ "integrity": "sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw==",
+ "dependencies": {
+ "@octokit/request": "^6.0.0",
+ "@octokit/types": "^9.0.0",
+ "universal-user-agent": "^6.0.0"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/@octokit/openapi-types": {
+ "version": "18.0.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz",
+ "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw=="
+ },
+ "node_modules/@octokit/plugin-paginate-rest": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-4.3.1.tgz",
+ "integrity": "sha512-h8KKxESmSFTcXX409CAxlaOYscEDvN2KGQRsLCGT1NSqRW+D6EXLVQ8vuHhFznS9MuH9QYw1GfsUN30bg8hjVA==",
+ "dependencies": {
+ "@octokit/types": "^7.5.0"
+ },
+ "engines": {
+ "node": ">= 14"
+ },
+ "peerDependencies": {
+ "@octokit/core": ">=4"
+ }
+ },
+ "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/openapi-types": {
+ "version": "13.13.1",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-13.13.1.tgz",
+ "integrity": "sha512-4EuKSk3N95UBWFau3Bz9b3pheQ8jQYbKmBL5+GSuY8YDPDwu03J4BjI+66yNi8aaX/3h1qDpb0mbBkLdr+cfGQ=="
+ },
+ "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/types": {
+ "version": "7.5.1",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-7.5.1.tgz",
+ "integrity": "sha512-Zk4OUMLCSpXNI8KZZn47lVLJSsgMyCimsWWQI5hyjZg7hdYm0kjotaIkbG0Pp8SfU2CofMBzonboTqvzn3FrJA==",
+ "dependencies": {
+ "@octokit/openapi-types": "^13.11.0"
+ }
+ },
+ "node_modules/@octokit/plugin-request-log": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz",
+ "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==",
+ "peerDependencies": {
+ "@octokit/core": ">=3"
+ }
+ },
+ "node_modules/@octokit/plugin-rest-endpoint-methods": {
+ "version": "6.8.1",
+ "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.8.1.tgz",
+ "integrity": "sha512-QrlaTm8Lyc/TbU7BL/8bO49vp+RZ6W3McxxmmQTgYxf2sWkO8ZKuj4dLhPNJD6VCUW1hetCmeIM0m6FTVpDiEg==",
+ "dependencies": {
+ "@octokit/types": "^8.1.1",
+ "deprecation": "^2.3.1"
+ },
+ "engines": {
+ "node": ">= 14"
+ },
+ "peerDependencies": {
+ "@octokit/core": ">=3"
+ }
+ },
+ "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/openapi-types": {
+ "version": "14.0.0",
+ "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-14.0.0.tgz",
+ "integrity": "sha512-HNWisMYlR8VCnNurDU6os2ikx0s0VyEjDYHNS/h4cgb8DeOxQ0n72HyinUtdDVxJhFy3FWLGl0DJhfEWk3P5Iw=="
+ },
+ "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": {
+ "version": "8.2.1",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-8.2.1.tgz",
+ "integrity": "sha512-8oWMUji8be66q2B9PmEIUyQm00VPDPun07umUWSaCwxmeaquFBro4Hcc3ruVoDo3zkQyZBlRvhIMEYS3pBhanw==",
+ "dependencies": {
+ "@octokit/openapi-types": "^14.0.0"
+ }
+ },
+ "node_modules/@octokit/request": {
+ "version": "6.2.8",
+ "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.8.tgz",
+ "integrity": "sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==",
+ "dependencies": {
+ "@octokit/endpoint": "^7.0.0",
+ "@octokit/request-error": "^3.0.0",
+ "@octokit/types": "^9.0.0",
+ "is-plain-object": "^5.0.0",
+ "node-fetch": "^2.6.7",
+ "universal-user-agent": "^6.0.0"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/@octokit/request-error": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz",
+ "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==",
+ "dependencies": {
+ "@octokit/types": "^9.0.0",
+ "deprecation": "^2.0.0",
+ "once": "^1.4.0"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/@octokit/rest": {
+ "version": "19.0.4",
+ "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.4.tgz",
+ "integrity": "sha512-LwG668+6lE8zlSYOfwPj4FxWdv/qFXYBpv79TWIQEpBLKA9D/IMcWsF/U9RGpA3YqMVDiTxpgVpEW3zTFfPFTA==",
+ "dependencies": {
+ "@octokit/core": "^4.0.0",
+ "@octokit/plugin-paginate-rest": "^4.0.0",
+ "@octokit/plugin-request-log": "^1.0.4",
+ "@octokit/plugin-rest-endpoint-methods": "^6.0.0"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/@octokit/types": {
+ "version": "9.3.2",
+ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz",
+ "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==",
+ "dependencies": {
+ "@octokit/openapi-types": "^18.0.0"
+ }
+ },
+ "node_modules/@types/node": {
+ "version": "20.11.24",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.24.tgz",
+ "integrity": "sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long==",
+ "dev": true,
+ "dependencies": {
+ "undici-types": "~5.26.4"
+ }
+ },
+ "node_modules/before-after-hook": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz",
+ "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ=="
+ },
+ "node_modules/deprecation": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz",
+ "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ=="
+ },
+ "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==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/jsonc-parser": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz",
+ "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w=="
+ },
+ "node_modules/node-fetch": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
+ "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
+ "dependencies": {
+ "whatwg-url": "^5.0.0"
+ },
+ "engines": {
+ "node": "4.x || >=6.0.0"
+ },
+ "peerDependencies": {
+ "encoding": "^0.1.0"
+ },
+ "peerDependenciesMeta": {
+ "encoding": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
+ },
+ "node_modules/tunnel": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
+ "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==",
+ "engines": {
+ "node": ">=0.6.11 <=0.7.0 || >=0.7.3"
+ }
+ },
+ "node_modules/undici-types": {
+ "version": "5.26.5",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
+ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
+ "dev": true
+ },
+ "node_modules/universal-user-agent": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz",
+ "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w=="
+ },
+ "node_modules/webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
+ },
+ "node_modules/whatwg-url": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
+ "dependencies": {
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ }
+ }
+}
diff --git a/extensions/configuration-editing/yarn.lock b/extensions/configuration-editing/yarn.lock
deleted file mode 100644
index 0e7d733c76f..00000000000
--- a/extensions/configuration-editing/yarn.lock
+++ /dev/null
@@ -1,205 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
-"@octokit/auth-token@^3.0.0":
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-3.0.4.tgz#70e941ba742bdd2b49bdb7393e821dea8520a3db"
- integrity sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ==
-
-"@octokit/core@^4.0.0":
- version "4.2.4"
- resolved "https://registry.yarnpkg.com/@octokit/core/-/core-4.2.4.tgz#d8769ec2b43ff37cc3ea89ec4681a20ba58ef907"
- integrity sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ==
- dependencies:
- "@octokit/auth-token" "^3.0.0"
- "@octokit/graphql" "^5.0.0"
- "@octokit/request" "^6.0.0"
- "@octokit/request-error" "^3.0.0"
- "@octokit/types" "^9.0.0"
- before-after-hook "^2.2.0"
- universal-user-agent "^6.0.0"
-
-"@octokit/endpoint@^7.0.0":
- version "7.0.6"
- resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-7.0.6.tgz#791f65d3937555141fb6c08f91d618a7d645f1e2"
- integrity sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==
- dependencies:
- "@octokit/types" "^9.0.0"
- is-plain-object "^5.0.0"
- universal-user-agent "^6.0.0"
-
-"@octokit/graphql@^5.0.0":
- version "5.0.6"
- resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-5.0.6.tgz#9eac411ac4353ccc5d3fca7d76736e6888c5d248"
- integrity sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw==
- dependencies:
- "@octokit/request" "^6.0.0"
- "@octokit/types" "^9.0.0"
- universal-user-agent "^6.0.0"
-
-"@octokit/openapi-types@^13.11.0":
- version "13.13.1"
- resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-13.13.1.tgz#a783bacb1817c9f61a2a0c3f81ea22ad62340fdf"
- integrity sha512-4EuKSk3N95UBWFau3Bz9b3pheQ8jQYbKmBL5+GSuY8YDPDwu03J4BjI+66yNi8aaX/3h1qDpb0mbBkLdr+cfGQ==
-
-"@octokit/openapi-types@^14.0.0":
- version "14.0.0"
- resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-14.0.0.tgz#949c5019028c93f189abbc2fb42f333290f7134a"
- integrity sha512-HNWisMYlR8VCnNurDU6os2ikx0s0VyEjDYHNS/h4cgb8DeOxQ0n72HyinUtdDVxJhFy3FWLGl0DJhfEWk3P5Iw==
-
-"@octokit/openapi-types@^18.0.0":
- version "18.0.0"
- resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-18.0.0.tgz#f43d765b3c7533fd6fb88f3f25df079c24fccf69"
- integrity sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==
-
-"@octokit/plugin-paginate-rest@^4.0.0":
- version "4.3.1"
- resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-4.3.1.tgz#553e653ee0318605acd23bf3a799c8bfafdedae3"
- integrity sha512-h8KKxESmSFTcXX409CAxlaOYscEDvN2KGQRsLCGT1NSqRW+D6EXLVQ8vuHhFznS9MuH9QYw1GfsUN30bg8hjVA==
- dependencies:
- "@octokit/types" "^7.5.0"
-
-"@octokit/plugin-request-log@^1.0.4":
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz#5e50ed7083a613816b1e4a28aeec5fb7f1462e85"
- integrity sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==
-
-"@octokit/plugin-rest-endpoint-methods@^6.0.0":
- version "6.8.1"
- resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-6.8.1.tgz#97391fda88949eb15f68dc291957ccbe1d3e8ad1"
- integrity sha512-QrlaTm8Lyc/TbU7BL/8bO49vp+RZ6W3McxxmmQTgYxf2sWkO8ZKuj4dLhPNJD6VCUW1hetCmeIM0m6FTVpDiEg==
- dependencies:
- "@octokit/types" "^8.1.1"
- deprecation "^2.3.1"
-
-"@octokit/request-error@^3.0.0":
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-3.0.3.tgz#ef3dd08b8e964e53e55d471acfe00baa892b9c69"
- integrity sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==
- dependencies:
- "@octokit/types" "^9.0.0"
- deprecation "^2.0.0"
- once "^1.4.0"
-
-"@octokit/request@^6.0.0":
- version "6.2.8"
- resolved "https://registry.yarnpkg.com/@octokit/request/-/request-6.2.8.tgz#aaf480b32ab2b210e9dadd8271d187c93171d8eb"
- integrity sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==
- dependencies:
- "@octokit/endpoint" "^7.0.0"
- "@octokit/request-error" "^3.0.0"
- "@octokit/types" "^9.0.0"
- is-plain-object "^5.0.0"
- node-fetch "^2.6.7"
- universal-user-agent "^6.0.0"
-
-"@octokit/rest@19.0.4":
- version "19.0.4"
- resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-19.0.4.tgz#fd8bed1cefffa486e9ae46a9dc608ce81bcfcbdd"
- integrity sha512-LwG668+6lE8zlSYOfwPj4FxWdv/qFXYBpv79TWIQEpBLKA9D/IMcWsF/U9RGpA3YqMVDiTxpgVpEW3zTFfPFTA==
- dependencies:
- "@octokit/core" "^4.0.0"
- "@octokit/plugin-paginate-rest" "^4.0.0"
- "@octokit/plugin-request-log" "^1.0.4"
- "@octokit/plugin-rest-endpoint-methods" "^6.0.0"
-
-"@octokit/types@^7.5.0":
- version "7.5.1"
- resolved "https://registry.yarnpkg.com/@octokit/types/-/types-7.5.1.tgz#4e8b182933c17e1f41cc25d44757dbdb7bd76c1b"
- integrity sha512-Zk4OUMLCSpXNI8KZZn47lVLJSsgMyCimsWWQI5hyjZg7hdYm0kjotaIkbG0Pp8SfU2CofMBzonboTqvzn3FrJA==
- dependencies:
- "@octokit/openapi-types" "^13.11.0"
-
-"@octokit/types@^8.1.1":
- version "8.2.1"
- resolved "https://registry.yarnpkg.com/@octokit/types/-/types-8.2.1.tgz#a6de091ae68b5541f8d4fcf9a12e32836d4648aa"
- integrity sha512-8oWMUji8be66q2B9PmEIUyQm00VPDPun07umUWSaCwxmeaquFBro4Hcc3ruVoDo3zkQyZBlRvhIMEYS3pBhanw==
- dependencies:
- "@octokit/openapi-types" "^14.0.0"
-
-"@octokit/types@^9.0.0":
- version "9.3.2"
- resolved "https://registry.yarnpkg.com/@octokit/types/-/types-9.3.2.tgz#3f5f89903b69f6a2d196d78ec35f888c0013cac5"
- integrity sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==
- dependencies:
- "@octokit/openapi-types" "^18.0.0"
-
-"@types/node@20.x":
- version "20.11.24"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.24.tgz#cc207511104694e84e9fb17f9a0c4c42d4517792"
- integrity sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long==
- dependencies:
- undici-types "~5.26.4"
-
-before-after-hook@^2.2.0:
- version "2.2.3"
- resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c"
- integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==
-
-deprecation@^2.0.0, deprecation@^2.3.1:
- version "2.3.1"
- resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919"
- integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==
-
-is-plain-object@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344"
- integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==
-
-jsonc-parser@^3.2.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76"
- integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==
-
-node-fetch@^2.6.7:
- version "2.7.0"
- resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d"
- integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==
- dependencies:
- whatwg-url "^5.0.0"
-
-once@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
- integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
- dependencies:
- wrappy "1"
-
-tr46@~0.0.3:
- version "0.0.3"
- resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
- integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==
-
-tunnel@^0.0.6:
- version "0.0.6"
- resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c"
- integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==
-
-undici-types@~5.26.4:
- version "5.26.5"
- resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
- integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
-
-universal-user-agent@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee"
- integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==
-
-webidl-conversions@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
- integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==
-
-whatwg-url@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
- integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==
- dependencies:
- tr46 "~0.0.3"
- webidl-conversions "^3.0.0"
-
-wrappy@1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
- integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
diff --git a/extensions/cpp/yarn.lock b/extensions/cpp/yarn.lock
deleted file mode 100644
index fb57ccd13af..00000000000
--- a/extensions/cpp/yarn.lock
+++ /dev/null
@@ -1,4 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
diff --git a/extensions/csharp/yarn.lock b/extensions/csharp/yarn.lock
deleted file mode 100644
index fb57ccd13af..00000000000
--- a/extensions/csharp/yarn.lock
+++ /dev/null
@@ -1,4 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
diff --git a/extensions/css-language-features/.npmrc b/extensions/css-language-features/.npmrc
new file mode 100644
index 00000000000..a9c57709666
--- /dev/null
+++ b/extensions/css-language-features/.npmrc
@@ -0,0 +1,2 @@
+legacy-peer-deps="true"
+timeout=180000
diff --git a/extensions/css-language-features/.vscodeignore b/extensions/css-language-features/.vscodeignore
index a08d9b8dec7..f6411e76fdb 100644
--- a/extensions/css-language-features/.vscodeignore
+++ b/extensions/css-language-features/.vscodeignore
@@ -11,9 +11,9 @@ server/tsconfig.json
server/test/**
server/bin/**
server/build/**
-server/yarn.lock
+server/package-lock.json
server/.npmignore
-yarn.lock
+package-lock.json
server/extension.webpack.config.js
extension.webpack.config.js
server/extension-browser.webpack.config.js
diff --git a/extensions/css-language-features/CONTRIBUTING.md b/extensions/css-language-features/CONTRIBUTING.md
index 1c3928b847a..d0f491be3b7 100644
--- a/extensions/css-language-features/CONTRIBUTING.md
+++ b/extensions/css-language-features/CONTRIBUTING.md
@@ -2,13 +2,13 @@
## Setup
- Clone [microsoft/vscode](https://github.com/microsoft/vscode)
-- Run `yarn` at `/`, this will install
+- Run `npm i` at `/`, this will install
- Dependencies for `/extension/css-language-features/`
- Dependencies for `/extension/css-language-features/server/`
- devDependencies such as `gulp`
- Open `/extensions/css-language-features/` as the workspace in VS Code
-- In `/extensions/css-language-features/` run `yarn compile`(or `yarn watch`) to build the client and server
+- In `/extensions/css-language-features/` run `npm run compile`(or `npm run watch`) to build the client and server
- Run the [`Launch Extension`](https://github.com/microsoft/vscode/blob/master/extensions/css-language-features/.vscode/launch.json) debug target in the Debug View. This will:
- Launch a new VS Code instance with the `css-language-features` extension loaded
- Open a `.css` file to activate the extension. The extension will start the CSS language server process.
@@ -30,14 +30,14 @@ However, within this extension, you can run a development version of `vscode-css
#### Linking `vscode-css-languageservice` in `css-language-features/server/`
- Clone [microsoft/vscode-css-languageservice](https://github.com/microsoft/vscode-css-languageservice)
-- Run `yarn` in `vscode-css-languageservice`
-- Run `yarn link` in `vscode-css-languageservice`. This will compile and link `vscode-css-languageservice`
-- In `css-language-features/server/`, run `yarn link vscode-css-languageservice`
+- Run `npm i` in `vscode-css-languageservice`
+- Run `npm link` in `vscode-css-languageservice`. This will compile and link `vscode-css-languageservice`
+- In `css-language-features/server/`, run `npm link vscode-css-languageservice`
#### Testing the development version of `vscode-css-languageservice`
- Open both `vscode-css-languageservice` and this extension in a single workspace with [multi-root workspace](https://code.visualstudio.com/docs/editor/multi-root-workspaces) feature
-- Run `yarn watch` in `vscode-css-languageservice` to recompile the extension whenever it changes
-- Run `yarn watch` at `css-language-features/server/` to recompile this extension with the linked version of `vscode-css-languageservice`
+- Run `npm run watch` in `vscode-css-languageservice` to recompile the extension whenever it changes
+- Run `npm run watch` at `css-language-features/server/` to recompile this extension with the linked version of `vscode-css-languageservice`
- Make some changes in `vscode-css-languageservice`
- Now when you run `Launch Extension` debug target, the launched instance will use your development version of `vscode-css-languageservice`. You can interactively test the language features.
diff --git a/extensions/css-language-features/client/tsconfig.json b/extensions/css-language-features/client/tsconfig.json
index 17bf7e962a8..5cf131d0677 100644
--- a/extensions/css-language-features/client/tsconfig.json
+++ b/extensions/css-language-features/client/tsconfig.json
@@ -4,7 +4,8 @@
"outDir": "./out",
"lib": [
"webworker"
- ]
+ ],
+ "module": "Node16",
},
"include": [
"src/**/*",
diff --git a/extensions/css-language-features/package-lock.json b/extensions/css-language-features/package-lock.json
new file mode 100644
index 00000000000..289e29e2abb
--- /dev/null
+++ b/extensions/css-language-features/package-lock.json
@@ -0,0 +1,135 @@
+{
+ "name": "css-language-features",
+ "version": "1.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "css-language-features",
+ "version": "1.0.0",
+ "license": "MIT",
+ "dependencies": {
+ "vscode-languageclient": "^10.0.0-next.13",
+ "vscode-uri": "^3.0.8"
+ },
+ "devDependencies": {
+ "@types/node": "20.x"
+ },
+ "engines": {
+ "vscode": "^1.77.0"
+ }
+ },
+ "node_modules/@types/node": {
+ "version": "20.11.24",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.24.tgz",
+ "integrity": "sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long==",
+ "dev": true,
+ "dependencies": {
+ "undici-types": "~5.26.4"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "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==",
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "9.0.3",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
+ "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/semver": {
+ "version": "7.6.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
+ "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/undici-types": {
+ "version": "5.26.5",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
+ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
+ "dev": true
+ },
+ "node_modules/vscode-jsonrpc": {
+ "version": "9.0.0-next.6",
+ "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-9.0.0-next.6.tgz",
+ "integrity": "sha512-KCSvUNsFiVciG9iqjJKBZOd66CN3ZKohDlYRmoOi+pd8l15MFLZ8wRG4c+wuzePGba/8WcCG2TM+C/GVlvuaeA==",
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/vscode-languageclient": {
+ "version": "10.0.0-next.13",
+ "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-10.0.0-next.13.tgz",
+ "integrity": "sha512-KLsOMJoYpkk36PIgcOjyZ4AekOfzp4kdWdRRbVKeVvSIrwrn/4RSZr0NlD6EvUBBJSsJW4WDrYY7Y3znkqa6+w==",
+ "dependencies": {
+ "minimatch": "^9.0.3",
+ "semver": "^7.6.0",
+ "vscode-languageserver-protocol": "3.17.6-next.11"
+ },
+ "engines": {
+ "vscode": "^1.91.0"
+ }
+ },
+ "node_modules/vscode-languageserver-protocol": {
+ "version": "3.17.6-next.11",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.6-next.11.tgz",
+ "integrity": "sha512-GeJxEp1TiLsp79f8WG5n10wLViXfgFKb99hU9K8m7KDWM95/QFEqWkm79f9LVm54tUK74I91a9EeiQLCS/FABQ==",
+ "dependencies": {
+ "vscode-jsonrpc": "9.0.0-next.6",
+ "vscode-languageserver-types": "3.17.6-next.5"
+ }
+ },
+ "node_modules/vscode-languageserver-types": {
+ "version": "3.17.6-next.5",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.6-next.5.tgz",
+ "integrity": "sha512-QFmf3Yl1tCgUQfA77N9Me/LXldJXkIVypQbty2rJ1DNHQkC+iwvm4Z2tXg9czSwlhvv0pD4pbF5mT7WhAglolw=="
+ },
+ "node_modules/vscode-uri": {
+ "version": "3.0.8",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz",
+ "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw=="
+ },
+ "node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ }
+ }
+}
diff --git a/extensions/css-language-features/package.json b/extensions/css-language-features/package.json
index 10cbd954154..af75de5386b 100644
--- a/extensions/css-language-features/package.json
+++ b/extensions/css-language-features/package.json
@@ -30,7 +30,7 @@
"compile": "npx gulp compile-extension:css-language-features-client compile-extension:css-language-features-server",
"watch": "npx gulp watch-extension:css-language-features-client watch-extension:css-language-features-server",
"test": "node ../../node_modules/mocha/bin/mocha",
- "install-client-next": "yarn add vscode-languageclient@next"
+ "install-client-next": "npm install vscode-languageclient@next"
},
"categories": [
"Programming Languages"
@@ -997,7 +997,7 @@
]
},
"dependencies": {
- "vscode-languageclient": "10.0.0-next.8",
+ "vscode-languageclient": "^10.0.0-next.13",
"vscode-uri": "^3.0.8"
},
"devDependencies": {
diff --git a/extensions/css-language-features/server/.npmrc b/extensions/css-language-features/server/.npmrc
new file mode 100644
index 00000000000..a9c57709666
--- /dev/null
+++ b/extensions/css-language-features/server/.npmrc
@@ -0,0 +1,2 @@
+legacy-peer-deps="true"
+timeout=180000
diff --git a/extensions/css-language-features/server/package-lock.json b/extensions/css-language-features/server/package-lock.json
new file mode 100644
index 00000000000..5fa5546e0ad
--- /dev/null
+++ b/extensions/css-language-features/server/package-lock.json
@@ -0,0 +1,111 @@
+{
+ "name": "vscode-css-languageserver",
+ "version": "1.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "vscode-css-languageserver",
+ "version": "1.0.0",
+ "license": "MIT",
+ "dependencies": {
+ "@vscode/l10n": "^0.0.18",
+ "vscode-css-languageservice": "^6.3.1",
+ "vscode-languageserver": "^10.0.0-next.11",
+ "vscode-uri": "^3.0.8"
+ },
+ "devDependencies": {
+ "@types/mocha": "^9.1.1",
+ "@types/node": "20.x"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "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/node": {
+ "version": "20.11.24",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.24.tgz",
+ "integrity": "sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long==",
+ "dev": true,
+ "dependencies": {
+ "undici-types": "~5.26.4"
+ }
+ },
+ "node_modules/@vscode/l10n": {
+ "version": "0.0.18",
+ "resolved": "https://registry.npmjs.org/@vscode/l10n/-/l10n-0.0.18.tgz",
+ "integrity": "sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ=="
+ },
+ "node_modules/undici-types": {
+ "version": "5.26.5",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
+ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
+ "dev": true
+ },
+ "node_modules/vscode-css-languageservice": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/vscode-css-languageservice/-/vscode-css-languageservice-6.3.1.tgz",
+ "integrity": "sha512-1BzTBuJfwMc3A0uX4JBdJgoxp74cjj4q2mDJdp49yD/GuAq4X0k5WtK6fNcMYr+FfJ9nqgR6lpfCSZDkARJ5qQ==",
+ "dependencies": {
+ "@vscode/l10n": "^0.0.18",
+ "vscode-languageserver-textdocument": "^1.0.12",
+ "vscode-languageserver-types": "3.17.5",
+ "vscode-uri": "^3.0.8"
+ }
+ },
+ "node_modules/vscode-jsonrpc": {
+ "version": "9.0.0-next.6",
+ "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-9.0.0-next.6.tgz",
+ "integrity": "sha512-KCSvUNsFiVciG9iqjJKBZOd66CN3ZKohDlYRmoOi+pd8l15MFLZ8wRG4c+wuzePGba/8WcCG2TM+C/GVlvuaeA==",
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/vscode-languageserver": {
+ "version": "10.0.0-next.11",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-10.0.0-next.11.tgz",
+ "integrity": "sha512-cmobSrVDYhlh/t02vz/bV8nNpds8mus5HnILULae2iAvOjoaJPnTAp0jJWoYdUqTpIVzT9JV6JMKqLEvdqpeqg==",
+ "dependencies": {
+ "vscode-languageserver-protocol": "3.17.6-next.11"
+ },
+ "bin": {
+ "installServerIntoExtension": "bin/installServerIntoExtension"
+ }
+ },
+ "node_modules/vscode-languageserver-protocol": {
+ "version": "3.17.6-next.11",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.6-next.11.tgz",
+ "integrity": "sha512-GeJxEp1TiLsp79f8WG5n10wLViXfgFKb99hU9K8m7KDWM95/QFEqWkm79f9LVm54tUK74I91a9EeiQLCS/FABQ==",
+ "dependencies": {
+ "vscode-jsonrpc": "9.0.0-next.6",
+ "vscode-languageserver-types": "3.17.6-next.5"
+ }
+ },
+ "node_modules/vscode-languageserver-protocol/node_modules/vscode-languageserver-types": {
+ "version": "3.17.6-next.5",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.6-next.5.tgz",
+ "integrity": "sha512-QFmf3Yl1tCgUQfA77N9Me/LXldJXkIVypQbty2rJ1DNHQkC+iwvm4Z2tXg9czSwlhvv0pD4pbF5mT7WhAglolw=="
+ },
+ "node_modules/vscode-languageserver-textdocument": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz",
+ "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA=="
+ },
+ "node_modules/vscode-languageserver-types": {
+ "version": "3.17.5",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz",
+ "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg=="
+ },
+ "node_modules/vscode-uri": {
+ "version": "3.0.8",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz",
+ "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw=="
+ }
+ }
+}
diff --git a/extensions/css-language-features/server/package.json b/extensions/css-language-features/server/package.json
index 329fe57fc57..33153ad03cf 100644
--- a/extensions/css-language-features/server/package.json
+++ b/extensions/css-language-features/server/package.json
@@ -12,7 +12,7 @@
"dependencies": {
"@vscode/l10n": "^0.0.18",
"vscode-css-languageservice": "^6.3.1",
- "vscode-languageserver": "10.0.0-next.6",
+ "vscode-languageserver": "^10.0.0-next.11",
"vscode-uri": "^3.0.8"
},
"devDependencies": {
@@ -22,10 +22,10 @@
"scripts": {
"compile": "gulp compile-extension:css-language-features-server",
"watch": "gulp watch-extension:css-language-features-server",
- "install-service-next": "yarn add vscode-css-languageservice@next",
- "install-service-local": "yarn link vscode-css-languageservice",
- "install-server-next": "yarn add vscode-languageserver@next",
- "install-server-local": "yarn link vscode-languageserver",
+ "install-service-next": "npm install vscode-css-languageservice@next",
+ "install-service-local": "npm link vscode-css-languageservice",
+ "install-server-next": "npm install vscode-languageserver@next",
+ "install-server-local": "npm install vscode-languageserver",
"test": "node ./test/index.js"
}
}
diff --git a/extensions/css-language-features/server/src/browser/cssServerWorkerMain.ts b/extensions/css-language-features/server/src/browser/cssServerWorkerMain.ts
index bc645de8170..4f2ae207c16 100644
--- a/extensions/css-language-features/server/src/browser/cssServerWorkerMain.ts
+++ b/extensions/css-language-features/server/src/browser/cssServerWorkerMain.ts
@@ -22,7 +22,7 @@ const messageHandler = async (e: any) => {
} else {
l10nLog.push(`l10n: No bundle configured.`);
}
- await import('./cssServerMain');
+ await import('./cssServerMain.js');
if (self.onmessage !== messageHandler) {
pendingMessages.forEach(msg => self.onmessage?.(msg));
pendingMessages.length = 0;
diff --git a/extensions/css-language-features/server/src/node/cssServerNodeMain.ts b/extensions/css-language-features/server/src/node/cssServerNodeMain.ts
index 3d566c754ed..67d8439fd9b 100644
--- a/extensions/css-language-features/server/src/node/cssServerNodeMain.ts
+++ b/extensions/css-language-features/server/src/node/cssServerNodeMain.ts
@@ -15,7 +15,7 @@ async function setupMain() {
l10nLog.push(`l10n: Problems loading ${i10lLocation.toString()} : ${e}`);
}
}
- await import('./cssServerMain');
+ await import('./cssServerMain.js');
l10nLog.forEach(console.log);
}
setupMain();
diff --git a/extensions/css-language-features/server/tsconfig.json b/extensions/css-language-features/server/tsconfig.json
index ae02026a740..e21408bda97 100644
--- a/extensions/css-language-features/server/tsconfig.json
+++ b/extensions/css-language-features/server/tsconfig.json
@@ -5,7 +5,8 @@
"lib": [
"ES2020",
"WebWorker"
- ]
+ ],
+ "module": "Node16",
},
"include": [
"src/**/*"
diff --git a/extensions/css-language-features/server/yarn.lock b/extensions/css-language-features/server/yarn.lock
deleted file mode 100644
index f59aed24630..00000000000
--- a/extensions/css-language-features/server/yarn.lock
+++ /dev/null
@@ -1,75 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
-"@types/mocha@^9.1.1":
- version "9.1.1"
- resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-9.1.1.tgz#e7c4f1001eefa4b8afbd1eee27a237fee3bf29c4"
- integrity sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==
-
-"@types/node@20.x":
- version "20.11.24"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.24.tgz#cc207511104694e84e9fb17f9a0c4c42d4517792"
- integrity sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long==
- dependencies:
- undici-types "~5.26.4"
-
-"@vscode/l10n@^0.0.18":
- version "0.0.18"
- resolved "https://registry.yarnpkg.com/@vscode/l10n/-/l10n-0.0.18.tgz#916d3a5e960dbab47c1c56f58a7cb5087b135c95"
- integrity sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ==
-
-undici-types@~5.26.4:
- version "5.26.5"
- resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
- integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
-
-vscode-css-languageservice@^6.3.1:
- version "6.3.1"
- resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-6.3.1.tgz#56733c90686db56855ccc156a534a68b8c1f2187"
- integrity sha512-1BzTBuJfwMc3A0uX4JBdJgoxp74cjj4q2mDJdp49yD/GuAq4X0k5WtK6fNcMYr+FfJ9nqgR6lpfCSZDkARJ5qQ==
- dependencies:
- "@vscode/l10n" "^0.0.18"
- vscode-languageserver-textdocument "^1.0.12"
- vscode-languageserver-types "3.17.5"
- vscode-uri "^3.0.8"
-
-vscode-jsonrpc@9.0.0-next.4:
- version "9.0.0-next.4"
- resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-9.0.0-next.4.tgz#ba403ddb3b82ca578179963dbe08e120a935f50d"
- integrity sha512-zSVIr58lJSMYKIsZ5P7GtBbv1eEx25eNyOf0NmEzxmn1GhUNJAVAb5hkA1poKUwj1FRMwN6CeyWxZypmr8SsQQ==
-
-vscode-languageserver-protocol@3.17.6-next.6:
- version "3.17.6-next.6"
- resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.6-next.6.tgz#8863a4dc8b395a8c31106ffdc945a00f9163b68b"
- integrity sha512-naxM9kc/phpl0kAFNVPejMUWUtzFXdPYY/BtQTYtfbBbHf8sceHOrKkmf6yynZRu1A4oFtRZNqV3wyFRTWqUHw==
- dependencies:
- vscode-jsonrpc "9.0.0-next.4"
- vscode-languageserver-types "3.17.6-next.4"
-
-vscode-languageserver-textdocument@^1.0.12:
- version "1.0.12"
- resolved "https://registry.yarnpkg.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz#457ee04271ab38998a093c68c2342f53f6e4a631"
- integrity sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==
-
-vscode-languageserver-types@3.17.5:
- version "3.17.5"
- resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz#3273676f0cf2eab40b3f44d085acbb7f08a39d8a"
- integrity sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==
-
-vscode-languageserver-types@3.17.6-next.4:
- version "3.17.6-next.4"
- resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.6-next.4.tgz#6670939eb98f00aa7b05021dc3dd7fe9aa4453ea"
- integrity sha512-SeJTpH/S14EbxOAVaOUoGVqPToqpRTld5QO5Ghig3AlbFJTFF9Wu7srHMfa85L0SX1RYAuuCSFKJVVCxDIk1/Q==
-
-vscode-languageserver@10.0.0-next.6:
- version "10.0.0-next.6"
- resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-10.0.0-next.6.tgz#0db118a93fe010c6b40cd04e91a15d09e7b60b60"
- integrity sha512-0Lh1nhQfSxo5Ob+ayYO1QTIsDix2/Lc72Urm1KZrCFxK5zIFYaEh3QFeM9oZih4Rzs0ZkQPXXnoHtpvs5GT+Zw==
- dependencies:
- vscode-languageserver-protocol "3.17.6-next.6"
-
-vscode-uri@^3.0.8:
- version "3.0.8"
- resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.0.8.tgz#1770938d3e72588659a172d0fd4642780083ff9f"
- integrity sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==
diff --git a/extensions/css-language-features/yarn.lock b/extensions/css-language-features/yarn.lock
deleted file mode 100644
index 28dc1c05f96..00000000000
--- a/extensions/css-language-features/yarn.lock
+++ /dev/null
@@ -1,85 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
-"@types/node@20.x":
- version "20.11.24"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.24.tgz#cc207511104694e84e9fb17f9a0c4c42d4517792"
- integrity sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long==
- dependencies:
- undici-types "~5.26.4"
-
-balanced-match@^1.0.0:
- version "1.0.2"
- resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz"
- integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
-
-brace-expansion@^2.0.1:
- version "2.0.1"
- resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz"
- integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
- dependencies:
- balanced-match "^1.0.0"
-
-lru-cache@^6.0.0:
- version "6.0.0"
- resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz"
- integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
- dependencies:
- yallist "^4.0.0"
-
-minimatch@^9.0.3:
- version "9.0.3"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825"
- integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==
- dependencies:
- brace-expansion "^2.0.1"
-
-semver@^7.6.0:
- version "7.6.0"
- resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d"
- integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==
- dependencies:
- lru-cache "^6.0.0"
-
-undici-types@~5.26.4:
- version "5.26.5"
- resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
- integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
-
-vscode-jsonrpc@9.0.0-next.4:
- version "9.0.0-next.4"
- resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-9.0.0-next.4.tgz#ba403ddb3b82ca578179963dbe08e120a935f50d"
- integrity sha512-zSVIr58lJSMYKIsZ5P7GtBbv1eEx25eNyOf0NmEzxmn1GhUNJAVAb5hkA1poKUwj1FRMwN6CeyWxZypmr8SsQQ==
-
-vscode-languageclient@10.0.0-next.8:
- version "10.0.0-next.8"
- resolved "https://registry.yarnpkg.com/vscode-languageclient/-/vscode-languageclient-10.0.0-next.8.tgz#5afa0ced3b2ac68d31cc1c48edc4f289744542a0"
- integrity sha512-D9inIHgqKayO9Tv0MeLb3XIL76yTuWmKdHqcGZKzjtQrMGJgASJDYWTapu+yAjEpDp0gmVOaCYyIlLB86ncDoQ==
- dependencies:
- minimatch "^9.0.3"
- semver "^7.6.0"
- vscode-languageserver-protocol "3.17.6-next.6"
-
-vscode-languageserver-protocol@3.17.6-next.6:
- version "3.17.6-next.6"
- resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.6-next.6.tgz#8863a4dc8b395a8c31106ffdc945a00f9163b68b"
- integrity sha512-naxM9kc/phpl0kAFNVPejMUWUtzFXdPYY/BtQTYtfbBbHf8sceHOrKkmf6yynZRu1A4oFtRZNqV3wyFRTWqUHw==
- dependencies:
- vscode-jsonrpc "9.0.0-next.4"
- vscode-languageserver-types "3.17.6-next.4"
-
-vscode-languageserver-types@3.17.6-next.4:
- version "3.17.6-next.4"
- resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.6-next.4.tgz#6670939eb98f00aa7b05021dc3dd7fe9aa4453ea"
- integrity sha512-SeJTpH/S14EbxOAVaOUoGVqPToqpRTld5QO5Ghig3AlbFJTFF9Wu7srHMfa85L0SX1RYAuuCSFKJVVCxDIk1/Q==
-
-vscode-uri@^3.0.8:
- version "3.0.8"
- resolved "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz"
- integrity sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==
-
-yallist@^4.0.0:
- version "4.0.0"
- resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz"
- integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
diff --git a/extensions/css/yarn.lock b/extensions/css/yarn.lock
deleted file mode 100644
index fb57ccd13af..00000000000
--- a/extensions/css/yarn.lock
+++ /dev/null
@@ -1,4 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
diff --git a/extensions/dart/cgmanifest.json b/extensions/dart/cgmanifest.json
index df4e4f0aae9..da493cafa70 100644
--- a/extensions/dart/cgmanifest.json
+++ b/extensions/dart/cgmanifest.json
@@ -6,7 +6,7 @@
"git": {
"name": "dart-lang/dart-syntax-highlight",
"repositoryUrl": "https://github.com/dart-lang/dart-syntax-highlight",
- "commitHash": "bb8f7eebf5a1028e70dbebcf35cfef738dddc7fe"
+ "commitHash": "e8b053f9834cb44db0f49ac4a4567177bd943dbf"
}
},
"licenseDetail": [
diff --git a/extensions/dart/syntaxes/dart.tmLanguage.json b/extensions/dart/syntaxes/dart.tmLanguage.json
index 5a4a9393bc7..32ea3f5b0c3 100644
--- a/extensions/dart/syntaxes/dart.tmLanguage.json
+++ b/extensions/dart/syntaxes/dart.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/dart-lang/dart-syntax-highlight/commit/bb8f7eebf5a1028e70dbebcf35cfef738dddc7fe",
+ "version": "https://github.com/dart-lang/dart-syntax-highlight/commit/e8b053f9834cb44db0f49ac4a4567177bd943dbf",
"name": "Dart",
"scopeName": "source.dart",
"patterns": [
@@ -212,7 +212,7 @@
},
{
"name": "constant.numeric.dart",
- "match": "(?=12.0.0"
+ }
+ },
+ "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/jsonc-parser": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.3.1.tgz",
+ "integrity": "sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg=="
+ },
+ "node_modules/queue": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz",
+ "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==",
+ "dependencies": {
+ "inherits": "~2.0.3"
+ }
+ },
+ "node_modules/undici-types": {
+ "version": "5.26.5",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
+ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
+ "dev": true
+ },
+ "node_modules/vscode-languageserver-textdocument": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.3.tgz",
+ "integrity": "sha512-ynEGytvgTb6HVSUwPJIAZgiHQmPCx8bZ8w5um5Lz+q5DjP0Zj8wTFhQpyg8xaMvefDytw2+HH5yzqS+FhsR28A=="
+ },
+ "node_modules/vscode-languageserver-types": {
+ "version": "3.17.3",
+ "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.3.tgz",
+ "integrity": "sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA=="
+ },
+ "node_modules/vscode-uri": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-2.1.2.tgz",
+ "integrity": "sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A=="
+ }
+ }
+}
diff --git a/extensions/emmet/package.json b/extensions/emmet/package.json
index 1783bc2ceaf..a390a86fc2e 100644
--- a/extensions/emmet/package.json
+++ b/extensions/emmet/package.json
@@ -476,7 +476,7 @@
"scripts": {
"watch": "gulp watch-extension:emmet",
"compile": "gulp compile-extension:emmet",
- "deps": "yarn add @vscode/emmet-helper"
+ "deps": "npm install @vscode/emmet-helper"
},
"devDependencies": {
"@types/node": "20.x"
diff --git a/extensions/emmet/yarn.lock b/extensions/emmet/yarn.lock
deleted file mode 100644
index b75842fe4a4..00000000000
--- a/extensions/emmet/yarn.lock
+++ /dev/null
@@ -1,124 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
-"@emmetio/abbreviation@^2.3.3":
- version "2.3.3"
- resolved "https://registry.yarnpkg.com/@emmetio/abbreviation/-/abbreviation-2.3.3.tgz#ed2b88fe37b972292d6026c7c540aaf887cecb6e"
- integrity sha512-mgv58UrU3rh4YgbE/TzgLQwJ3pFsHHhCLqY20aJq+9comytTXUDNGG/SMtSeMJdkpxgXSXunBGLD8Boka3JyVA==
- dependencies:
- "@emmetio/scanner" "^1.0.4"
-
-"@emmetio/css-abbreviation@^2.1.8":
- version "2.1.8"
- resolved "https://registry.yarnpkg.com/@emmetio/css-abbreviation/-/css-abbreviation-2.1.8.tgz#b785313486eba6cb7eb623ad39378c4e1063dc00"
- integrity sha512-s9yjhJ6saOO/uk1V74eifykk2CBYi01STTK3WlXWGOepyKa23ymJ053+DNQjpFcy1ingpaO7AxCcwLvHFY9tuw==
- dependencies:
- "@emmetio/scanner" "^1.0.4"
-
-"@emmetio/css-parser@ramya-rao-a/css-parser#vscode":
- version "0.4.0"
- resolved "https://codeload.github.com/ramya-rao-a/css-parser/tar.gz/370c480ac103bd17c7bcfb34bf5d577dc40d3660"
- dependencies:
- "@emmetio/stream-reader" "^2.2.0"
- "@emmetio/stream-reader-utils" "^0.1.0"
-
-"@emmetio/html-matcher@^0.3.3":
- version "0.3.3"
- resolved "https://registry.yarnpkg.com/@emmetio/html-matcher/-/html-matcher-0.3.3.tgz#0bbdadc0882e185950f03737dc6dbf8f7bd90728"
- integrity sha1-C72twIguGFlQ8Dc33G2/j3vZByg=
- dependencies:
- "@emmetio/stream-reader" "^2.0.0"
- "@emmetio/stream-reader-utils" "^0.1.0"
-
-"@emmetio/math-expression@^1.0.5":
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/@emmetio/math-expression/-/math-expression-1.0.5.tgz#d0cc52ed453a107bc9b19c5d71d1390d3aecbe48"
- integrity sha512-qf5SXD/ViS04rXSeDg9CRGM10xLC9dVaKIbMHrrwxYr5LNB/C0rOfokhGSBwnVQKcidLmdRJeNWH1V1tppZ84Q==
- dependencies:
- "@emmetio/scanner" "^1.0.4"
-
-"@emmetio/scanner@^1.0.4":
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/@emmetio/scanner/-/scanner-1.0.4.tgz#e9cdc67194fd91f8b7eb141014be4f2d086c15f1"
- integrity sha512-IqRuJtQff7YHHBk4G8YZ45uB9BaAGcwQeVzgj/zj8/UdOhtQpEIupUhSk8dys6spFIWVZVeK20CzGEnqR5SbqA==
-
-"@emmetio/stream-reader-utils@^0.1.0":
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/@emmetio/stream-reader-utils/-/stream-reader-utils-0.1.0.tgz#244cb02c77ec2e74f78a9bd318218abc9c500a61"
- integrity sha1-JEywLHfsLnT3ipvTGCGKvJxQCmE=
-
-"@emmetio/stream-reader@^2.0.0", "@emmetio/stream-reader@^2.2.0":
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/@emmetio/stream-reader/-/stream-reader-2.2.0.tgz#46cffea119a0a003312a21c2d9b5628cb5fcd442"
- integrity sha1-Rs/+oRmgoAMxKiHC2bVijLX81EI=
-
-"@types/node@20.x":
- version "20.11.24"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.24.tgz#cc207511104694e84e9fb17f9a0c4c42d4517792"
- integrity sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long==
- dependencies:
- undici-types "~5.26.4"
-
-"@vscode/emmet-helper@^2.8.8":
- version "2.9.3"
- resolved "https://registry.yarnpkg.com/@vscode/emmet-helper/-/emmet-helper-2.9.3.tgz#8a8b228981fcf2d9346fdca77b9ad5a31dc09dba"
- integrity sha512-rB39LHWWPQYYlYfpv9qCoZOVioPCftKXXqrsyqN1mTWZM6dTnONT63Db+03vgrBbHzJN45IrgS/AGxw9iiqfEw==
- dependencies:
- emmet "^2.4.3"
- jsonc-parser "^2.3.0"
- vscode-languageserver-textdocument "^1.0.1"
- vscode-languageserver-types "^3.15.1"
- vscode-uri "^2.1.2"
-
-emmet@^2.4.3:
- version "2.4.7"
- resolved "https://registry.yarnpkg.com/emmet/-/emmet-2.4.7.tgz#19893c34e6274af14ea3c5729101e3c4ed18f01e"
- integrity sha512-O5O5QNqtdlnQM2bmKHtJgyChcrFMgQuulI+WdiOw2NArzprUqqxUW6bgYtKvzKgrsYpuLWalOkdhNP+1jluhCA==
- dependencies:
- "@emmetio/abbreviation" "^2.3.3"
- "@emmetio/css-abbreviation" "^2.1.8"
-
-image-size@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/image-size/-/image-size-1.0.0.tgz#58b31fe4743b1cec0a0ac26f5c914d3c5b2f0750"
- integrity sha512-JLJ6OwBfO1KcA+TvJT+v8gbE6iWbj24LyDNFgFEN0lzegn6cC6a/p3NIDaepMsJjQjlUWqIC7wJv8lBFxPNjcw==
- dependencies:
- queue "6.0.2"
-
-inherits@~2.0.3:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
- integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
-
-jsonc-parser@^2.3.0:
- version "2.3.1"
- resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-2.3.1.tgz#59549150b133f2efacca48fe9ce1ec0659af2342"
- integrity sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==
-
-queue@6.0.2:
- version "6.0.2"
- resolved "https://registry.yarnpkg.com/queue/-/queue-6.0.2.tgz#b91525283e2315c7553d2efa18d83e76432fed65"
- integrity sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==
- dependencies:
- inherits "~2.0.3"
-
-undici-types@~5.26.4:
- version "5.26.5"
- resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
- integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
-
-vscode-languageserver-textdocument@^1.0.1:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.3.tgz#879f2649bfa5a6e07bc8b392c23ede2dfbf43eff"
- integrity sha512-ynEGytvgTb6HVSUwPJIAZgiHQmPCx8bZ8w5um5Lz+q5DjP0Zj8wTFhQpyg8xaMvefDytw2+HH5yzqS+FhsR28A==
-
-vscode-languageserver-types@^3.15.1:
- version "3.17.3"
- resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.3.tgz#72d05e47b73be93acb84d6e311b5786390f13f64"
- integrity sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA==
-
-vscode-uri@^2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-2.1.2.tgz#c8d40de93eb57af31f3c715dd650e2ca2c096f1c"
- integrity sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A==
diff --git a/extensions/extension-editing/.npmrc b/extensions/extension-editing/.npmrc
new file mode 100644
index 00000000000..a9c57709666
--- /dev/null
+++ b/extensions/extension-editing/.npmrc
@@ -0,0 +1,2 @@
+legacy-peer-deps="true"
+timeout=180000
diff --git a/extensions/extension-editing/.vscodeignore b/extensions/extension-editing/.vscodeignore
index de8e6dc5913..8d4da76b9cb 100644
--- a/extensions/extension-editing/.vscodeignore
+++ b/extensions/extension-editing/.vscodeignore
@@ -4,4 +4,4 @@ tsconfig.json
out/**
extension.webpack.config.js
extension-browser.webpack.config.js
-yarn.lock
+package-lock.json
diff --git a/extensions/extension-editing/package-lock.json b/extensions/extension-editing/package-lock.json
new file mode 100644
index 00000000000..f069539cead
--- /dev/null
+++ b/extensions/extension-editing/package-lock.json
@@ -0,0 +1,114 @@
+{
+ "name": "extension-editing",
+ "version": "1.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "extension-editing",
+ "version": "1.0.0",
+ "license": "MIT",
+ "dependencies": {
+ "jsonc-parser": "^3.2.0",
+ "markdown-it": "^12.3.2",
+ "parse5": "^3.0.2"
+ },
+ "devDependencies": {
+ "@types/markdown-it": "0.0.2",
+ "@types/node": "20.x"
+ },
+ "engines": {
+ "vscode": "^1.4.0"
+ }
+ },
+ "node_modules/@types/markdown-it": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-0.0.2.tgz",
+ "integrity": "sha1-XZrRnm5lCM3S8llt+G/Qqt5ZhmA= sha512-A2seE+zJYSjGHy7L/v0EN/xRfgv2A60TuXOwI8tt5aZxF4UeoYIkM2jERnNH8w4VFr7oFEm0lElGOao7fZgygQ==",
+ "dev": true
+ },
+ "node_modules/@types/node": {
+ "version": "20.11.24",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.24.tgz",
+ "integrity": "sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long==",
+ "dev": true,
+ "dependencies": {
+ "undici-types": "~5.26.4"
+ }
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
+ },
+ "node_modules/entities": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz",
+ "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==",
+ "license": "BSD-2-Clause",
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
+ "node_modules/jsonc-parser": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz",
+ "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w=="
+ },
+ "node_modules/linkify-it": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz",
+ "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==",
+ "license": "MIT",
+ "dependencies": {
+ "uc.micro": "^1.0.1"
+ }
+ },
+ "node_modules/markdown-it": {
+ "version": "12.3.2",
+ "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz",
+ "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==",
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^2.0.1",
+ "entities": "~2.1.0",
+ "linkify-it": "^3.0.1",
+ "mdurl": "^1.0.1",
+ "uc.micro": "^1.0.5"
+ },
+ "bin": {
+ "markdown-it": "bin/markdown-it.js"
+ }
+ },
+ "node_modules/mdurl": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
+ "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4= sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g=="
+ },
+ "node_modules/parse5": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.2.tgz",
+ "integrity": "sha1-Be/1fw70V3+xRKefi5qWemzERRA= sha512-yQW05f47bKFJa0WdnyzP7vh7+B+w8jhVsFBBiaEbIfNDSSt8GADBhcQgsdYxatQ7rVs1nU9cmsYXURGWBH3Siw==",
+ "dependencies": {
+ "@types/node": "^6.0.46"
+ }
+ },
+ "node_modules/parse5/node_modules/@types/node": {
+ "version": "6.0.78",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.78.tgz",
+ "integrity": "sha512-+vD6E8ixntRzzZukoF3uP1iV+ZjVN3koTcaeK+BEoc/kSfGbLDIGC7RmCaUgVpUfN6cWvfczFRERCyKM9mkvXg=="
+ },
+ "node_modules/uc.micro": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz",
+ "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==",
+ "license": "MIT"
+ },
+ "node_modules/undici-types": {
+ "version": "5.26.5",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
+ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
+ "dev": true
+ }
+ }
+}
diff --git a/extensions/extension-editing/src/extensionLinter.ts b/extensions/extension-editing/src/extensionLinter.ts
index b69dac0e2dd..be7eea1a49b 100644
--- a/extensions/extension-editing/src/extensionLinter.ts
+++ b/extensions/extension-editing/src/extensionLinter.ts
@@ -290,7 +290,7 @@ export class ExtensionLinter {
const text = document.getText();
if (!this.markdownIt) {
- this.markdownIt = new (await import('markdown-it'));
+ this.markdownIt = new ((await import('markdown-it')).default);
}
const tokens = this.markdownIt.parse(text, {});
const tokensAndPositions: TokenAndPosition[] = (function toTokensAndPositions(this: ExtensionLinter, tokens: MarkdownItType.Token[], begin = 0, end = text.length): TokenAndPosition[] {
diff --git a/extensions/extension-editing/yarn.lock b/extensions/extension-editing/yarn.lock
deleted file mode 100644
index 00fad585fd1..00000000000
--- a/extensions/extension-editing/yarn.lock
+++ /dev/null
@@ -1,75 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
-"@types/markdown-it@0.0.2":
- version "0.0.2"
- resolved "https://registry.yarnpkg.com/@types/markdown-it/-/markdown-it-0.0.2.tgz#5d9ad19e6e6508cdd2f2596df86fd0aade598660"
- integrity sha1-XZrRnm5lCM3S8llt+G/Qqt5ZhmA=
-
-"@types/node@20.x":
- version "20.11.24"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.24.tgz#cc207511104694e84e9fb17f9a0c4c42d4517792"
- integrity sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long==
- dependencies:
- undici-types "~5.26.4"
-
-"@types/node@^6.0.46":
- version "6.0.78"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.78.tgz#5d4a3f579c1524e01ee21bf474e6fba09198f470"
- integrity sha512-+vD6E8ixntRzzZukoF3uP1iV+ZjVN3koTcaeK+BEoc/kSfGbLDIGC7RmCaUgVpUfN6cWvfczFRERCyKM9mkvXg==
-
-argparse@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
- integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
-
-entities@~2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5"
- integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==
-
-jsonc-parser@^3.2.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76"
- integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==
-
-linkify-it@^3.0.1:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-3.0.3.tgz#a98baf44ce45a550efb4d49c769d07524cc2fa2e"
- integrity sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==
- dependencies:
- uc.micro "^1.0.1"
-
-markdown-it@^12.3.2:
- version "12.3.2"
- resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-12.3.2.tgz#bf92ac92283fe983fe4de8ff8abfb5ad72cd0c90"
- integrity sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==
- dependencies:
- argparse "^2.0.1"
- entities "~2.1.0"
- linkify-it "^3.0.1"
- mdurl "^1.0.1"
- uc.micro "^1.0.5"
-
-mdurl@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e"
- integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=
-
-parse5@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.2.tgz#05eff57f0ef4577fb144a79f8b9a967a6cc44510"
- integrity sha1-Be/1fw70V3+xRKefi5qWemzERRA=
- dependencies:
- "@types/node" "^6.0.46"
-
-uc.micro@^1.0.1, uc.micro@^1.0.5:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac"
- integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==
-
-undici-types@~5.26.4:
- version "5.26.5"
- resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
- integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
diff --git a/extensions/fsharp/cgmanifest.json b/extensions/fsharp/cgmanifest.json
index f10f9ca661a..75e24896d8e 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": "7d1b695da917dc4c7a0f7fb4683f42da208f87a2"
+ "commitHash": "c62c78404d0b2c14816aae61ac0688663a5990a3"
}
},
"license": "MIT",
diff --git a/extensions/fsharp/syntaxes/fsharp.tmLanguage.json b/extensions/fsharp/syntaxes/fsharp.tmLanguage.json
index 41436335cdc..8ba555b7772 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/7d1b695da917dc4c7a0f7fb4683f42da208f87a2",
+ "version": "https://github.com/ionide/ionide-fsgrammar/commit/c62c78404d0b2c14816aae61ac0688663a5990a3",
"name": "fsharp",
"scopeName": "source.fsharp",
"patterns": [
@@ -635,7 +635,7 @@
},
"abstract_definition": {
"name": "abstract.definition.fsharp",
- "begin": "\\b(static)?\\s+(abstract)\\s+(member)?(\\s+\\[\\<.*\\>\\])?\\s*([_[:alpha:]0-9,\\._`\\s]+)(<)?",
+ "begin": "\\b(static\\s+)?(abstract)\\s+(member)?(\\s+\\[\\<.*\\>\\])?\\s*([_[:alpha:]0-9,\\._`\\s]+)(<)?",
"end": "\\s*(with)\\b|=|$",
"beginCaptures": {
"1": {
@@ -936,7 +936,7 @@
"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|default|member|override|let!)(\\s+rec|mutable)?(\\s+\\[\\<.*\\>\\])?\\s*(private|internal|public)?\\s+(\\[[^-=]*\\]|[_[:alpha:]]([_[:alpha:]0-9\\._]+)*|``[_[:alpha:]]([_[:alpha:]0-9\\._`\\s]+|(?<=,)\\s)*)?",
+ "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+=|(?<=\\=)))",
"beginCaptures": {
"1": {
@@ -1133,7 +1133,7 @@
},
{
"name": "keyword.symbol.fsharp",
- "match": "(&&&|\\|\\|\\||\\^\\^\\^|~~~|~\\+|~\\-|<<<|>>>|\\|>|:>|:\\?>|:|\\[|\\]|\\;|<>|=|@|\\|\\||&&|&|%|{|}|\\||_|\\.\\.|\\,|\\+|\\-|\\*|\\/|\\^|\\!|\\>|\\>\\=|\\>\\>|\\<|\\<\\=|\\(|\\)|\\<\\<)"
+ "match": "[.?]*(&&&|\\|\\|\\||\\^\\^\\^|~~~|~\\+|~\\-|<<<|>>>|\\|>|:>|:\\?>|:|\\[|\\]|\\;|<>|=|@|\\|\\||&&|&|%|{|}|\\||_|\\.\\.|\\,|\\+|\\-|\\*|\\/|\\^|\\!|\\>|\\>\\=|\\>\\>|\\<|\\<\\=|\\(|\\)|\\<\\<)[.?]*"
}
]
},
diff --git a/extensions/fsharp/yarn.lock b/extensions/fsharp/yarn.lock
deleted file mode 100644
index fb57ccd13af..00000000000
--- a/extensions/fsharp/yarn.lock
+++ /dev/null
@@ -1,4 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
diff --git a/extensions/git-base/.npmrc b/extensions/git-base/.npmrc
new file mode 100644
index 00000000000..a9c57709666
--- /dev/null
+++ b/extensions/git-base/.npmrc
@@ -0,0 +1,2 @@
+legacy-peer-deps="true"
+timeout=180000
diff --git a/extensions/git-base/package-lock.json b/extensions/git-base/package-lock.json
new file mode 100644
index 00000000000..f4b29739ca6
--- /dev/null
+++ b/extensions/git-base/package-lock.json
@@ -0,0 +1,34 @@
+{
+ "name": "git-base",
+ "version": "1.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "git-base",
+ "version": "1.0.0",
+ "license": "MIT",
+ "devDependencies": {
+ "@types/node": "20.x"
+ },
+ "engines": {
+ "vscode": "0.10.x"
+ }
+ },
+ "node_modules/@types/node": {
+ "version": "20.11.24",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.24.tgz",
+ "integrity": "sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long==",
+ "dev": true,
+ "dependencies": {
+ "undici-types": "~5.26.4"
+ }
+ },
+ "node_modules/undici-types": {
+ "version": "5.26.5",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
+ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
+ "dev": true
+ }
+ }
+}
diff --git a/extensions/git-base/yarn.lock b/extensions/git-base/yarn.lock
deleted file mode 100644
index 1f4b6c2e8b4..00000000000
--- a/extensions/git-base/yarn.lock
+++ /dev/null
@@ -1,15 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
-"@types/node@20.x":
- version "20.11.24"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.24.tgz#cc207511104694e84e9fb17f9a0c4c42d4517792"
- integrity sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long==
- dependencies:
- undici-types "~5.26.4"
-
-undici-types@~5.26.4:
- version "5.26.5"
- resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
- integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
diff --git a/extensions/git/.npmrc b/extensions/git/.npmrc
new file mode 100644
index 00000000000..a9c57709666
--- /dev/null
+++ b/extensions/git/.npmrc
@@ -0,0 +1,2 @@
+legacy-peer-deps="true"
+timeout=180000
diff --git a/extensions/git/.vscodeignore b/extensions/git/.vscodeignore
index 94d2dc921e0..1e6130d5c7d 100644
--- a/extensions/git/.vscodeignore
+++ b/extensions/git/.vscodeignore
@@ -4,4 +4,4 @@ out/**
tsconfig.json
build/**
extension.webpack.config.js
-yarn.lock
+package-lock.json
diff --git a/extensions/git/package-lock.json b/extensions/git/package-lock.json
new file mode 100644
index 00000000000..b15b708e618
--- /dev/null
+++ b/extensions/git/package-lock.json
@@ -0,0 +1,420 @@
+{
+ "name": "git",
+ "version": "1.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "git",
+ "version": "1.0.0",
+ "license": "MIT",
+ "dependencies": {
+ "@joaomoreno/unique-names-generator": "^5.1.0",
+ "@vscode/extension-telemetry": "^0.9.0",
+ "@vscode/iconv-lite-umd": "0.7.0",
+ "byline": "^5.0.0",
+ "file-type": "16.5.4",
+ "jschardet": "3.1.4",
+ "picomatch": "2.3.1",
+ "vscode-uri": "^2.0.0",
+ "which": "4.0.0"
+ },
+ "devDependencies": {
+ "@types/byline": "4.2.31",
+ "@types/mocha": "^9.1.1",
+ "@types/node": "20.x",
+ "@types/picomatch": "2.3.0",
+ "@types/which": "3.0.0"
+ },
+ "engines": {
+ "vscode": "^1.5.0"
+ }
+ },
+ "node_modules/@joaomoreno/unique-names-generator": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/@joaomoreno/unique-names-generator/-/unique-names-generator-5.1.0.tgz",
+ "integrity": "sha512-KEVThTpUIKPb7dBKJ9mJ3WYnD1mJZZsEinCSp9CVEPlWbDagurFv1RKRjvvujrLfJzsGc0HkBHS9W8Bughao4A==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@microsoft/1ds-core-js": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/@microsoft/1ds-core-js/-/1ds-core-js-4.0.3.tgz",
+ "integrity": "sha512-FrxNLVAPsAvD7+l63TlNS/Kodvpct2WulpDSn1dI4Xuy0kF4E2H867kHdwL/iY1Bj3zA3FSy/jvE4+OcDws7ug==",
+ "dependencies": {
+ "@microsoft/applicationinsights-core-js": "3.0.4",
+ "@microsoft/applicationinsights-shims": "3.0.1",
+ "@microsoft/dynamicproto-js": "^2.0.2",
+ "@nevware21/ts-async": ">= 0.3.0 < 2.x",
+ "@nevware21/ts-utils": ">= 0.10.1 < 2.x"
+ }
+ },
+ "node_modules/@microsoft/1ds-post-js": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/@microsoft/1ds-post-js/-/1ds-post-js-4.0.3.tgz",
+ "integrity": "sha512-uewvmUtXKd7ttypiKQGdYI6i7UUpPkOznLayzIFrJ4r2xnG6jhPjpKRncHFXPQcM4XSWO3yf5PQ3xAbPq9t7ZQ==",
+ "dependencies": {
+ "@microsoft/1ds-core-js": "4.0.3",
+ "@microsoft/applicationinsights-shims": "3.0.1",
+ "@microsoft/dynamicproto-js": "^2.0.2",
+ "@nevware21/ts-async": ">= 0.3.0 < 2.x",
+ "@nevware21/ts-utils": ">= 0.10.1 < 2.x"
+ }
+ },
+ "node_modules/@microsoft/applicationinsights-channel-js": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-channel-js/-/applicationinsights-channel-js-3.0.4.tgz",
+ "integrity": "sha512-6TlfExmErQ8Y+/ChbkyWl+jyt4wg3T6p7lwXDsUCB0LgZmlEWMaCUS0YlT73JCWmE8j7vxW8yUm0lgsgmHns3A==",
+ "dependencies": {
+ "@microsoft/applicationinsights-common": "3.0.4",
+ "@microsoft/applicationinsights-core-js": "3.0.4",
+ "@microsoft/applicationinsights-shims": "3.0.1",
+ "@microsoft/dynamicproto-js": "^2.0.2",
+ "@nevware21/ts-async": ">= 0.3.0 < 2.x",
+ "@nevware21/ts-utils": ">= 0.10.1 < 2.x"
+ },
+ "peerDependencies": {
+ "tslib": "*"
+ }
+ },
+ "node_modules/@microsoft/applicationinsights-common": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-common/-/applicationinsights-common-3.0.4.tgz",
+ "integrity": "sha512-r5gWaw/K9+tKfuo2GtDiDiKASgOkPOCrKW+wZzFvuR06uuwvWjbVQ6yW/YbnfuhRF5M65ksUiMi0eCMwEOGq7Q==",
+ "dependencies": {
+ "@microsoft/applicationinsights-core-js": "3.0.4",
+ "@microsoft/applicationinsights-shims": "3.0.1",
+ "@microsoft/dynamicproto-js": "^2.0.2",
+ "@nevware21/ts-utils": ">= 0.10.1 < 2.x"
+ },
+ "peerDependencies": {
+ "tslib": "*"
+ }
+ },
+ "node_modules/@microsoft/applicationinsights-core-js": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-core-js/-/applicationinsights-core-js-3.0.4.tgz",
+ "integrity": "sha512-anxy5kEkqBmVoEqJiJzaaXXA0wzqZi9U4zGd05xFJ04lWckP8dG3zyT3+GGdg7rDelqLTNGxndeYoFmDv63u1g==",
+ "dependencies": {
+ "@microsoft/applicationinsights-shims": "3.0.1",
+ "@microsoft/dynamicproto-js": "^2.0.2",
+ "@nevware21/ts-async": ">= 0.3.0 < 2.x",
+ "@nevware21/ts-utils": ">= 0.10.1 < 2.x"
+ },
+ "peerDependencies": {
+ "tslib": "*"
+ }
+ },
+ "node_modules/@microsoft/applicationinsights-shims": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-shims/-/applicationinsights-shims-3.0.1.tgz",
+ "integrity": "sha512-DKwboF47H1nb33rSUfjqI6ryX29v+2QWcTrRvcQDA32AZr5Ilkr7whOOSsD1aBzwqX0RJEIP1Z81jfE3NBm/Lg==",
+ "dependencies": {
+ "@nevware21/ts-utils": ">= 0.9.4 < 2.x"
+ }
+ },
+ "node_modules/@microsoft/applicationinsights-web-basic": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-web-basic/-/applicationinsights-web-basic-3.0.4.tgz",
+ "integrity": "sha512-KfoxPlLlf0JT12ADb23C5iGye/yFouoMgHEKULxkSQcYY9SsW/8rVrqqvoYKAL+u215CZU2A8Kc8sR3ehEaPCQ==",
+ "dependencies": {
+ "@microsoft/applicationinsights-channel-js": "3.0.4",
+ "@microsoft/applicationinsights-common": "3.0.4",
+ "@microsoft/applicationinsights-core-js": "3.0.4",
+ "@microsoft/applicationinsights-shims": "3.0.1",
+ "@microsoft/dynamicproto-js": "^2.0.2",
+ "@nevware21/ts-async": ">= 0.3.0 < 2.x",
+ "@nevware21/ts-utils": ">= 0.10.1 < 2.x"
+ },
+ "peerDependencies": {
+ "tslib": "*"
+ }
+ },
+ "node_modules/@microsoft/dynamicproto-js": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/@microsoft/dynamicproto-js/-/dynamicproto-js-2.0.2.tgz",
+ "integrity": "sha512-MB8trWaFREpmb037k/d0bB7T2BP7Ai24w1e1tbz3ASLB0/lwphsq3Nq8S9I5AsI5vs4zAQT+SB5nC5/dLYTiOg==",
+ "dependencies": {
+ "@nevware21/ts-utils": ">= 0.9.4 < 2.x"
+ }
+ },
+ "node_modules/@nevware21/ts-async": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/@nevware21/ts-async/-/ts-async-0.3.0.tgz",
+ "integrity": "sha512-ZUcgUH12LN/F6nzN0cYd0F/rJaMLmXr0EHVTyYfaYmK55bdwE4338uue4UiVoRqHVqNW4KDUrJc49iGogHKeWA==",
+ "dependencies": {
+ "@nevware21/ts-utils": ">= 0.10.0 < 2.x"
+ }
+ },
+ "node_modules/@nevware21/ts-utils": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/@nevware21/ts-utils/-/ts-utils-0.10.1.tgz",
+ "integrity": "sha512-pMny25NnF2/MJwdqC3Iyjm2pGIXNxni4AROpcqDeWa+td9JMUY4bUS9uU9XW+BoBRqTLUL+WURF9SOd/6OQzRg=="
+ },
+ "node_modules/@tokenizer/token": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz",
+ "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A=="
+ },
+ "node_modules/@types/byline": {
+ "version": "4.2.31",
+ "resolved": "https://registry.npmjs.org/@types/byline/-/byline-4.2.31.tgz",
+ "integrity": "sha1-DmH8ucA+BH0hxEllVMcRYperYM0= sha512-TC6Ljn7tALesQMQyTNoMWoM44SNvWtCLkJDrA/TxcwE5ILkWt4zi5wbEokqiDk42S75eykAY1onPImWDybOkmQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "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/node": {
+ "version": "20.11.24",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.24.tgz",
+ "integrity": "sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long==",
+ "dev": true,
+ "dependencies": {
+ "undici-types": "~5.26.4"
+ }
+ },
+ "node_modules/@types/picomatch": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@types/picomatch/-/picomatch-2.3.0.tgz",
+ "integrity": "sha512-O397rnSS9iQI4OirieAtsDqvCj4+3eY1J+EPdNTKuHuRWIfUoGyzX294o8C4KJYaLqgSrd2o60c5EqCU8Zv02g==",
+ "dev": true
+ },
+ "node_modules/@types/which": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@types/which/-/which-3.0.0.tgz",
+ "integrity": "sha512-ASCxdbsrwNfSMXALlC3Decif9rwDMu+80KGp5zI2RLRotfMsTv7fHL8W8VDp24wymzDyIFudhUeSCugrgRFfHQ==",
+ "dev": true
+ },
+ "node_modules/@vscode/extension-telemetry": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/@vscode/extension-telemetry/-/extension-telemetry-0.9.0.tgz",
+ "integrity": "sha512-37RxGHXrs3GoXPgCUKQhghEu0gxs8j27RLjQwwtSf4WhPdJKz8UrqMYzpsXlliQ05zURYmtdGZst9C6+hfWXaQ==",
+ "dependencies": {
+ "@microsoft/1ds-core-js": "^4.0.3",
+ "@microsoft/1ds-post-js": "^4.0.3",
+ "@microsoft/applicationinsights-web-basic": "^3.0.4"
+ },
+ "engines": {
+ "vscode": "^1.75.0"
+ }
+ },
+ "node_modules/@vscode/iconv-lite-umd": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/@vscode/iconv-lite-umd/-/iconv-lite-umd-0.7.0.tgz",
+ "integrity": "sha512-bRRFxLfg5dtAyl5XyiVWz/ZBPahpOpPrNYnnHpOpUZvam4tKH35wdhP4Kj6PbM0+KdliOsPzbGWpkxcdpNB/sg=="
+ },
+ "node_modules/byline": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz",
+ "integrity": "sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE= sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/file-type": {
+ "version": "16.5.4",
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.4.tgz",
+ "integrity": "sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==",
+ "dependencies": {
+ "readable-web-to-node-stream": "^3.0.0",
+ "strtok3": "^6.2.4",
+ "token-types": "^4.1.1"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/file-type?sponsor=1"
+ }
+ },
+ "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",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "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/isexe": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz",
+ "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==",
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "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"
+ }
+ },
+ "node_modules/peek-readable": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.1.0.tgz",
+ "integrity": "sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/Borewit"
+ }
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/readable-stream": {
+ "version": "3.6.0",
+ "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",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/readable-web-to-node-stream": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz",
+ "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==",
+ "dependencies": {
+ "readable-stream": "^3.6.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/Borewit"
+ }
+ },
+ "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==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "dependencies": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
+ "node_modules/strtok3": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.3.0.tgz",
+ "integrity": "sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==",
+ "dependencies": {
+ "@tokenizer/token": "^0.3.0",
+ "peek-readable": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/Borewit"
+ }
+ },
+ "node_modules/token-types": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/token-types/-/token-types-4.2.0.tgz",
+ "integrity": "sha512-P0rrp4wUpefLncNamWIef62J0v0kQR/GfDVji9WKY7GDCWy5YbVSrKUTam07iWPZQGy0zWNOfstYTykMmPNR7w==",
+ "dependencies": {
+ "@tokenizer/token": "^0.3.0",
+ "ieee754": "^1.2.1"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/Borewit"
+ }
+ },
+ "node_modules/undici-types": {
+ "version": "5.26.5",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
+ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
+ "dev": true
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "node_modules/vscode-uri": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-2.0.0.tgz",
+ "integrity": "sha512-lWXWofDSYD8r/TIyu64MdwB4FaSirQ608PP/TzUyslyOeHGwQ0eTHUZeJrK1ILOmwUHaJtV693m2JoUYroUDpw=="
+ },
+ "node_modules/which": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz",
+ "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==",
+ "dependencies": {
+ "isexe": "^3.1.1"
+ },
+ "bin": {
+ "node-which": "bin/which.js"
+ },
+ "engines": {
+ "node": "^16.13.0 || >=18.0.0"
+ }
+ }
+ }
+}
diff --git a/extensions/git/package.json b/extensions/git/package.json
index 6bf280b95da..9743287dfb9 100644
--- a/extensions/git/package.json
+++ b/extensions/git/package.json
@@ -16,8 +16,6 @@
"contribMergeEditorMenus",
"contribMultiDiffEditorMenus",
"contribDiffEditorGutterToolBarMenus",
- "contribSourceControlHistoryItemChangesMenu",
- "contribSourceControlHistoryItemGroupMenu",
"contribSourceControlHistoryItemMenu",
"contribSourceControlHistoryTitleMenu",
"contribSourceControlInputBoxMenu",
@@ -454,6 +452,12 @@
"category": "Git",
"enablement": "!operationInProgress"
},
+ {
+ "command": "git.checkoutRefDetached",
+ "title": "%command.checkoutRefDetached%",
+ "category": "Git",
+ "enablement": "!operationInProgress"
+ },
{
"command": "git.branch",
"title": "%command.branch%",
@@ -529,6 +533,7 @@
{
"command": "git.fetchAll",
"title": "%command.fetchAll%",
+ "icon": "$(git-fetch)",
"category": "Git",
"enablement": "!operationInProgress"
},
@@ -619,6 +624,18 @@
"category": "Git",
"enablement": "!operationInProgress"
},
+ {
+ "command": "git.cherryPickRef",
+ "title": "%command.cherryPickRef%",
+ "category": "Git",
+ "enablement": "!operationInProgress"
+ },
+ {
+ "command": "git.cherryPickAbort",
+ "title": "%command.cherryPickAbort%",
+ "category": "Git",
+ "enablement": "!operationInProgress"
+ },
{
"command": "git.addRemote",
"title": "%command.addRemote%",
@@ -1192,6 +1209,10 @@
"command": "git.cherryPick",
"when": "config.git.enabled && !git.missing && gitOpenRepositoryCount != 0"
},
+ {
+ "command": "git.cherryPickAbort",
+ "when": "config.git.enabled && !git.missing && gitOpenRepositoryCount != 0 && gitCherryPickInProgress"
+ },
{
"command": "git.pull",
"when": "config.git.enabled && !git.missing && gitOpenRepositoryCount != 0"
@@ -1447,6 +1468,14 @@
{
"command": "git.copyCommitMessage",
"when": "false"
+ },
+ {
+ "command": "git.checkoutRefDetached",
+ "when": "false"
+ },
+ {
+ "command": "git.cherryPickRef",
+ "when": "false"
}
],
"scm/title": [
@@ -1938,154 +1967,41 @@
],
"scm/history/title": [
{
- "command": "git.fetchRef",
- "group": "navigation@1",
- "when": "scmProvider == git && scmHistoryItemGroupHasRemote"
- },
- {
- "command": "git.pullRef",
- "group": "navigation@2",
- "when": "scmProvider == git && scmHistoryItemGroupHasRemote"
- },
- {
- "command": "git.pushRef",
- "when": "scmProvider == git && scmHistoryItemGroupHasRemote",
- "group": "navigation@3"
- },
- {
- "command": "git.publish",
- "when": "scmProvider == git && !scmHistoryItemGroupHasRemote",
- "group": "navigation@3"
+ "command": "git.fetchAll",
+ "group": "navigation@999",
+ "when": "scmProvider == git"
}
],
- "scm/historyItemChanges/title": [
+ "scm/historyItem/context": [
{
- "command": "git.fetchRef",
- "group": "navigation@1",
- "when": "scmProvider == git && scmHistoryItemGroupHasRemote"
+ "command": "git.createTag",
+ "when": "scmProvider == git",
+ "group": "1_create@1"
},
{
- "command": "git.pullRef",
- "group": "navigation@2",
- "when": "scmProvider == git && scmHistoryItemGroupHasRemote"
+ "command": "git.branch",
+ "when": "scmProvider == git",
+ "group": "1_create@2"
},
{
- "command": "git.pushRef",
- "when": "scmProvider == git && scmHistoryItemGroupHasRemote",
- "group": "navigation@3"
+ "command": "git.cherryPickRef",
+ "when": "scmProvider == git",
+ "group": "2_modify@1"
},
{
- "command": "git.publish",
- "when": "scmProvider == git && !scmHistoryItemGroupHasRemote",
- "group": "navigation@3"
- }
- ],
- "scm/historyItem/context": [
+ "command": "git.checkoutRefDetached",
+ "when": "scmProvider == git",
+ "group": "2_modify@2"
+ },
{
"command": "git.copyCommitId",
"when": "scmProvider == git && !listMultiSelection",
- "group": "1_copy@1"
+ "group": "9_copy@1"
},
{
"command": "git.copyCommitMessage",
"when": "scmProvider == git && !listMultiSelection",
- "group": "1_copy@2"
- }
- ],
- "scm/incomingChanges": [
- {
- "command": "git.fetchRef",
- "group": "navigation",
- "when": "scmProvider == git"
- },
- {
- "command": "git.pullRef",
- "group": "navigation",
- "when": "scmProvider == git"
- }
- ],
- "scm/incomingChanges/context": [
- {
- "command": "git.fetchRef",
- "group": "1_modification@1",
- "when": "scmProvider == git"
- },
- {
- "command": "git.pullRef",
- "group": "1_modification@2",
- "when": "scmProvider == git"
- }
- ],
- "scm/incomingChanges/allChanges/context": [
- {
- "command": "git.viewAllChanges",
- "when": "scmProvider == git && scmHistoryItemFileCount != 0 && config.multiDiffEditor.experimental.enabled",
- "group": "inline@1"
- },
- {
- "command": "git.viewAllChanges",
- "when": "scmProvider == git && scmHistoryItemFileCount != 0 && config.multiDiffEditor.experimental.enabled",
- "group": "1_view@1"
- }
- ],
- "scm/incomingChanges/historyItem/context": [
- {
- "command": "git.viewCommit",
- "when": "scmProvider == git && scmHistoryItemFileCount != 0 && config.multiDiffEditor.experimental.enabled",
- "group": "inline@1"
- },
- {
- "command": "git.viewCommit",
- "when": "scmProvider == git && scmHistoryItemFileCount != 0 && config.multiDiffEditor.experimental.enabled",
- "group": "1_view@1"
- }
- ],
- "scm/outgoingChanges": [
- {
- "command": "git.pushRef",
- "group": "navigation",
- "when": "scmProvider == git && scmHistoryItemGroupHasRemote"
- },
- {
- "command": "git.publish",
- "group": "navigation",
- "when": "scmProvider == git && !scmHistoryItemGroupHasRemote"
- }
- ],
- "scm/outgoingChanges/context": [
- {
- "command": "git.pushRef",
- "when": "scmProvider == git && scmHistoryItemGroupHasRemote",
- "group": "1_modification@1"
- },
- {
- "command": "git.publish",
- "when": "scmProvider == git && !scmHistoryItemGroupHasRemote",
- "group": "1_modification@1"
- }
- ],
- "scm/outgoingChanges/allChanges/context": [
- {
- "command": "git.viewAllChanges",
- "when": "scmProvider == git && scmHistoryItemFileCount != 0 && config.multiDiffEditor.experimental.enabled",
- "group": "inline@1"
- },
- {
- "command": "git.viewAllChanges",
- "when": "scmProvider == git && scmHistoryItemFileCount != 0 && config.multiDiffEditor.experimental.enabled",
- "group": "1_view@1"
- }
- ],
- "scm/outgoingChanges/historyItem/context": [
- {
- "command": "git.viewCommit",
- "when": "scmProvider == git && scmHistoryItemFileCount != 0 && config.multiDiffEditor.experimental.enabled",
- "group": "inline@1"
- },
- {
- "command": "git.viewCommit",
- "when": "scmProvider == git && scmHistoryItemFileCount != 0 && config.multiDiffEditor.experimental.enabled",
- "group": "1_view@1"
+ "group": "9_copy@2"
}
],
"editor/title": [
@@ -3478,7 +3394,7 @@
"@vscode/iconv-lite-umd": "0.7.0",
"byline": "^5.0.0",
"file-type": "16.5.4",
- "jschardet": "3.1.3",
+ "jschardet": "3.1.4",
"picomatch": "2.3.1",
"vscode-uri": "^2.0.0",
"which": "4.0.0"
diff --git a/extensions/git/package.nls.json b/extensions/git/package.nls.json
index 7b072c2c24b..e84f0654b8a 100644
--- a/extensions/git/package.nls.json
+++ b/extensions/git/package.nls.json
@@ -62,15 +62,18 @@
"command.undoCommit": "Undo Last Commit",
"command.checkout": "Checkout to...",
"command.checkoutDetached": "Checkout to (Detached)...",
+ "command.checkoutRefDetached": "Checkout (Detached)",
"command.branch": "Create Branch...",
"command.branchFrom": "Create Branch From...",
"command.deleteBranch": "Delete Branch...",
"command.renameBranch": "Rename Branch...",
"command.cherryPick": "Cherry Pick...",
+ "command.cherryPickRef": "Cherry Pick",
+ "command.cherryPickAbort": "Abort Cherry Pick",
"command.merge": "Merge...",
"command.mergeAbort": "Abort Merge",
"command.rebase": "Rebase Branch...",
- "command.createTag": "Create Tag",
+ "command.createTag": "Create Tag...",
"command.deleteTag": "Delete Tag...",
"command.deleteRemoteTag": "Delete Remote Tag...",
"command.fetch": "Fetch",
diff --git a/extensions/git/src/actionButton.ts b/extensions/git/src/actionButton.ts
index 494972276ac..2fbdaf4f97e 100644
--- a/extensions/git/src/actionButton.ts
+++ b/extensions/git/src/actionButton.ts
@@ -211,12 +211,12 @@ export class ActionButton {
command: {
command: 'git.sync',
title: l10n.t('{0} Sync Changes{1}{2}', icon, behind, ahead),
+ shortTitle: `${icon}${behind}${ahead}`,
tooltip: this.state.isSyncInProgress ?
l10n.t('Synchronizing Changes...')
: this.repository.syncTooltip,
arguments: [this.repository.sourceControl],
},
- description: `${icon}${behind}${ahead}`,
enabled: !this.state.isCheckoutInProgress && !this.state.isSyncInProgress
};
}
diff --git a/extensions/git/src/api/api1.ts b/extensions/git/src/api/api1.ts
index 332c328b2d1..63139af2447 100644
--- a/extensions/git/src/api/api1.ts
+++ b/extensions/git/src/api/api1.ts
@@ -201,8 +201,8 @@ export class ApiRepository implements Repository {
return this.repository.getMergeBase(ref1, ref2);
}
- tag(name: string, upstream: string): Promise {
- return this.repository.tag(name, upstream);
+ tag(name: string, message: string, ref?: string | undefined): Promise {
+ return this.repository.tag({ name, message, ref });
}
deleteTag(name: string): Promise {
diff --git a/extensions/git/src/api/git.d.ts b/extensions/git/src/api/git.d.ts
index 17dd192ed95..ee45e7a893a 100644
--- a/extensions/git/src/api/git.d.ts
+++ b/extensions/git/src/api/git.d.ts
@@ -184,7 +184,7 @@ export interface InitOptions {
export interface RefQuery {
readonly contains?: string;
readonly count?: number;
- readonly pattern?: string;
+ readonly pattern?: string | string[];
readonly sort?: 'alphabetically' | 'committerdate';
}
@@ -409,5 +409,7 @@ export const enum GitErrorCodes {
EmptyCommitMessage = 'EmptyCommitMessage',
BranchFastForwardRejected = 'BranchFastForwardRejected',
BranchNotYetBorn = 'BranchNotYetBorn',
- TagConflict = 'TagConflict'
+ TagConflict = 'TagConflict',
+ CherryPickEmpty = 'CherryPickEmpty',
+ CherryPickConflict = 'CherryPickConflict'
}
diff --git a/extensions/git/src/commands.ts b/extensions/git/src/commands.ts
index cb13cca654e..a85322a055e 100644
--- a/extensions/git/src/commands.ts
+++ b/extensions/git/src/commands.ts
@@ -5,7 +5,7 @@
import * as os from 'os';
import * as path from 'path';
-import { Command, commands, Disposable, LineChange, MessageOptions, Position, ProgressLocation, QuickPickItem, Range, SourceControlResourceState, TextDocumentShowOptions, TextEditor, Uri, ViewColumn, window, workspace, WorkspaceEdit, WorkspaceFolder, TimelineItem, env, Selection, TextDocumentContentProvider, InputBoxValidationSeverity, TabInputText, TabInputTextMerge, QuickPickItemKind, TextDocument, LogOutputChannel, l10n, Memento, UIKind, QuickInputButton, ThemeIcon, SourceControlHistoryItem, SourceControl, InputBoxValidationMessage, Tab, TabInputNotebook, QuickInputButtonLocation } from 'vscode';
+import { Command, commands, Disposable, LineChange, MessageOptions, Position, ProgressLocation, QuickPickItem, Range, SourceControlResourceState, TextDocumentShowOptions, TextEditor, Uri, ViewColumn, window, workspace, WorkspaceEdit, WorkspaceFolder, TimelineItem, env, Selection, TextDocumentContentProvider, InputBoxValidationSeverity, TabInputText, TabInputTextMerge, QuickPickItemKind, TextDocument, LogOutputChannel, l10n, Memento, UIKind, QuickInputButton, ThemeIcon, SourceControlHistoryItem, SourceControl, InputBoxValidationMessage, Tab, TabInputNotebook, QuickInputButtonLocation, SourceControlHistoryItemRef } from 'vscode';
import TelemetryReporter from '@vscode/extension-telemetry';
import { uniqueNamesGenerator, adjectives, animals, colors, NumberDictionary } from '@joaomoreno/unique-names-generator';
import { ForcePushMode, GitErrorCodes, Ref, RefType, Status, CommitOptions, RemoteSourcePublisher, Remote } from './api/git';
@@ -525,9 +525,15 @@ class CheckoutItemsProcessor extends RefItemsProcessor {
// Button(s)
if (item.refRemote) {
const matchingRemote = this.repository.remotes.find((remote) => remote.name === item.refRemote);
- const remoteUrl = matchingRemote?.pushUrl ?? matchingRemote?.fetchUrl;
- if (remoteUrl) {
- item.buttons = this.buttons.get(item.refRemote);
+ const buttons = [];
+ if (matchingRemote?.pushUrl) {
+ buttons.push(...this.buttons.get(matchingRemote.pushUrl) ?? []);
+ }
+ if (matchingRemote?.fetchUrl && matchingRemote.fetchUrl !== matchingRemote.pushUrl) {
+ buttons.push(...this.buttons.get(matchingRemote.fetchUrl) ?? []);
+ }
+ if (buttons.length) {
+ item.buttons = buttons;
}
} else {
item.buttons = this.defaultButtons;
@@ -2495,6 +2501,14 @@ export class CommandCenter {
return this._checkout(repository, { detached: true, treeish });
}
+ @command('git.checkoutRefDetached', { repository: true })
+ async checkoutRefDetached(repository: Repository, historyItem?: SourceControlHistoryItemRef): Promise {
+ if (!historyItem) {
+ return false;
+ }
+ return this._checkout(repository, { detached: true, treeish: historyItem.id });
+ }
+
private async _checkout(repository: Repository, opts?: { detached?: boolean; treeish?: string }): Promise {
if (typeof opts?.treeish === 'string') {
await repository.checkout(opts?.treeish, opts);
@@ -2604,8 +2618,8 @@ export class CommandCenter {
}
@command('git.branch', { repository: true })
- async branch(repository: Repository): Promise {
- await this._branch(repository);
+ async branch(repository: Repository, historyItem?: SourceControlHistoryItem): Promise {
+ await this._branch(repository, undefined, false, historyItem?.id);
}
@command('git.branchFrom', { repository: true })
@@ -2732,8 +2746,8 @@ export class CommandCenter {
return sanitizeBranchName(branchName || '', branchWhitespaceChar);
}
- private async _branch(repository: Repository, defaultName?: string, from = false): Promise {
- let target = 'HEAD';
+ private async _branch(repository: Repository, defaultName?: string, from = false, target?: string): Promise {
+ target = target ?? 'HEAD';
if (from) {
const getRefPicks = async () => {
@@ -2901,7 +2915,7 @@ export class CommandCenter {
}
@command('git.createTag', { repository: true })
- async createTag(repository: Repository): Promise {
+ async createTag(repository: Repository, historyItem?: SourceControlHistoryItem): Promise {
const inputTagName = await window.showInputBox({
placeHolder: l10n.t('Tag name'),
prompt: l10n.t('Please provide a tag name'),
@@ -2919,7 +2933,7 @@ export class CommandCenter {
});
const name = inputTagName.replace(/^\.|\/\.|\.\.|~|\^|:|\/$|\.lock$|\.lock\/|\\|\*|\s|^\s*$|\.$/g, '-');
- await repository.tag(name, inputMessage);
+ await repository.tag({ name, message: inputMessage, ref: historyItem?.id });
}
@command('git.deleteTag', { repository: true })
@@ -3053,7 +3067,7 @@ export class CommandCenter {
@command('git.fetchRef', { repository: true })
async fetchRef(repository: Repository, ref?: string): Promise {
- ref = ref ?? repository?.historyProvider.currentHistoryItemGroup?.remote?.id;
+ ref = ref ?? repository?.historyProvider.currentHistoryItemRemoteRef?.id;
if (!repository || !ref) {
return;
}
@@ -3126,7 +3140,7 @@ export class CommandCenter {
@command('git.pullRef', { repository: true })
async pullRef(repository: Repository, ref?: string): Promise {
- ref = ref ?? repository?.historyProvider.currentHistoryItemGroup?.remote?.id;
+ ref = ref ?? repository?.historyProvider.currentHistoryItemRemoteRef?.id;
if (!repository || !ref) {
return;
}
@@ -3296,6 +3310,19 @@ export class CommandCenter {
await repository.cherryPick(hash);
}
+ @command('git.cherryPickRef', { repository: true })
+ async cherryPickRef(repository: Repository, historyItem?: SourceControlHistoryItem): Promise {
+ if (!historyItem) {
+ return;
+ }
+ await repository.cherryPick(historyItem.id);
+ }
+
+ @command('git.cherryPickAbort', { repository: true })
+ async cherryPickAbort(repository: Repository): Promise {
+ await repository.cherryPickAbort();
+ }
+
@command('git.pushTo', { repository: true })
async pushTo(repository: Repository, remote?: string, refspec?: string, setUpstream?: boolean): Promise {
await this._push(repository, { pushType: PushType.PushTo, pushTo: { remote: remote, refspec: refspec, setUpstream: setUpstream } });
@@ -4381,6 +4408,18 @@ export class CommandCenter {
type = 'information';
options.modal = false;
break;
+ case GitErrorCodes.CherryPickEmpty:
+ message = l10n.t('The changes are already present in the current branch.');
+ choices.clear();
+ type = 'information';
+ options.modal = false;
+ break;
+ case GitErrorCodes.CherryPickConflict:
+ message = l10n.t('There were merge conflicts while cherry picking the changes. Resolve the conflicts before committing them.');
+ type = 'warning';
+ choices.set(l10n.t('Show Changes'), () => commands.executeCommand('workbench.view.scm'));
+ options.modal = false;
+ break;
default: {
const hint = (err.stderr || err.message || String(err))
.replace(/^error: /mi, '')
diff --git a/extensions/git/src/decorationProvider.ts b/extensions/git/src/decorationProvider.ts
index ace68c22524..548f3aa2a1c 100644
--- a/extensions/git/src/decorationProvider.ts
+++ b/extensions/git/src/decorationProvider.ts
@@ -3,7 +3,7 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
-import { window, workspace, Uri, Disposable, Event, EventEmitter, FileDecoration, FileDecorationProvider, ThemeColor, l10n } from 'vscode';
+import { window, workspace, Uri, Disposable, Event, EventEmitter, FileDecoration, FileDecorationProvider, ThemeColor, l10n, SourceControlHistoryItemRef } from 'vscode';
import * as path from 'path';
import { Repository, GitResourceGroup } from './repository';
import { Model } from './model';
@@ -11,6 +11,16 @@ import { debounce } from './decorators';
import { filterEvent, dispose, anyEvent, fireEvent, PromiseSource, combinedDisposable, runAndSubscribeEvent } from './util';
import { Change, GitErrorCodes, Status } from './api/git';
+function equalSourceControlHistoryItemRefs(ref1?: SourceControlHistoryItemRef, ref2?: SourceControlHistoryItemRef): boolean {
+ if (ref1 === ref2) {
+ return true;
+ }
+
+ return ref1?.id === ref2?.id &&
+ ref1?.name === ref2?.name &&
+ ref1?.revision === ref2?.revision;
+}
+
class GitIgnoreDecorationProvider implements FileDecorationProvider {
private static Decoration: FileDecoration = { color: new ThemeColor('gitDecoration.ignoredResourceForeground') };
@@ -158,22 +168,37 @@ class GitIncomingChangesFileDecorationProvider implements FileDecorationProvider
private readonly _onDidChangeDecorations = new EventEmitter();
readonly onDidChangeFileDecorations: Event = this._onDidChangeDecorations.event;
- private decorations = new Map();
+ private _currentHistoryItemRef: SourceControlHistoryItemRef | undefined;
+ private _currentHistoryItemRemoteRef: SourceControlHistoryItemRef | undefined;
+
+ private _decorations = new Map();
private readonly disposables: Disposable[] = [];
constructor(private readonly repository: Repository) {
this.disposables.push(
window.registerFileDecorationProvider(this),
- runAndSubscribeEvent(repository.historyProvider.onDidChangeCurrentHistoryItemGroup, () => this.onDidChangeCurrentHistoryItemGroup())
+ runAndSubscribeEvent(repository.historyProvider.onDidChangeCurrentHistoryItemRefs, () => this.onDidChangeCurrentHistoryItemRefs())
);
}
- private async onDidChangeCurrentHistoryItemGroup(): Promise {
- const newDecorations = new Map();
- await this.collectIncomingChangesFileDecorations(newDecorations);
- const uris = new Set([...this.decorations.keys()].concat([...newDecorations.keys()]));
+ private async onDidChangeCurrentHistoryItemRefs(): Promise {
+ const historyProvider = this.repository.historyProvider;
+ const currentHistoryItemRef = historyProvider.currentHistoryItemRef;
+ const currentHistoryItemRemoteRef = historyProvider.currentHistoryItemRemoteRef;
+
+ if (equalSourceControlHistoryItemRefs(this._currentHistoryItemRef, currentHistoryItemRef) &&
+ equalSourceControlHistoryItemRefs(this._currentHistoryItemRemoteRef, currentHistoryItemRemoteRef)) {
+ return;
+ }
+
+ const decorations = new Map();
+ await this.collectIncomingChangesFileDecorations(decorations);
+ const uris = new Set([...this._decorations.keys()].concat([...decorations.keys()]));
+
+ this._decorations = decorations;
+ this._currentHistoryItemRef = currentHistoryItemRef;
+ this._currentHistoryItemRemoteRef = currentHistoryItemRemoteRef;
- this.decorations = newDecorations;
this._onDidChangeDecorations.fire([...uris.values()].map(value => Uri.parse(value, true)));
}
@@ -218,18 +243,19 @@ class GitIncomingChangesFileDecorationProvider implements FileDecorationProvider
private async getIncomingChanges(): Promise {
try {
const historyProvider = this.repository.historyProvider;
- const currentHistoryItemGroup = historyProvider.currentHistoryItemGroup;
+ const currentHistoryItemRef = historyProvider.currentHistoryItemRef;
+ const currentHistoryItemRemoteRef = historyProvider.currentHistoryItemRemoteRef;
- if (!currentHistoryItemGroup?.remote) {
+ if (!currentHistoryItemRef || !currentHistoryItemRemoteRef) {
return [];
}
- const ancestor = await historyProvider.resolveHistoryItemGroupCommonAncestor(currentHistoryItemGroup.id, currentHistoryItemGroup.remote.id);
+ const ancestor = await historyProvider.resolveHistoryItemRefsCommonAncestor([currentHistoryItemRef.id, currentHistoryItemRemoteRef.id]);
if (!ancestor) {
return [];
}
- const changes = await this.repository.diffBetween(ancestor.id, currentHistoryItemGroup.remote.id);
+ const changes = await this.repository.diffBetween(ancestor, currentHistoryItemRemoteRef.id);
return changes;
} catch (err) {
return [];
@@ -237,7 +263,7 @@ class GitIncomingChangesFileDecorationProvider implements FileDecorationProvider
}
provideFileDecoration(uri: Uri): FileDecoration | undefined {
- return this.decorations.get(uri.toString());
+ return this._decorations.get(uri.toString());
}
dispose(): void {
diff --git a/extensions/git/src/git.ts b/extensions/git/src/git.ts
index 9940ae535c7..bb5cb7102da 100644
--- a/extensions/git/src/git.ts
+++ b/extensions/git/src/git.ts
@@ -8,7 +8,7 @@ import * as path from 'path';
import * as os from 'os';
import * as cp from 'child_process';
import { fileURLToPath } from 'url';
-import * as which from 'which';
+import which from 'which';
import { EventEmitter } from 'events';
import * as iconv from '@vscode/iconv-lite-umd';
import * as filetype from 'file-type';
@@ -484,6 +484,17 @@ export class Git {
// Keep trailing spaces which are part of the directory name
const repositoryRootPath = path.normalize(result.stdout.trimStart().replace(/[\r\n]+$/, ''));
+ // Handle symbolic links and UNC paths
+ // Git 2.31 added the `--path-format` flag to rev-parse which
+ // allows us to get the relative path of the repository root
+ if (!pathEquals(pathInsidePossibleRepository, repositoryRootPath) &&
+ !isDescendant(repositoryRootPath, pathInsidePossibleRepository) &&
+ !isDescendant(pathInsidePossibleRepository, repositoryRootPath) &&
+ this.compareGitVersionTo('2.31.0') !== -1) {
+ const relativePathResult = await this.exec(pathInsidePossibleRepository, ['rev-parse', '--path-format=relative', '--show-toplevel',]);
+ return path.resolve(pathInsidePossibleRepository, relativePathResult.stdout.trimStart().replace(/[\r\n]+$/, ''));
+ }
+
if (isWindows) {
// On Git 2.25+ if you call `rev-parse --show-toplevel` on a mapped drive, instead of getting the mapped
// drive path back, you get the UNC path for the mapped drive. So we will try to normalize it back to the
@@ -491,7 +502,6 @@ export class Git {
const repoUri = Uri.file(repositoryRootPath);
const pathUri = Uri.file(pathInsidePossibleRepository);
if (repoUri.authority.length !== 0 && pathUri.authority.length === 0) {
- // eslint-disable-next-line local/code-no-look-behind-regex
const match = /(?<=^\/?)([a-zA-Z])(?=:\/)/.exec(pathUri.path);
if (match !== null) {
const [, letter] = match;
@@ -521,17 +531,6 @@ export class Git {
}
}
- // Handle symbolic links
- // Git 2.31 added the `--path-format` flag to rev-parse which
- // allows us to get the relative path of the repository root
- if (!pathEquals(pathInsidePossibleRepository, repositoryRootPath) &&
- !isDescendant(repositoryRootPath, pathInsidePossibleRepository) &&
- !isDescendant(pathInsidePossibleRepository, repositoryRootPath) &&
- this.compareGitVersionTo('2.31.0') !== -1) {
- const relativePathResult = await this.exec(pathInsidePossibleRepository, ['rev-parse', '--path-format=relative', '--show-toplevel',]);
- return path.resolve(pathInsidePossibleRepository, relativePathResult.stdout.trimStart().replace(/[\r\n]+$/, ''));
- }
-
return repositoryRootPath;
}
@@ -1138,6 +1137,7 @@ export class Repository {
}
async log(options?: LogOptions): Promise {
+ const spawnOptions: SpawnOptions = {};
const args = ['log', `--format=${COMMIT_FORMAT}`, '-z'];
if (options?.shortStats) {
@@ -1177,14 +1177,19 @@ export class Repository {
if (options?.refNames) {
args.push('--topo-order');
args.push('--decorate=full');
- args.push(...options.refNames);
+
+ // In order to avoid hitting the command line limit due to large number of reference
+ // names (can happen when the `all` filter is used in the Source Control Graph view),
+ // we are passing the reference names via stdin.
+ spawnOptions.input = options.refNames.join('\n');
+ args.push('--stdin');
}
if (options?.path) {
args.push('--', options.path);
}
- const result = await this.exec(args);
+ const result = await this.exec(args, spawnOptions);
if (result.exitCode) {
// An empty repo
return [];
@@ -1805,13 +1810,17 @@ export class Repository {
await this.exec(['merge', '--abort']);
}
- async tag(name: string, message?: string): Promise {
+ async tag(options: { name: string; message?: string; ref?: string }): Promise {
let args = ['tag'];
- if (message) {
- args = [...args, '-a', name, '-m', message];
+ if (options.message) {
+ args = [...args, '-a', options.name, '-m', options.message];
} else {
- args = [...args, name];
+ args = [...args, options.name];
+ }
+
+ if (options.ref) {
+ args.push(options.ref);
}
await this.exec(args);
@@ -2093,8 +2102,25 @@ export class Repository {
}
async cherryPick(commitHash: string): Promise {
- const args = ['cherry-pick', commitHash];
- await this.exec(args);
+ try {
+ await this.exec(['cherry-pick', commitHash]);
+ } catch (err) {
+ if (/The previous cherry-pick is now empty, possibly due to conflict resolution./.test(err.stderr ?? '')) {
+ // Abort cherry-pick
+ await this.cherryPickAbort();
+
+ err.gitErrorCode = GitErrorCodes.CherryPickEmpty;
+ } else {
+ // Conflict during cherry-pick
+ err.gitErrorCode = GitErrorCodes.CherryPickConflict;
+ }
+
+ throw err;
+ }
+ }
+
+ async cherryPickAbort(): Promise {
+ await this.exec(['cherry-pick', '--abort']);
}
async blame(path: string): Promise {
@@ -2401,7 +2427,7 @@ export class Repository {
return result.stdout.trim().split('\n')
.map(line => line.trim().split('\0'))
.filter(([_, upstream]) => upstream === upstreamBranch)
- .map(([ref]) => ({ name: ref, type: RefType.Head } as Branch));
+ .map(([ref]): Branch => ({ name: ref, type: RefType.Head }));
}
async getRefs(query: RefQuery, cancellationToken?: CancellationToken): Promise[ {
@@ -2422,7 +2448,10 @@ export class Repository {
args.push('--format', '%(refname) %(objectname) %(*objectname)');
if (query.pattern) {
- args.push(query.pattern.startsWith('refs/') ? query.pattern : `refs/${query.pattern}`);
+ const patterns = Array.isArray(query.pattern) ? query.pattern : [query.pattern];
+ for (const pattern of patterns) {
+ args.push(pattern.startsWith('refs/') ? pattern : `refs/${pattern}`);
+ }
}
if (query.contains) {
@@ -2647,7 +2676,7 @@ export class Repository {
async getDefaultBranch(): Promise {
const result = await this.exec(['symbolic-ref', '--short', 'refs/remotes/origin/HEAD']);
- if (!result.stdout) {
+ if (!result.stdout || result.stderr) {
throw new Error('No default branch');
}
@@ -2714,24 +2743,6 @@ export class Repository {
return commits[0];
}
- async getCommitFiles(ref: string): Promise {
- const result = await this.exec(['diff-tree', '--no-commit-id', '--name-only', '-r', ref]);
- return result.stdout.split('\n').filter(l => !!l);
- }
-
- async getCommitCount(range: string): Promise<{ ahead: number; behind: number }> {
- const args = ['rev-list', '--count', '--left-right', range];
-
- if (isWindows) {
- args.splice(0, 0, '-c', 'core.longpaths=true');
- }
-
- const result = await this.exec(args);
- const [ahead, behind] = result.stdout.trim().split('\t');
-
- return { ahead: Number(ahead) || 0, behind: Number(behind) || 0 };
- }
-
async revParse(ref: string): Promise {
try {
const result = await fs.readFile(path.join(this.dotGit.path, ref), 'utf8');
diff --git a/extensions/git/src/gitEditor.ts b/extensions/git/src/gitEditor.ts
index f5701642084..6291e5152a7 100644
--- a/extensions/git/src/gitEditor.ts
+++ b/extensions/git/src/gitEditor.ts
@@ -3,10 +3,12 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as path from 'path';
-import { TabInputText, Uri, window, workspace } from 'vscode';
+import { CancellationToken, DocumentLink, DocumentLinkProvider, l10n, Range, TabInputText, TextDocument, Uri, window, workspace } from 'vscode';
import { IIPCHandler, IIPCServer } from './ipc/ipcServer';
import { ITerminalEnvironmentProvider } from './terminal';
import { EmptyDisposable, IDisposable } from './util';
+import { Model } from './model';
+import { Repository } from './repository';
interface GitEditorRequest {
commitMessagePath?: string;
@@ -63,3 +65,51 @@ export class GitEditor implements IIPCHandler, ITerminalEnvironmentProvider {
this.disposable.dispose();
}
}
+
+export class GitEditorDocumentLinkProvider implements DocumentLinkProvider {
+ private readonly _regex = /^#\s+(modified|new file|deleted|renamed|copied|type change):\s+(?.*?)(?:\s+->\s+(?.*))*$/gm;
+
+ constructor(private readonly _model: Model) { }
+
+ provideDocumentLinks(document: TextDocument, token: CancellationToken): DocumentLink[] {
+ if (token.isCancellationRequested) {
+ return [];
+ }
+
+ const repository = this._model.getRepository(document.uri);
+ if (!repository) {
+ return [];
+ }
+
+ const links: DocumentLink[] = [];
+ for (const match of document.getText().matchAll(this._regex)) {
+ if (!match.groups) {
+ continue;
+ }
+
+ const { file1, file2 } = match.groups;
+
+ if (file1) {
+ links.push(this._createDocumentLink(repository, document, match, file1));
+ }
+ if (file2) {
+ links.push(this._createDocumentLink(repository, document, match, file2));
+ }
+ }
+
+ return links;
+ }
+
+ private _createDocumentLink(repository: Repository, document: TextDocument, match: RegExpExecArray, file: string): DocumentLink {
+ const startIndex = match[0].indexOf(file);
+ const startPosition = document.positionAt(match.index + startIndex);
+ const endPosition = document.positionAt(match.index + startIndex + file.length);
+
+ const documentLink = new DocumentLink(
+ new Range(startPosition, endPosition),
+ Uri.file(path.join(repository.root, file)));
+ documentLink.tooltip = l10n.t('Open File');
+
+ return documentLink;
+ }
+}
diff --git a/extensions/git/src/historyProvider.ts b/extensions/git/src/historyProvider.ts
index d19311b302f..896c46851c4 100644
--- a/extensions/git/src/historyProvider.ts
+++ b/extensions/git/src/historyProvider.ts
@@ -4,141 +4,230 @@
*--------------------------------------------------------------------------------------------*/
-import { Disposable, Event, EventEmitter, FileDecoration, FileDecorationProvider, SourceControlHistoryItem, SourceControlHistoryItemChange, SourceControlHistoryItemGroup, SourceControlHistoryOptions, SourceControlHistoryProvider, ThemeIcon, Uri, window, LogOutputChannel, SourceControlHistoryItemLabel } from 'vscode';
+import { Disposable, Event, EventEmitter, FileDecoration, FileDecorationProvider, SourceControlHistoryItem, SourceControlHistoryItemChange, SourceControlHistoryOptions, SourceControlHistoryProvider, ThemeIcon, Uri, window, LogOutputChannel, SourceControlHistoryItemRef, l10n, SourceControlHistoryItemRefsChangeEvent } from 'vscode';
import { Repository, Resource } from './repository';
-import { IDisposable, dispose } from './util';
+import { IDisposable, deltaHistoryItemRefs, dispose, filterEvent } from './util';
import { toGitUri } from './uri';
-import { Branch, LogOptions, RefType, UpstreamRef } from './api/git';
+import { Branch, LogOptions, Ref, RefType } from './api/git';
import { emojify, ensureEmojis } from './emoji';
import { Commit } from './git';
+import { OperationKind, OperationResult } from './operation';
-export class GitHistoryProvider implements SourceControlHistoryProvider, FileDecorationProvider, IDisposable {
+function toSourceControlHistoryItemRef(ref: Ref): SourceControlHistoryItemRef {
+ switch (ref.type) {
+ case RefType.RemoteHead:
+ return {
+ id: `refs/remotes/${ref.name}`,
+ name: ref.name ?? '',
+ description: ref.commit ? l10n.t('Remote branch at {0}', ref.commit.substring(0, 8)) : undefined,
+ revision: ref.commit,
+ icon: new ThemeIcon('cloud'),
+ category: l10n.t('remote branches')
+ };
+ case RefType.Tag:
+ return {
+ id: `refs/tags/${ref.name}`,
+ name: ref.name ?? '',
+ description: ref.commit ? l10n.t('Tag at {0}', ref.commit.substring(0, 8)) : undefined,
+ revision: ref.commit,
+ icon: new ThemeIcon('tag'),
+ category: l10n.t('tags')
+ };
+ default:
+ return {
+ id: `refs/heads/${ref.name}`,
+ name: ref.name ?? '',
+ description: ref.commit ? ref.commit.substring(0, 8) : undefined,
+ revision: ref.commit,
+ icon: new ThemeIcon('git-branch'),
+ category: l10n.t('branches')
+ };
+ }
+}
+
+function compareSourceControlHistoryItemRef(ref1: SourceControlHistoryItemRef, ref2: SourceControlHistoryItemRef): number {
+ const getOrder = (ref: SourceControlHistoryItemRef): number => {
+ if (ref.id.startsWith('refs/heads/')) {
+ return 1;
+ } else if (ref.id.startsWith('refs/remotes/')) {
+ return 2;
+ } else if (ref.id.startsWith('refs/tags/')) {
+ return 3;
+ }
+
+ return 99;
+ };
- private readonly _onDidChangeCurrentHistoryItemGroup = new EventEmitter();
- readonly onDidChangeCurrentHistoryItemGroup: Event = this._onDidChangeCurrentHistoryItemGroup.event;
+ const ref1Order = getOrder(ref1);
+ const ref2Order = getOrder(ref2);
+ if (ref1Order !== ref2Order) {
+ return ref1Order - ref2Order;
+ }
+
+ return ref1.name.localeCompare(ref2.name);
+}
+
+export class GitHistoryProvider implements SourceControlHistoryProvider, FileDecorationProvider, IDisposable {
private readonly _onDidChangeDecorations = new EventEmitter();
readonly onDidChangeFileDecorations: Event = this._onDidChangeDecorations.event;
- private _HEAD: Branch | undefined;
- private _HEADMergeBase: Branch | undefined;
+ private _currentHistoryItemRef: SourceControlHistoryItemRef | undefined;
+ get currentHistoryItemRef(): SourceControlHistoryItemRef | undefined { return this._currentHistoryItemRef; }
- private _currentHistoryItemGroup: SourceControlHistoryItemGroup | undefined;
- get currentHistoryItemGroup(): SourceControlHistoryItemGroup | undefined { return this._currentHistoryItemGroup; }
- set currentHistoryItemGroup(value: SourceControlHistoryItemGroup | undefined) {
- this._currentHistoryItemGroup = value;
- this._onDidChangeCurrentHistoryItemGroup.fire();
- }
+ private _currentHistoryItemRemoteRef: SourceControlHistoryItemRef | undefined;
+ get currentHistoryItemRemoteRef(): SourceControlHistoryItemRef | undefined { return this._currentHistoryItemRemoteRef; }
+
+ private _currentHistoryItemBaseRef: SourceControlHistoryItemRef | undefined;
+ get currentHistoryItemBaseRef(): SourceControlHistoryItemRef | undefined { return this._currentHistoryItemBaseRef; }
+
+ private readonly _onDidChangeCurrentHistoryItemRefs = new EventEmitter();
+ readonly onDidChangeCurrentHistoryItemRefs: Event = this._onDidChangeCurrentHistoryItemRefs.event;
+
+ private readonly _onDidChangeHistoryItemRefs = new EventEmitter();
+ readonly onDidChangeHistoryItemRefs: Event = this._onDidChangeHistoryItemRefs.event;
+
+ private _HEAD: Branch | undefined;
+ private historyItemRefs: SourceControlHistoryItemRef[] = [];
private historyItemDecorations = new Map();
- private historyItemLabels = new Map([
- ['HEAD -> refs/heads/', 'target'],
- ['refs/heads/', 'git-branch'],
- ['refs/remotes/', 'cloud'],
- ['refs/tags/', 'tag']
- ]);
private disposables: Disposable[] = [];
constructor(protected readonly repository: Repository, private readonly logger: LogOutputChannel) {
- this.disposables.push(repository.onDidRunGitStatus(() => this.onDidRunGitStatus(), this));
+ const onDidRunWriteOperation = filterEvent(repository.onDidRunOperation, e => !e.operation.readOnly);
+ this.disposables.push(onDidRunWriteOperation(this.onDidRunWriteOperation, this));
+
this.disposables.push(window.registerFileDecorationProvider(this));
}
- private async onDidRunGitStatus(): Promise {
- this.logger.trace('[GitHistoryProvider][onDidRunGitStatus] HEAD:', JSON.stringify(this._HEAD));
- this.logger.trace('[GitHistoryProvider][onDidRunGitStatus] repository.HEAD:', JSON.stringify(this.repository.HEAD));
-
- // Get the merge base of the current history item group
- const mergeBase = await this.resolveHEADMergeBase();
-
- // Check if HEAD has changed
- if (this._HEAD?.name === this.repository.HEAD?.name &&
- this._HEAD?.commit === this.repository.HEAD?.commit &&
- this._HEAD?.upstream?.name === this.repository.HEAD?.upstream?.name &&
- this._HEAD?.upstream?.remote === this.repository.HEAD?.upstream?.remote &&
- this._HEAD?.upstream?.commit === this.repository.HEAD?.upstream?.commit &&
- this._HEADMergeBase?.name === mergeBase?.name &&
- this._HEADMergeBase?.remote === mergeBase?.remote &&
- this._HEADMergeBase?.commit === mergeBase?.commit) {
- this.logger.trace('[GitHistoryProvider][onDidRunGitStatus] HEAD has not changed');
+ private async onDidRunWriteOperation(result: OperationResult): Promise {
+ if (!this.repository.HEAD) {
+ this.logger.trace('[GitHistoryProvider][onDidRunWriteOperation] repository.HEAD is undefined');
+ this._currentHistoryItemRef = this._currentHistoryItemRemoteRef = this._currentHistoryItemBaseRef = undefined;
+ this._onDidChangeCurrentHistoryItemRefs.fire();
+
return;
}
- this._HEAD = this.repository.HEAD;
- this._HEADMergeBase = mergeBase;
-
- // Check if HEAD does not support incoming/outgoing (detached commit, tag)
- if (!this.repository.HEAD?.name || !this.repository.HEAD?.commit || this.repository.HEAD.type === RefType.Tag) {
- this.logger.trace('[GitHistoryProvider][onDidRunGitStatus] HEAD does not support incoming/outgoing');
-
- this.currentHistoryItemGroup = undefined;
- return;
+ let historyItemRefId = '';
+ let historyItemRefName = '';
+
+ switch (this.repository.HEAD.type) {
+ case RefType.Head: {
+ if (this.repository.HEAD.name !== undefined) {
+ // Branch
+ historyItemRefId = `refs/heads/${this.repository.HEAD.name}`;
+ historyItemRefName = this.repository.HEAD.name;
+
+ // Remote
+ this._currentHistoryItemRemoteRef = this.repository.HEAD.upstream ? {
+ id: `refs/remotes/${this.repository.HEAD.upstream.remote}/${this.repository.HEAD.upstream.name}`,
+ name: `${this.repository.HEAD.upstream.remote}/${this.repository.HEAD.upstream.name}`,
+ revision: this.repository.HEAD.upstream.commit,
+ icon: new ThemeIcon('cloud')
+ } : undefined;
+
+ // Base - compute only if the branch has changed
+ if (this._HEAD?.name !== this.repository.HEAD.name) {
+ const mergeBase = await this.resolveHEADMergeBase();
+
+ this._currentHistoryItemBaseRef = mergeBase &&
+ (mergeBase.remote !== this.repository.HEAD.upstream?.remote ||
+ mergeBase.name !== this.repository.HEAD.upstream?.name) ? {
+ id: `refs/remotes/${mergeBase.remote}/${mergeBase.name}`,
+ name: `${mergeBase.remote}/${mergeBase.name}`,
+ revision: mergeBase.commit,
+ icon: new ThemeIcon('cloud')
+ } : undefined;
+ }
+ } else {
+ // Detached commit
+ historyItemRefId = this.repository.HEAD.commit ?? '';
+ historyItemRefName = this.repository.HEAD.commit ?? '';
+
+ this._currentHistoryItemRemoteRef = undefined;
+ this._currentHistoryItemBaseRef = undefined;
+ }
+ break;
+ }
+ case RefType.Tag: {
+ // Tag
+ historyItemRefId = `refs/tags/${this.repository.HEAD.name}`;
+ historyItemRefName = this.repository.HEAD.name ?? this.repository.HEAD.commit ?? '';
+
+ this._currentHistoryItemRemoteRef = undefined;
+ this._currentHistoryItemBaseRef = undefined;
+ break;
+ }
}
- this.currentHistoryItemGroup = {
- id: `refs/heads/${this.repository.HEAD.name ?? ''}`,
- name: this.repository.HEAD.name ?? '',
+ this._HEAD = this.repository.HEAD;
+
+ this._currentHistoryItemRef = {
+ id: historyItemRefId,
+ name: historyItemRefName,
revision: this.repository.HEAD.commit,
- remote: this.repository.HEAD.upstream ? {
- id: `refs/remotes/${this.repository.HEAD.upstream.remote}/${this.repository.HEAD.upstream.name}`,
- name: `${this.repository.HEAD.upstream.remote}/${this.repository.HEAD.upstream.name}`,
- revision: this.repository.HEAD.upstream.commit
- } : undefined,
- base: mergeBase &&
- (mergeBase.remote !== this.repository.HEAD.upstream?.remote ||
- mergeBase.name !== this.repository.HEAD.upstream?.name) ? {
- id: `refs/remotes/${mergeBase.remote}/${mergeBase.name}`,
- name: `${mergeBase.remote}/${mergeBase.name}`,
- revision: mergeBase.commit
- } : undefined
+ icon: new ThemeIcon('target'),
};
- this.logger.trace(`[GitHistoryProvider][onDidRunGitStatus] currentHistoryItemGroup: ${JSON.stringify(this.currentHistoryItemGroup)}`);
- }
+ this._onDidChangeCurrentHistoryItemRefs.fire();
+ this.logger.trace(`[GitHistoryProvider][onDidRunWriteOperation] currentHistoryItemRef: ${JSON.stringify(this._currentHistoryItemRef)}`);
+ this.logger.trace(`[GitHistoryProvider][onDidRunWriteOperation] currentHistoryItemRemoteRef: ${JSON.stringify(this._currentHistoryItemRemoteRef)}`);
+ this.logger.trace(`[GitHistoryProvider][onDidRunWriteOperation] currentHistoryItemBaseRef: ${JSON.stringify(this._currentHistoryItemBaseRef)}`);
- async provideHistoryItems(historyItemGroupId: string, options: SourceControlHistoryOptions): Promise {
- //TODO@lszomoru - support limit and cursor
- if (typeof options.limit === 'number') {
- throw new Error('Unsupported options.');
- }
- if (typeof options.limit?.id !== 'string') {
- throw new Error('Unsupported options.');
- }
+ // Refs (alphabetically)
+ const historyItemRefs = this.repository.refs
+ .map(ref => toSourceControlHistoryItemRef(ref))
+ .sort((a, b) => a.id.localeCompare(b.id));
- const refParentId = options.limit.id;
- const refId = await this.repository.revParse(historyItemGroupId) ?? '';
+ // Auto-fetch
+ const silent = result.operation.kind === OperationKind.Fetch && result.operation.showProgress === false;
+ const delta = deltaHistoryItemRefs(this.historyItemRefs, historyItemRefs);
+ this._onDidChangeHistoryItemRefs.fire({ ...delta, silent });
- const historyItems: SourceControlHistoryItem[] = [];
- const commits = await this.repository.log({ range: `${refParentId}..${refId}`, shortStats: true, sortByAuthorDate: true });
+ this.historyItemRefs = historyItemRefs;
- await ensureEmojis();
+ const deltaLog = {
+ added: delta.added.map(ref => ref.id),
+ modified: delta.modified.map(ref => ref.id),
+ removed: delta.removed.map(ref => ref.id),
+ silent
+ };
+ this.logger.trace(`[GitHistoryProvider][onDidRunWriteOperation] historyItemRefs: ${JSON.stringify(deltaLog)}`);
+ }
- historyItems.push(...commits.map(commit => {
- const newLineIndex = commit.message.indexOf('\n');
- const subject = newLineIndex !== -1 ? commit.message.substring(0, newLineIndex) : commit.message;
+ async provideHistoryItemRefs(historyItemRefs: string[] | undefined): Promise {
+ const refs = await this.repository.getRefs({ pattern: historyItemRefs });
- return {
- id: commit.hash,
- parentIds: commit.parents,
- message: emojify(subject),
- author: commit.authorName,
- icon: new ThemeIcon('git-commit'),
- timestamp: commit.authorDate?.getTime(),
- statistics: commit.shortStat ?? { files: 0, insertions: 0, deletions: 0 },
- };
- }));
+ const branches: SourceControlHistoryItemRef[] = [];
+ const remoteBranches: SourceControlHistoryItemRef[] = [];
+ const tags: SourceControlHistoryItemRef[] = [];
- return historyItems;
+ for (const ref of refs) {
+ switch (ref.type) {
+ case RefType.RemoteHead:
+ remoteBranches.push(toSourceControlHistoryItemRef(ref));
+ break;
+ case RefType.Tag:
+ tags.push(toSourceControlHistoryItemRef(ref));
+ break;
+ default:
+ branches.push(toSourceControlHistoryItemRef(ref));
+ break;
+ }
+ }
+
+ return [...branches, ...remoteBranches, ...tags];
}
- async provideHistoryItems2(options: SourceControlHistoryOptions): Promise {
- if (!this.currentHistoryItemGroup || !options.historyItemGroupIds) {
+ async provideHistoryItems(options: SourceControlHistoryOptions): Promise {
+ if (!this.currentHistoryItemRef || !options.historyItemRefs) {
return [];
}
// Deduplicate refNames
- const refNames = Array.from(new Set(options.historyItemGroupIds));
+ const refNames = Array.from(new Set(options.historyItemRefs));
let logOptions: LogOptions = { refNames, shortStats: true };
@@ -162,35 +251,26 @@ export class GitHistoryProvider implements SourceControlHistoryProvider, FileDec
await ensureEmojis();
return commits.map(commit => {
- const newLineIndex = commit.message.indexOf('\n');
- const subject = newLineIndex !== -1 ? commit.message.substring(0, newLineIndex) : commit.message;
-
- const labels = this.resolveHistoryItemLabels(commit);
+ const references = this._resolveHistoryItemRefs(commit);
return {
id: commit.hash,
parentIds: commit.parents,
- message: emojify(subject),
+ message: emojify(commit.message),
author: commit.authorName,
icon: new ThemeIcon('git-commit'),
+ displayId: commit.hash.substring(0, 8),
timestamp: commit.authorDate?.getTime(),
statistics: commit.shortStat ?? { files: 0, insertions: 0, deletions: 0 },
- labels: labels.length !== 0 ? labels : undefined
+ references: references.length !== 0 ? references : undefined
};
});
} catch (err) {
- this.logger.error(`[GitHistoryProvider][provideHistoryItems2] Failed to get history items with options '${JSON.stringify(options)}': ${err}`);
+ this.logger.error(`[GitHistoryProvider][provideHistoryItems] Failed to get history items with options '${JSON.stringify(options)}': ${err}`);
return [];
}
}
- async provideHistoryItemSummary(historyItemId: string, historyItemParentId: string | undefined): Promise {
- historyItemParentId = historyItemParentId ?? await this.repository.getEmptyTree();
- const allChanges = await this.repository.diffBetweenShortStat(historyItemParentId, historyItemId);
-
- return { id: historyItemId, parentIds: [historyItemParentId], message: '', statistics: allChanges };
- }
-
async provideHistoryItemChanges(historyItemId: string, historyItemParentId: string | undefined): Promise {
historyItemParentId = historyItemParentId ?? await this.repository.getEmptyTree();
@@ -225,49 +305,21 @@ export class GitHistoryProvider implements SourceControlHistoryProvider, FileDec
return historyItemChanges;
}
- async resolveHistoryItemGroupCommonAncestor(historyItemId1: string, historyItemId2: string | undefined): Promise<{ id: string; ahead: number; behind: number } | undefined> {
- if (!historyItemId2) {
- const upstreamRef = await this.resolveHistoryItemGroupMergeBase(historyItemId1);
- if (!upstreamRef) {
- this.logger.info(`[GitHistoryProvider][resolveHistoryItemGroupCommonAncestor] Failed to resolve history item group base for '${historyItemId1}'`);
- return undefined;
- }
-
- historyItemId2 = `refs/remotes/${upstreamRef.remote}/${upstreamRef.name}`;
- }
-
- const ancestor = await this.repository.getMergeBase(historyItemId1, historyItemId2);
- if (!ancestor) {
- this.logger.info(`[GitHistoryProvider][resolveHistoryItemGroupCommonAncestor] Failed to resolve common ancestor for '${historyItemId1}' and '${historyItemId2}'`);
- return undefined;
- }
-
+ async resolveHistoryItemRefsCommonAncestor(historyItemRefs: string[]): Promise {
try {
- const commitCount = await this.repository.getCommitCount(`${historyItemId1}...${historyItemId2}`);
- this.logger.trace(`[GitHistoryProvider][resolveHistoryItemGroupCommonAncestor] Resolved common ancestor for '${historyItemId1}' and '${historyItemId2}': ${JSON.stringify({ id: ancestor, ahead: commitCount.ahead, behind: commitCount.behind })}`);
- return { id: ancestor, ahead: commitCount.ahead, behind: commitCount.behind };
- } catch (err) {
- this.logger.error(`[GitHistoryProvider][resolveHistoryItemGroupCommonAncestor] Failed to get ahead/behind for '${historyItemId1}...${historyItemId2}': ${err.message}`);
- }
-
- return undefined;
- }
-
- async resolveHistoryItemGroupCommonAncestor2(historyItemGroupIds: string[]): Promise {
- try {
- if (historyItemGroupIds.length === 0) {
+ if (historyItemRefs.length === 0) {
// TODO@lszomoru - log
return undefined;
- } else if (historyItemGroupIds.length === 1 && historyItemGroupIds[0] === this.currentHistoryItemGroup?.id) {
+ } else if (historyItemRefs.length === 1 && historyItemRefs[0] === this.currentHistoryItemRef?.id) {
// Remote
- if (this.currentHistoryItemGroup.remote) {
- const ancestor = await this.repository.getMergeBase(historyItemGroupIds[0], this.currentHistoryItemGroup.remote.id);
+ if (this.currentHistoryItemRemoteRef) {
+ const ancestor = await this.repository.getMergeBase(historyItemRefs[0], this.currentHistoryItemRemoteRef.id);
return ancestor;
}
// Base
- if (this.currentHistoryItemGroup.base) {
- const ancestor = await this.repository.getMergeBase(historyItemGroupIds[0], this.currentHistoryItemGroup.base.id);
+ if (this.currentHistoryItemBaseRef) {
+ const ancestor = await this.repository.getMergeBase(historyItemRefs[0], this.currentHistoryItemBaseRef.id);
return ancestor;
}
@@ -276,13 +328,13 @@ export class GitHistoryProvider implements SourceControlHistoryProvider, FileDec
if (commits.length > 0) {
return commits[0].hash;
}
- } else if (historyItemGroupIds.length > 1) {
- const ancestor = await this.repository.getMergeBase(historyItemGroupIds[0], historyItemGroupIds[1], ...historyItemGroupIds.slice(2));
+ } else if (historyItemRefs.length > 1) {
+ const ancestor = await this.repository.getMergeBase(historyItemRefs[0], historyItemRefs[1], ...historyItemRefs.slice(2));
return ancestor;
}
}
catch (err) {
- this.logger.error(`[GitHistoryProvider][resolveHistoryItemGroupCommonAncestor2] Failed to resolve common ancestor for ${historyItemGroupIds.join(',')}: ${err}`);
+ this.logger.error(`[GitHistoryProvider][resolveHistoryItemRefsCommonAncestor] Failed to resolve common ancestor for ${historyItemRefs.join(',')}: ${err}`);
}
return undefined;
@@ -292,59 +344,61 @@ export class GitHistoryProvider implements SourceControlHistoryProvider, FileDec
return this.historyItemDecorations.get(uri.toString());
}
- private resolveHistoryItemLabels(commit: Commit): SourceControlHistoryItemLabel[] {
- const labels: SourceControlHistoryItemLabel[] = [];
-
- for (const label of commit.refNames) {
- for (const [key, value] of this.historyItemLabels) {
- if (label.startsWith(key)) {
- labels.push({
- title: label.substring(key.length),
- icon: new ThemeIcon(value)
+ private _resolveHistoryItemRefs(commit: Commit): SourceControlHistoryItemRef[] {
+ const references: SourceControlHistoryItemRef[] = [];
+
+ for (const ref of commit.refNames) {
+ switch (true) {
+ case ref.startsWith('HEAD -> refs/heads/'):
+ references.push({
+ id: ref.substring('HEAD -> '.length),
+ name: ref.substring('HEAD -> refs/heads/'.length),
+ revision: commit.hash,
+ icon: new ThemeIcon('target')
+ });
+ break;
+ case ref.startsWith('refs/heads/'):
+ references.push({
+ id: ref,
+ name: ref.substring('refs/heads/'.length),
+ revision: commit.hash,
+ icon: new ThemeIcon('git-branch')
+ });
+ break;
+ case ref.startsWith('refs/remotes/'):
+ references.push({
+ id: ref,
+ name: ref.substring('refs/remotes/'.length),
+ revision: commit.hash,
+ icon: new ThemeIcon('cloud')
+ });
+ break;
+ case ref.startsWith('tag: refs/tags/'):
+ references.push({
+ id: ref.substring('tag: '.length),
+ name: ref.substring('tag: refs/tags/'.length),
+ revision: commit.hash,
+ icon: new ThemeIcon('tag')
});
break;
- }
}
}
- return labels;
+ return references.sort(compareSourceControlHistoryItemRef);
}
- private async resolveHistoryItemGroupMergeBase(historyItemId: string): Promise {
+ private async resolveHEADMergeBase(): Promise {
try {
- // Upstream
- const branch = await this.repository.getBranch(historyItemId);
- if (branch.upstream) {
- return branch.upstream;
- }
-
- // Base (config -> reflog -> default)
- const remoteBranch = await this.repository.getBranchBase(historyItemId);
- if (!remoteBranch?.remote || !remoteBranch?.name || !remoteBranch?.commit || remoteBranch?.type !== RefType.RemoteHead) {
- this.logger.info(`[GitHistoryProvider][resolveHistoryItemGroupUpstreamOrBase] Failed to resolve history item group base for '${historyItemId}'`);
+ if (this.repository.HEAD?.type !== RefType.Head || !this.repository.HEAD?.name) {
return undefined;
}
- return {
- name: remoteBranch.name,
- remote: remoteBranch.remote,
- commit: remoteBranch.commit
- };
- }
- catch (err) {
- this.logger.error(`[GitHistoryProvider][resolveHistoryItemGroupUpstreamOrBase] Failed to get branch base for '${historyItemId}': ${err.message}`);
- }
-
- return undefined;
- }
-
- private async resolveHEADMergeBase(): Promise {
- if (this.repository.HEAD?.type !== RefType.Head || !this.repository.HEAD?.name) {
+ const mergeBase = await this.repository.getBranchBase(this.repository.HEAD.name);
+ return mergeBase;
+ } catch (err) {
+ this.logger.error(`[GitHistoryProvider][resolveHEADMergeBase] Failed to resolve merge base for ${this.repository.HEAD?.name}: ${err}`);
return undefined;
}
-
- const mergeBase = await this.repository.getBranchBase(this.repository.HEAD.name);
- return mergeBase;
}
dispose(): void {
diff --git a/extensions/git/src/main.ts b/extensions/git/src/main.ts
index aa4d98adc8b..25772be7ea7 100644
--- a/extensions/git/src/main.ts
+++ b/extensions/git/src/main.ts
@@ -3,7 +3,7 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
-import { env, ExtensionContext, workspace, window, Disposable, commands, Uri, version as vscodeVersion, WorkspaceFolder, LogOutputChannel, l10n, LogLevel } from 'vscode';
+import { env, ExtensionContext, workspace, window, Disposable, commands, Uri, version as vscodeVersion, WorkspaceFolder, LogOutputChannel, l10n, LogLevel, languages } from 'vscode';
import { findGit, Git, IGit } from './git';
import { Model } from './model';
import { CommandCenter } from './commands';
@@ -22,7 +22,7 @@ import { GitTimelineProvider } from './timelineProvider';
import { registerAPICommands } from './api/api1';
import { TerminalEnvironmentManager, TerminalShellExecutionManager } from './terminal';
import { createIPCServer, IPCServer } from './ipc/ipcServer';
-import { GitEditor } from './gitEditor';
+import { GitEditor, GitEditorDocumentLinkProvider } from './gitEditor';
import { GitPostCommitCommandsProvider } from './postCommitCommands';
import { GitEditSessionIdentityProvider } from './editSessionIdentityProvider';
import { GitCommitInputBoxCodeActionsProvider, GitCommitInputBoxDiagnosticsManager } from './diagnostics';
@@ -126,6 +126,9 @@ async function createModel(context: ExtensionContext, logger: LogOutputChannel,
const codeActionsProvider = new GitCommitInputBoxCodeActionsProvider(diagnosticsManager);
disposables.push(codeActionsProvider);
+ const gitEditorDocumentLinkProvider = languages.registerDocumentLinkProvider('git-commit', new GitEditorDocumentLinkProvider(model));
+ disposables.push(gitEditorDocumentLinkProvider);
+
checkGitVersion(info);
commands.executeCommand('setContext', 'gitVersion2.35', git.compareGitVersionTo('2.35') >= 0);
diff --git a/extensions/git/src/operation.ts b/extensions/git/src/operation.ts
index d960cedfdbb..294c72f3206 100644
--- a/extensions/git/src/operation.ts
+++ b/extensions/git/src/operation.ts
@@ -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.
*--------------------------------------------------------------------------------------------*/
+/* eslint-disable local/code-no-dangerous-type-assertions */
import { LogOutputChannel } from 'vscode';
@@ -131,7 +132,7 @@ export type SyncOperation = BaseOperation & { kind: OperationKind.Sync };
export type TagOperation = BaseOperation & { kind: OperationKind.Tag };
export const Operation = {
- Add: (showProgress: boolean) => ({ kind: OperationKind.Add, blocking: false, readOnly: false, remote: false, retry: false, showProgress } as AddOperation),
+ Add: (showProgress: boolean): AddOperation => ({ kind: OperationKind.Add, blocking: false, readOnly: false, remote: false, retry: false, showProgress }),
Apply: { kind: OperationKind.Apply, blocking: false, readOnly: false, remote: false, retry: false, showProgress: true } as ApplyOperation,
Blame: { kind: OperationKind.Blame, blocking: false, readOnly: true, remote: false, retry: false, showProgress: true } as BlameOperation,
Branch: { kind: OperationKind.Branch, blocking: false, readOnly: false, remote: false, retry: false, showProgress: true } as BranchOperation,
diff --git a/extensions/git/src/repository.ts b/extensions/git/src/repository.ts
index 8ba56b1a1ed..6302a55e891 100644
--- a/extensions/git/src/repository.ts
+++ b/extensions/git/src/repository.ts
@@ -6,7 +6,7 @@
import TelemetryReporter from '@vscode/extension-telemetry';
import * as fs from 'fs';
import * as path from 'path';
-import * as picomatch from 'picomatch';
+import picomatch from 'picomatch';
import { CancellationError, CancellationToken, CancellationTokenSource, Command, commands, Disposable, Event, EventEmitter, FileDecoration, l10n, LogLevel, LogOutputChannel, Memento, ProgressLocation, ProgressOptions, RelativePattern, scm, SourceControl, SourceControlInputBox, SourceControlInputBoxValidation, SourceControlInputBoxValidationType, SourceControlResourceDecorations, SourceControlResourceGroup, SourceControlResourceState, TabInputNotebookDiff, TabInputTextDiff, TabInputTextMultiDiff, ThemeColor, Uri, window, workspace, WorkspaceEdit } from 'vscode';
import { ActionButton } from './actionButton';
import { ApiRepository } from './api/api1';
@@ -725,6 +725,11 @@ export class Repository implements Disposable {
return this._HEAD;
}
+ private _refs: Ref[] = [];
+ get refs(): Ref[] {
+ return this._refs;
+ }
+
get headShortName(): string | undefined {
if (!this.HEAD) {
return;
@@ -785,6 +790,21 @@ export class Repository implements Disposable {
return this._mergeInProgress;
}
+ private _cherryPickInProgress: boolean = false;
+
+ set cherryPickInProgress(value: boolean) {
+ if (this._cherryPickInProgress === value) {
+ return;
+ }
+
+ this._cherryPickInProgress = value;
+ commands.executeCommand('setContext', 'gitCherryPickInProgress', value);
+ }
+
+ get cherryPickInProgress() {
+ return this._cherryPickInProgress;
+ }
+
private _operations = new OperationManager(this.logger);
get operations(): OperationManager { return this._operations; }
@@ -1429,6 +1449,10 @@ export class Repository implements Disposable {
await this.run(Operation.CherryPick, () => this.repository.cherryPick(commitHash));
}
+ async cherryPickAbort(): Promise {
+ await this.run(Operation.CherryPick, () => this.repository.cherryPickAbort());
+ }
+
async move(from: string, to: string): Promise {
await this.run(Operation.Move, () => this.repository.move(from, to));
}
@@ -1460,7 +1484,15 @@ export class Repository implements Disposable {
// Reflog
const branchFromReflog = await this.getBranchBaseFromReflog(ref);
- const branchFromReflogUpstream = branchFromReflog ? await this.getUpstreamBranch(branchFromReflog) : undefined;
+
+ let branchFromReflogUpstream: Branch | undefined = undefined;
+
+ if (branchFromReflog?.type === RefType.RemoteHead) {
+ branchFromReflogUpstream = branchFromReflog;
+ } else if (branchFromReflog?.type === RefType.Head) {
+ branchFromReflogUpstream = await this.getUpstreamBranch(branchFromReflog);
+ }
+
if (branchFromReflogUpstream) {
await this.setConfig(mergeBaseConfigKey, `${branchFromReflogUpstream.remote}/${branchFromReflogUpstream.name}`);
return branchFromReflogUpstream;
@@ -1508,16 +1540,13 @@ export class Repository implements Disposable {
private async getDefaultBranch(): Promise {
try {
- const defaultBranchResult = await this.repository.exec(['symbolic-ref', '--short', 'refs/remotes/origin/HEAD']);
- if (defaultBranchResult.stdout.trim() === '' || defaultBranchResult.stderr) {
- return undefined;
- }
-
- return this.getBranch(defaultBranchResult.stdout.trim());
+ const defaultBranch = await this.repository.getDefaultBranch();
+ return defaultBranch;
+ }
+ catch (err) {
+ this.logger.warn(`[Repository][getDefaultBranch] Failed to get default branch details: ${err.message}.`);
+ return undefined;
}
- catch (err) { }
-
- return undefined;
}
private async getUpstreamBranch(branch: Branch): Promise {
@@ -1566,8 +1595,8 @@ export class Repository implements Disposable {
await this.run(Operation.Rebase, () => this.repository.rebase(branch));
}
- async tag(name: string, message?: string): Promise {
- await this.run(Operation.Tag, () => this.repository.tag(name, message));
+ async tag(options: { name: string; message?: string; ref?: string }): Promise {
+ await this.run(Operation.Tag, () => this.repository.tag(options));
}
async deleteTag(name: string): Promise {
@@ -1618,14 +1647,6 @@ export class Repository implements Disposable {
return this._EMPTY_TREE;
}
- async getCommitCount(range: string): Promise<{ ahead: number; behind: number }> {
- return await this.run(Operation.RevList, () => this.repository.getCommitCount(range));
- }
-
- async revParse(ref: string): Promise {
- return await this.run(Operation.RevParse, () => this.repository.revParse(ref));
- }
-
async reset(treeish: string, hard?: boolean): Promise {
await this.run(Operation.Reset, () => this.repository.reset(treeish, hard));
}
@@ -2169,13 +2190,14 @@ export class Repository implements Disposable {
this._updateResourceGroupsState(optimisticResourcesGroups);
}
- const [HEAD, remotes, submodules, rebaseCommit, mergeInProgress, commitTemplate] =
+ const [HEAD, remotes, submodules, rebaseCommit, mergeInProgress, cherryPickInProgress, commitTemplate] =
await Promise.all([
this.repository.getHEADRef(),
this.repository.getRemotes(),
this.repository.getSubmodules(),
this.getRebaseCommit(),
this.isMergeInProgress(),
+ this.isCherryPickInProgress(),
this.getInputTemplate()]);
this._HEAD = HEAD;
@@ -2183,11 +2205,17 @@ export class Repository implements Disposable {
this._submodules = submodules!;
this.rebaseCommit = rebaseCommit;
this.mergeInProgress = mergeInProgress;
+ this.cherryPickInProgress = cherryPickInProgress;
this._sourceControl.commitTemplate = commitTemplate;
// Execute cancellable long-running operation
- const resourceGroups = await this.getStatus(cancellationToken);
+ const [resourceGroups, refs] =
+ await Promise.all([
+ this.getStatus(cancellationToken),
+ this.getRefs({}, cancellationToken)]);
+
+ this._refs = refs;
this._updateResourceGroupsState(resourceGroups);
this._onDidChangeStatus.fire();
@@ -2405,6 +2433,11 @@ export class Repository implements Disposable {
return new Promise(resolve => fs.exists(mergeHeadPath, resolve));
}
+ private isCherryPickInProgress(): Promise {
+ const cherryPickHeadPath = path.join(this.repository.root, '.git', 'CHERRY_PICK_HEAD');
+ return new Promise(resolve => fs.exists(cherryPickHeadPath, resolve));
+ }
+
private async maybeAutoStash(runOperation: () => Promise]