diff --git a/.eslintrc b/.eslintrc index 83235647f..12736293c 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,33 +1,51 @@ { "root": true, - "plugins": ["@typescript-eslint"], - "parser": "@typescript-eslint/parser", - "extends": [ - "eslint:recommended", - "plugin:@typescript-eslint/eslint-recommended", - "plugin:@typescript-eslint/recommended" - ], + "extends": ["eslint:recommended"], + "parserOptions": { + "ecmaVersion": 2020 + }, "rules": { "prefer-const": "off", - "require-yield": "off", - "@typescript-eslint/prefer-const": "off", - "@typescript-eslint/no-empty-function": "off", - "@typescript-eslint/no-empty-interface": "off", - "@typescript-eslint/no-use-before-define": "off", - "@typescript-eslint/no-non-null-assertion": "off", - "@typescript-eslint/ban-types": "off", - "@typescript-eslint/no-var-requires": "off", - "@typescript-eslint/explicit-function-return-type": [ - "error", - { - "allowExpressions": true + "require-yield": "off" + }, + "overrides": [ + { + "files": "*.js", + "env": { + "node": true } - ], + }, + { + "files": "*.ts", + "parser": "@typescript-eslint/parser", + "plugins": ["@typescript-eslint"], + "extends": [ + "plugin:@typescript-eslint/eslint-recommended", + "plugin:@typescript-eslint/recommended" + ], + "rules": { + "prefer-const": "off", + "require-yield": "off", + "@typescript-eslint/prefer-const": "off", + "@typescript-eslint/no-empty-function": "off", + "@typescript-eslint/no-empty-interface": "off", + "@typescript-eslint/no-use-before-define": "off", + "@typescript-eslint/no-non-null-assertion": "off", + "@typescript-eslint/ban-types": "off", + "@typescript-eslint/no-var-requires": "off", + "@typescript-eslint/explicit-function-return-type": [ + "error", + { + "allowExpressions": true + } + ], - // Because of the number of type constraints we deal with that need to be - // able to appear in both covariant and contravariant positions, it becomes - // incredibly unwieldy to manage variants of each constraint with `never` - // and `unknown` in all the right places - "@typescript-eslint/no-explicit-any": "off" - } + // Because of the number of type constraints we deal with that need to be + // able to appear in both covariant and contravariant positions, it becomes + // incredibly unwieldy to manage variants of each constraint with `never` + // and `unknown` in all the right places + "@typescript-eslint/no-explicit-any": "off" + } + } + ] } diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5fb9b6510..47aa57ea5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -42,7 +42,9 @@ jobs: - name: Build run: yarn build - name: Run Tests - run: yarn test + uses: GabrielBB/xvfb-action@v1 + with: + run: yarn test test-windows: name: Test Windows @@ -96,4 +98,6 @@ jobs: - name: Build run: yarn build - name: Run Tests - run: yarn test + uses: GabrielBB/xvfb-action@v1 + with: + run: yarn test diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 000000000..3a88a66cb --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,12 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Debug Extension", + "type": "extensionHost", + "request": "launch", + "runtimeExecutable": "${execPath}", + "args": ["--extensionDevelopmentPath=${workspaceFolder}/packages/vscode"] + } + ] +} diff --git a/packages/config/src/index.ts b/packages/config/src/index.ts index 3064e0936..097865a73 100644 --- a/packages/config/src/index.ts +++ b/packages/config/src/index.ts @@ -7,13 +7,28 @@ export { GlintEnvironment, GlintEnvironmentConfig } from './environment'; /** * Loads glint configuration, starting from the given directory - * and searching upwards. + * and searching upwards and raising an error if no configuration + * is found. */ export function loadConfig(from: string): GlintConfig { + let config = findConfig(from); + if (!config) { + throw new Error(`Unable to find Glint configuration for ${from}`); + } + + return config; +} + +/** + * Loads glint configuration, starting from the given directory + * and searching upwards. Returns `null` if no configuration is + * found. + */ +export function findConfig(from: string): GlintConfig | null { let result = cosmiconfigSync('glint').search(from); if (result) { return new GlintConfig(path.dirname(result.filepath), result.config); } - throw new Error(`Unable to find Glint configuration for ${from}`); + return null; } diff --git a/packages/core/src/language-server/index.ts b/packages/core/src/language-server/index.ts index ce0277bbe..d0a884ba5 100644 --- a/packages/core/src/language-server/index.ts +++ b/packages/core/src/language-server/index.ts @@ -1,6 +1,6 @@ import { TextDocuments, TextDocumentSyncKind, createConnection } from 'vscode-languageserver/node'; import { TextDocument } from 'vscode-languageserver-textdocument'; -import { loadConfig } from '@glint/config'; +import { findConfig } from '@glint/config'; import { loadTypeScript } from '../common/load-typescript'; import GlintLanguageServer from './glint-language-server'; import { parseConfigFile, uriToFilePath } from './util'; @@ -10,7 +10,7 @@ const connection = createConnection(process.stdin, process.stdout); const documents = new TextDocuments(TextDocument); const ts = loadTypeScript(); -const glintConfig = loadConfig(process.cwd()); +const glintConfig = findConfig(process.cwd()); const tsconfigPath = ts.findConfigFile(process.cwd(), ts.sys.fileExists); const { fileNames, options } = parseConfigFile(ts, tsconfigPath); const tsFileNames = fileNames.filter((fileName) => /\.ts$/.test(fileName)); @@ -18,85 +18,89 @@ const getRootFileNames = (): Array => { return tsFileNames.concat(documents.all().map((doc) => uriToFilePath(doc.uri))); }; -const gls = new GlintLanguageServer(ts, glintConfig, getRootFileNames, options); - -connection.onInitialize(() => ({ - capabilities: { - textDocumentSync: TextDocumentSyncKind.Full, - completionProvider: { - resolveProvider: true, - }, - referencesProvider: true, - hoverProvider: true, - definitionProvider: true, - workspaceSymbolProvider: true, - renameProvider: { - prepareProvider: true, +if (glintConfig) { + const gls = new GlintLanguageServer(ts, glintConfig, getRootFileNames, options); + + connection.onInitialize(() => ({ + capabilities: { + textDocumentSync: TextDocumentSyncKind.Full, + completionProvider: { + resolveProvider: true, + }, + referencesProvider: true, + hoverProvider: true, + definitionProvider: true, + workspaceSymbolProvider: true, + renameProvider: { + prepareProvider: true, + }, }, - }, -})); - -const scheduleDiagnostics = debounce(250, () => { - for (let { uri } of documents.all()) { - connection.sendDiagnostics({ - uri, - diagnostics: gls.getDiagnostics(uri), - }); - } -}); - -connection.onDidChangeWatchedFiles(() => { - // TODO: use this to synchronize files that aren't open so we don't assume changes only - // happen in the editor. -}); - -documents.onDidOpen(({ document }) => { - gls.openFile(document.uri, document.getText()); - - scheduleDiagnostics(); -}); - -documents.onDidClose(({ document }) => { - gls.closeFile(document.uri); -}); - -documents.onDidChangeContent(({ document }) => { - gls.updateFile(document.uri, document.getText()); - - scheduleDiagnostics(); -}); - -connection.onPrepareRename(({ textDocument, position }) => { - return gls.prepareRename(textDocument.uri, position); -}); - -connection.onRenameRequest(({ textDocument, position, newName }) => { - return gls.getEditsForRename(textDocument.uri, position, newName); -}); - -connection.onCompletion(({ textDocument, position }) => { - return gls.getCompletions(textDocument.uri, position); -}); - -connection.onCompletionResolve((item) => { - return gls.getCompletionDetails(item); -}); - -connection.onHover(({ textDocument, position }) => { - return gls.getHover(textDocument.uri, position); -}); - -connection.onDefinition(({ textDocument, position }) => { - return gls.getDefinition(textDocument.uri, position); -}); - -connection.onReferences(({ textDocument, position }) => { - return gls.getReferences(textDocument.uri, position); -}); - -connection.onWorkspaceSymbol(({ query }) => { - return gls.findSymbols(query); -}); - -documents.listen(connection); -connection.listen(); + })); + + const scheduleDiagnostics = debounce(250, () => { + for (let { uri } of documents.all()) { + connection.sendDiagnostics({ + uri, + diagnostics: gls.getDiagnostics(uri), + }); + } + }); + + connection.onDidChangeWatchedFiles(() => { + // TODO: use this to synchronize files that aren't open so we don't assume changes only + // happen in the editor. + }); + + documents.onDidOpen(({ document }) => { + gls.openFile(document.uri, document.getText()); + + scheduleDiagnostics(); + }); + + documents.onDidClose(({ document }) => { + gls.closeFile(document.uri); + }); + + documents.onDidChangeContent(({ document }) => { + gls.updateFile(document.uri, document.getText()); + + scheduleDiagnostics(); + }); + + connection.onPrepareRename(({ textDocument, position }) => { + return gls.prepareRename(textDocument.uri, position); + }); + + connection.onRenameRequest(({ textDocument, position, newName }) => { + return gls.getEditsForRename(textDocument.uri, position, newName); + }); + + connection.onCompletion(({ textDocument, position }) => { + return gls.getCompletions(textDocument.uri, position); + }); + + connection.onCompletionResolve((item) => { + return gls.getCompletionDetails(item); + }); + + connection.onHover(({ textDocument, position }) => { + return gls.getHover(textDocument.uri, position); + }); + + connection.onDefinition(({ textDocument, position }) => { + return gls.getDefinition(textDocument.uri, position); + }); + + connection.onReferences(({ textDocument, position }) => { + return gls.getReferences(textDocument.uri, position); + }); + + connection.onWorkspaceSymbol(({ query }) => { + return gls.findSymbols(query); + }); + + documents.listen(connection); + connection.listen(); +} else { + connection.console.info(`No Glint config found from ${process.cwd()}`); +} diff --git a/packages/vscode/.gitignore b/packages/vscode/.gitignore new file mode 100644 index 000000000..6873eba34 --- /dev/null +++ b/packages/vscode/.gitignore @@ -0,0 +1,5 @@ +node_modules +.vscode-test/ +*.vsix +lib/ +tsconfig.tsbuildinfo diff --git a/packages/vscode/.vscodeignore b/packages/vscode/.vscodeignore new file mode 100644 index 000000000..dd9c9354d --- /dev/null +++ b/packages/vscode/.vscodeignore @@ -0,0 +1,4 @@ +.vscode/** +.gitignore +**/*.map +**/.eslintrc.json diff --git a/packages/vscode/README.md b/packages/vscode/README.md new file mode 100644 index 000000000..04bde89f1 --- /dev/null +++ b/packages/vscode/README.md @@ -0,0 +1,3 @@ +# A Visual Studio Code extension for the [glint] language server. + +[glint]: https://github.com/typed-ember/glint diff --git a/packages/vscode/__fixtures__/ember-app/.glintrc b/packages/vscode/__fixtures__/ember-app/.glintrc new file mode 100644 index 000000000..95aa1c1b2 --- /dev/null +++ b/packages/vscode/__fixtures__/ember-app/.glintrc @@ -0,0 +1 @@ +environment: ember-loose diff --git a/packages/vscode/__fixtures__/ember-app/app/components/foo.hbs b/packages/vscode/__fixtures__/ember-app/app/components/foo.hbs new file mode 100644 index 000000000..07e73bb0b --- /dev/null +++ b/packages/vscode/__fixtures__/ember-app/app/components/foo.hbs @@ -0,0 +1 @@ +{{this.message}} diff --git a/packages/vscode/__fixtures__/ember-app/app/components/foo.ts b/packages/vscode/__fixtures__/ember-app/app/components/foo.ts new file mode 100644 index 000000000..b134e1936 --- /dev/null +++ b/packages/vscode/__fixtures__/ember-app/app/components/foo.ts @@ -0,0 +1,5 @@ +import Component from '@glimmer/component'; + +export default class MyComponent extends Component { + private message = 'hello'; +} diff --git a/packages/vscode/__fixtures__/ember-app/package.json b/packages/vscode/__fixtures__/ember-app/package.json new file mode 100644 index 000000000..0b6851b2b --- /dev/null +++ b/packages/vscode/__fixtures__/ember-app/package.json @@ -0,0 +1,4 @@ +{ + "name": "test-ember-app", + "private": true +} diff --git a/packages/vscode/__fixtures__/ember-app/tsconfig.json b/packages/vscode/__fixtures__/ember-app/tsconfig.json new file mode 100644 index 000000000..7219450a7 --- /dev/null +++ b/packages/vscode/__fixtures__/ember-app/tsconfig.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "strict": true, + "target": "es2019", + "module": "es2015", + "moduleResolution": "node", + "skipLibCheck": true + } +} diff --git a/packages/vscode/__tests__/helpers/async.ts b/packages/vscode/__tests__/helpers/async.ts new file mode 100644 index 000000000..3edb413eb --- /dev/null +++ b/packages/vscode/__tests__/helpers/async.ts @@ -0,0 +1,16 @@ +export function sleep(ms: number): Promise { + return new Promise((resolve) => setTimeout(resolve, ms)); +} + +export async function waitUntil(callback: () => unknown): Promise { + let start = Date.now(); + while (Date.now() - start < 5_000) { + if (await callback()) { + return; + } + + await sleep(500); + } + + throw new Error(`waitUntil condition never came true`); +} diff --git a/packages/vscode/__tests__/smoketest-ember.test.ts b/packages/vscode/__tests__/smoketest-ember.test.ts new file mode 100644 index 000000000..883f153b3 --- /dev/null +++ b/packages/vscode/__tests__/smoketest-ember.test.ts @@ -0,0 +1,44 @@ +import { commands, languages, Position, ViewColumn, window, Uri, Range } from 'vscode'; +import path from 'path'; +import { waitUntil } from './helpers/async'; + +describe('Smoke test: Ember', () => { + jest.setTimeout(30_000); + + const rootDir = path.resolve(__dirname, '../__fixtures__/ember-app'); + + afterEach(async () => { + await commands.executeCommand('workbench.action.closeAllEditors'); + }); + + test('introducing an error', async () => { + let scriptURI = Uri.file(`${rootDir}/app/components/foo.ts`); + let templateURI = Uri.file(`${rootDir}/app/components/foo.hbs`); + + // Open the script and the template + let scriptEditor = await window.showTextDocument(scriptURI, { viewColumn: ViewColumn.One }); + await window.showTextDocument(templateURI, { viewColumn: ViewColumn.Two }); + + // Ensure neither has any diagnostic messages + expect(languages.getDiagnostics(scriptURI)).toEqual([]); + expect(languages.getDiagnostics(templateURI)).toEqual([]); + + // Comment out a property in the script that's referenced in the template + await scriptEditor.edit((edit) => { + edit.insert(new Position(3, 2), '// '); + }); + + // Wait for a diagnostic to appear in the template + await waitUntil(() => languages.getDiagnostics(templateURI).length); + + // Ensure the diagnostic is the error we expect + expect(languages.getDiagnostics(scriptURI)).toEqual([]); + expect(languages.getDiagnostics(templateURI)).toMatchObject([ + { + message: "Property 'message' does not exist on type 'MyComponent'.", + source: 'glint:ts(2339)', + range: new Range(0, 7, 0, 14), + }, + ]); + }); +}); diff --git a/packages/vscode/__tests__/support/launch-from-cli.js b/packages/vscode/__tests__/support/launch-from-cli.js new file mode 100644 index 000000000..18c4aa431 --- /dev/null +++ b/packages/vscode/__tests__/support/launch-from-cli.js @@ -0,0 +1,27 @@ +// @ts-check + +const path = require('path'); +const os = require('os'); +const { runTests } = require('vscode-test'); + +async function main() { + let dataDir = path.join(os.tmpdir(), `user-data-${Math.random()}`); + + try { + await runTests({ + extensionDevelopmentPath: path.resolve(__dirname, '../..'), + extensionTestsPath: path.resolve(__dirname, 'vscode-runner.js'), + launchArgs: [ + '--disable-extensions', + '--user-data-dir', + dataDir, + `${__dirname}/../../__fixtures__/ember-app`, + ], + }); + } catch (error) { + console.error('Failed to launch tests:', error); + process.exit(1); + } +} + +main(); diff --git a/packages/vscode/__tests__/support/vscode-jest-environment.js b/packages/vscode/__tests__/support/vscode-jest-environment.js new file mode 100644 index 000000000..b4799dc5a --- /dev/null +++ b/packages/vscode/__tests__/support/vscode-jest-environment.js @@ -0,0 +1,10 @@ +// @ts-check + +const NodeEnvironment = require('jest-environment-node'); +const vscode = require('vscode'); + +module.exports = class VSCodeEnvironment extends NodeEnvironment { + getVmContext() { + return Object.assign(super.getVmContext(), { vscode }); + } +}; diff --git a/packages/vscode/__tests__/support/vscode-runner.js b/packages/vscode/__tests__/support/vscode-runner.js new file mode 100644 index 000000000..2d9f95baf --- /dev/null +++ b/packages/vscode/__tests__/support/vscode-runner.js @@ -0,0 +1,23 @@ +// @ts-check + +// This file is invoked by VSCode itself when configured to run extension +// tests via the `--extensionTestsPath` flag. + +const path = require('path'); +const { runCLI } = require('jest'); +const interceptOutput = require('intercept-stdout'); + +exports.run = function (runner, callback) { + let output = ''; + let stopIntercepting = interceptOutput((text) => { + output += text; + }); + + runCLI({ _: [], $0: 'jest', runInBand: true }, [path.resolve(__dirname, '../..')]) + .then(({ results }) => { + stopIntercepting(); + console.log(output); + callback(undefined, results.numFailedTests); + }) + .catch((error) => callback(error)); +}; diff --git a/packages/vscode/__tests__/support/vscode-shim.js b/packages/vscode/__tests__/support/vscode-shim.js new file mode 100644 index 000000000..989cbc02f --- /dev/null +++ b/packages/vscode/__tests__/support/vscode-shim.js @@ -0,0 +1,5 @@ +// This file exists, in combination with `vscode-jest-environment`, to make +// the `vscode` import that's injected by Code actually available to the +// running tests. + +module.exports = global.vscode; diff --git a/packages/vscode/__tests__/tsconfig.json b/packages/vscode/__tests__/tsconfig.json new file mode 100644 index 000000000..cb4f89239 --- /dev/null +++ b/packages/vscode/__tests__/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../tsconfig.json", + "include": ["../src", "**/*.ts"], + "compilerOptions": { + "rootDir": ".." + } +} diff --git a/packages/vscode/jest.config.js b/packages/vscode/jest.config.js new file mode 100644 index 000000000..447286d25 --- /dev/null +++ b/packages/vscode/jest.config.js @@ -0,0 +1,14 @@ +/* eslint-env node */ +module.exports = { + preset: 'ts-jest', + testEnvironment: './__tests__/support/vscode-jest-environment', + testMatch: ['**/__tests__/**/*.test.ts'], + moduleNameMapper: { + '^vscode$': '/__tests__/support/vscode-shim.js', + }, + globals: { + 'ts-jest': { + tsconfig: '/__tests__/tsconfig.json', + }, + }, +}; diff --git a/packages/vscode/package.json b/packages/vscode/package.json new file mode 100644 index 000000000..d247ca5e0 --- /dev/null +++ b/packages/vscode/package.json @@ -0,0 +1,37 @@ +{ + "name": "@glint/vscode", + "version": "0.0.0", + "description": "A Visual Studio Code extension for the glint language server", + "author": "James C. Davis (https://github.com/jamescdavis)", + "license": "MIT", + "files": [ + "README.md", + "lib" + ], + "scripts": { + "lint": "eslint . --max-warnings 0 && prettier --check src", + "test": "node __tests__/support/launch-from-cli.js", + "build": "tsc --build", + "prepack": "yarn build" + }, + "engines": { + "vscode": "^1.40.0" + }, + "activationEvents": [ + "*" + ], + "main": "lib/extension.js", + "dependencies": { + "resolve": "^1.20.0", + "vscode-languageclient": "^7.0.0" + }, + "devDependencies": { + "@glint/core": "^0.2.0", + "@types/jest": "^26.0.13", + "@types/vscode": "^1.52.0", + "intercept-stdout": "^0.1.2", + "jest": "^26.4.2", + "ts-jest": "^26.3.0", + "vscode-test": "^1.5.1" + } +} diff --git a/packages/vscode/src/extension.ts b/packages/vscode/src/extension.ts new file mode 100644 index 000000000..ac39032a1 --- /dev/null +++ b/packages/vscode/src/extension.ts @@ -0,0 +1,72 @@ +import { ExtensionContext, workspace, window, WorkspaceFolder } from 'vscode'; +import { + Disposable, + LanguageClient, + LanguageClientOptions, + ServerOptions, +} from 'vscode-languageclient/node'; +import { sync as resolve } from 'resolve'; + +module.exports = { + activate(context: ExtensionContext) { + workspace.workspaceFolders?.forEach((folder) => addWorkspaceFolder(folder, context)); + workspace.onDidChangeWorkspaceFolders(({ added, removed }) => { + added.forEach((folder) => addWorkspaceFolder(folder, context)); + removed.forEach((folder) => removeWorkspaceFolder(folder, context)); + }); + }, +}; + +const outputChannel = window.createOutputChannel('Glint Language Server'); +const clients = new Map(); + +function addWorkspaceFolder(workspaceFolder: WorkspaceFolder, context: ExtensionContext): void { + let folderPath = workspaceFolder.uri.fsPath; + if (clients.has(folderPath)) return; + + let executable = { + command: 'node', + args: [resolve('@glint/core/bin/glint-language-server', { basedir: folderPath })], + }; + + let serverOptions: ServerOptions = { + run: executable, + debug: executable, + }; + + let clientOptions: LanguageClientOptions = { + workspaceFolder, + outputChannel, + documentSelector: [ + { + scheme: 'file', + language: 'handlebars', + pattern: `${folderPath}/**/*`, + }, + { + scheme: 'file', + language: 'typescript', + pattern: `${folderPath}/**/*`, + }, + ], + synchronize: { + fileEvents: workspace.createFileSystemWatcher(`${folderPath}/**/*.{ts,hbs}`), + }, + }; + + const client = new LanguageClient('glint', 'Glint', serverOptions, clientOptions); + const disposable = client.start(); + + context.subscriptions.push(disposable); + clients.set(folderPath, disposable); +} + +function removeWorkspaceFolder(workspaceFolder: WorkspaceFolder, context: ExtensionContext): void { + let folderPath = workspaceFolder.uri.fsPath; + let client = clients.get(folderPath); + if (client) { + clients.delete(folderPath); + context.subscriptions.splice(context.subscriptions.indexOf(client), 1); + client.dispose(); + } +} diff --git a/packages/vscode/tsconfig.json b/packages/vscode/tsconfig.json new file mode 100644 index 000000000..9a5424018 --- /dev/null +++ b/packages/vscode/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.compileroptions.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "lib" + }, + "include": ["src"] +} diff --git a/tsconfig.json b/tsconfig.json index 506a845e9..40c13f197 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -5,7 +5,8 @@ { "path": "packages/environment-ember-loose" }, { "path": "packages/environment-glimmerx" }, { "path": "packages/template" }, - { "path": "packages/transform" } + { "path": "packages/transform" }, + { "path": "packages/vscode" } ], "files": [] } diff --git a/yarn.lock b/yarn.lock index e6a467466..c9dccf230 100644 --- a/yarn.lock +++ b/yarn.lock @@ -35,7 +35,7 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.12.10", "@babel/generator@^7.12.11", "@babel/generator@^7.12.5", "@babel/generator@^7.9.4": +"@babel/generator@^7.12.10", "@babel/generator@^7.12.11", "@babel/generator@^7.9.4": version "7.12.11" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.11.tgz#98a7df7b8c358c9a37ab07a24056853016aba3af" integrity sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA== @@ -113,7 +113,7 @@ "@babel/template" "^7.12.7" "@babel/types" "^7.12.11" -"@babel/helper-get-function-arity@^7.10.4", "@babel/helper-get-function-arity@^7.12.10": +"@babel/helper-get-function-arity@^7.12.10": version "7.12.10" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz#b158817a3165b5faa2047825dfa61970ddcc16cf" integrity sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag== @@ -511,7 +511,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-block-scoping@^7.12.1", "@babel/plugin-transform-block-scoping@^7.12.11", "@babel/plugin-transform-block-scoping@^7.8.3": +"@babel/plugin-transform-block-scoping@^7.12.11", "@babel/plugin-transform-block-scoping@^7.8.3": version "7.12.12" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.12.tgz#d93a567a152c22aea3b1929bb118d1d0a175cdca" integrity sha512-VOEPQ/ExOVqbukuP7BYJtI5ZxxsmegTwzZ04j1aF0dkSypGo9XpDHuOrABsJu+ie+penpSJheDJ11x1BEZNiyQ== @@ -731,7 +731,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-typeof-symbol@^7.12.1", "@babel/plugin-transform-typeof-symbol@^7.12.10": +"@babel/plugin-transform-typeof-symbol@^7.12.10": version "7.12.10" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.10.tgz#de01c4c8f96580bd00f183072b0d0ecdcf0dec4b" integrity sha512-JQ6H8Rnsogh//ijxspCjc21YPd3VLVoYtAwv3zQmqAt8YGYUtdo5usNhdl4b9/Vir2kPFZl6n1h0PfUz4hJhaA== @@ -903,7 +903,7 @@ "@babel/parser" "^7.12.7" "@babel/types" "^7.12.7" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.1.6", "@babel/traverse@^7.10.4", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.10", "@babel/traverse@^7.12.5", "@babel/traverse@^7.12.9", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.0": +"@babel/traverse@^7.1.0", "@babel/traverse@^7.1.6", "@babel/traverse@^7.10.4", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.10", "@babel/traverse@^7.12.5", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.0": version "7.12.12" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.12.tgz#d0cd87892704edd8da002d674bc811ce64743376" integrity sha512-s88i0X0lPy45RrLM8b9mz8RPH5FqO9G9p7ti59cToE44xFm1Q+Pjh5Gq4SXBbtb88X7Uy7pexeqRIQDDMNkL0w== @@ -918,7 +918,7 @@ globals "^11.1.0" lodash "^4.17.19" -"@babel/types@^7.0.0", "@babel/types@^7.1.6", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.12.1", "@babel/types@^7.12.10", "@babel/types@^7.12.11", "@babel/types@^7.12.12", "@babel/types@^7.12.5", "@babel/types@^7.12.7", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.7.2", "@babel/types@^7.9.0": +"@babel/types@^7.0.0", "@babel/types@^7.1.6", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.12.1", "@babel/types@^7.12.10", "@babel/types@^7.12.11", "@babel/types@^7.12.12", "@babel/types@^7.12.5", "@babel/types@^7.12.7", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.7.2", "@babel/types@^7.9.0": version "7.12.12" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.12.tgz#4608a6ec313abbd87afa55004d373ad04a96c299" integrity sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ== @@ -1028,22 +1028,6 @@ resolve "^1.8.1" semver "^7.3.2" -"@eslint/eslintrc@^0.2.2": - version "0.2.2" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.2.2.tgz#d01fc791e2fc33e88a29d6f3dc7e93d0cd784b76" - integrity sha512-EfB5OHNYp1F4px/LI/FEnGylop7nOqkQ1LRzCM0KccA2U8tvV8w01KBv37LbO7nW4H+YhKyo2LcJhRwjjV17QQ== - dependencies: - ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" - globals "^12.1.0" - ignore "^4.0.6" - import-fresh "^3.2.1" - js-yaml "^3.13.1" - lodash "^4.17.19" - minimatch "^3.0.4" - strip-json-comments "^3.1.1" - "@eslint/eslintrc@^0.3.0": version "0.3.0" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.3.0.tgz#d736d6963d7003b6514e6324bec9c602ac340318" @@ -1910,6 +1894,11 @@ 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/acorn@^4.0.3": version "4.0.5" resolved "https://registry.yarnpkg.com/@types/acorn/-/acorn-4.0.5.tgz#e29fdf884695e77be4e99e67d748f5147255752d" @@ -2434,6 +2423,11 @@ dependencies: source-map "^0.6.1" +"@types/vscode@^1.52.0": + version "1.53.0" + resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.53.0.tgz#47b53717af6562f2ad05171bc9c8500824a3905c" + integrity sha512-XjFWbSPOM0EKIT2XhhYm3D3cx3nn3lshMUcWNy1eqefk+oqRuBq8unVb6BYIZqXy9lQZyeUl7eaBCOZWv+LcXQ== + "@types/webpack-sources@*": version "1.4.0" resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-1.4.0.tgz#e58f1f05f87d39a5c64cf85705bdbdbb94d4d57e" @@ -2765,6 +2759,13 @@ agent-base@5: resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-5.1.1.tgz#e8fb3f242959db44d63be665db7a8e739537a32c" integrity sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g== +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" + agent-base@~4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" @@ -3079,11 +3080,6 @@ ast-types@0.13.3: resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.3.tgz#50da3f28d17bdbc7969a3a2d83a0e4a72ae755a7" integrity sha512-XTZ7xGML849LkQP86sWdQzfhwbt3YwIO6MqbX9mUNYY98VKaaVZP7YNNm70IpwecbkkxmfC5IYAzOQ/2p29zRA== -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== - astral-regex@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" @@ -3423,7 +3419,7 @@ babel-plugin-ember-modules-api-polyfill@^2.6.0: dependencies: ember-rfc176-data "^0.3.13" -babel-plugin-ember-modules-api-polyfill@^3.2.0, babel-plugin-ember-modules-api-polyfill@^3.2.1: +babel-plugin-ember-modules-api-polyfill@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/babel-plugin-ember-modules-api-polyfill/-/babel-plugin-ember-modules-api-polyfill-3.2.1.tgz#715252ffde309da36fb32cd6a9bad5c6b61edd33" integrity sha512-7k4gM0VLAMjoWVxLBDqavH/Dn4mBfzqTuQmtGmZgsdQ4SYVEJ7dewUVeqWBVn5v3QspW4VSoeXh4rHPPlp/rPw== @@ -3942,6 +3938,11 @@ better-assert@~1.0.0: dependencies: callsite "1.0.0" +big-integer@^1.6.17: + version "1.6.48" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.48.tgz#8fd88bd1632cba4a1c8c3e3d7159f08bb95b4b9e" + integrity sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w== + big.js@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" @@ -3957,6 +3958,14 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== +binary@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79" + integrity sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk= + dependencies: + buffers "~0.1.1" + chainsaw "~0.1.0" + "binaryextensions@1 || 2", binaryextensions@^2.1.2: version "2.3.0" resolved "https://registry.yarnpkg.com/binaryextensions/-/binaryextensions-2.3.0.tgz#1d269cbf7e6243ea886aa41453c3651ccbe13c22" @@ -3993,6 +4002,11 @@ bluebird@^3.1.1, bluebird@^3.4.6, bluebird@^3.5.5: resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== +bluebird@~3.4.1: + version "3.4.7" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" + integrity sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM= + bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.4.0: version "4.11.9" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" @@ -4297,7 +4311,7 @@ broccoli-funnel@^2.0.0, broccoli-funnel@^2.0.1, broccoli-funnel@^2.0.2: symlink-or-copy "^1.0.0" walk-sync "^0.3.1" -broccoli-funnel@^3.0.2, broccoli-funnel@^3.0.3: +broccoli-funnel@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/broccoli-funnel/-/broccoli-funnel-3.0.3.tgz#26fd42632471f67a91f4770d1987118087219937" integrity sha512-LPzZ91BwStoHZXdXHQAJeYORl189OrRKM5NdIi86SDU9wZ4s/3lV1PRFOiobDT/jKM10voM7CDzfvicHbCYxAQ== @@ -4644,7 +4658,7 @@ browserslist@^3.2.6: caniuse-lite "^1.0.30000844" electron-to-chromium "^1.3.47" -browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.15.0, browserslist@^4.16.1: +browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.16.1: version "4.16.1" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.1.tgz#bf757a2da376b3447b800a16f0f1c96358138766" integrity sha512-UXhDrwqsNcpTYJBTZsbGATDxZbiVDsx6UjpmRUmtnP10pr8wAYr5LgFoEFw9ixriQH2mv/NX2SfGzE/o8GndLA== @@ -4674,6 +4688,11 @@ buffer-from@1.x, buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== +buffer-indexof-polyfill@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz#d2732135c5999c64b277fcf9b1abe3498254729c" + integrity sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A== + buffer-indexof@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" @@ -4701,6 +4720,11 @@ buffer@^5.5.0: base64-js "^1.3.1" ieee754 "^1.1.13" +buffers@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" + integrity sha1-skV5w77U1tOWru5tmorn9Ugqt7s= + builtin-status-codes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" @@ -4883,7 +4907,7 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30001164, caniuse-lite@^1.0.30001173: +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30001173: version "1.0.30001179" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001179.tgz#b0803883b4471a6c62066fb1752756f8afc699c8" integrity sha512-blMmO0QQujuUWZKyVrD1msR4WNDAqb/UPO1Sw2WWsQ7deoM5bJiicKnWJ1Y0NS/aGINSnKPIWBMw5luX+NDUCA== @@ -4908,6 +4932,13 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= +chainsaw@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98" + integrity sha1-XqtQsor+WAdNDVgpE4iCi15fvJg= + dependencies: + traverse ">=0.3.0 <0.4" + chalk@4.1.0, chalk@^4.0.0, chalk@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" @@ -4985,7 +5016,7 @@ chokidar@^2.1.8: optionalDependencies: fsevents "^1.2.7" -chokidar@^3.4.0, chokidar@^3.4.1: +chokidar@^3.4.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== @@ -5480,7 +5511,7 @@ copy-webpack-plugin@^5.1.1: serialize-javascript "^2.1.2" webpack-log "^2.0.0" -core-js-compat@^3.7.0, core-js-compat@^3.8.0: +core-js-compat@^3.8.0: version "3.8.3" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.8.3.tgz#9123fb6b9cad30f0651332dc77deba48ef9b0b3f" integrity sha512-1sCb0wBXnBIL16pfFG1Gkvei6UzvKyTNYpiC41yrdjEv0UoJoq9E/abTMzyYJ6JpTkAj15dLjbqifIzEBDVvog== @@ -6060,6 +6091,13 @@ dot-prop@^5.2.0: dependencies: is-obj "^2.0.0" +duplexer2@~0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" + integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME= + dependencies: + readable-stream "^2.0.2" + duplexer3@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" @@ -6101,7 +6139,7 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -electron-to-chromium@^1.3.47, electron-to-chromium@^1.3.612, electron-to-chromium@^1.3.634: +electron-to-chromium@^1.3.47, electron-to-chromium@^1.3.634: version "1.3.645" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.645.tgz#c0b269ae2ecece5aedc02dd4586397d8096affb1" integrity sha512-T7mYop3aDpRHIQaUYcmzmh6j9MAe560n6ukqjJMbVC6bVTau7dSpvB18bcsBPPtOSe10cKxhJFtlbEzLa0LL1g== @@ -6781,7 +6819,7 @@ engine.io@~3.4.0: engine.io-parser "~2.2.0" ws "^7.1.2" -enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.0, enhanced-resolve@^4.1.1, enhanced-resolve@^4.5.0: +enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.1, enhanced-resolve@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg== @@ -7901,10 +7939,15 @@ fsevents@^2.1.2, fsevents@~2.3.1: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.1.tgz#b209ab14c61012636c8863507edf7fb68cc54e9f" integrity sha512-YR47Eg4hChJGAB1O3yEAOkGO+rlzutoICGqGo9EZ4lKWokzZRSyIW1QmTzqjtw8MJdj9srP869CuWw/hyzSiBw== -fsevents@~2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" - integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== +fstream@^1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" + integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== + dependencies: + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" function-bind@^1.1.1: version "1.1.1" @@ -8601,6 +8644,15 @@ http-proxy-agent@^3.0.0: agent-base "5" debug "4" +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" + http-proxy-middleware@0.19.1: version "0.19.1" resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" @@ -8650,6 +8702,14 @@ https-proxy-agent@^4.0.0: agent-base "5" debug "4" +https-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" + integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== + dependencies: + agent-base "6" + debug "4" + https@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https/-/https-1.0.0.tgz#3c37c7ae1a8eeb966904a2ad1e975a194b7ed3a4" @@ -8794,7 +8854,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.1, 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== @@ -8863,6 +8923,13 @@ inquirer@^6: strip-ansi "^5.1.0" through "^2.3.6" +intercept-stdout@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/intercept-stdout/-/intercept-stdout-0.1.2.tgz#126abf1fae6c509a428a98c61a631559042ae9fd" + integrity sha1-Emq/H65sUJpCipjGGmMVWQQq6f0= + dependencies: + lodash.toarray "^3.0.0" + internal-ip@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" @@ -8971,7 +9038,7 @@ is-ci@2.0.0, is-ci@^2.0.0: dependencies: ci-info "^2.0.0" -is-core-module@^2.1.0: +is-core-module@^2.1.0, is-core-module@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== @@ -10096,6 +10163,11 @@ linkify-it@^3.0.1: dependencies: uc.micro "^1.0.1" +listenercount@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/listenercount/-/listenercount-1.0.1.tgz#84c8a72ab59c4725321480c975e6508342e70937" + integrity sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc= + livereload-js@^3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/livereload-js/-/livereload-js-3.3.1.tgz#61f887468086762e61fb2987412cf9d1dda99202" @@ -10174,6 +10246,11 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" +lodash._arraycopy@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz#76e7b7c1f1fb92547374878a562ed06a3e50f6e1" + integrity sha1-due3wfH7klRzdIeKVi7Qaj5Q9uE= + lodash._baseassign@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" @@ -10195,6 +10272,11 @@ lodash._baseflatten@^3.0.0: lodash.isarguments "^3.0.0" lodash.isarray "^3.0.0" +lodash._basevalues@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7" + integrity sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc= + lodash._bindcallback@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" @@ -10337,6 +10419,15 @@ lodash.templatesettings@^4.0.0: dependencies: lodash._reinterpolate "^3.0.0" +lodash.toarray@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-3.0.2.tgz#2b204f0fa4f51c285c6f00c81d1cea5a23041179" + integrity sha1-KyBPD6T1HChcbwDIHRzqWiMEEXk= + dependencies: + lodash._arraycopy "^3.0.0" + lodash._basevalues "^3.0.0" + lodash.keys "^3.0.0" + lodash.uniq@^4.2.0, lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" @@ -10390,7 +10481,7 @@ loose-envify@^1.0.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" -lower-case@^2.0.1, lower-case@^2.0.2: +lower-case@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== @@ -10845,7 +10936,7 @@ mkdirp@1.x, mkdirp@^1.0.3, mkdirp@^1.0.4: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5: +"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== @@ -11064,7 +11155,7 @@ node-notifier@^8.0.0: uuid "^8.3.0" which "^2.0.2" -node-releases@^1.1.67, node-releases@^1.1.69: +node-releases@^1.1.69: version "1.1.70" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.70.tgz#66e0ed0273aa65666d7fe78febe7634875426a08" integrity sha512-Slf2s69+2/uAD79pVVQo8uSiC34+g8GWY8UH2Qtqv34ZfhYrxpYpfzs9Js9d6O0mbDmALuxaTlplnBTnSELcrw== @@ -12338,13 +12429,6 @@ readdirp@^2.2.1: micromatch "^3.1.10" readable-stream "^2.0.2" -readdirp@~3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada" - integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ== - dependencies: - picomatch "^2.2.1" - readdirp@~3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" @@ -12761,12 +12845,12 @@ resolve@1.9.0: dependencies: path-parse "^1.0.6" -resolve@^1.1.6, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.1, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.17.0, resolve@^1.19.0, resolve@^1.3.2, resolve@^1.3.3, resolve@^1.4.0, resolve@^1.5.0, resolve@^1.8.1: - version "1.19.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" - integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.1, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.17.0, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.3.3, resolve@^1.4.0, resolve@^1.5.0, resolve@^1.8.1: + version "1.20.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" + integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== dependencies: - is-core-module "^2.1.0" + is-core-module "^2.2.0" path-parse "^1.0.6" responselike@1.0.2, responselike@^1.0.2: @@ -12819,7 +12903,7 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@^2.2.8, rimraf@^2.3.4, rimraf@^2.4.3, rimraf@^2.4.4, rimraf@^2.5.3, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@^2.7.1: +rimraf@2, rimraf@^2.2.8, rimraf@^2.3.4, rimraf@^2.4.3, rimraf@^2.4.4, rimraf@^2.5.3, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@^2.7.1: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== @@ -13093,7 +13177,7 @@ set-value@^2.0.0, set-value@^2.0.1: is-plain-object "^2.0.3" split-string "^3.0.1" -setimmediate@^1.0.4: +setimmediate@^1.0.4, setimmediate@~1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= @@ -13191,15 +13275,6 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== - dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" - slice-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" @@ -13863,16 +13938,6 @@ sync-disk-cache@^2.0.0: rimraf "^3.0.0" username-sync "^1.0.2" -table@^5.2.3: - version "5.4.6" - resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" - integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== - dependencies: - ajv "^6.10.2" - lodash "^4.17.14" - slice-ansi "^2.1.0" - string-width "^3.0.0" - table@^6.0.4: version "6.0.7" resolved "https://registry.yarnpkg.com/table/-/table-6.0.7.tgz#e45897ffbcc1bcf9e8a87bf420f2c9e5a7a52a34" @@ -14200,6 +14265,11 @@ tr46@^2.0.2: dependencies: punycode "^2.1.1" +"traverse@>=0.3.0 <0.4": + version "0.3.9" + resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" + integrity sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk= + tree-sync@^1.2.2: version "1.4.0" resolved "https://registry.yarnpkg.com/tree-sync/-/tree-sync-1.4.0.tgz#314598d13abaf752547d9335b8f95d9a137100d6" @@ -14466,6 +14536,22 @@ untildify@^2.1.0: dependencies: os-homedir "^1.0.0" +unzipper@^0.10.11: + version "0.10.11" + resolved "https://registry.yarnpkg.com/unzipper/-/unzipper-0.10.11.tgz#0b4991446472cbdb92ee7403909f26c2419c782e" + integrity sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw== + dependencies: + big-integer "^1.6.17" + binary "~0.3.0" + bluebird "~3.4.1" + buffer-indexof-polyfill "~1.0.0" + duplexer2 "~0.1.4" + fstream "^1.0.12" + graceful-fs "^4.2.2" + listenercount "~1.0.1" + readable-stream "~2.3.6" + setimmediate "~1.0.4" + upath@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" @@ -14650,6 +14736,15 @@ vscode-jsonrpc@6.0.0: resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz#108bdb09b4400705176b957ceca9e0880e9b6d4e" integrity sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg== +vscode-languageclient@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/vscode-languageclient/-/vscode-languageclient-7.0.0.tgz#b505c22c21ffcf96e167799757fca07a6bad0fb2" + integrity sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg== + dependencies: + minimatch "^3.0.4" + semver "^7.3.4" + vscode-languageserver-protocol "3.16.0" + vscode-languageserver-protocol@3.16.0: version "3.16.0" resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz#34135b61a9091db972188a07d337406a3cdbe821" @@ -14675,6 +14770,16 @@ vscode-languageserver@^7.0.0: dependencies: vscode-languageserver-protocol "3.16.0" +vscode-test@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/vscode-test/-/vscode-test-1.5.1.tgz#68430a4def0f0c07187e0e1dfd3299fabb4c58e0" + integrity sha512-tDloz6euDne+GeUSglhufL0c2xhuYAPAT74hjsuGxfflALfXF9bYnJ7ehZEeVkr/ZnQEh/T8EBrfPL+m0h5qEQ== + dependencies: + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + rimraf "^3.0.2" + unzipper "^0.10.11" + vscode-uri@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.0.2.tgz#ecfd1d066cb8ef4c3a208decdbab9a8c23d055d0" @@ -14738,14 +14843,14 @@ watch-detector@^1.0.0: silent-error "^1.1.1" tmp "^0.1.0" -watchpack-chokidar2@^2.0.0, watchpack-chokidar2@^2.0.1: +watchpack-chokidar2@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww== dependencies: chokidar "^2.1.8" -watchpack@^1.6.1, watchpack@^1.7.4: +watchpack@^1.7.4: version "1.7.5" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==