diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7ac0546e346d3..d55c256eaecb1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -20,7 +20,7 @@ jobs: fail-fast: false matrix: os: [windows-2019, ubuntu-18.04, macos-10.15] - node: ['12.x', '14.x'] + node: ['12.x', '14.x', '16.x'] runs-on: ${{ matrix.os }} timeout-minutes: 60 @@ -43,10 +43,9 @@ jobs: - name: Build shell: bash run: | - yarn --skip-integrity-check --network-timeout 100000 --ignore-engines + yarn --ignore-engines --skip-integrity-check --network-timeout 100000 + ./scripts/check_git_status.sh yarn lint - npx electron-replace-ffmpeg - npx electron-codecs-test yarn build:examples ./scripts/check_git_status.sh env: diff --git a/configs/base.tsconfig.json b/configs/base.tsconfig.json index f0b6da7ec7930..7b1372f123fd2 100644 --- a/configs/base.tsconfig.json +++ b/configs/base.tsconfig.json @@ -19,6 +19,7 @@ "jsx": "react", "lib": [ "ES2017", + "ES2020.Promise", "dom" ], "sourceMap": true diff --git a/dev-packages/application-manager/package.json b/dev-packages/application-manager/package.json index f8655fdc52a1d..eaf5445ef48ad 100644 --- a/dev-packages/application-manager/package.json +++ b/dev-packages/application-manager/package.json @@ -34,17 +34,21 @@ "@babel/plugin-transform-runtime": "^7.10.0", "@babel/preset-env": "^7.10.0", "@theia/application-package": "1.21.0", + "@theia/ffmpeg": "1.21.0", "@types/fs-extra": "^4.0.2", + "@types/semver": "^7.3.8", "babel-loader": "^8.2.2", "buffer": "^6.0.3", "circular-dependency-plugin": "^5.2.2", "compression-webpack-plugin": "^9.0.0", "copy-webpack-plugin": "^8.1.1", "css-loader": "^6.2.0", - "electron-rebuild": "^1.8.6", + "electron-rebuild": "^1.11.0", "fs-extra": "^4.0.2", "ignore-loader": "^0.1.2", "less": "^3.0.3", + "node-abi": "*", + "semver": "^7.3.5", "setimmediate": "^1.0.5", "source-map-loader": "^2.0.1", "source-map-support": "^0.5.19", @@ -55,8 +59,17 @@ "worker-loader": "^3.0.8", "yargs": "^15.3.1" }, + "peerDependencies": { + "@theia/electron": "1.21.0" + }, + "peerDependenciesMeta": { + "@theia/electron": { + "optional": true + } + }, "devDependencies": { - "@theia/ext-scripts": "1.21.0" + "@theia/ext-scripts": "1.21.0", + "@types/node-abi": "*" }, "nyc": { "extends": "../../configs/nyc.json" diff --git a/dev-packages/application-manager/src/application-package-manager.ts b/dev-packages/application-manager/src/application-package-manager.ts index a3db82c6fe7d7..4f6feadc9c7eb 100644 --- a/dev-packages/application-manager/src/application-package-manager.ts +++ b/dev-packages/application-manager/src/application-package-manager.ts @@ -17,12 +17,26 @@ import * as path from 'path'; import * as fs from 'fs-extra'; import * as cp from 'child_process'; +import * as semver from 'semver'; +import * as ffmpeg from '@theia/ffmpeg'; import { ApplicationPackage, ApplicationPackageOptions } from '@theia/application-package'; import { WebpackGenerator, FrontendGenerator, BackendGenerator } from './generator'; import { ApplicationProcess } from './application-process'; import { GeneratorOptions } from './generator/abstract-generator'; import yargs = require('yargs'); +// Declare missing exports from `@types/semver@7` +declare module 'semver' { + function minVersion(range: string): string; +} + +class AbortError extends Error { + constructor(...args: Parameters) { + super(...args); + Object.setPrototypeOf(this, AbortError.prototype); + } +} + export class ApplicationPackageManager { static defineGeneratorOptions(cli: yargs.Argv): yargs.Argv { + if (this.pck.isElectron()) { + await this.prepareElectron(); + } + } + async generate(options: GeneratorOptions = {}): Promise { + try { + await this.prepare(); + } catch (error) { + if (error instanceof AbortError) { + console.warn(error.message); + process.exit(1); + } + throw error; + } await Promise.all([ new WebpackGenerator(this.pck, options).generate(), new BackendGenerator(this.pck, options).generate(), @@ -121,6 +150,55 @@ export class ApplicationPackageManager { return this.__process.fork(this.pck.backend('main.js'), mainArgs, options); } + /** + * Inject Theia's Electron-specific dependencies into the application's package.json. + * + * Only overwrite the Electron range if the current minimum supported version is lower than the recommended one. + */ + protected async prepareElectron(): Promise { + let theiaElectron; + try { + theiaElectron = await import('@theia/electron'); + } catch (error) { + if (error.code === 'ERR_MODULE_NOT_FOUND') { + throw new AbortError('Please install @theia/electron as part of your Theia Electron application'); + } + throw error; + } + const expectedRange = theiaElectron.electronRange; + const appPackageJsonPath = this.pck.path('package.json'); + const appPackageJson = await fs.readJSON(appPackageJsonPath) as { devDependencies?: Record }; + if (!appPackageJson.devDependencies) { + appPackageJson.devDependencies = {}; + } + const currentRange: string | undefined = appPackageJson.devDependencies.electron; + if (!currentRange || semver.compare(semver.minVersion(currentRange), semver.minVersion(expectedRange)) < 0) { + // Update the range with the recommended one and write it on disk. + appPackageJson.devDependencies = this.insertAlphabetically(appPackageJson.devDependencies, 'electron', expectedRange); + await fs.writeJSON(appPackageJsonPath, appPackageJson, { spaces: 2 }); + throw new AbortError('Updated dependencies, please run "install" again'); + } + if (!theiaElectron.electronVersion || !semver.satisfies(theiaElectron.electronVersion, currentRange)) { + throw new AbortError('Dependencies are out of sync, please run "install" again'); + } + await ffmpeg.replaceFfmpeg(); + await ffmpeg.checkFfmpeg(); + } + + protected insertAlphabetically>(object: T, key: string, value: string): T { + const updated: Record = {}; + for (const property of Object.keys(object)) { + if (property.localeCompare(key) > 0) { + updated[key] = value; + } + updated[property] = object[property]; + } + if (!(key in updated)) { + updated[key] = value; + } + return updated as T; + } + private adjustArgs(args: string[], forkOptions: cp.ForkOptions = {}): Readonly<{ mainArgs: string[]; options: cp.ForkOptions }> { const options = { ...this.forkOptions, @@ -147,5 +225,4 @@ export class ApplicationPackageManager { } }; } - } diff --git a/dev-packages/application-manager/src/generator/frontend-generator.ts b/dev-packages/application-manager/src/generator/frontend-generator.ts index d45b9197dc04e..0c707e755f944 100644 --- a/dev-packages/application-manager/src/generator/frontend-generator.ts +++ b/dev-packages/application-manager/src/generator/frontend-generator.ts @@ -125,6 +125,7 @@ module.exports = nls.loadTranslations().then(() => { return `// @ts-check require('reflect-metadata'); +require('@theia/electron/shared/@electron/remote/main').initialize(); // Useful for Electron/NW.js apps as GUI apps on macOS doesn't inherit the \`$PATH\` define // in your dotfiles (.bashrc/.bash_profile/.zshrc/etc). diff --git a/dev-packages/application-manager/src/rebuild.ts b/dev-packages/application-manager/src/rebuild.ts index a82f99e9bf7f2..88c77d76e23cb 100644 --- a/dev-packages/application-manager/src/rebuild.ts +++ b/dev-packages/application-manager/src/rebuild.ts @@ -28,8 +28,10 @@ interface ExitToken { onSignal(callback: (signal: NodeJS.Signals) => void): void } +type NodeABI = string | number; + export const DEFAULT_MODULES = [ - '@theia/node-pty', + 'node-pty', 'nsfw', 'native-keymap', 'find-git-repositories', @@ -46,9 +48,10 @@ export interface RebuildOptions { */ cacheRoot?: string /** - * Rebuild modules for Electron anyway. + * In the event that `node-abi` doesn't recognize the current Electron version, + * you can specify the Node ABI to rebuild for. */ - force?: boolean + forceAbi?: NodeABI } /** @@ -59,12 +62,13 @@ export function rebuild(target: RebuildTarget, options: RebuildOptions = {}): vo const { modules = DEFAULT_MODULES, cacheRoot = process.cwd(), + forceAbi, } = options; const cache = path.resolve(cacheRoot, '.browser_modules'); const cacheExists = folderExists(cache); guardExit(async token => { if (target === 'electron' && !cacheExists) { - process.exitCode = await rebuildElectronModules(cache, modules, token); + process.exitCode = await rebuildElectronModules(cache, modules, forceAbi, token); } else if (target === 'browser' && cacheExists) { process.exitCode = await revertBrowserModules(cache, modules); } else { @@ -100,7 +104,7 @@ interface ModuleBackup { originalLocation: string } -async function rebuildElectronModules(browserModuleCache: string, modules: string[], token: ExitToken): Promise { +async function rebuildElectronModules(browserModuleCache: string, modules: string[], forceAbi: NodeABI | undefined, token: ExitToken): Promise { const modulesJsonPath = path.join(browserModuleCache, 'modules.json'); const modulesJson: ModulesJson = await fs.access(modulesJsonPath).then( () => fs.readJson(modulesJsonPath), @@ -149,14 +153,21 @@ async function rebuildElectronModules(browserModuleCache: string, modules: strin ? m.substring(slash + 1) : m; }); + let exitCode: number | undefined; try { if (process.env.THEIA_REBUILD_NO_WORKAROUND) { - return await runElectronRebuild(todo, token); + exitCode = await runElectronRebuild(todo, forceAbi, token); } else { - return await electronRebuildExtraModulesWorkaround(process.cwd(), todo, () => runElectronRebuild(todo, token), token); + exitCode = await electronRebuildExtraModulesWorkaround(process.cwd(), todo, () => runElectronRebuild(todo, forceAbi, token), token); } } catch (error) { - return revertBrowserModules(browserModuleCache, modules); + console.error(error); + } finally { + // If code is undefined or different from zero we need to revert back to the browser modules. + if (exitCode !== 0) { + await revertBrowserModules(browserModuleCache, modules); + } + return exitCode ?? 1; } } @@ -197,10 +208,14 @@ async function revertBrowserModules(browserModuleCache: string, modules: string[ return exitCode; } -async function runElectronRebuild(modules: string[], token: ExitToken): Promise { +async function runElectronRebuild(modules: string[], forceAbi: NodeABI | undefined, token: ExitToken): Promise { const todo = modules.join(','); - return new Promise((resolve, reject) => { - const electronRebuild = cp.spawn(`npx --no-install electron-rebuild -f -w="${todo}" -o="${todo}"`, { + return new Promise(async (resolve, reject) => { + let command = `npx --no-install electron-rebuild -f -w=${todo} -o=${todo}`; + if (forceAbi) { + command += ` --force-abi ${forceAbi}`; + } + const electronRebuild = cp.spawn(command, { stdio: 'inherit', shell: true, }); diff --git a/dev-packages/application-manager/tsconfig.json b/dev-packages/application-manager/tsconfig.json index 0ca73f8fd9a7b..77ad81a855b94 100644 --- a/dev-packages/application-manager/tsconfig.json +++ b/dev-packages/application-manager/tsconfig.json @@ -11,6 +11,9 @@ "references": [ { "path": "../application-package" + }, + { + "path": "../ffmpeg" } ] } diff --git a/dev-packages/application-package/src/application-package.ts b/dev-packages/application-package/src/application-package.ts index a0fa5f8c3599f..9eaaecacb7bbb 100644 --- a/dev-packages/application-package/src/application-package.ts +++ b/dev-packages/application-package/src/application-package.ts @@ -45,14 +45,6 @@ export class ApplicationPackage { this.projectPath = options.projectPath; this.log = options.log || console.log.bind(console); this.error = options.error || console.error.bind(console); - if (this.isElectron()) { - const { version } = require('../package.json'); - try { - require.resolve('@theia/electron/package.json', { paths: [this.projectPath] }); - } catch { - console.warn(`please install @theia/electron@${version} as a runtime dependency`); - } - } } protected _registry: NpmRegistry | undefined; diff --git a/dev-packages/cli/package.json b/dev-packages/cli/package.json index edac2932942fd..87fb248a3a92d 100644 --- a/dev-packages/cli/package.json +++ b/dev-packages/cli/package.json @@ -17,12 +17,14 @@ "files": [ "bin", "lib", + "native", "src" ], "bin": { "theia": "./bin/theia" }, "scripts": { + "prepare": "tsc -b", "lint": "theiaext lint", "build": "theiaext build", "watch": "theiaext watch", @@ -32,6 +34,7 @@ "@theia/application-manager": "1.21.0", "@theia/application-package": "1.21.0", "@theia/localization-manager": "1.21.0", + "@theia/ffmpeg": "1.21.0", "@theia/ovsx-client": "1.21.0", "@types/chai": "^4.2.7", "@types/mkdirp": "^0.5.2", @@ -50,9 +53,18 @@ "puppeteer": "^2.0.0", "puppeteer-to-istanbul": "^1.2.2", "temp": "^0.9.1", + "unzipper": "^0.9.11", "yargs": "^15.3.1" }, "devDependencies": { - "@types/proxy-from-env": "^1.0.1" + "@types/chai": "^4.2.7", + "@types/mkdirp": "^0.5.2", + "@types/mocha": "^5.2.7", + "@types/node-fetch": "^2.5.7", + "@types/proxy-from-env": "^1.0.1", + "@types/puppeteer": "^2.0.0", + "@types/requestretry": "^1.12.3", + "@types/tar": "^4.0.3", + "@types/unzipper": "^0.9.2" } } diff --git a/dev-packages/cli/src/theia.ts b/dev-packages/cli/src/theia.ts index 814bcc5c263d1..b41ab5032622c 100644 --- a/dev-packages/cli/src/theia.ts +++ b/dev-packages/cli/src/theia.ts @@ -14,11 +14,14 @@ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 ********************************************************************************/ +import * as fs from 'fs'; +import * as path from 'path'; import * as temp from 'temp'; import * as yargs from 'yargs'; import yargsFactory = require('yargs/yargs'); import { ApplicationPackageManager, rebuild } from '@theia/application-manager'; import { ApplicationProps, DEFAULT_SUPPORTED_API_VERSION } from '@theia/application-package'; +import * as ffmpeg from '@theia/ffmpeg'; import checkHoisted from './check-hoisting'; import downloadPlugins from './download-plugins'; import runTest from './run-test'; @@ -49,7 +52,7 @@ function toStringArray(argv?: (string | number)[]): string[] | undefined { function rebuildCommand(command: string, target: ApplicationProps.Target): yargs.CommandModule { return { command, @@ -61,16 +64,15 @@ function rebuildCommand(command: string, target: ApplicationProps.Target): yargs }, 'modules': { alias: 'm', - array: true, // === `--modules/-m` can be specified multiple times + type: 'array', // === `--modules/-m` can be specified multiple times describe: 'List of modules to rebuild/revert' }, - 'force': { - alias: 'f', - boolean: true, - describe: 'Rebuild modules for Electron anyway', + 'forceAbi': { + type: 'number', + describe: 'The Node ABI version to rebuild for' } }, - handler: ({ cacheRoot, modules, force }) => { + handler: ({ cacheRoot, modules, forceAbi }) => { // Note: `modules` is actually `string[] | undefined`. if (modules) { // It is ergonomic to pass arguments as --modules="a,b,c,..." @@ -85,7 +87,7 @@ function rebuildCommand(command: string, target: ApplicationProps.Target): yargs } modules = flattened; } - rebuild(target, { cacheRoot, modules, force }); + rebuild(target, { cacheRoot, modules, forceAbi }); } }; } @@ -100,9 +102,10 @@ function defineCommonOptions(cli: yargs.Argv): yargs.Argv { + const { version } = await fs.promises.readFile(path.join(__dirname, '../package.json'), 'utf8').then(JSON.parse); + yargs.scriptName('theia').version(version); const projectPath = process.cwd(); - yargs.scriptName('theia').version(require('../package.json').version); // Create a sub `yargs` parser to read `app-target` without // affecting the global `yargs` instance used by the CLI. const { appTarget } = defineCommonOptions(yargsFactory()).help(false).parse(); @@ -351,6 +354,61 @@ function theiaCli(): void { }); } }) + .command<{ + electronVersion?: string + electronDist?: string + ffmpegPath?: string + platform?: NodeJS.Platform + }>({ + command: 'ffmpeg:replace [ffmpeg-path]', + describe: '', + builder: { + 'electronDist': { + description: 'Electron distribution location.', + }, + 'electronVersion': { + description: 'Electron version for which to pull the "clean" ffmpeg library.', + }, + 'ffmpegPath': { + description: 'Absolute path to the ffmpeg shared library.', + }, + 'platform': { + description: 'Dictates where the library is located within the Electron distribution.', + choices: ['darwin', 'linux', 'win32'] as NodeJS.Platform[], + }, + }, + handler: async options => { + await ffmpeg.replaceFfmpeg(options); + }, + }) + .command<{ + electronDist?: string + ffmpegPath?: string + json?: boolean + platform?: NodeJS.Platform + }>({ + command: 'ffmpeg:check [ffmpeg-path]', + describe: '(electron-only) Check that ffmpeg doesn\'t contain proprietary codecs', + builder: { + 'electronDist': { + description: 'Electron distribution location', + }, + 'ffmpegPath': { + describe: 'Absolute path to the ffmpeg shared library', + }, + 'json': { + description: 'Output the found codecs as JSON on stdout', + boolean: true, + }, + 'platform': { + description: 'Dictates where the library is located within the Electron distribution', + choices: ['darwin', 'linux', 'win32'] as NodeJS.Platform[], + }, + }, + handler: options => { + ffmpeg.checkFfmpeg(options); + }, + }) .parserConfiguration({ 'unknown-options-as-args': true, }) diff --git a/dev-packages/cli/tsconfig.json b/dev-packages/cli/tsconfig.json index 7327e1ba114c0..40b4dcb4a6cea 100644 --- a/dev-packages/cli/tsconfig.json +++ b/dev-packages/cli/tsconfig.json @@ -15,6 +15,9 @@ { "path": "../application-package" }, + { + "path": "../ffmpeg" + }, { "path": "../localization-manager" }, diff --git a/dev-packages/electron/.gitignore b/dev-packages/electron/.gitignore deleted file mode 100644 index d3a4c58190359..0000000000000 --- a/dev-packages/electron/.gitignore +++ /dev/null @@ -1 +0,0 @@ -download diff --git a/dev-packages/electron/README.md b/dev-packages/electron/README.md deleted file mode 100644 index 1547b251ff747..0000000000000 --- a/dev-packages/electron/README.md +++ /dev/null @@ -1,49 +0,0 @@ -
- -
- -theia-ext-logo - -

ECLIPSE THEIA - ELECTRON

- -
- -
- -## Description - -The `@theia/electron` extension provides runtime dependencies for Theia. The `@theia/electron` package is mandatory for any `electron` [application -target](dev-packages/cli/README.md#build-target). - -The extension includes the following commands: - -- `npx electron-replace-ffmpeg [--help]` -- `npx electron-codecs-test [--help]` - -Both scripts will be triggered on post-install, targeting the current -architecture and "closest" Electron installation (in `node_modules`). - -The post-install scripts can be skipped by setting an environment variable: - -- Mac/Linux: `export THEIA_ELECTRON_SKIP_REPLACE_FFMPEG=1` -- Windows (cmd): `set THEIA_ELECTRON_SKIP_REPLACE_FFMPEG=1` -- Windows (ps): `$env:THEIA_ELECTRON_SKIP_REPLACE_FFMPEG=1` - -## Re-exports - -- `electron` through `@theia/electron` -- `native-keymap` through `@theia/electron/native-keymap` - -## Additional Information - -- [Theia - GitHub](https://github.com/eclipse-theia/theia) -- [Theia - Website](https://theia-ide.org/) - -## License - -- [Eclipse Public License 2.0](http://www.eclipse.org/legal/epl-2.0/) -- [δΈ€ (Secondary) GNU General Public License, version 2 with the GNU Classpath Exception](https://projects.eclipse.org/license/secondary-gpl-2.0-cp) - -## Trademark -"Theia" is a trademark of the Eclipse Foundation -https://www.eclipse.org/theia diff --git a/dev-packages/electron/electron-codecs-test.js b/dev-packages/electron/electron-codecs-test.js deleted file mode 100755 index 30796b2834874..0000000000000 --- a/dev-packages/electron/electron-codecs-test.js +++ /dev/null @@ -1,73 +0,0 @@ -#!/usr/bin/env node -/******************************************************************************** - * Copyright (C) 2019 Ericsson and others. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v. 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0. - * - * This Source Code may also be made available under the following Secondary - * Licenses when the conditions for such availability set forth in the Eclipse - * Public License v. 2.0 are satisfied: GNU General Public License, version 2 - * with the GNU Classpath Exception which is available at - * https://www.gnu.org/software/classpath/license.html. - * - * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 - ********************************************************************************/ -'use-strict' - -// @ts-check - -const yargs = require('yargs'); - -const { platforms, libffmpegCodecs, libffmpegAbsolutePath } = require('./electron-ffmpeg-lib'); - -const bad = new Set([ - 'h264', - 'aac', -]); - -async function main() { - const options = yargs - .option('absolutePath', { - alias: 'a', - description: 'Absolute path to the ffmpeg shared library.', - }) - .option('electronDist', { - alias: 'd', - description: 'Electron distribution location.', - }) - .option('platform', { - alias: 'p', - description: 'Dictates where the library is located within the Electron distribution.', - choices: platforms, - }) - .help().alias('h', 'help') - .exitProcess(false) - .argv; - - if (options.help) { - return; // help is being displayed. - } - const libraryPath = options['absolutePath'] || libffmpegAbsolutePath({ - electronDist: options['electronDist'], - platform: options['platform'], - }); - const codecs = libffmpegCodecs(libraryPath); - const found = []; - for (const codec of codecs) { - if (bad.has(codec.name.toLowerCase())) { - found.push(codec); - } - } - if (found.length > 0) { - throw new Error(`${found.length} bad / ${codecs.length} found\n${ - found.map(codec => `> ${codec.name} detected (${codec.longName})`).join('\n')}`); - } - console.info(`"${libraryPath}" does not contain proprietary codecs (${codecs.length} found).`); -} - -main().catch(error => { - console.error(error); - process.exit(error.code || 127); -}) diff --git a/dev-packages/electron/electron-ffmpeg-lib.js b/dev-packages/electron/electron-ffmpeg-lib.js deleted file mode 100644 index a4a13939af594..0000000000000 --- a/dev-packages/electron/electron-ffmpeg-lib.js +++ /dev/null @@ -1,130 +0,0 @@ -#!/usr/bin/env node -/******************************************************************************** - * Copyright (C) 2019 Ericsson and others. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v. 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0. - * - * This Source Code may also be made available under the following Secondary - * Licenses when the conditions for such availability set forth in the Eclipse - * Public License v. 2.0 are satisfied: GNU General Public License, version 2 - * with the GNU Classpath Exception which is available at - * https://www.gnu.org/software/classpath/license.html. - * - * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 - ********************************************************************************/ -'use-strict' - -// @ts-check - -const crypto = require('crypto'); -const path = require('path'); -const fs = require('fs'); - -const ffmpeg = require('./native/build/Release/ffmpeg.node'); - -/** - * @param {String} path - * @return {Buffer} Hash of the file. - */ -exports.hashFile = async function (path) { - return new Promise((resolve, reject) => { - const sha256 = crypto.createHash('sha256'); - fs.createReadStream(path) - .on('close', () => resolve(sha256.digest())) - .on('data', data => sha256.update(data)) - .on('error', reject); - }); -} - -/** - * @type {NodeJS.Platform[]} - */ -exports.platforms = [ - 'darwin', - 'linux', - 'win32', -]; - -/** - * Return both the relative folder and the ffmpeg shared library name. - * - * @param {NodeJS.Platform} [platform] - * @return {File} - */ -exports.libffmpegLocation = function (platform = process.platform) { - switch (platform) { - case 'darwin': - return { - name: 'libffmpeg.dylib', - folder: 'Electron.app/Contents/Frameworks/Electron Framework.framework/Libraries/', - }; - case 'win32': - return { - name: 'ffmpeg.dll', - }; - case 'linux': - return { - name: 'libffmpeg.so', - }; - default: - throw new Error(`${platform} is not supported`); - } -}; - -/** - * Compute the relative ffmpeg shared library path from the Electron distribution root. - * - * @param {libffmpegPlatformOptions} [options] - * @return {String} - */ -exports.libffmpegRelativePath = function ({ platform } = {}) { - const libffmpeg = exports.libffmpegLocation(platform); - return path.join(libffmpeg.folder || '', libffmpeg.name); -}; - -/** - * Compute the absolute ffmpeg shared library path. - * - * @param {libffmpegDistributionOptions} [options] - * @return {String} - */ -exports.libffmpegAbsolutePath = function ({ platform, electronDist } = {}) { - if (!electronDist) electronDist = path.resolve(require.resolve('electron/index.js'), '..', 'dist'); - return path.join(electronDist, exports.libffmpegRelativePath({ platform })); -}; - -/** - * Return the list of codecs for the given ffmpeg shared library. - * - * @param {libffmpegDistributionOptions} [options] - * @return {String} - */ -exports.libffmpegCodecs = function (absolutePath) { - return ffmpeg.codecs(absolutePath); -}; - -/** - * @typedef {Object} File - * @property {String} name - * @property {String} [folder] - */ - -/** - * @typedef {Object} Codec - * @property {Number} id - * @property {String} name - * @property {String} longName - */ - -/** - * @typedef {Object} libffmpegPlatformOptions - * @property {NodeJS.Platform} [platform] - */ - -/** - * @typedef {Object} libffmpegDistributionOptions - * @property {NodeJS.Platform} [platform] - * @property {String} [electronDist] - */ diff --git a/dev-packages/electron/electron-replace-ffmpeg.js b/dev-packages/electron/electron-replace-ffmpeg.js deleted file mode 100755 index dfc2463c4e60b..0000000000000 --- a/dev-packages/electron/electron-replace-ffmpeg.js +++ /dev/null @@ -1,127 +0,0 @@ -#!/usr/bin/env node -/******************************************************************************** - * Copyright (C) 2019 Ericsson and others. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v. 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0. - * - * This Source Code may also be made available under the following Secondary - * Licenses when the conditions for such availability set forth in the Eclipse - * Public License v. 2.0 are satisfied: GNU General Public License, version 2 - * with the GNU Classpath Exception which is available at - * https://www.gnu.org/software/classpath/license.html. - * - * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 - ********************************************************************************/ -'use-strict' - -// @ts-check - -const electronGet = require('@electron/get'); -const unzipper = require('unzipper'); -const yargs = require('yargs'); -const path = require('path'); -const fs = require('fs'); - -const { hashFile, platforms, libffmpegLocation } = require('./electron-ffmpeg-lib') - -const downloadCache = path.resolve(__dirname, 'download'); -if (!fs.existsSync(downloadCache)) { - fs.mkdirSync(downloadCache); -} - -async function main() { - const options = yargs - .option('electronVersion', { - alias: ['v'], - description: 'Electron version for which to pull the "clean" ffmpeg library.', - }) - .option('absolutePath', { - alias: ['a'], - description: 'Absolute path to the ffmpeg shared library.', - }) - .option('electronDist', { - alias: ['d'], - description: 'Electron distribution location.', - }) - .option('platform', { - alias: ['p'], - description: 'Dictates where the library is located within the Electron distribution.', - choices: platforms, - }) - .help().alias('h', 'help') - .exitProcess(false) - .argv; - - if (options.help) { - return; // help is being displayed. - } - - let shouldDownload = true; - let shouldReplace = true; - - const { - name: libffmpegFileName, - folder: libffmpegFolder = '', - } = libffmpegLocation(options['platform']); - - const electronDist = options['electronDist'] || path.resolve(require.resolve('electron/index.js'), '..', 'dist'); - const libffmpegDistPath = options['absolutePath'] || path.resolve(electronDist, libffmpegFolder, libffmpegFileName); - const libffmpegCachedPath = path.resolve(downloadCache, libffmpegFileName); - - if (fs.existsSync(libffmpegCachedPath)) { - shouldDownload = false; // If the file is already cached, do not download. - console.info('Found cached ffmpeg library.'); - const [cacheHash, distHash] = await Promise.all([ - hashFile(libffmpegCachedPath), - hashFile(libffmpegDistPath), - ]) - if (cacheHash.equals(distHash)) { - shouldReplace = false; // If files are already the same, do not replace. - console.info('Hashes are equal, not replacing the ffmpeg library.'); - } - } - - if (shouldDownload) { - let electronVersion = options['electronVersion']; - if (!electronVersion) { - const electronVersionFilePath = path.resolve(electronDist, 'version'); - electronVersion = fs.readFileSync(electronVersionFilePath, { - encoding: 'utf8' - }).trim(); - } - - const libffmpegZipPath = await electronGet.downloadArtifact({ - version: electronVersion, - artifactName: 'ffmpeg' - }); - - const libffmpegZip = await unzipper.Open.file(libffmpegZipPath); - file = libffmpegZip.files.find(file => file.path.endsWith(libffmpegFileName)); - if (!file) { - throw new Error(`Archive did not contain "${libffmpegFileName}".`); - } - - // Extract file to cache. - await new Promise((resolve, reject) => { - file.stream() - .pipe(fs.createWriteStream(libffmpegCachedPath)) - .on('finish', resolve) - .on('error', reject); - }); - - console.info(`Downloaded ffmpeg shared library { version: "${electronVersion}", dist: "${electronDist}" }.`); - } - - if (shouldReplace) { - fs.copyFileSync(libffmpegCachedPath, libffmpegDistPath); - console.info(`Successfully replaced "${libffmpegDistPath}".`); - } - -} - -main().catch(error => { - console.error(error); - process.exit(1); -}); diff --git a/dev-packages/electron/native-keymap.d.ts b/dev-packages/electron/native-keymap.d.ts deleted file mode 100644 index 7881cf50e8918..0000000000000 --- a/dev-packages/electron/native-keymap.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from 'native-keymap' diff --git a/dev-packages/electron/package.json b/dev-packages/electron/package.json deleted file mode 100644 index 6fe82d3e4dead..0000000000000 --- a/dev-packages/electron/package.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "name": "@theia/electron", - "version": "1.21.0", - "description": "Electron runtime dependencies for Theia", - "publishConfig": { - "access": "public" - }, - "license": "EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0", - "repository": { - "type": "git", - "url": "https://github.com/eclipse-theia/theia.git" - }, - "bugs": { - "url": "https://github.com/eclipse-theia/theia/issues" - }, - "homepage": "https://github.com/eclipse-theia/theia", - "files": [ - "native/src", - "native/binding.gyp", - "scripts", - "*.js", - "*.d.ts", - "!.eslintrc.js" - ], - "bin": { - "electron": "electron-cli.js", - "electron-codecs-test": "electron-codecs-test.js", - "electron-replace-ffmpeg": "electron-replace-ffmpeg.js" - }, - "dependencies": { - "@electron/get": "^1.12.4", - "electron": "^9.0.2", - "electron-store": "^5.1.1", - "fix-path": "^3.0.0", - "native-keymap": "^2.1.2", - "node-gyp": "^7.0.0", - "unzipper": "^0.9.11", - "yargs": "^15.3.1" - }, - "scripts": { - "postinstall": "node scripts/post-install.js", - "test": "mocha \"tests/**/*.spec.js\"" - } -} diff --git a/dev-packages/electron/scripts/post-install.js b/dev-packages/electron/scripts/post-install.js deleted file mode 100644 index e1d9352c52971..0000000000000 --- a/dev-packages/electron/scripts/post-install.js +++ /dev/null @@ -1,85 +0,0 @@ -#!/usr/bin/env node -/******************************************************************************** - * Copyright (C) 2019 Ericsson and others. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v. 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0. - * - * This Source Code may also be made available under the following Secondary - * Licenses when the conditions for such availability set forth in the Eclipse - * Public License v. 2.0 are satisfied: GNU General Public License, version 2 - * with the GNU Classpath Exception which is available at - * https://www.gnu.org/software/classpath/license.html. - * - * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 - ********************************************************************************/ -'use strict' - -// @ts-check - -// const path = require('path'); -const cp = require('child_process'); -const fs = require('fs'); - -/** - * @param {String} script - * @param {String[]} args - * @param {import('child_process').ForkOptions} options - * @param {Function} [callback] - */ -async function fork(script, args = [], options = {}, callback) { - return new Promise((resolve, reject) => { - const subprocess = cp.fork(script, args, options); - subprocess.once('error', reject); - subprocess.once('close', (code, signal) => { - if (signal || code) reject(new Error(`"${script}" exited with ${signal || code}`)); - else resolve(); - }); - // pid 0 is unlikely: pid will be > 0, or null/undefined on error. - if (subprocess.pid && callback) { - callback(subprocess); - } - }) -} - -/** - * @param {String} type - * @param {String} message - * @return {String} - */ -function format(type, message) { - return `(${new Date().toUTCString()}) ${type}: ${message}`; -} - -/** - * @param {import('child_process').ChildProcess} subprocess - * @param {import('stream').Writable} stream - */ -async function writeToStream(subprocess, stream) { - subprocess.stdout.on('data', data => { - console.info(data.toString().trimRight()); - stream.write(format('info', data)); - }); - subprocess.stderr.on('data', data => { - console.error(data.toString().trimRight()); - stream.write(format('error', data)) - }); -} - -async function main() { - await fork('../node-gyp-cli.js', ['rebuild'], { cwd: 'native' }); - if (!process.env.THEIA_ELECTRON_SKIP_REPLACE_FFMPEG) { - const log = fs.createWriteStream('post-install.log', { encoding: 'utf8' }); - await new Promise(resolve => log.once('open', () => resolve())); - await fork('electron-replace-ffmpeg.js', [], { stdio: [0, 'pipe', 'pipe', 'ipc'] }, - subprocess => writeToStream(subprocess, log)); - await fork('electron-codecs-test.js', [], { stdio: [0, 'pipe', 'pipe', 'ipc'] }, - subprocess => writeToStream(subprocess, log)); - } -} - -main().catch(error => { - console.error(error); - process.exit(error.code || 127); -}) diff --git a/dev-packages/electron/tests/test-resources/fileA.txt b/dev-packages/electron/tests/test-resources/fileA.txt deleted file mode 100644 index 5da849b5c6f00..0000000000000 --- a/dev-packages/electron/tests/test-resources/fileA.txt +++ /dev/null @@ -1 +0,0 @@ -ABC diff --git a/dev-packages/electron/tests/test-resources/fileB.txt b/dev-packages/electron/tests/test-resources/fileB.txt deleted file mode 100644 index d4e3ab003554d..0000000000000 --- a/dev-packages/electron/tests/test-resources/fileB.txt +++ /dev/null @@ -1 +0,0 @@ -XYZ diff --git a/dev-packages/electron/tests/test-resources/fileC.txt b/dev-packages/electron/tests/test-resources/fileC.txt deleted file mode 100644 index 5da849b5c6f00..0000000000000 --- a/dev-packages/electron/tests/test-resources/fileC.txt +++ /dev/null @@ -1 +0,0 @@ -ABC diff --git a/dev-packages/electron/.eslintrc.js b/dev-packages/ffmpeg/.eslintrc.js similarity index 100% rename from dev-packages/electron/.eslintrc.js rename to dev-packages/ffmpeg/.eslintrc.js diff --git a/dev-packages/ffmpeg/README.md b/dev-packages/ffmpeg/README.md new file mode 100644 index 0000000000000..a74ab6ad0f5ca --- /dev/null +++ b/dev-packages/ffmpeg/README.md @@ -0,0 +1,3 @@ +# `ffmeg.node` + +This is a [Node Native Addon](https://nodejs.org/docs/latest-v12.x/api/n-api.html) to dynamically link to Electron's `ffmpeg.dll` and fetch a list of included codecs. diff --git a/dev-packages/electron/native/binding.gyp b/dev-packages/ffmpeg/binding.gyp similarity index 76% rename from dev-packages/electron/native/binding.gyp rename to dev-packages/ffmpeg/binding.gyp index 364bfabbcdaa6..8105fe875646b 100644 --- a/dev-packages/electron/native/binding.gyp +++ b/dev-packages/ffmpeg/binding.gyp @@ -3,12 +3,12 @@ 'defines': ['NAPI_VERSION=2'], 'target_name': 'ffmpeg', 'sources': [ - 'src/ffmpeg.c', + 'native/ffmpeg.c', ], 'conditions': [ ['OS=="linux"', { 'sources': [ - 'src/linux-ffmpeg.c', + 'native/linux-ffmpeg.c', ], 'libraries': [ '-ldl', @@ -16,12 +16,12 @@ }], ['OS=="mac"', { 'sources': [ - 'src/mac-ffmpeg.c', + 'native/mac-ffmpeg.c', ] }], ['OS=="win"', { 'sources': [ - 'src/win-ffmpeg.c', + 'native/win-ffmpeg.c', ] }], ], diff --git a/dev-packages/electron/native/src/ffmpeg.c b/dev-packages/ffmpeg/native/ffmpeg.c similarity index 100% rename from dev-packages/electron/native/src/ffmpeg.c rename to dev-packages/ffmpeg/native/ffmpeg.c diff --git a/dev-packages/electron/native/src/ffmpeg.h b/dev-packages/ffmpeg/native/ffmpeg.h similarity index 100% rename from dev-packages/electron/native/src/ffmpeg.h rename to dev-packages/ffmpeg/native/ffmpeg.h diff --git a/dev-packages/electron/native/src/linux-ffmpeg.c b/dev-packages/ffmpeg/native/linux-ffmpeg.c similarity index 100% rename from dev-packages/electron/native/src/linux-ffmpeg.c rename to dev-packages/ffmpeg/native/linux-ffmpeg.c diff --git a/dev-packages/electron/native/src/mac-ffmpeg.c b/dev-packages/ffmpeg/native/mac-ffmpeg.c similarity index 100% rename from dev-packages/electron/native/src/mac-ffmpeg.c rename to dev-packages/ffmpeg/native/mac-ffmpeg.c diff --git a/dev-packages/electron/native/src/win-ffmpeg.c b/dev-packages/ffmpeg/native/win-ffmpeg.c similarity index 100% rename from dev-packages/electron/native/src/win-ffmpeg.c rename to dev-packages/ffmpeg/native/win-ffmpeg.c diff --git a/dev-packages/ffmpeg/package.json b/dev-packages/ffmpeg/package.json new file mode 100644 index 0000000000000..ccd4fd5c77aa8 --- /dev/null +++ b/dev-packages/ffmpeg/package.json @@ -0,0 +1,36 @@ +{ + "name": "@theia/ffmpeg", + "version": "1.21.0", + "description": "Theia FFMPEG reader utility.", + "publishConfig": { + "access": "public" + }, + "license": "EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0", + "repository": { + "type": "git", + "url": "https://github.com/eclipse-theia/theia.git" + }, + "bugs": { + "url": "https://github.com/eclipse-theia/theia/issues" + }, + "homepage": "https://github.com/eclipse-theia/theia", + "main": "lib/index.js", + "files": [ + "lib", + "native", + "src" + ], + "scripts": { + "lint": "theiaext lint", + "build": "theiaext build", + "watch": "theiaext watch", + "clean": "theiaext clean" + }, + "dependencies": { + "@electron/get": "^1.12.4", + "unzipper": "^0.9.11" + }, + "devDependencies": { + "@types/unzipper": "^0.9.2" + } +} diff --git a/dev-packages/ffmpeg/src/check-ffmpeg.ts b/dev-packages/ffmpeg/src/check-ffmpeg.ts new file mode 100644 index 0000000000000..66efe9a23e101 --- /dev/null +++ b/dev-packages/ffmpeg/src/check-ffmpeg.ts @@ -0,0 +1,56 @@ +/******************************************************************************** + * Copyright (C) 2019 Ericsson and others. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v. 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * This Source Code may also be made available under the following Secondary + * Licenses when the conditions for such availability set forth in the Eclipse + * Public License v. 2.0 are satisfied: GNU General Public License, version 2 + * with the GNU Classpath Exception which is available at + * https://www.gnu.org/software/classpath/license.html. + * + * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 + ********************************************************************************/ + +import * as ffmpeg from './ffmpeg'; + +export interface CheckFfmpegOptions extends ffmpeg.FfmpegOptions { + json?: boolean +} + +export interface CheckFfmpegResult { + free: ffmpeg.Codec[], + proprietary: ffmpeg.Codec[], +} + +export const KNOWN_PROPRIETARY_CODECS = new Set(['h264', 'aac']); + +export async function checkFfmpeg(options: CheckFfmpegOptions = {}): Promise { + const { + ffmpegPath = ffmpeg.ffmpegAbsolutePath(options), + json = false, + } = options; + const codecs = ffmpeg.getFfmpegCodecs(ffmpegPath); + const free = []; + const proprietary = []; + for (const codec of codecs) { + if (KNOWN_PROPRIETARY_CODECS.has(codec.name.toLowerCase())) { + proprietary.push(codec); + } else { + free.push(codec); + } + } + if (json) { + // Pretty format JSON on stdout. + const result: CheckFfmpegResult = { free, proprietary }; + console.log(JSON.stringify(result, undefined, 2)); + } + if (proprietary.length > 0) { + // Should be displayed on stderr to not pollute the JSON on stdout. + throw new Error(`${proprietary.length} proprietary codecs found\n${proprietary.map(codec => `> ${codec.name} detected (${codec.longName})`).join('\n')}`); + } + // Print to stderr to not pollute the JSON on stdout. + console.warn(`"${ffmpegPath}" does not contain proprietary codecs (${codecs.length} found).`); +} diff --git a/dev-packages/ffmpeg/src/ffmpeg.ts b/dev-packages/ffmpeg/src/ffmpeg.ts new file mode 100644 index 0000000000000..0de2f5add4385 --- /dev/null +++ b/dev-packages/ffmpeg/src/ffmpeg.ts @@ -0,0 +1,111 @@ +/******************************************************************************** + * Copyright (C) 2019 Ericsson and others. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v. 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * This Source Code may also be made available under the following Secondary + * Licenses when the conditions for such availability set forth in the Eclipse + * Public License v. 2.0 are satisfied: GNU General Public License, version 2 + * with the GNU Classpath Exception which is available at + * https://www.gnu.org/software/classpath/license.html. + * + * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 + ********************************************************************************/ + +import path = require('path'); + +export interface Codec { + id: number + name: string + longName: string +} + +export interface FfmpegNativeAddon { + codecs(ffmpegPath: string): Codec[] +} + +let _FFMPEG: FfmpegNativeAddon; +try { + _FFMPEG = require('../build/Release/ffmpeg.node'); +} catch (error) { + if (error.code === 'MODULE_NOT_FOUND') { + _FFMPEG = require('../build/Debug/ffmpeg.node'); + } else { + throw error; + } +} +export { _FFMPEG }; + +export interface FfmpegNameAndLocation { + /** + * Name with extension of the shared library. + */ + name: string + /** + * Relative location of the file from Electron's dist root. + */ + location: string +} + +export interface FfmpegOptions { + electronVersion?: string + electronDist?: string + ffmpegPath?: string + platform?: NodeJS.Platform +} + +/** + * @returns name and relative path from Electron's root where FFMPEG is located at. + */ +export function ffmpegNameAndLocation({ + platform = process.platform +}: FfmpegOptions = {}): FfmpegNameAndLocation { + switch (platform) { + case 'darwin': + return { + name: 'libffmpeg.dylib', + location: 'Electron.app/Contents/Frameworks/Electron Framework.framework/Libraries/', + }; + case 'win32': + return { + name: 'ffmpeg.dll', + location: '', + }; + case 'linux': + return { + name: 'libffmpeg.so', + location: '', + }; + default: + throw new Error(`${platform} is not supported`); + } +} + +/** + * @returns relative ffmpeg shared library path from the Electron distribution root. + */ +export function ffmpegRelativePath(options: FfmpegOptions = {}): string { + const { location, name } = ffmpegNameAndLocation(options); + return path.join(location, name); +} + +/** + * @returns absolute ffmpeg shared library path. + */ +export function ffmpegAbsolutePath(options: FfmpegOptions = {}): string { + const { + electronDist = path.resolve(require.resolve('electron/package.json'), '..', 'dist') + } = options; + return path.join(electronDist, ffmpegRelativePath(options)); +} + +/** + * Dynamically link to `ffmpegPath` and use FFMPEG APIs to list the included `Codec`s. + * @param ffmpegPath absolute path the the FFMPEG shared library. + * @returns list of codecs for the given ffmpeg shared library. + */ +export function getFfmpegCodecs(ffmpegPath: string): Codec[] { + return _FFMPEG.codecs(ffmpegPath); +} diff --git a/dev-packages/electron/tests/electron-ffmpeg-lib.spec.js b/dev-packages/ffmpeg/src/hash.ts similarity index 54% rename from dev-packages/electron/tests/electron-ffmpeg-lib.spec.js rename to dev-packages/ffmpeg/src/hash.ts index 4f73ae41997a7..31dd80322310f 100644 --- a/dev-packages/electron/tests/electron-ffmpeg-lib.spec.js +++ b/dev-packages/ffmpeg/src/hash.ts @@ -1,5 +1,5 @@ /******************************************************************************** - * Copyright (C) 2019 Ericsson and others. + * Copyright (C) 2021 Ericsson and others. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0 which is available at @@ -14,27 +14,15 @@ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 ********************************************************************************/ -const path = require('path'); -const { expect } = require('chai'); +import crypto = require('crypto'); +import fs = require('fs-extra'); -const { hashFile } = require('../electron-ffmpeg-lib'); - -function resource(...parts) { - return path.resolve(__dirname, 'test-resources', ...parts); -} - -describe('ffmpeg utility functions', () => { - - it('hashFile', async () => { - const [ - hashA, hashB, hashC - ] = await Promise.all([ - hashFile(resource('fileA.txt')), - hashFile(resource('fileB.txt')), - hashFile(resource('fileC.txt')), - ]); - expect(hashA.equals(hashC)).true; - expect(hashA.equals(hashB)).false; +export async function hashFile(filePath: string): Promise { + return new Promise((resolve, reject) => { + const sha256 = crypto.createHash('sha256'); + fs.createReadStream(filePath) + .on('close', () => resolve(sha256.digest())) + .on('data', data => sha256.update(data)) + .on('error', reject); }); - -}); +} diff --git a/dev-packages/electron/electron-cli.js b/dev-packages/ffmpeg/src/index.ts old mode 100755 new mode 100644 similarity index 83% rename from dev-packages/electron/electron-cli.js rename to dev-packages/ffmpeg/src/index.ts index 820b52ac904eb..91d3aa9ac6cd8 --- a/dev-packages/electron/electron-cli.js +++ b/dev-packages/ffmpeg/src/index.ts @@ -1,6 +1,5 @@ -#!/usr/bin/env node /******************************************************************************** - * Copyright (C) 2019 TypeFox and others. + * Copyright (C) 2021 Ericsson and others. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0 which is available at @@ -15,4 +14,7 @@ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 ********************************************************************************/ -require('electron/cli.js'); +export * from './hash'; +export * from './ffmpeg'; +export * from './check-ffmpeg'; +export * from './replace-ffmpeg'; diff --git a/dev-packages/ffmpeg/src/replace-ffmpeg.ts b/dev-packages/ffmpeg/src/replace-ffmpeg.ts new file mode 100644 index 0000000000000..a5fc90d3d88aa --- /dev/null +++ b/dev-packages/ffmpeg/src/replace-ffmpeg.ts @@ -0,0 +1,80 @@ +/******************************************************************************** + * Copyright (C) 2019 Ericsson and others. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v. 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * This Source Code may also be made available under the following Secondary + * Licenses when the conditions for such availability set forth in the Eclipse + * Public License v. 2.0 are satisfied: GNU General Public License, version 2 + * with the GNU Classpath Exception which is available at + * https://www.gnu.org/software/classpath/license.html. + * + * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 + ********************************************************************************/ + +import electronGet = require('@electron/get'); +import fs = require('fs-extra'); +import os = require('os'); +import path = require('path'); +import unzipper = require('unzipper'); +import * as ffmpeg from './ffmpeg'; +import { hashFile } from './hash'; + +export async function replaceFfmpeg(options: ffmpeg.FfmpegOptions = {}): Promise { + let shouldDownload = true; + let shouldReplace = true; + const { + name: ffmpegName, + location: ffmpegLocation, + } = ffmpeg.ffmpegNameAndLocation(options); + const { + electronDist = path.resolve(require.resolve('electron/package.json'), '..', 'dist'), + electronVersion = await readElectronVersion(electronDist), + ffmpegPath = path.resolve(electronDist, ffmpegLocation, ffmpegName), + } = options; + const ffmpegCachedPath = path.join(os.tmpdir(), `theia-cli/cache/electron-v${electronVersion}`, ffmpegName); + if (await fs.pathExists(ffmpegCachedPath)) { + shouldDownload = false; // If the file is already cached, do not download. + console.warn('Found cached ffmpeg library.'); + const [cacheHash, distHash] = await Promise.all([ + hashFile(ffmpegCachedPath), + hashFile(ffmpegPath), + ]); + if (cacheHash.equals(distHash)) { + shouldReplace = false; // If files are already the same, do not replace. + console.warn('Hashes are equal, not replacing the ffmpeg library.'); + } + } + if (shouldDownload) { + const ffmpegZipPath = await electronGet.downloadArtifact({ + version: electronVersion, + artifactName: 'ffmpeg' + }); + const ffmpegZip = await unzipper.Open.file(ffmpegZipPath); + const file = ffmpegZip.files.find(f => f.path.endsWith(ffmpegName)); + if (!file) { + throw new Error(`Archive did not contain "${ffmpegName}".`); + } + // Extract file to cache. + await fs.mkdirp(path.dirname(ffmpegCachedPath)); + await new Promise((resolve, reject) => { + file.stream() + .pipe(fs.createWriteStream(ffmpegCachedPath)) + .on('finish', resolve) + .on('error', reject); + }); + console.warn(`Downloaded ffmpeg shared library { version: "${electronVersion}", dist: "${electronDist}" }.`); + } + if (shouldReplace) { + await fs.copy(ffmpegCachedPath, ffmpegPath); + console.warn(`Successfully replaced "${ffmpegPath}".`); + } +} + +export async function readElectronVersion(electronDist: string): Promise { + const electronVersionFilePath = path.resolve(electronDist, 'version'); + const version = await fs.readFile(electronVersionFilePath, 'utf8'); + return version.trim(); +} diff --git a/dev-packages/ffmpeg/tsconfig.json b/dev-packages/ffmpeg/tsconfig.json new file mode 100644 index 0000000000000..b973ddbc673a2 --- /dev/null +++ b/dev-packages/ffmpeg/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../../configs/base.tsconfig", + "compilerOptions": { + "composite": true, + "rootDir": "src", + "outDir": "lib" + }, + "include": [ + "src" + ], + "references": [] +} diff --git a/dev-packages/eslint-plugin/.eslintrc.js b/dev-packages/private-eslint-plugin/.eslintrc.js similarity index 100% rename from dev-packages/eslint-plugin/.eslintrc.js rename to dev-packages/private-eslint-plugin/.eslintrc.js diff --git a/dev-packages/eslint-plugin/README.md b/dev-packages/private-eslint-plugin/README.md similarity index 100% rename from dev-packages/eslint-plugin/README.md rename to dev-packages/private-eslint-plugin/README.md diff --git a/dev-packages/eslint-plugin/index.js b/dev-packages/private-eslint-plugin/index.js similarity index 100% rename from dev-packages/eslint-plugin/index.js rename to dev-packages/private-eslint-plugin/index.js diff --git a/dev-packages/eslint-plugin/package.json b/dev-packages/private-eslint-plugin/package.json similarity index 53% rename from dev-packages/eslint-plugin/package.json rename to dev-packages/private-eslint-plugin/package.json index 6876b0e1194c3..ec4af32321526 100644 --- a/dev-packages/eslint-plugin/package.json +++ b/dev-packages/private-eslint-plugin/package.json @@ -3,7 +3,13 @@ "name": "@theia/eslint-plugin", "version": "1.21.0", "description": "Custom ESLint rules for developing Theia extensions and applications", + "main": "index.js", + "scripts": { + "prepare": "tsc -b" + }, "dependencies": { - "@theia/core": "1.21.0" + "@theia/core": "1.21.0", + "@theia/ext-scripts": "1.21.0", + "@theia/re-exports": "1.21.0" } } diff --git a/dev-packages/eslint-plugin/rules/no-src-import.js b/dev-packages/private-eslint-plugin/rules/no-src-import.js similarity index 100% rename from dev-packages/eslint-plugin/rules/no-src-import.js rename to dev-packages/private-eslint-plugin/rules/no-src-import.js diff --git a/dev-packages/eslint-plugin/rules/runtime-import-check.js b/dev-packages/private-eslint-plugin/rules/runtime-import-check.js similarity index 100% rename from dev-packages/eslint-plugin/rules/runtime-import-check.js rename to dev-packages/private-eslint-plugin/rules/runtime-import-check.js diff --git a/dev-packages/eslint-plugin/rules/shared-dependencies.js b/dev-packages/private-eslint-plugin/rules/shared-dependencies.js similarity index 80% rename from dev-packages/eslint-plugin/rules/shared-dependencies.js rename to dev-packages/private-eslint-plugin/rules/shared-dependencies.js index 641a018e8f27d..b7fccd33d354e 100644 --- a/dev-packages/eslint-plugin/rules/shared-dependencies.js +++ b/dev-packages/private-eslint-plugin/rules/shared-dependencies.js @@ -19,12 +19,9 @@ const fs = require('fs'); const path = require('path'); +const { PackageReExports } = require('@theia/re-exports'); -const { - theiaCoreSharedPrefix, - isSharedModule, - getTheiaCoreSharedModule, -} = require('@theia/core/shared'); +const coreReExports = PackageReExports.FromPackageSync('@theia/core'); /** @type {import('eslint').Rule.RuleModule} */ module.exports = { @@ -43,36 +40,29 @@ module.exports = { // Only show an error regarding the package.json file if this is the first // time we detect the error, else it will error for every file of the package: if (firstTime(packageJson.__filename)) { - const sharedModules = getSharedModuleDependencies(packageJson); - if (sharedModules.length > 0) { + const redundantDeps = getRedundantDependencies(packageJson); + if (redundantDeps.length > 0) { context.report({ loc: { line: 0, column: 0 }, - message: `"${packageJson.__filename}" depends on some @theia/core shared dependencies: [${sharedModules}]`, + message: `"${packageJson.__filename}" depends on some @theia/core shared dependencies: [${redundantDeps}]`, }); } } function checkModuleImport(node) { - const module = /** @type {string} */(node.value); - if (isSharedModule(module)) { + const moduleName = /** @type {string} */(node.value); + const reExport = coreReExports.findReExportByModuleName(moduleName); + if (reExport) { context.report({ node, - message: `"${module}" is a @theia/core shared dependency, please use "${theiaCoreSharedPrefix}${module}" instead.`, + message: `"${moduleName}" is a @theia/core shared dependency, please use "${reExport.externalImport}" instead.`, fix(fixer) { if (node.range) { const [start, end] = node.range; // Make sure to insert text between the first quote of the string and the rest: - return fixer.insertTextBeforeRange([start + 1, end], theiaCoreSharedPrefix); + return fixer.insertTextBeforeRange([start + 1, end], `${coreReExports.packageName}/${reExport.reExportDir}`); } } }); - } else { - const shared = getTheiaCoreSharedModule(module); - if (shared && !isSharedModule(shared)) { - context.report({ - node, - message: `"${shared}" is not part of @theia/core shared dependencies.` - }); - } } } return { @@ -115,7 +105,7 @@ function firstTime(key) { */ const findPackageJsonCache = new Map(); /** - * @param {string} from file path to start searching from + * @param {string} from file path to start searching from. * @returns {FoundPackageJson | undefined} */ function findPackageJson(from) { @@ -160,11 +150,15 @@ function dependsOnTheiaCore(packageJson) { } /** + * Return a list of packages from `packageJson`'s dependencies that can be + * required using `@theia/core/(electron-)shared/...`. * @param {object} packageJson * @return {string[]} */ -function getSharedModuleDependencies(packageJson) { +function getRedundantDependencies(packageJson) { return typeof packageJson.dependencies === 'object' - ? Object.keys(packageJson.dependencies).filter(dependency => isSharedModule(dependency)) + ? Object.keys(packageJson.dependencies).filter( + dependency => coreReExports.findReExportsByPackageName(dependency).length > 0 + ) : []; } diff --git a/dev-packages/eslint-plugin/tsconfig.json b/dev-packages/private-eslint-plugin/tsconfig.json similarity index 100% rename from dev-packages/eslint-plugin/tsconfig.json rename to dev-packages/private-eslint-plugin/tsconfig.json diff --git a/dev-packages/ext-scripts/README.md b/dev-packages/private-ext-scripts/README.md similarity index 100% rename from dev-packages/ext-scripts/README.md rename to dev-packages/private-ext-scripts/README.md diff --git a/dev-packages/ext-scripts/package.json b/dev-packages/private-ext-scripts/package.json similarity index 100% rename from dev-packages/ext-scripts/package.json rename to dev-packages/private-ext-scripts/package.json diff --git a/dev-packages/ext-scripts/theia-ext.js b/dev-packages/private-ext-scripts/theia-ext.js similarity index 100% rename from dev-packages/ext-scripts/theia-ext.js rename to dev-packages/private-ext-scripts/theia-ext.js diff --git a/dev-packages/ext-scripts/theia-run.js b/dev-packages/private-ext-scripts/theia-run.js similarity index 100% rename from dev-packages/ext-scripts/theia-run.js rename to dev-packages/private-ext-scripts/theia-run.js diff --git a/dev-packages/ext-scripts/theia-ts-clean.js b/dev-packages/private-ext-scripts/theia-ts-clean.js similarity index 100% rename from dev-packages/ext-scripts/theia-ts-clean.js rename to dev-packages/private-ext-scripts/theia-ts-clean.js diff --git a/dev-packages/private-re-exports/.eslintrc.js b/dev-packages/private-re-exports/.eslintrc.js new file mode 100644 index 0000000000000..13089943582b6 --- /dev/null +++ b/dev-packages/private-re-exports/.eslintrc.js @@ -0,0 +1,10 @@ +/** @type {import('eslint').Linter.Config} */ +module.exports = { + extends: [ + '../../configs/build.eslintrc.json' + ], + parserOptions: { + tsconfigRootDir: __dirname, + project: 'tsconfig.json' + } +}; diff --git a/dev-packages/private-re-exports/README.md b/dev-packages/private-re-exports/README.md new file mode 100644 index 0000000000000..90ebfa5a9c384 --- /dev/null +++ b/dev-packages/private-re-exports/README.md @@ -0,0 +1,41 @@ +# `@theia/re-export` + +Utility package to re-export dependencies. + +This is useful when you use and expose some APIs from a dependency and want +your dependent to get access to the exact same symbols as you did. + +## `package.json` + +You can configure how the `theia-re-export` CLI will generate re-exports +through your `package.json` file with a `theiaReExports` key: + +```json +{ + "theiaReExports": { + "destination": { + "export *": [ + "packages that export via *" + ], + "export =": [ + "packages that export via =" + ], + "copy": "other-package#destination" + } + } +} +``` + +### `transitive` + +If you want to re-export packages from another package that also re-exports +its dependencies. We use this in `@theia/core` to simplify the consumption +of some optional Electron-specific dependencies. + +### `export *` + +Packages that export their symbols as `export const x = ...`. + +### `export =` + +Packages that export their symbols as a namespace like `export = ...`. diff --git a/dev-packages/private-re-exports/bin/theia-re-exports.js b/dev-packages/private-re-exports/bin/theia-re-exports.js new file mode 100755 index 0000000000000..9303e336a16f9 --- /dev/null +++ b/dev-packages/private-re-exports/bin/theia-re-exports.js @@ -0,0 +1,2 @@ +#!/usr/bin/env node +require('../lib/bin-theia-re-exports.js'); diff --git a/dev-packages/private-re-exports/package.json b/dev-packages/private-re-exports/package.json new file mode 100644 index 0000000000000..6a289b4aac5a6 --- /dev/null +++ b/dev-packages/private-re-exports/package.json @@ -0,0 +1,34 @@ +{ + "private": true, + "name": "@theia/re-exports", + "version": "1.21.0", + "description": "Theia re-export helper functions and scripts.", + "main": "lib/index.js", + "engines": { + "node": ">= 12" + }, + "files": [ + "bin", + "lib", + "src" + ], + "bin": { + "theia-re-exports": "bin/theia-re-exports.js" + }, + "scripts": { + "build": "theiaext build", + "clean": "theiaext clean", + "prepare": "tsc -b", + "lint": "theiaext lint", + "test": "theiaext test", + "watch": "theiaext watch" + }, + "dependencies": { + "mustache": "^4.2.0", + "semver": "^7.3.5", + "yargs": "^15.3.1" + }, + "devDependencies": { + "@types/mustache": "^4.1.2" + } +} diff --git a/dev-packages/private-re-exports/src/bin-package-re-exports-from-package.ts b/dev-packages/private-re-exports/src/bin-package-re-exports-from-package.ts new file mode 100644 index 0000000000000..0dfa91d363b79 --- /dev/null +++ b/dev-packages/private-re-exports/src/bin-package-re-exports-from-package.ts @@ -0,0 +1,23 @@ +/******************************************************************************** + * Copyright (C) 2022 Ericsson and others. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v. 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * This Source Code may also be made available under the following Secondary + * Licenses when the conditions for such availability set forth in the Eclipse + * Public License v. 2.0 are satisfied: GNU General Public License, version 2 + * with the GNU Classpath Exception which is available at + * https://www.gnu.org/software/classpath/license.html. + * + * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 + ********************************************************************************/ + +import { readPackageJson, parsePackageReExports } from './package-re-exports'; + +const packageName = process.argv[2].trim(); + +readPackageJson(packageName, { paths: [process.cwd()] }) + .then(([packageJsonPath, packageJson]) => parsePackageReExports(packageJsonPath, packageJson)) + .then(([packageRoot, reExports]) => console.log(JSON.stringify([packageRoot, reExports]))); diff --git a/dev-packages/private-re-exports/src/bin-theia-re-exports.ts b/dev-packages/private-re-exports/src/bin-theia-re-exports.ts new file mode 100644 index 0000000000000..3b5a52c50df81 --- /dev/null +++ b/dev-packages/private-re-exports/src/bin-theia-re-exports.ts @@ -0,0 +1,140 @@ +/******************************************************************************** + * Copyright (C) 2021 Ericsson and others. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v. 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * This Source Code may also be made available under the following Secondary + * Licenses when the conditions for such availability set forth in the Eclipse + * Public License v. 2.0 are satisfied: GNU General Public License, version 2 + * with the GNU Classpath Exception which is available at + * https://www.gnu.org/software/classpath/license.html. + * + * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 + ********************************************************************************/ + +import fs = require('fs'); +import mustache = require('mustache'); +import path = require('path'); +import semver = require('semver'); +import yargs = require('yargs'); +import { parseModule } from './utility'; +import { ReExport, PackageReExports } from './package-re-exports'; + +yargs + .command( + 'generate [packageName]', + 'Generate Theia re-exports', + cli => cli + .positional('packageName', { + type: 'string', + describe: 'Name of the package to generate the re-exports for' + }), + async ({ packageName }) => { + if (!packageName) { + packageName = JSON.parse(await fs.promises.readFile(path.resolve('package.json'), 'utf8')).name as string; + } + const packageReExports = await PackageReExports.FromPackage(packageName); + await Promise.all(packageReExports.all.map(async reExport => { + const reExportPath = packageReExports.resolvePath(reExport.reExportDir, reExport.moduleName, 'index'); + await writeFile(`${reExportPath}.js`, `module.exports = require('${reExport.internalImport}');\n`); + if (reExport.reExportStyle === '*') { + const content = `export * from '${reExport.internalImport}';\n`; + await writeFile(`${reExportPath}.d.ts`, content); + } else if (reExport.reExportStyle === '=') { + const content = `import ${reExport.exportNamespace} = require('${reExport.internalImport}');\nexport = ${reExport.exportNamespace};\n`; + await writeFile(`${reExportPath}.d.ts`, content); + } else { + console.warn('unexpected re-export'); + } + })); + } + ) + .command( + 'template inputFile [packageName]', + 'Evaluate mustache templates', + cli => cli + .positional('inputFile', { + type: 'string', + describe: 'File to evaluate defined using mustache template syntax', + demandOption: true + }) + .positional('packageName', { + type: 'string', + describe: 'Name of the package to generate the re-exports for' + }), + async ({ inputFile, packageName }) => { + if (!packageName) { + packageName = JSON.parse(await fs.promises.readFile(path.resolve('package.json'), 'utf8')).name as string; + } + const template = await fs.promises.readFile(inputFile, 'utf8'); + const packageReExports = await PackageReExports.FromPackage(packageName); + // Organize `ReExport`s by `reExportsDir` then by `packageName`: + const reExportsDirectories: Record> = {}; + for (const reExport of packageReExports.all) { + let reExportsPackages = reExportsDirectories[reExport.reExportDir]; + if (!reExportsPackages) { + reExportsPackages = reExportsDirectories[reExport.reExportDir] = {}; + } + let reExports = reExportsPackages[reExport.packageName]; + if (!reExports) { + reExports = reExportsPackages[reExport.packageName] = []; + } + reExports.push(reExport); + } + // Map the organized `ReExport`s into a view object for mustache: + const reExportsView: ReExportsView = { + reExportsDirectories: Object.entries(reExportsDirectories).map(([directory, reExportsPackages]) => ({ + directory, + // eslint-disable-next-line @typescript-eslint/no-shadow + packages: Object.entries(reExportsPackages).map(([packageName, reExports]) => ({ + packageName, + npmUrl: getNpmUrl(packageName, reExports[0].versionRange), + versionRange: reExports[0].versionRange, + modules: reExports.map(reExport => ({ + moduleName: reExport.moduleName, + })) + })) + })) + }; + // `console.log` replaces CRLF with LF which is problematic on Windows + process.stdout.write(replaceEolForWindows(mustache.render(template, reExportsView))); + } + ) + .parse(); + +interface ReExportsView { + reExportsDirectories: Array<{ + directory: string + packages: Array<{ + npmUrl: string + packageName: string + modules: Array<{ + moduleName: string + }> + versionRange: string + }> + }> +} + +function getNpmUrl(moduleName: string, versionRange: string | null | undefined): string { + const [packageName] = parseModule(moduleName); + let url = `https://www.npmjs.com/package/${packageName}`; + // Is the range a fixed version? + const version = versionRange && semver.valid(versionRange); + if (version) { + url += `/v/${version}`; + } + return url; +} + +function replaceEolForWindows(content: string): string { + return process.platform === 'win32' ? content.replace(/(? { + const dirPath = path.dirname(filePath); + await fs.promises.mkdir(dirPath, { recursive: true }); + await fs.promises.writeFile(filePath, replaceEolForWindows(content)); +} diff --git a/dev-packages/electron/node-gyp-cli.js b/dev-packages/private-re-exports/src/index.ts similarity index 87% rename from dev-packages/electron/node-gyp-cli.js rename to dev-packages/private-re-exports/src/index.ts index 6357d045d97a2..8d9fcffb39256 100644 --- a/dev-packages/electron/node-gyp-cli.js +++ b/dev-packages/private-re-exports/src/index.ts @@ -1,6 +1,5 @@ -#!/usr/bin/env node /******************************************************************************** - * Copyright (C) 2019 Ericsson and others. + * Copyright (C) 2021 Ericsson and others. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0 which is available at @@ -15,4 +14,5 @@ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 ********************************************************************************/ -require('node-gyp/bin/node-gyp.js') +export * from './utility'; +export * from './package-re-exports'; diff --git a/dev-packages/private-re-exports/src/package-re-exports.ts b/dev-packages/private-re-exports/src/package-re-exports.ts new file mode 100644 index 0000000000000..2eecb4e0a9d2b --- /dev/null +++ b/dev-packages/private-re-exports/src/package-re-exports.ts @@ -0,0 +1,204 @@ +/******************************************************************************** + * Copyright (C) 2022 Ericsson and others. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v. 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * This Source Code may also be made available under the following Secondary + * Licenses when the conditions for such availability set forth in the Eclipse + * Public License v. 2.0 are satisfied: GNU General Public License, version 2 + * with the GNU Classpath Exception which is available at + * https://www.gnu.org/software/classpath/license.html. + * + * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 + ********************************************************************************/ + +import cp = require('child_process'); +import fs = require('fs'); +import path = require('path'); +import { parseModule } from '.'; +import { PackageJson, ReExportJson } from './utility'; + +export async function readJson(jsonPath: string): Promise { + return JSON.parse(await fs.promises.readFile(jsonPath, 'utf8')) as T; +} + +export async function readPackageJson(packageName: string, options?: { paths?: string[] }): Promise<[string, PackageJson]> { + const packageJsonPath = require.resolve(`${packageName}/package.json`, options); + const packageJson = await readJson(packageJsonPath); + return [packageJsonPath, packageJson]; +} + +export async function parsePackageReExports(packageJsonPath: string, packageJson: PackageJson): Promise<[string, ReExport[]]> { + const packageRoot = path.dirname(packageJsonPath); + const { theiaReExports } = packageJson; + if (!theiaReExports) { + return [packageRoot, []]; + } + const reExportsByExportDir: ReExport[][] = await Promise.all(Object.entries(theiaReExports).map( + async ([reExportDir, reExportJson]) => resolveTheiaReExports(packageJsonPath, packageJson, reExportDir, reExportJson)) + ); + return [packageRoot, ([] as ReExport[]).concat(...reExportsByExportDir)]; +} + +export async function resolveTheiaReExports( + packageJsonPath: string, + packageJson: PackageJson, + reExportDir: string, + reExportJson: ReExportJson +): Promise { + if (reExportJson.copy) { + const [packageName, dir] = reExportJson.copy.split('#', 2); + const [subPackageJsonPath, subPackageJson] = await readPackageJson(packageName, { paths: [path.dirname(packageJsonPath)] }); + if (!subPackageJson.theiaReExports) { + return []; + } + const reExports = await resolveTheiaReExports(subPackageJsonPath, subPackageJson, dir, subPackageJson.theiaReExports[dir]); + return reExports.map(reExport => { + reExport.reExportDir = reExportDir; + reExport.internalImport = reExport.externalImport; + reExport.externalImport = `${packageJson.name}/${reExportDir}/${reExport.moduleName}`; + return reExport; + }); + } + const reExportsStar = reExportJson['export *'] || []; + const reExportsEqual = reExportJson['export ='] || []; + return [ + ...reExportsStar.map(moduleName => { + const [packageName, subModuleName] = parseModule(moduleName); + return { + moduleName, + packageName, + subModuleName, + reExportStyle: '*', + reExportDir, + internalImport: moduleName, + externalImport: `${packageJson.name}/${reExportDir}/${moduleName}`, + hostPackageName: packageJson.name, + versionRange: getPackageVersionRange(packageJson, packageName) + }; + }), + ...reExportsEqual.map(pattern => { + const [moduleName, exportNamespace = moduleName] = pattern.split(' as ', 2); + if (!/^[a-zA-Z_]\w/.test(exportNamespace)) { + console.warn(`"${exportNamespace}" is not a valid namespace (module: ${moduleName})`); + } + const [packageName, subModuleName] = parseModule(moduleName); + return { + moduleName, + packageName, + subModuleName, + exportNamespace, + reExportStyle: '=', + reExportDir, + internalImport: moduleName, + externalImport: `${packageJson.name}/${reExportDir}/${moduleName}`, + hostPackageName: packageJson.name, + versionRange: getPackageVersionRange(packageJson, packageName), + }; + }) + ]; +} + +export function getPackageVersionRange(packageJson: PackageJson, packageName: string): string { + const range = packageJson.dependencies?.[packageName] + || packageJson.optionalDependencies?.[packageName] + || packageJson.peerDependencies?.[packageName]; + if (!range) { + throw new Error(`package not found: ${packageName}`); + } + return range; +} + +export type ReExport = ReExportStar | ReExportEqual; + +export interface ReExportInfo { + /** + * The full name of the module. e.g. '@some/dep/nested/file' + */ + moduleName: string + /** + * Name of the package the re-export is from. e.g. '@some/dep' in '@some/dep/nested/file' + */ + packageName: string + /** + * Name of the file within the package. e.g. 'nested/file' in '@some/dep/nested/file' + */ + subModuleName?: string + /** + * Name/path of the directory where the re-exports should be located. + */ + reExportDir: string + /** + * Import statement used internally for the re-export. + */ + internalImport: string + /** + * Import name dependents should use externally for the re-export. + */ + externalImport: string + /** + * Name of the package that depends on the re-export. + */ + hostPackageName: string + /** + * Version range defined by the host package depending on the re-export. + */ + versionRange: string +} + +export interface ReExportStar extends ReExportInfo { + reExportStyle: '*' +} + +export interface ReExportEqual extends ReExportInfo { + reExportStyle: '=' + /** + * Pretty name for the re-exported namespace. e.g. 'react-dom' as 'ReactDOM' + */ + exportNamespace: string +} + +export class PackageReExports { + + static async FromPackage(packageName: string): Promise { + const [packageJsonPath, packageJson] = await readPackageJson(packageName); + const [packageRoot, reExports] = await parsePackageReExports(packageJsonPath, packageJson); + return new PackageReExports(packageName, packageRoot, reExports); + } + + static FromPackageSync(packageName: string): PackageReExports { + // Some tools (e.g. eslint) don't support async operations. + // To get around this, we can spawn a sub NodeJS process that will run the asynchronous + // logic and then synchronously wait for the serialized result on the standard output. + const scriptPath = require.resolve('./bin-package-re-exports-from-package.js'); + const { stdout } = cp.spawnSync(process.argv0, [...process.execArgv, scriptPath, packageName], { + env: { + ELECTRON_RUN_AS_NODE: '1' + }, + encoding: 'utf8', + stdio: ['ignore', 'pipe', 'inherit'] + }); + const [packageRoot, reExports] = JSON.parse(stdout) as [string, ReExport[]]; + return new PackageReExports(packageName, packageRoot, reExports); + } + + constructor( + readonly packageName: string, + readonly packageRoot: string, + readonly all: readonly Readonly[] + ) { } + + findReExportByModuleName(moduleName: string): ReExport | undefined { + return this.all.find(reExport => reExport.moduleName === moduleName); + } + + findReExportsByPackageName(packageName: string): ReExport[] { + return this.all.filter(reExport => reExport.packageName === packageName); + } + + resolvePath(...parts: string[]): string { + return path.resolve(this.packageRoot, ...parts); + } +} diff --git a/dev-packages/private-re-exports/src/utility.spec.ts b/dev-packages/private-re-exports/src/utility.spec.ts new file mode 100644 index 0000000000000..74cd5f9208906 --- /dev/null +++ b/dev-packages/private-re-exports/src/utility.spec.ts @@ -0,0 +1,41 @@ +/******************************************************************************** + * Copyright (C) 2022 Ericsson and others. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v. 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * This Source Code may also be made available under the following Secondary + * Licenses when the conditions for such availability set forth in the Eclipse + * Public License v. 2.0 are satisfied: GNU General Public License, version 2 + * with the GNU Classpath Exception which is available at + * https://www.gnu.org/software/classpath/license.html. + * + * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 + ********************************************************************************/ + +import { parseModule } from './utility'; +import { expect } from 'chai'; + +describe('@theia/re-exports/lib/utility.js', () => { + + it('parseModule', () => { + expect(parseModule('a')).length(1).members(['a']); + expect(parseModule('a/')).length(1).members(['a']); + expect(parseModule('a/b')).length(2).members(['a', 'b']); + expect(parseModule('a/b/')).length(2).members(['a', 'b']); + expect(parseModule('a/b/c/d/e/f')).length(2).members(['a', 'b/c/d/e/f']); + }); + + it('parseModule with namespaced package', () => { + expect(parseModule('@a/b')).length(1).members(['@a/b']); + expect(parseModule('@a/b/')).length(1).members(['@a/b']); + expect(parseModule('@a/b/c')).length(2).members(['@a/b', 'c']); + expect(parseModule('@a/b/c/')).length(2).members(['@a/b', 'c']); + expect(parseModule('@a/b/c/d/e/f')).length(2).members(['@a/b', 'c/d/e/f']); + }); + + it('parseModule unexpected module name/format', () => { + expect(() => parseModule('@a')).throw(); + }); +}); diff --git a/dev-packages/private-re-exports/src/utility.ts b/dev-packages/private-re-exports/src/utility.ts new file mode 100644 index 0000000000000..824e24e853a73 --- /dev/null +++ b/dev-packages/private-re-exports/src/utility.ts @@ -0,0 +1,54 @@ +/******************************************************************************** + * Copyright (C) 2021 Ericsson and others. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v. 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * This Source Code may also be made available under the following Secondary + * Licenses when the conditions for such availability set forth in the Eclipse + * Public License v. 2.0 are satisfied: GNU General Public License, version 2 + * with the GNU Classpath Exception which is available at + * https://www.gnu.org/software/classpath/license.html. + * + * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 + ********************************************************************************/ + +export interface PackageJson { + name: string + dependencies?: Record + peerDependencies?: Record + optionalDependencies?: Record + theiaReExports?: Record +} + +/** + * Raw re-export declaration as written in `package.json#theiaReExports[]`. + */ +export interface ReExportJson { + 'export *'?: string[] + 'export ='?: string[] + copy?: string +} + +/** + * Examples: + * - `a` => `['a']` + * - `a/b/c/...` => `['a', 'b/c/...']` + * - `@a/b` => `['@a/b']` + * - `@a/b/c/...` => `['@a/b', 'c/...']` + */ +export function parseModule(moduleName: string): [string, string?] { + const slice = moduleName.startsWith('@') ? 2 : 1; + const split = moduleName.split('/').filter(part => part.trim().length > 0); + if (split.length < slice) { + throw new Error(`Unexpected module name/format: ${JSON.stringify(moduleName)}`); + } + const packageName = split.slice(0, slice).join('/'); + if (split.length === slice) { + return [packageName]; + } else { + const subModuleName = split.slice(slice).join('/'); + return [packageName, subModuleName]; + } +} diff --git a/dev-packages/private-re-exports/tsconfig.json b/dev-packages/private-re-exports/tsconfig.json new file mode 100644 index 0000000000000..b973ddbc673a2 --- /dev/null +++ b/dev-packages/private-re-exports/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../../configs/base.tsconfig", + "compilerOptions": { + "composite": true, + "rootDir": "src", + "outDir": "lib" + }, + "include": [ + "src" + ], + "references": [] +} diff --git a/doc/Migration.md b/doc/Migration.md index 75557b3a1c4c4..014963f1c8496 100644 --- a/doc/Migration.md +++ b/doc/Migration.md @@ -19,6 +19,24 @@ For example: } ``` +### v1.22.0 + +### Electron Update + +Electron got updated from 9 to 15, this might involve some modifications in your code based on the new APIs. + +See Electron's [documentation](https://github.com/electron/electron/tree/15-x-y/docs). + +Most notably the `electron.remote` API got deprecated and replaced with a `@electron/remote` package. + +Theia makes use of that package and re-exports it as `@theia/core/electron-shared/@electron/remote`. + +See `@theia/core` re-exports [documentation](../packages/core/README.md#re-exports). + +Lastly, Electron must now be defined in your application's `package.json` under `devDependencies`. + +`theia build` will automatically add the entry and prompt you to re-install your dependencies when out of sync. + ### v1.21.0 #### Frontend Source Maps diff --git a/examples/api-samples/src/electron-browser/updater/sample-updater-frontend-contribution.ts b/examples/api-samples/src/electron-browser/updater/sample-updater-frontend-contribution.ts index 7fc6c1913a66e..053747f371241 100644 --- a/examples/api-samples/src/electron-browser/updater/sample-updater-frontend-contribution.ts +++ b/examples/api-samples/src/electron-browser/updater/sample-updater-frontend-contribution.ts @@ -14,7 +14,8 @@ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 ********************************************************************************/ -import { remote, Menu, BrowserWindow } from '@theia/core/shared/electron'; +import * as electronRemote from '@theia/core/electron-shared/@electron/remote'; +import { Menu, BrowserWindow } from '@theia/core/electron-shared/electron'; import { inject, injectable, postConstruct } from '@theia/core/shared/inversify'; import { isOSX } from '@theia/core/lib/common/os'; import { CommonMenus } from '@theia/core/lib/browser'; @@ -90,9 +91,9 @@ export class ElectronMenuUpdater { this.setMenu(); } - private setMenu(menu: Menu | null = this.factory.createElectronMenuBar(), electronWindow: BrowserWindow = remote.getCurrentWindow()): void { + private setMenu(menu: Menu | null = this.factory.createElectronMenuBar(), electronWindow: BrowserWindow = electronRemote.getCurrentWindow()): void { if (isOSX) { - remote.Menu.setApplicationMenu(menu); + electronRemote.Menu.setApplicationMenu(menu); } else { electronWindow.setMenu(menu); } diff --git a/examples/browser/package.json b/examples/browser/package.json index cf5742c4c9602..03e2823b6547f 100644 --- a/examples/browser/package.json +++ b/examples/browser/package.json @@ -57,19 +57,19 @@ }, "scripts": { "clean": "theia clean", - "build": "yarn compile && yarn bundle", + "build": "yarn -s compile && yarn -s bundle", "bundle": "theia build --mode development", "compile": "tsc -b", - "coverage": "yarn test --test-coverage && yarn coverage:report", + "coverage": "yarn -s test --test-coverage && yarn -s coverage:report", "coverage:clean": "rimraf .nyc_output && rimraf coverage", "coverage:report": "nyc report --reporter=html", "rebuild": "theia rebuild:browser --cacheRoot ../..", - "start": "yarn rebuild && theia start --plugins=local-dir:../../plugins", - "start:debug": "yarn start --log-level=debug", - "start:watch": "concurrently --kill-others -n tsc,bundle,run -c red,yellow,green \"tsc -b -w --preserveWatchOutput\" \"yarn watch:bundle\" \"yarn start\"", - "test": "yarn rebuild && theia test . --plugins=local-dir:../../plugins --test-spec=../api-tests/**/*.spec.js", - "test:debug": "yarn test --test-inspect", - "watch": "concurrently --kill-others -n tsc,bundle -c red,yellow \"tsc -b -w --preserveWatchOutput\" \"yarn watch:bundle\"", + "start": "yarn -s rebuild && theia start --plugins=local-dir:../../plugins", + "start:debug": "yarn -s start --log-level=debug", + "start:watch": "concurrently --kill-others -n tsc,bundle,run -c red,yellow,green \"tsc -b -w --preserveWatchOutput\" \"yarn -s watch:bundle\" \"yarn -s start\"", + "test": "yarn -s rebuild && theia test . --plugins=local-dir:../../plugins --test-spec=../api-tests/**/*.spec.js", + "test:debug": "yarn -s test --test-inspect", + "watch": "concurrently --kill-others -n tsc,bundle -c red,yellow \"tsc -b -w --preserveWatchOutput\" \"yarn -s watch:bundle\"", "watch:bundle": "theia build --watch --mode development", "watch:compile": "tsc -b -w" }, diff --git a/examples/electron/package.json b/examples/electron/package.json index 1bd49b8f1e111..ba036432e7cb2 100644 --- a/examples/electron/package.json +++ b/examples/electron/package.json @@ -57,21 +57,22 @@ "@theia/workspace": "1.21.0" }, "scripts": { - "build": "yarn compile && yarn bundle", + "build": "yarn -s compile && yarn -s bundle", "bundle": "theia build --mode development", "clean": "theia clean", "compile": "tsc -b", "lint": "theiaext lint", "rebuild": "theia rebuild:electron --cacheRoot ../..", - "start": "yarn rebuild && theia start --plugins=local-dir:../../plugins", - "start:debug": "yarn start --log-level=debug --remote-debugging-port=9222", - "start:watch": "concurrently --kill-others -n tsc,bundle,run -c red,yellow,green \"tsc -b -w --preserveWatchOutput\" \"yarn watch:bundle\" \"yarn start\"", - "test": "yarn rebuild && electron-mocha --timeout 60000 \"./lib/test/**/*.espec.js\"", - "watch": "concurrently --kill-others -n tsc,bundle -c red,blue \"tsc -b -w --preserveWatchOutput\" \"yarn watch:bundle\"", + "start": "yarn -s rebuild && theia start --plugins=local-dir:../../plugins", + "start:debug": "yarn -s start --log-level=debug --remote-debugging-port=9222", + "start:watch": "concurrently --kill-others -n tsc,bundle,run -c red,yellow,green \"tsc -b -w --preserveWatchOutput\" \"yarn -s watch:bundle\" \"yarn -s start\"", + "test": "yarn -s rebuild && electron-mocha --timeout 60000 \"./lib/test/**/*.espec.js\"", + "watch": "concurrently --kill-others -n tsc,bundle -c red,blue \"tsc -b -w --preserveWatchOutput\" \"yarn -s watch:bundle\"", "watch:bundle": "theia build --watch --mode development", "watch:compile": "tsc -b -w" }, "devDependencies": { - "@theia/cli": "1.21.0" + "@theia/cli": "1.21.0", + "electron": "^15.3.5" } } diff --git a/license-check-baseline.json b/license-check-baseline.json index 1770968c269ba..29c5364448ae2 100644 --- a/license-check-baseline.json +++ b/license-check-baseline.json @@ -2,5 +2,5 @@ "npm/npmjs/-/eslint-plugin-deprecation/1.2.1": "Approved as 'works-with': https://dev.eclipse.org/ipzilla/show_bug.cgi?id=22573", "npm/npmjs/-/jschardet/2.3.0": "Approved for Eclipse Theia: https://dev.eclipse.org/ipzilla/show_bug.cgi?id=22481", "npm/npmjs/-/jsdom/11.12.0": "Approved as 'works-with': https://dev.eclipse.org/ipzilla/show_bug.cgi?id=23640https://dev.eclipse.org/ipzilla/show_bug.cgi?id=23640", - "npm/npmjs/-/parse5/4.0.0": "Temporarily skipped: https://gitlab.eclipse.org/eclipsefdn/emo-team/iplab/-/issues/1821" + "npm/npmjs/-/node-pty/0.11.0-beta17": "Manually checked using ClearlyDefined" } diff --git a/package.json b/package.json index 31f20b04a5cf2..a8bbc076c260f 100644 --- a/package.json +++ b/package.json @@ -3,12 +3,11 @@ "name": "@theia/monorepo", "version": "0.0.0", "engines": { - "yarn": ">=1.7.0 <2.x.x", + "yarn": ">=1.7.0 <2", "node": ">=12.14.1" }, "resolutions": { - "**/@types/node": "12", - "**/node-abi": "^2.18.0" + "**/@types/node": "12" }, "devDependencies": { "@types/chai-string": "^1.4.0", @@ -26,13 +25,14 @@ "concurrently": "^3.5.0", "debug": "^4.3.2", "electron-mocha": "^8.2.0", - "eslint": "^7.14.0", - "eslint-plugin-deprecation": "^1.1.0", - "eslint-plugin-import": "^2.22.1", - "eslint-plugin-no-null": "^1.0.2", - "eslint-plugin-no-unsanitized": "^3.1.4", - "eslint-plugin-react": "^7.21.5", + "eslint": "7", + "eslint-plugin-deprecation": "~1.2.1", + "eslint-plugin-import": "latest", + "eslint-plugin-no-null": "latest", + "eslint-plugin-no-unsanitized": "latest", + "eslint-plugin-react": "latest", "glob": "^7.1.7", + "if-env": "^1.0.4", "ignore-styles": "^5.0.1", "jsdom": "^11.5.1", "lerna": "^4.0.0", @@ -51,41 +51,40 @@ "yargs": "^15.3.1" }, "scripts": { - "all": "yarn install && yarn lint && yarn build", - "browser": "yarn --cwd examples/browser", - "build": "yarn compile && yarn build:examples", - "build:examples": "yarn download:plugins && lerna run --scope=\"@theia/example-*\" bundle --parallel", - "clean": "yarn rebuild:clean && yarn lint:clean && node scripts/run-reverse-topo.js yarn clean", - "compile": "yarn compile:clean && yarn compile:tsc", + "all": "yarn -s install && yarn -s lint && yarn -s build", + "browser": "yarn -s --cwd examples/browser", + "build": "yarn -s compile && yarn -s build:examples", + "build:examples": "yarn -s download:plugins && lerna run --scope=\"@theia/example-*\" bundle --parallel", + "clean": "yarn -s rebuild:clean && yarn -s lint:clean && node scripts/run-reverse-topo.js yarn -s clean", + "compile": "echo Compiling TypeScript sources... && yarn -s compile:clean && yarn -s compile:tsc", "compile:clean": "ts-clean dev-packages/* packages/*", "compile:references": "node scripts/compile-references.js", "compile:tsc": "tsc -b", "docs": "rimraf gh-pages/docs/next && typedoc --tsconfig tsconfig.json --options configs/typedoc.json .", "download:plugins": "theia download:plugins", - "electron": "yarn --cwd examples/electron", + "electron": "yarn -s --cwd examples/electron", "license:check": "node scripts/check_3pp_licenses.js", "lint": "lerna run lint", "lint:clean": "rimraf .eslintcache", "lint:oneshot": "node --max-old-space-size=4096 node_modules/eslint/bin/eslint.js --cache=true \"{dev-packages,packages,examples}/**/*.{ts,tsx}\"", - "postinstall": "node scripts/post-install.js", "preinstall": "node-gyp install", - "prepare": "yarn compile:references && lerna run prepare && yarn compile", - "publish:latest": "lerna publish --exact --yes --no-push --no-git-tag-version && yarn publish:check", - "publish:next": "lerna publish preminor --exact --canary --preid next --dist-tag next --no-git-reset --no-git-tag-version --no-push --yes && yarn publish:check", + "prepare": "yarn -s compile:references && lerna run prepare && yarn -s compile", + "publish:latest": "lerna publish --exact --yes --no-push --no-git-tag-version && yarn -s publish:check", + "publish:next": "lerna publish preminor --exact --canary --preid next --dist-tag next --no-git-reset --no-git-tag-version --no-push --yes && yarn -s publish:check", "publish:check": "node scripts/check-publish.js", "rebuild:clean": "rimraf .browser_modules", - "test": "yarn test:theia && yarn electron test && yarn browser test", + "test": "yarn -s test:theia && yarn -s electron test && yarn -s browser test", "test:theia": "lerna run --scope \"@theia/!(example-)*\" test --stream --concurrency=1", - "watch": "concurrently --kill-others -n tsc,browser,electron -c red,yellow,blue \"tsc -b -w --preserveWatchOutput\" \"yarn --cwd examples/browser watch:bundle\" \"yarn --cwd examples/electron watch:bundle\"", + "watch": "concurrently --kill-others -n tsc,browser,electron -c red,yellow,blue \"tsc -b -w --preserveWatchOutput\" \"yarn -s --cwd examples/browser watch:bundle\" \"yarn -s --cwd examples/electron watch:bundle\"", "watch:compile": "concurrently --kill-others -n cleanup,tsc -c magenta,red \"ts-clean dev-packages/* packages/* -w\" \"tsc -b -w --preserveWatchOutput\"", - "performance:startup": "yarn performance:startup:browser && yarn performance:startup:electron", - "performance:startup:browser": "concurrently --success first -k -r \"cd scripts/performance && node browser-performance.js --name 'Browser Frontend Startup' --folder browser --runs 10\" \"yarn --cwd examples/browser start\"", - "performance:startup:electron": "yarn electron rebuild && cd scripts/performance && node electron-performance.js --name 'Electron Frontend Startup' --folder electron --runs 10" + "performance:startup": "yarn -s performance:startup:browser && yarn -s performance:startup:electron", + "performance:startup:browser": "concurrently --success first -k -r \"cd scripts/performance && node browser-performance.js --name 'Browser Frontend Startup' --folder browser --runs 10\" \"yarn -s --cwd examples/browser start\"", + "performance:startup:electron": "yarn -s electron rebuild && cd scripts/performance && node electron-performance.js --name 'Electron Frontend Startup' --folder electron --runs 10" }, "workspaces": [ "dev-packages/*", - "packages/*", - "examples/*" + "examples/*", + "packages/*" ], "theiaPluginsDir": "plugins", "theiaPlugins": { diff --git a/packages/core/README.in.md b/packages/core/README.in.md index ee40c7b60829a..5b59b54820f49 100644 --- a/packages/core/README.in.md +++ b/packages/core/README.in.md @@ -49,11 +49,11 @@ An extension module should have a default export of `ContainerModule | Promise README.md", "lint": "theiaext lint", - "prepare": "yarn generate-shared", + "prepare": "yarn -s generate-theia-re-exports", "test": "theiaext test", - "version": "yarn generate-shared", + "version": "yarn -s generate-theia-re-exports", "watch": "theiaext watch" }, "devDependencies": { "@theia/ext-scripts": "1.21.0", + "@theia/re-exports": "1.21.0", "minimist": "^1.2.0" }, "nyc": { diff --git a/packages/core/scripts/generate-shared.js b/packages/core/scripts/generate-shared.js deleted file mode 100644 index 7b0ee7edfeb78..0000000000000 --- a/packages/core/scripts/generate-shared.js +++ /dev/null @@ -1,186 +0,0 @@ -/******************************************************************************** - * Copyright (C) 2021 Ericsson and others. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v. 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0. - * - * This Source Code may also be made available under the following Secondary - * Licenses when the conditions for such availability set forth in the Eclipse - * Public License v. 2.0 are satisfied: GNU General Public License, version 2 - * with the GNU Classpath Exception which is available at - * https://www.gnu.org/software/classpath/license.html. - * - * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 - ********************************************************************************/ - -/** - * @file Generate the .js and .d.ts files to re-export shared dependencies. - */ - -const path = require('path'); -const { promises: fsp } = require('fs'); -const os = require('os'); -const { exportStar, exportEqual, sharedModules } = require('../shared'); - -const { - dependencies, - devDependencies, - peerDependencies, -} = require('../package.json'); - -const shared = path.resolve(__dirname, '../shared'); - -main().catch(error => { - console.error(error); - process.exitCode = 1; -}); - -async function main() { - await mkdirp(shared); - await Promise.all([ - generateExportTheiaElectron(), - generateReadme(sharedModules), - ...exportStar.map(entry => generateExportStar(entry.module, entry.alias)), - ...exportEqual.map(entry => generateExportEqual(entry.module, entry.namespace)), - ]); -} - -/** - * The README.md lists all shared dependencies and it is generated based on README.in.md - */ -async function generateReadme(reExports) { - const input = path.resolve(__dirname, '../README.in.md'); - const output = path.resolve(__dirname, '../README.md'); - const readme = await fsp.readFile(input, { encoding: 'utf8' }); - await fsp.writeFile(output, readme.replace('{{RE-EXPORTS}}', reExports.map( - module => ` - [\`${module}@${getPackageRange(module)}\`](${getNpmUrl(module)})` - ).join(getEOL(readme)))); -} - -/** - * Special re-export case: The `electron` module comes from `@theia/electron`, - * but instead of re-exporting it like `@theia/core/shared/@theia/electron` we'll - * simplify this to `@theia/core/shared/electron`. - */ -async function generateExportTheiaElectron() { - const base = path.resolve(shared, 'electron'); - await Promise.all([ - writeFileIfMissing(`${base}.js`, `\ -module.exports = require('@theia/electron'); -`), - writeFileIfMissing(`${base}.d.ts`, `\ -import Electron = require('@theia/electron'); -export = Electron; -`), - ]); -} - -async function generateExportStar(module, alias) { - const base = await prepareSharedModule(alias); - await Promise.all([ - writeFileIfMissing(`${base}.js`, `\ -module.exports = require('${module}'); -`), - writeFileIfMissing(`${base}.d.ts`, `\ -export * from '${module}'; -`), - ]); -} - -async function generateExportEqual(module, namespace) { - const base = await prepareSharedModule(module); - await Promise.all([ - writeFileIfMissing(`${base}.js`, `\ -module.exports = require('${module}'); -`), - writeFileIfMissing(`${base}.d.ts`, `\ -import ${namespace} = require('${module}'); -export = ${namespace}; -`), - ]); -} - -/** - * @param {string} module - * @returns {string} target filename without extension (base) - */ -async function prepareSharedModule(module) { - const base = path.resolve(shared, module); - // Handle case like '@a/b/c/d.js' => mkdirp('@a/b/c') - await mkdirp(path.dirname(base)); - return base; -} - -async function mkdirp(directory) { - await fsp.mkdir(directory, { recursive: true }); -} - -async function writeFileIfMissing(file, content) { - if (await fsp.access(file).then(() => false, error => true)) { - await writeFile(file, content); - } -} - -async function writeFile(file, content) { - if (process.platform === 'win32' && getEOL(content) !== '\r\n') { - // JS strings always use `\n` even on Windows, but when - // writing to a file we want to use the system's EOL. - content = content.replace(/\n/g, '\r\n'); - } - await fsp.writeFile(file, content); -} - -/** - * Detects the EOL from the content of a string. - * Will only look at the first line. - * @param {string} content - * @returns {string} EOL - */ -function getEOL(content) { - const split = content.split('\n', 2); - if (split.length === 1) { - // There's no newlines, use the system's default - return os.EOL - } - return split[0].endsWith('\r') - ? '\r\n' - : '\n'; -} - -/** - * @param {string} package - * @returns {string} NPM URL - */ -function getNpmUrl(package) { - return `https://www.npmjs.com/package/${getPackageName(package)}`; -} - -/** - * @param {string} module - * @returns {string} range like `^1.2.3` - */ -function getPackageRange(module) { - const name = getPackageName(module); - if (name === 'electron') { - // In this case we are doing something weird, @theia/core does not depend on electron, - // but rather we depend on an optional peer dependency @theia/electron which itself depends - // on electron. For practical purposes, we re-export electron through @theia/electron own re-exports. - // The exports look like this: electron -> @theia/electron (optional) -> @theia/core/shared/electron - return require('@theia/electron/package.json').dependencies.electron; - } - return dependencies[name] || devDependencies[name] || peerDependencies[name]; -} - -/** - * Only keep the first two parts of the package name - * e.g. @a/b/c => @a/b - * @param {string} module - * @returns {string} package name - */ -function getPackageName(module) { - const slice = module.startsWith('@') ? 2 : 1; - return module.split('/') - .slice(0, slice) - .join('/'); -} diff --git a/packages/core/shared/@phosphor/algorithm.d.ts b/packages/core/shared/@phosphor/algorithm/index.d.ts similarity index 100% rename from packages/core/shared/@phosphor/algorithm.d.ts rename to packages/core/shared/@phosphor/algorithm/index.d.ts diff --git a/packages/core/shared/@phosphor/algorithm.js b/packages/core/shared/@phosphor/algorithm/index.js similarity index 100% rename from packages/core/shared/@phosphor/algorithm.js rename to packages/core/shared/@phosphor/algorithm/index.js diff --git a/packages/core/shared/@phosphor/commands.d.ts b/packages/core/shared/@phosphor/commands/index.d.ts similarity index 100% rename from packages/core/shared/@phosphor/commands.d.ts rename to packages/core/shared/@phosphor/commands/index.d.ts diff --git a/packages/core/shared/@phosphor/commands.js b/packages/core/shared/@phosphor/commands/index.js similarity index 100% rename from packages/core/shared/@phosphor/commands.js rename to packages/core/shared/@phosphor/commands/index.js diff --git a/packages/core/shared/@phosphor/coreutils.d.ts b/packages/core/shared/@phosphor/coreutils/index.d.ts similarity index 100% rename from packages/core/shared/@phosphor/coreutils.d.ts rename to packages/core/shared/@phosphor/coreutils/index.d.ts diff --git a/packages/core/shared/@phosphor/coreutils.js b/packages/core/shared/@phosphor/coreutils/index.js similarity index 100% rename from packages/core/shared/@phosphor/coreutils.js rename to packages/core/shared/@phosphor/coreutils/index.js diff --git a/packages/core/shared/@phosphor/domutils.d.ts b/packages/core/shared/@phosphor/domutils/index.d.ts similarity index 100% rename from packages/core/shared/@phosphor/domutils.d.ts rename to packages/core/shared/@phosphor/domutils/index.d.ts diff --git a/packages/core/shared/@phosphor/domutils.js b/packages/core/shared/@phosphor/domutils/index.js similarity index 100% rename from packages/core/shared/@phosphor/domutils.js rename to packages/core/shared/@phosphor/domutils/index.js diff --git a/packages/core/shared/@phosphor/dragdrop.d.ts b/packages/core/shared/@phosphor/dragdrop/index.d.ts similarity index 100% rename from packages/core/shared/@phosphor/dragdrop.d.ts rename to packages/core/shared/@phosphor/dragdrop/index.d.ts diff --git a/packages/core/shared/@phosphor/dragdrop.js b/packages/core/shared/@phosphor/dragdrop/index.js similarity index 100% rename from packages/core/shared/@phosphor/dragdrop.js rename to packages/core/shared/@phosphor/dragdrop/index.js diff --git a/packages/core/shared/@phosphor/messaging.d.ts b/packages/core/shared/@phosphor/messaging/index.d.ts similarity index 100% rename from packages/core/shared/@phosphor/messaging.d.ts rename to packages/core/shared/@phosphor/messaging/index.d.ts diff --git a/packages/core/shared/@phosphor/messaging.js b/packages/core/shared/@phosphor/messaging/index.js similarity index 100% rename from packages/core/shared/@phosphor/messaging.js rename to packages/core/shared/@phosphor/messaging/index.js diff --git a/packages/core/shared/@phosphor/properties.d.ts b/packages/core/shared/@phosphor/properties/index.d.ts similarity index 100% rename from packages/core/shared/@phosphor/properties.d.ts rename to packages/core/shared/@phosphor/properties/index.d.ts diff --git a/packages/core/shared/@phosphor/properties.js b/packages/core/shared/@phosphor/properties/index.js similarity index 100% rename from packages/core/shared/@phosphor/properties.js rename to packages/core/shared/@phosphor/properties/index.js diff --git a/packages/core/shared/@phosphor/signaling.d.ts b/packages/core/shared/@phosphor/signaling/index.d.ts similarity index 100% rename from packages/core/shared/@phosphor/signaling.d.ts rename to packages/core/shared/@phosphor/signaling/index.d.ts diff --git a/packages/core/shared/@phosphor/signaling.js b/packages/core/shared/@phosphor/signaling/index.js similarity index 100% rename from packages/core/shared/@phosphor/signaling.js rename to packages/core/shared/@phosphor/signaling/index.js diff --git a/packages/core/shared/@phosphor/virtualdom.d.ts b/packages/core/shared/@phosphor/virtualdom/index.d.ts similarity index 100% rename from packages/core/shared/@phosphor/virtualdom.d.ts rename to packages/core/shared/@phosphor/virtualdom/index.d.ts diff --git a/packages/core/shared/@phosphor/virtualdom.js b/packages/core/shared/@phosphor/virtualdom/index.js similarity index 100% rename from packages/core/shared/@phosphor/virtualdom.js rename to packages/core/shared/@phosphor/virtualdom/index.js diff --git a/packages/core/shared/@phosphor/widgets.d.ts b/packages/core/shared/@phosphor/widgets/index.d.ts similarity index 100% rename from packages/core/shared/@phosphor/widgets.d.ts rename to packages/core/shared/@phosphor/widgets/index.d.ts diff --git a/packages/core/shared/@phosphor/widgets.js b/packages/core/shared/@phosphor/widgets/index.js similarity index 100% rename from packages/core/shared/@phosphor/widgets.js rename to packages/core/shared/@phosphor/widgets/index.js diff --git a/packages/core/shared/ajv/index.d.ts b/packages/core/shared/ajv/index.d.ts new file mode 100644 index 0000000000000..4d2b0818a2df2 --- /dev/null +++ b/packages/core/shared/ajv/index.d.ts @@ -0,0 +1,2 @@ +import Ajv = require('ajv'); +export = Ajv; diff --git a/packages/core/shared/ajv/index.js b/packages/core/shared/ajv/index.js new file mode 100644 index 0000000000000..d83f0d2e39443 --- /dev/null +++ b/packages/core/shared/ajv/index.js @@ -0,0 +1 @@ +module.exports = require('ajv'); \ No newline at end of file diff --git a/packages/core/shared/dompurify.d.ts b/packages/core/shared/dompurify/index.d.ts similarity index 100% rename from packages/core/shared/dompurify.d.ts rename to packages/core/shared/dompurify/index.d.ts diff --git a/packages/core/shared/dompurify.js b/packages/core/shared/dompurify/index.js similarity index 100% rename from packages/core/shared/dompurify.js rename to packages/core/shared/dompurify/index.js diff --git a/packages/core/shared/electron.d.ts b/packages/core/shared/electron.d.ts deleted file mode 100644 index cf272da9e03c0..0000000000000 --- a/packages/core/shared/electron.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -import Electron = require('@theia/electron'); -export = Electron; diff --git a/packages/core/shared/electron.js b/packages/core/shared/electron.js deleted file mode 100644 index a9dc55dfaf321..0000000000000 --- a/packages/core/shared/electron.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('@theia/electron'); diff --git a/packages/core/shared/express.d.ts b/packages/core/shared/express/index.d.ts similarity index 100% rename from packages/core/shared/express.d.ts rename to packages/core/shared/express/index.d.ts diff --git a/packages/core/shared/express.js b/packages/core/shared/express/index.js similarity index 100% rename from packages/core/shared/express.js rename to packages/core/shared/express/index.js diff --git a/packages/core/shared/fs-extra.d.ts b/packages/core/shared/fs-extra/index.d.ts similarity index 100% rename from packages/core/shared/fs-extra.d.ts rename to packages/core/shared/fs-extra/index.d.ts diff --git a/packages/core/shared/fs-extra.js b/packages/core/shared/fs-extra/index.js similarity index 100% rename from packages/core/shared/fs-extra.js rename to packages/core/shared/fs-extra/index.js diff --git a/packages/core/shared/fuzzy.d.ts b/packages/core/shared/fuzzy/index.d.ts similarity index 100% rename from packages/core/shared/fuzzy.d.ts rename to packages/core/shared/fuzzy/index.d.ts diff --git a/packages/core/shared/fuzzy.js b/packages/core/shared/fuzzy/index.js similarity index 100% rename from packages/core/shared/fuzzy.js rename to packages/core/shared/fuzzy/index.js diff --git a/packages/core/shared/index.js b/packages/core/shared/index.js deleted file mode 100644 index 4eb9f77d849a1..0000000000000 --- a/packages/core/shared/index.js +++ /dev/null @@ -1,111 +0,0 @@ -// @ts-check -"use-strict"; -/******************************************************************************** - * Copyright (C) 2021 Ericsson and others. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v. 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0. - * - * This Source Code may also be made available under the following Secondary - * Licenses when the conditions for such availability set forth in the Eclipse - * Public License v. 2.0 are satisfied: GNU General Public License, version 2 - * with the GNU Classpath Exception which is available at - * https://www.gnu.org/software/classpath/license.html. - * - * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 - ********************************************************************************/ - -/** - * @file Common data and functions to manage shared core dependencies. - */ - -const { theiaReExports } = require('../package.json'); - -/** - * Path prefix used to require shared dependencies such as - * ```ts - * const sharedDep = require(theiaCoreSharedPrefix + 'sharedDep') - * ``` - * @type {string} - */ -const theiaCoreSharedPrefix = '@theia/core/shared/'; -/** - * List of modules exported like - * ```ts - * export * from 'module'; - * ``` - * @type {{module: string, alias: string}[]} - */ -const exportStar = theiaReExports['export *'].map(entry => { - const [module, alias = entry] = entry.split(':', 2); - return { module, alias }; -}); -/** - * List of modules exported via namespace like - * ```ts - * import namespace = require('module'); - * export = namespace; - * ``` - * @type {{module: string, namespace: string}[]} - */ -const exportEqual = theiaReExports['export ='].map(entry => { - const [module, namespace = entry] = entry.split(' as ', 2); - return { module, namespace }; -}); -/** - * List of all shared modules. - * @type {string[]} - */ -const sharedModules = [ - 'electron', - ...exportStar.map(entry => entry.module), - ...exportEqual.map(entry => entry.module), -].sort(); - -module.exports = { - exportStar, - exportEqual, - sharedModules, - theiaCoreSharedPrefix, - getPackageName, - isSharedModule, - getTheiaCoreSharedModule, -}; - -/** - * Only keep the first two parts of the package name e.g., - * - `@a/b/c/...` => `@a/b` - * - `a/b/c/...` => `a` - * @param {string} package - * @returns {string} - */ -function getPackageName(package) { - const slice = package.startsWith('@') ? 2 : 1; - return package.split('/', slice + 1) - .slice(0, slice) - .join('/'); -} - -/** - * @param {string} module - * @returns {boolean} is the module part of the shared dependencies - */ -function isSharedModule(module) { - return sharedModules.includes(module); -} - -/** - * Given an import like `@theia/core/shared/a/b/c` it will return `a/b/c`. - * If the import is not from `@theia/core/shared/` it will return undefined. - * @param {string} module - * @returns {string | undefined} - */ -function getTheiaCoreSharedModule(module) { - if (module.startsWith(theiaCoreSharedPrefix)) { - const shared = module.substr(theiaCoreSharedPrefix.length); - if (shared.length > 0) { - return shared; - } - } -} diff --git a/packages/core/shared/inversify.d.ts b/packages/core/shared/inversify/index.d.ts similarity index 100% rename from packages/core/shared/inversify.d.ts rename to packages/core/shared/inversify/index.d.ts diff --git a/packages/core/shared/inversify.js b/packages/core/shared/inversify/index.js similarity index 100% rename from packages/core/shared/inversify.js rename to packages/core/shared/inversify/index.js diff --git a/packages/core/shared/lodash.debounce.d.ts b/packages/core/shared/lodash.debounce/index.d.ts similarity index 100% rename from packages/core/shared/lodash.debounce.d.ts rename to packages/core/shared/lodash.debounce/index.d.ts diff --git a/packages/core/shared/lodash.debounce.js b/packages/core/shared/lodash.debounce/index.js similarity index 100% rename from packages/core/shared/lodash.debounce.js rename to packages/core/shared/lodash.debounce/index.js diff --git a/packages/core/shared/lodash.throttle.d.ts b/packages/core/shared/lodash.throttle/index.d.ts similarity index 100% rename from packages/core/shared/lodash.throttle.d.ts rename to packages/core/shared/lodash.throttle/index.d.ts diff --git a/packages/core/shared/lodash.throttle.js b/packages/core/shared/lodash.throttle/index.js similarity index 100% rename from packages/core/shared/lodash.throttle.js rename to packages/core/shared/lodash.throttle/index.js diff --git a/packages/core/shared/markdown-it/index.d.ts b/packages/core/shared/markdown-it/index.d.ts new file mode 100644 index 0000000000000..871a06d46b842 --- /dev/null +++ b/packages/core/shared/markdown-it/index.d.ts @@ -0,0 +1,2 @@ +import markdownit = require('markdown-it'); +export = markdownit; diff --git a/packages/core/shared/markdown-it/index.js b/packages/core/shared/markdown-it/index.js new file mode 100644 index 0000000000000..f40bcfeb1ffaf --- /dev/null +++ b/packages/core/shared/markdown-it/index.js @@ -0,0 +1 @@ +module.exports = require('markdown-it'); diff --git a/packages/core/shared/nsfw.d.ts b/packages/core/shared/nsfw/index.d.ts similarity index 100% rename from packages/core/shared/nsfw.d.ts rename to packages/core/shared/nsfw/index.d.ts diff --git a/packages/core/shared/nsfw.js b/packages/core/shared/nsfw/index.js similarity index 100% rename from packages/core/shared/nsfw.js rename to packages/core/shared/nsfw/index.js diff --git a/packages/core/shared/react-dom.d.ts b/packages/core/shared/react-dom/index.d.ts similarity index 100% rename from packages/core/shared/react-dom.d.ts rename to packages/core/shared/react-dom/index.d.ts diff --git a/packages/core/shared/react-dom.js b/packages/core/shared/react-dom/index.js similarity index 100% rename from packages/core/shared/react-dom.js rename to packages/core/shared/react-dom/index.js diff --git a/packages/core/shared/react-virtualized.d.ts b/packages/core/shared/react-virtualized/index.d.ts similarity index 100% rename from packages/core/shared/react-virtualized.d.ts rename to packages/core/shared/react-virtualized/index.d.ts diff --git a/packages/core/shared/react-virtualized.js b/packages/core/shared/react-virtualized/index.js similarity index 100% rename from packages/core/shared/react-virtualized.js rename to packages/core/shared/react-virtualized/index.js diff --git a/packages/core/shared/react.d.ts b/packages/core/shared/react/index.d.ts similarity index 100% rename from packages/core/shared/react.d.ts rename to packages/core/shared/react/index.d.ts diff --git a/packages/core/shared/react.js b/packages/core/shared/react/index.js similarity index 100% rename from packages/core/shared/react.js rename to packages/core/shared/react/index.js diff --git a/packages/core/shared/vscode-languageserver-protocol.d.ts b/packages/core/shared/vscode-languageserver-protocol/index.d.ts similarity index 100% rename from packages/core/shared/vscode-languageserver-protocol.d.ts rename to packages/core/shared/vscode-languageserver-protocol/index.d.ts diff --git a/packages/core/shared/vscode-languageserver-protocol.js b/packages/core/shared/vscode-languageserver-protocol/index.js similarity index 100% rename from packages/core/shared/vscode-languageserver-protocol.js rename to packages/core/shared/vscode-languageserver-protocol/index.js diff --git a/packages/core/shared/vscode-languageserver-types/index.d.ts b/packages/core/shared/vscode-languageserver-types/index.d.ts new file mode 100644 index 0000000000000..70f5f9dc1d06d --- /dev/null +++ b/packages/core/shared/vscode-languageserver-types/index.d.ts @@ -0,0 +1 @@ +export * from 'vscode-languageserver-types'; diff --git a/packages/core/shared/vscode-languageserver-types/index.js b/packages/core/shared/vscode-languageserver-types/index.js new file mode 100644 index 0000000000000..cfa01a1eaa75a --- /dev/null +++ b/packages/core/shared/vscode-languageserver-types/index.js @@ -0,0 +1 @@ +module.exports = require('vscode-languageserver-types'); \ No newline at end of file diff --git a/packages/core/shared/vscode-uri.d.ts b/packages/core/shared/vscode-uri/index.d.ts similarity index 100% rename from packages/core/shared/vscode-uri.d.ts rename to packages/core/shared/vscode-uri/index.d.ts diff --git a/packages/core/shared/vscode-uri.js b/packages/core/shared/vscode-uri/index.js similarity index 100% rename from packages/core/shared/vscode-uri.js rename to packages/core/shared/vscode-uri/index.js diff --git a/packages/core/shared/vscode-ws-jsonrpc.d.ts b/packages/core/shared/vscode-ws-jsonrpc/index.d.ts similarity index 100% rename from packages/core/shared/vscode-ws-jsonrpc.d.ts rename to packages/core/shared/vscode-ws-jsonrpc/index.d.ts diff --git a/packages/core/shared/vscode-ws-jsonrpc.js b/packages/core/shared/vscode-ws-jsonrpc/index.js similarity index 100% rename from packages/core/shared/vscode-ws-jsonrpc.js rename to packages/core/shared/vscode-ws-jsonrpc/index.js diff --git a/packages/core/shared/ws.d.ts b/packages/core/shared/ws/index.d.ts similarity index 100% rename from packages/core/shared/ws.d.ts rename to packages/core/shared/ws/index.d.ts diff --git a/packages/core/shared/ws.js b/packages/core/shared/ws/index.js similarity index 100% rename from packages/core/shared/ws.js rename to packages/core/shared/ws/index.js diff --git a/packages/core/shared/yargs.d.ts b/packages/core/shared/yargs/index.d.ts similarity index 100% rename from packages/core/shared/yargs.d.ts rename to packages/core/shared/yargs/index.d.ts diff --git a/packages/core/shared/yargs.js b/packages/core/shared/yargs/index.js similarity index 100% rename from packages/core/shared/yargs.js rename to packages/core/shared/yargs/index.js diff --git a/packages/core/src/electron-browser/keyboard/electron-keyboard-layout-change-notifier.ts b/packages/core/src/electron-browser/keyboard/electron-keyboard-layout-change-notifier.ts index 16cb494b52e05..a259a7e8be31e 100644 --- a/packages/core/src/electron-browser/keyboard/electron-keyboard-layout-change-notifier.ts +++ b/packages/core/src/electron-browser/keyboard/electron-keyboard-layout-change-notifier.ts @@ -14,8 +14,8 @@ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 ********************************************************************************/ +import { ipcRenderer } from '@theia/electron/shared/electron'; import { postConstruct, injectable } from 'inversify'; -import { ipcRenderer } from '../../../shared/electron'; import { KeyboardLayoutChangeNotifier, NativeKeyboardLayout } from '../../common/keyboard/keyboard-layout-provider'; import { Emitter, Event } from '../../common/event'; diff --git a/packages/core/src/electron-browser/menu/electron-context-menu-renderer.ts b/packages/core/src/electron-browser/menu/electron-context-menu-renderer.ts index 792b40386c997..bdab87c47d664 100644 --- a/packages/core/src/electron-browser/menu/electron-context-menu-renderer.ts +++ b/packages/core/src/electron-browser/menu/electron-context-menu-renderer.ts @@ -16,7 +16,7 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import * as electron from '../../../shared/electron'; +import * as electron from '../../../electron-shared/electron'; import { inject, injectable, postConstruct } from 'inversify'; import { ContextMenuRenderer, RenderContextMenuOptions, ContextMenuAccess, FrontendApplicationContribution, CommonCommands, coordinateFromAnchor, PreferenceService @@ -105,8 +105,10 @@ export class ElectronContextMenuRenderer extends BrowserContextMenuRenderer { const menu = this.electronMenuFactory.createElectronContextMenu(menuPath, args); const { x, y } = coordinateFromAnchor(anchor); const zoom = electron.webFrame.getZoomFactor(); + // TODO: Remove the offset once Electron fixes https://github.com/electron/electron/issues/31641 + const offset = process.platform === 'win32' ? 0 : 2; // x and y values must be Ints or else there is a conversion error - menu.popup({ x: Math.round(x * zoom), y: Math.round(y * zoom) }); + menu.popup({ x: Math.round(x * zoom) + offset, y: Math.round(y * zoom) + offset }); // native context menu stops the event loop, so there is no keyboard events this.context.resetAltPressed(); if (onHide) { diff --git a/packages/core/src/electron-browser/menu/electron-main-menu-factory.ts b/packages/core/src/electron-browser/menu/electron-main-menu-factory.ts index 872b6a4dd987f..ddb1f40e1de0d 100644 --- a/packages/core/src/electron-browser/menu/electron-main-menu-factory.ts +++ b/packages/core/src/electron-browser/menu/electron-main-menu-factory.ts @@ -16,7 +16,7 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ -import * as electron from '../../../shared/electron'; +import * as electronRemote from '../../../electron-shared/@electron/remote'; import { inject, injectable } from 'inversify'; import { CommandRegistry, isOSX, ActionMenuNode, CompositeMenuNode, @@ -56,7 +56,7 @@ export type ElectronMenuItemRole = ('undo' | 'redo' | 'cut' | 'copy' | 'paste' | @injectable() export class ElectronMainMenuFactory extends BrowserMainMenuFactory { - protected _menu: Electron.Menu | undefined; + protected _menu?: Electron.Menu; protected _toggledCommands: Set = new Set(); constructor( @@ -73,9 +73,12 @@ export class ElectronMainMenuFactory extends BrowserMainMenuFactory { } if (this._menu) { for (const item of this._toggledCommands) { - this._menu.getMenuItemById(item).checked = this.commandRegistry.isToggled(item); + const menuItem = this._menu.getMenuItemById(item); + if (menuItem) { + menuItem.checked = this.commandRegistry.isToggled(item); + } } - electron.remote.getCurrentWindow().setMenu(this._menu); + electronRemote.getCurrentWindow().setMenu(this._menu); } }, 10) ); @@ -88,10 +91,10 @@ export class ElectronMainMenuFactory extends BrowserMainMenuFactory { await this.preferencesService.ready; if (isOSX) { const createdMenuBar = this.createElectronMenuBar(); - electron.remote.Menu.setApplicationMenu(createdMenuBar); + electronRemote.Menu.setApplicationMenu(createdMenuBar); } else if (this.preferencesService.get('window.titleBarStyle') === 'native') { const createdMenuBar = this.createElectronMenuBar(); - electron.remote.getCurrentWindow().setMenu(createdMenuBar); + electronRemote.getCurrentWindow().setMenu(createdMenuBar); } } @@ -104,7 +107,10 @@ export class ElectronMainMenuFactory extends BrowserMainMenuFactory { if (isOSX) { template.unshift(this.createOSXMenu()); } - const menu = electron.remote.Menu.buildFromTemplate(template); + const menu = electronRemote.Menu.buildFromTemplate(template); + if (!menu) { + throw new Error('menu is null'); + } this._menu = menu; return this._menu; } @@ -116,7 +122,7 @@ export class ElectronMainMenuFactory extends BrowserMainMenuFactory { createElectronContextMenu(menuPath: MenuPath, args?: any[]): Electron.Menu { const menuModel = this.menuProvider.getMenu(menuPath); const template = this.fillMenuTemplate([], menuModel, args, { showDisabled: false }); - return electron.remote.Menu.buildFromTemplate(template); + return electronRemote.Menu.buildFromTemplate(template); } protected fillMenuTemplate(items: Electron.MenuItemConstructorOptions[], @@ -273,8 +279,11 @@ export class ElectronMainMenuFactory extends BrowserMainMenuFactory { if (this.commandRegistry.isEnabled(command, ...args)) { await this.commandRegistry.executeCommand(command, ...args); if (this._menu && this.commandRegistry.isVisible(command, ...args)) { - this._menu.getMenuItemById(command).checked = this.commandRegistry.isToggled(command, ...args); - electron.remote.getCurrentWindow().setMenu(this._menu); + const item = this._menu.getMenuItemById(command); + if (item) { + item.checked = this.commandRegistry.isToggled(command, ...args); + electronRemote.getCurrentWindow().setMenu(this._menu); + } } } } catch { diff --git a/packages/core/src/electron-browser/menu/electron-menu-contribution.ts b/packages/core/src/electron-browser/menu/electron-menu-contribution.ts index d3fed30d19d5e..f2cf5605907dc 100644 --- a/packages/core/src/electron-browser/menu/electron-menu-contribution.ts +++ b/packages/core/src/electron-browser/menu/electron-menu-contribution.ts @@ -14,7 +14,8 @@ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 ********************************************************************************/ -import * as electron from '../../../shared/electron'; +import * as electron from '../../../electron-shared/electron'; +import * as electronRemote from '../../../electron-shared/@electron/remote'; import { inject, injectable } from 'inversify'; import { Command, CommandContribution, CommandRegistry, @@ -104,7 +105,7 @@ export class ElectronMenuContribution extends BrowserMenuBarContribution impleme // OSX: Recreate the menus when changing windows. // OSX only has one menu bar for all windows, so we need to swap // between them as the user switches windows. - electron.remote.getCurrentWindow().on('focus', () => this.setMenu(app)); + electronRemote.getCurrentWindow().on('focus', () => this.setMenu(app)); } // Make sure the application menu is complete, once the frontend application is ready. // https://github.com/theia-ide/theia/issues/5100 @@ -136,11 +137,11 @@ export class ElectronMenuContribution extends BrowserMenuBarContribution impleme electron.ipcRenderer.send(RequestTitleBarStyle); this.preferenceService.ready.then(() => { this.setMenu(app); - electron.remote.getCurrentWindow().setMenuBarVisibility(['classic', 'visible'].includes(this.preferenceService.get('window.menuBarVisibility', 'classic'))); + electronRemote.getCurrentWindow().setMenuBarVisibility(['classic', 'visible'].includes(this.preferenceService.get('window.menuBarVisibility', 'classic'))); }); this.preferenceService.onPreferenceChanged(change => { if (change.preferenceName === 'window.titleBarStyle') { - if (this.titleBarStyleChangeFlag && this.titleBarStyle !== change.newValue && electron.remote.getCurrentWindow().isFocused()) { + if (this.titleBarStyleChangeFlag && this.titleBarStyle !== change.newValue && electronRemote.getCurrentWindow().isFocused()) { electron.ipcRenderer.send(TitleBarStyleChanged, change.newValue); this.handleRequiredRestart(); } @@ -177,9 +178,9 @@ export class ElectronMenuContribution extends BrowserMenuBarContribution impleme } protected setMenu(app: FrontendApplication, electronMenu: electron.Menu | null = this.factory.createElectronMenuBar(), - electronWindow: electron.BrowserWindow = electron.remote.getCurrentWindow()): void { + electronWindow: electron.BrowserWindow = electronRemote.getCurrentWindow()): void { if (isOSX) { - electron.remote.Menu.setApplicationMenu(electronMenu); + electronRemote.Menu.setApplicationMenu(electronMenu); } else { this.hideTopPanel(app); if (this.titleBarStyle === 'custom' && !this.menuBar) { @@ -252,11 +253,11 @@ export class ElectronMenuContribution extends BrowserMenuBarContribution impleme registerCommands(registry: CommandRegistry): void { - const currentWindow = electron.remote.getCurrentWindow(); + const currentWindow = electronRemote.getCurrentWindow(); registry.registerCommand(ElectronCommands.TOGGLE_DEVELOPER_TOOLS, { execute: () => { - const webContent = electron.remote.getCurrentWebContents(); + const webContent = electronRemote.getCurrentWebContents(); if (!webContent.isDevToolsOpened()) { webContent.openDevTools(); } else { diff --git a/packages/core/src/electron-browser/messaging/electron-ipc-connection-provider.ts b/packages/core/src/electron-browser/messaging/electron-ipc-connection-provider.ts index 28620107a9ffd..da53ffcbed120 100644 --- a/packages/core/src/electron-browser/messaging/electron-ipc-connection-provider.ts +++ b/packages/core/src/electron-browser/messaging/electron-ipc-connection-provider.ts @@ -14,8 +14,8 @@ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 ********************************************************************************/ +import { Event as ElectronEvent, ipcRenderer } from '@theia/electron/shared/electron'; import { injectable, interfaces } from 'inversify'; -import { Event as ElectronEvent, ipcRenderer } from '../../../shared/electron'; import { JsonRpcProxy } from '../../common/messaging'; import { WebSocketChannel } from '../../common/messaging/web-socket-channel'; import { AbstractConnectionProvider } from '../../common/messaging/abstract-connection-provider'; diff --git a/packages/core/src/electron-browser/token/electron-token-frontend-module.ts b/packages/core/src/electron-browser/token/electron-token-frontend-module.ts index 062315c7e00c7..d9c33e32f0a05 100644 --- a/packages/core/src/electron-browser/token/electron-token-frontend-module.ts +++ b/packages/core/src/electron-browser/token/electron-token-frontend-module.ts @@ -14,10 +14,10 @@ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 ********************************************************************************/ -import * as electron from '../../../shared/electron'; +import * as electronRemote from '../../../electron-shared/@electron/remote'; import { ContainerModule } from 'inversify'; import { ElectronSecurityToken } from '../../electron-common/electron-token'; export default new ContainerModule(bind => { - bind(ElectronSecurityToken).toConstantValue(electron.remote.getGlobal(ElectronSecurityToken)); + bind(ElectronSecurityToken).toConstantValue(electronRemote.getGlobal(ElectronSecurityToken)); }); diff --git a/packages/core/src/electron-browser/window/electron-window-service.ts b/packages/core/src/electron-browser/window/electron-window-service.ts index 598040e410f0a..3f50d6017aca6 100644 --- a/packages/core/src/electron-browser/window/electron-window-service.ts +++ b/packages/core/src/electron-browser/window/electron-window-service.ts @@ -14,8 +14,9 @@ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 ********************************************************************************/ +import * as electronRemote from '../../../electron-shared/@electron/remote'; import { injectable, inject, postConstruct } from 'inversify'; -import * as electron from '../../../shared/electron'; +import * as electron from '../../../electron-shared/electron'; import { NewWindowOptions } from '../../common/window'; import { DefaultWindowService } from '../../browser/window/default-window-service'; import { ElectronMainWindowService } from '../../electron-common/electron-main-window-service'; @@ -85,7 +86,7 @@ export class ElectronWindowService extends DefaultWindowService { */ protected updateWindowZoomLevel(): void { const preferredZoomLevel = this.electronWindowPreferences['window.zoomLevel']; - const webContents = electron.remote.getCurrentWindow().webContents; + const webContents = electronRemote.getCurrentWindow().webContents; if (webContents.getZoomLevel() !== preferredZoomLevel) { webContents.setZoomLevel(preferredZoomLevel); } diff --git a/packages/core/src/electron-main/electron-main-application.ts b/packages/core/src/electron-main/electron-main-application.ts index 6a6c86c50fce2..9109ddb4f86de 100644 --- a/packages/core/src/electron-main/electron-main-application.ts +++ b/packages/core/src/electron-main/electron-main-application.ts @@ -15,7 +15,8 @@ ********************************************************************************/ import { inject, injectable, named } from 'inversify'; -import { screen, globalShortcut, ipcMain, app, BrowserWindow, BrowserWindowConstructorOptions, Event as ElectronEvent } from '../../shared/electron'; +import * as electronRemoteMain from '../../electron-shared/@electron/remote/main'; +import { screen, globalShortcut, ipcMain, app, BrowserWindow, BrowserWindowConstructorOptions, Event as ElectronEvent } from '../../electron-shared/electron'; import * as path from 'path'; import { Argv } from 'yargs'; import { AddressInfo } from 'net'; @@ -190,7 +191,9 @@ export class ElectronMainApplication { @inject(ElectronSecurityToken) protected readonly electronSecurityToken: ElectronSecurityToken; - protected readonly electronStore = new Storage(); + protected readonly electronStore = new Storage<{ + windowstate?: TheiaBrowserWindowOptions + }>(); protected readonly _backendPort = new Deferred(); readonly backendPort = this._backendPort.promise; @@ -266,6 +269,7 @@ export class ElectronMainApplication { this.attachGlobalShortcuts(electronWindow); this.restoreMaximizedState(electronWindow, options); this.attachCloseListeners(electronWindow, options); + electronRemoteMain.enable(electronWindow.webContents); return electronWindow; } @@ -304,6 +308,8 @@ export class ElectronMainApplication { minWidth: 200, minHeight: 120, webPreferences: { + // `global` is undefined when `true`. + contextIsolation: false, // https://github.com/eclipse-theia/theia/issues/2018 nodeIntegration: true, // Setting the following option to `true` causes some features to break, somehow. @@ -589,7 +595,12 @@ export class ElectronMainApplication { ipcMain.on(TitleBarStyleChanged, ({ sender }, titleBarStyle: string) => { this.useNativeWindowFrame = titleBarStyle === 'native'; - this.saveWindowState(BrowserWindow.fromId(sender.id)); + const browserWindow = BrowserWindow.fromId(sender.id); + if (browserWindow) { + this.saveWindowState(browserWindow); + } else { + console.warn(`no BrowserWindow with id: ${sender.id}`); + } }); ipcMain.on(Restart, ({ sender }) => { @@ -626,8 +637,11 @@ export class ElectronMainApplication { protected restart(id: number): void { this.restarting = true; - const window = BrowserWindow.fromId(id); - window.on('closed', async () => { + const browserWindow = BrowserWindow.fromId(id); + if (!browserWindow) { + throw new Error(`no BrowserWindow with id: ${id}`); + } + browserWindow.on('closed', async () => { await this.launch({ secondInstance: false, argv: this.processArgv.getProcessArgvWithoutBin(process.argv), @@ -635,12 +649,15 @@ export class ElectronMainApplication { }); this.restarting = false; }); - this.handleStopRequest(window, () => this.doCloseWindow(window), StopReason.Restart); + this.handleStopRequest(browserWindow, () => this.doCloseWindow(browserWindow), StopReason.Restart); } protected async handleReload(event: Electron.IpcMainEvent): Promise { - const window = BrowserWindow.fromId(event.sender.id); - this.reload(window); + const browserWindow = BrowserWindow.fromId(event.sender.id); + if (!browserWindow) { + throw new Error(`no BrowserWindow with id: ${event.sender.id}`); + } + this.reload(browserWindow); } protected reload(electronWindow: BrowserWindow): void { diff --git a/packages/core/src/electron-main/electron-main-window-service-impl.ts b/packages/core/src/electron-main/electron-main-window-service-impl.ts index 2b13a8725cc67..192b079fed075 100644 --- a/packages/core/src/electron-main/electron-main-window-service-impl.ts +++ b/packages/core/src/electron-main/electron-main-window-service-impl.ts @@ -14,7 +14,7 @@ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 ********************************************************************************/ -import { shell } from '../../shared/electron'; +import { shell } from '@theia/electron/shared/electron'; import { injectable, inject } from 'inversify'; import { ElectronMainWindowService } from '../electron-common/electron-main-window-service'; import { ElectronMainApplication } from './electron-main-application'; diff --git a/packages/core/src/electron-main/electron-native-keymap.ts b/packages/core/src/electron-main/electron-native-keymap.ts index 33b8486a80d12..6435f3f25971d 100644 --- a/packages/core/src/electron-main/electron-native-keymap.ts +++ b/packages/core/src/electron-main/electron-native-keymap.ts @@ -14,10 +14,10 @@ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 ********************************************************************************/ -import { webContents } from '../../shared/electron'; +import { webContents } from '@theia/electron/shared/electron'; +import * as nativeKeymap from '@theia/electron/shared/native-keymap'; import { injectable } from 'inversify'; import { ElectronMainApplication, ElectronMainApplicationContribution } from './electron-main-application'; -import * as nativeKeymap from '@theia/electron/native-keymap'; @injectable() export class ElectronNativeKeymap implements ElectronMainApplicationContribution { diff --git a/packages/core/src/electron-main/electron-security-token-service.ts b/packages/core/src/electron-main/electron-security-token-service.ts index cfbbca7641f7d..e6df0e8fc4ca6 100644 --- a/packages/core/src/electron-main/electron-security-token-service.ts +++ b/packages/core/src/electron-main/electron-security-token-service.ts @@ -14,7 +14,7 @@ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 ********************************************************************************/ -import { session } from '../../shared/electron'; +import { session } from '@theia/electron/shared/electron'; import { inject, injectable } from 'inversify'; import { ElectronSecurityToken } from '../electron-common/electron-token'; diff --git a/packages/core/src/electron-main/messaging/electron-messaging-contribution.ts b/packages/core/src/electron-main/messaging/electron-messaging-contribution.ts index 83d96347bde9a..61d6095540207 100644 --- a/packages/core/src/electron-main/messaging/electron-messaging-contribution.ts +++ b/packages/core/src/electron-main/messaging/electron-messaging-contribution.ts @@ -14,7 +14,7 @@ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 ********************************************************************************/ -import { IpcMainEvent, ipcMain, WebContents } from '../../../shared/electron'; +import { IpcMainEvent, ipcMain, WebContents } from '@theia/electron/shared/electron'; import { inject, injectable, named, postConstruct } from 'inversify'; import { MessageConnection } from 'vscode-ws-jsonrpc'; import { createWebSocketConnection } from 'vscode-ws-jsonrpc/lib/socket/connection'; diff --git a/packages/core/src/electron-node/keyboard/electron-keyboard-layout-provider.ts b/packages/core/src/electron-node/keyboard/electron-keyboard-layout-provider.ts index e72305d9e18a5..dc77d513b08e8 100644 --- a/packages/core/src/electron-node/keyboard/electron-keyboard-layout-provider.ts +++ b/packages/core/src/electron-node/keyboard/electron-keyboard-layout-provider.ts @@ -14,7 +14,7 @@ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 ********************************************************************************/ -import * as nativeKeymap from '@theia/electron/native-keymap'; +import * as nativeKeymap from '@theia/electron/shared/native-keymap'; import { injectable } from 'inversify'; import { KeyboardLayoutProvider, NativeKeyboardLayout } from '../../common/keyboard/keyboard-layout-provider'; diff --git a/packages/electron/.eslintrc.js b/packages/electron/.eslintrc.js new file mode 100644 index 0000000000000..be9cf1a1b3dff --- /dev/null +++ b/packages/electron/.eslintrc.js @@ -0,0 +1,10 @@ +/** @type {import('eslint').Linter.Config} */ +module.exports = { + extends: [ + '../../configs/build.eslintrc.json' + ], + parserOptions: { + tsconfigRootDir: __dirname, + project: 'compile.tsconfig.json' + } +}; diff --git a/packages/electron/README.in.md b/packages/electron/README.in.md new file mode 100644 index 0000000000000..4007040b26874 --- /dev/null +++ b/packages/electron/README.in.md @@ -0,0 +1,41 @@ +
+ +
+ +theia-ext-logo + +

ECLIPSE THEIA - ELECTRON EXTENSION

+ +
+ +
+ +## Description + +The `@theia/electron` extension bundles all Electron-specific dependencies and core functionalities. + +## Re-Exports + +{{#reExportsDirectories}} +- `@theia/electron/{{&directory}}/...` + {{#packages}} + {{#modules}} + - `{{&moduleName}}` (from [`{{&packageName}}@{{&versionRange}}`]({{&npmUrl}})) + {{/modules}} + {{/packages}} +{{/reExportsDirectories}} + +## Additional Information + +- [API documentation for `@theia/electron`](https://eclipse-theia.github.io/theia/docs/next/modules/electron.html) +- [Theia - GitHub](https://github.com/eclipse-theia/theia) +- [Theia - Website](https://theia-ide.org/) + +## License + +- [Eclipse Public License 2.0](http://www.eclipse.org/legal/epl-2.0/) +- [δΈ€ (Secondary) GNU General Public License, version 2 with the GNU Classpath Exception](https://projects.eclipse.org/license/secondary-gpl-2.0-cp) + +## Trademark +"Theia" is a trademark of the Eclipse Foundation +https://www.eclipse.org/theia diff --git a/packages/electron/README.md b/packages/electron/README.md new file mode 100644 index 0000000000000..284f533c132ce --- /dev/null +++ b/packages/electron/README.md @@ -0,0 +1,40 @@ +
+ +
+ +theia-ext-logo + +

ECLIPSE THEIA - ELECTRON EXTENSION

+ +
+ +
+ +## Description + +The `@theia/electron` extension bundles all Electron-specific dependencies and core functionalities. + +## Re-Exports + +- `@theia/electron/shared/...` + - `@electron/remote` (from [`@electron/remote@^2.0.1`](https://www.npmjs.com/package/@electron/remote)) + - `@electron/remote/main` (from [`@electron/remote@^2.0.1`](https://www.npmjs.com/package/@electron/remote)) + - `native-keymap` (from [`native-keymap@^2.2.1`](https://www.npmjs.com/package/native-keymap)) + - `electron` (from [`electron@^15.3.5`](https://www.npmjs.com/package/electron)) + - `electron-store` (from [`electron-store@^8.0.0`](https://www.npmjs.com/package/electron-store)) + - `fix-path` (from [`fix-path@^3.0.0`](https://www.npmjs.com/package/fix-path)) + +## Additional Information + +- [API documentation for `@theia/electron`](https://eclipse-theia.github.io/theia/docs/next/modules/electron.html) +- [Theia - GitHub](https://github.com/eclipse-theia/theia) +- [Theia - Website](https://theia-ide.org/) + +## License + +- [Eclipse Public License 2.0](http://www.eclipse.org/legal/epl-2.0/) +- [δΈ€ (Secondary) GNU General Public License, version 2 with the GNU Classpath Exception](https://projects.eclipse.org/license/secondary-gpl-2.0-cp) + +## Trademark +"Theia" is a trademark of the Eclipse Foundation +https://www.eclipse.org/theia diff --git a/packages/electron/index.d.ts b/packages/electron/index.d.ts new file mode 100644 index 0000000000000..a9024354f0e58 --- /dev/null +++ b/packages/electron/index.d.ts @@ -0,0 +1,25 @@ +/******************************************************************************** + * Copyright (C) 2021 Ericsson and others. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v. 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * This Source Code may also be made available under the following Secondary + * Licenses when the conditions for such availability set forth in the Eclipse + * Public License v. 2.0 are satisfied: GNU General Public License, version 2 + * with the GNU Classpath Exception which is available at + * https://www.gnu.org/software/classpath/license.html. + * + * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 + ********************************************************************************/ + +/** + * Currently installed Electron version. `undefined` if Electron is not installed nor found. + */ +export const electronVersion: string | undefined; + +/** + * Supported Electron version range. + */ +export const electronRange: string; diff --git a/scripts/post-install.js b/packages/electron/index.js similarity index 53% rename from scripts/post-install.js rename to packages/electron/index.js index 41db222e4b1d9..d3abcd3a5b9ed 100644 --- a/scripts/post-install.js +++ b/packages/electron/index.js @@ -1,6 +1,5 @@ -#!/usr/bin/env node /******************************************************************************** - * Copyright (C) 2019 Ericsson and others. + * Copyright (C) 2021 Ericsson and others. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0 which is available at @@ -14,24 +13,15 @@ * * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 ********************************************************************************/ -'use-strict'; -// @ts-check - -const fs = require('fs'); -const path = require('path'); - -async function main() { - const electronCodecTestLogPath = path.resolve('dev-packages/electron/post-install.log'); - if (fs.existsSync(electronCodecTestLogPath)) { - console.log('@theia/electron last logs:'); - console.log(fs.readFileSync(electronCodecTestLogPath, { encoding: 'utf8' }).trimRight()); - } else if (!process.env.THEIA_ELECTRON_SKIP_REPLACE_FFMPEG) { - console.error('Cannot find the log file for the Electron codecs test.'); +Object.defineProperty(exports, '__esModule', { value: true }); +exports.electronRange = require('./package.json').peerDependencies.electron; +try { + exports.electronVersion = require('electron/package.json').version; +} catch (error) { + if (error.code === 'MODULE_NOT_FOUND') { + exports.electronVersion = undefined; + } else { + throw error; } } - -main().catch(error => { - console.error(error); - process.exit(1); -}); diff --git a/packages/electron/package.json b/packages/electron/package.json new file mode 100644 index 0000000000000..98ed24ad21d49 --- /dev/null +++ b/packages/electron/package.json @@ -0,0 +1,65 @@ +{ + "name": "@theia/electron", + "version": "1.21.0", + "description": "Theia - Electron utility package", + "dependencies": { + "@electron/remote": "^2.0.1", + "electron-store": "^8.0.0", + "fix-path": "^3.0.0", + "native-keymap": "^2.2.1" + }, + "devDependencies": { + "@theia/ext-scripts": "1.21.0", + "@theia/re-exports": "1.21.0" + }, + "peerDependencies": { + "electron": "^15.3.5" + }, + "theiaReExports": { + "shared": { + "export *": [ + "@electron/remote", + "@electron/remote/main", + "native-keymap" + ], + "export =": [ + "electron as Electron", + "electron-store as ElectronStore", + "fix-path as fixPath" + ] + } + }, + "publishConfig": { + "access": "public" + }, + "theiaExtensions": [], + "keywords": [ + "theia-extension" + ], + "license": "EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0", + "repository": { + "type": "git", + "url": "https://github.com/eclipse-theia/theia.git" + }, + "bugs": { + "url": "https://github.com/eclipse-theia/theia/issues" + }, + "homepage": "https://github.com/eclipse-theia/theia", + "files": [ + "lib", + "src" + ], + "scripts": { + "generate-theia-re-exports": "theia-re-exports generate && theia-re-exports template README.in.md > README.md", + "prepare": "yarn -s generate-theia-re-exports", + "lint": "echo skip || theiaext lint", + "build": "echo skip || theiaext build", + "watch": "echo skip || theiaext watch", + "clean": "echo skip || theiaext clean", + "test": "echo skip || theiaext test", + "version": "yarn -s generate-theia-re-exports" + }, + "nyc": { + "extends": "../../configs/nyc.json" + } +} diff --git a/packages/electron/shared/@electron/remote/index.d.ts b/packages/electron/shared/@electron/remote/index.d.ts new file mode 100644 index 0000000000000..83b7353721aca --- /dev/null +++ b/packages/electron/shared/@electron/remote/index.d.ts @@ -0,0 +1 @@ +export * from '@electron/remote'; diff --git a/packages/electron/shared/@electron/remote/index.js b/packages/electron/shared/@electron/remote/index.js new file mode 100644 index 0000000000000..4097d77b477dd --- /dev/null +++ b/packages/electron/shared/@electron/remote/index.js @@ -0,0 +1 @@ +module.exports = require('@electron/remote'); diff --git a/packages/electron/shared/@electron/remote/main/index.d.ts b/packages/electron/shared/@electron/remote/main/index.d.ts new file mode 100644 index 0000000000000..05ede6b8da580 --- /dev/null +++ b/packages/electron/shared/@electron/remote/main/index.d.ts @@ -0,0 +1 @@ +export * from '@electron/remote/main'; diff --git a/packages/electron/shared/@electron/remote/main/index.js b/packages/electron/shared/@electron/remote/main/index.js new file mode 100644 index 0000000000000..3dec179bd4de4 --- /dev/null +++ b/packages/electron/shared/@electron/remote/main/index.js @@ -0,0 +1 @@ +module.exports = require('@electron/remote/main'); diff --git a/packages/electron/shared/electron-store/index.d.ts b/packages/electron/shared/electron-store/index.d.ts new file mode 100644 index 0000000000000..f48807d4b778a --- /dev/null +++ b/packages/electron/shared/electron-store/index.d.ts @@ -0,0 +1,2 @@ +import ElectronStore = require('electron-store'); +export = ElectronStore; diff --git a/packages/electron/shared/electron-store/index.js b/packages/electron/shared/electron-store/index.js new file mode 100644 index 0000000000000..04be26145c01b --- /dev/null +++ b/packages/electron/shared/electron-store/index.js @@ -0,0 +1 @@ +module.exports = require('electron-store'); diff --git a/dev-packages/electron/index.d.ts b/packages/electron/shared/electron/index.d.ts similarity index 100% rename from dev-packages/electron/index.d.ts rename to packages/electron/shared/electron/index.d.ts diff --git a/dev-packages/electron/index.js b/packages/electron/shared/electron/index.js similarity index 100% rename from dev-packages/electron/index.js rename to packages/electron/shared/electron/index.js diff --git a/packages/electron/shared/fix-path/index.d.ts b/packages/electron/shared/fix-path/index.d.ts new file mode 100644 index 0000000000000..091c3034a7c36 --- /dev/null +++ b/packages/electron/shared/fix-path/index.d.ts @@ -0,0 +1,2 @@ +import fixPath = require('fix-path'); +export = fixPath; diff --git a/packages/electron/shared/fix-path/index.js b/packages/electron/shared/fix-path/index.js new file mode 100644 index 0000000000000..f5d05533c2ff6 --- /dev/null +++ b/packages/electron/shared/fix-path/index.js @@ -0,0 +1 @@ +module.exports = require('fix-path'); diff --git a/packages/electron/shared/native-keymap/index.d.ts b/packages/electron/shared/native-keymap/index.d.ts new file mode 100644 index 0000000000000..e6d6668c34ebd --- /dev/null +++ b/packages/electron/shared/native-keymap/index.d.ts @@ -0,0 +1 @@ +export * from 'native-keymap'; diff --git a/dev-packages/electron/native-keymap.js b/packages/electron/shared/native-keymap/index.js similarity index 100% rename from dev-packages/electron/native-keymap.js rename to packages/electron/shared/native-keymap/index.js diff --git a/packages/filesystem/src/electron-browser/file-dialog/electron-file-dialog-service.ts b/packages/filesystem/src/electron-browser/file-dialog/electron-file-dialog-service.ts index 8d432a4f019ff..932f48858a359 100644 --- a/packages/filesystem/src/electron-browser/file-dialog/electron-file-dialog-service.ts +++ b/packages/filesystem/src/electron-browser/file-dialog/electron-file-dialog-service.ts @@ -15,7 +15,8 @@ ********************************************************************************/ import { inject, injectable } from '@theia/core/shared/inversify'; -import { remote, FileFilter, OpenDialogOptions, SaveDialogOptions } from '@theia/core/shared/electron'; +import { FileFilter, OpenDialogOptions, SaveDialogOptions } from '@theia/core/electron-shared/electron'; +import * as electronRemote from '@theia/core/electron-shared/@electron/remote'; import URI from '@theia/core/lib/common/uri'; import { isOSX } from '@theia/core/lib/common/os'; import { MaybeArray } from '@theia/core/lib/common/types'; @@ -48,7 +49,7 @@ export class ElectronFileDialogService extends DefaultFileDialogService { async showOpenDialog(props: OpenFileDialogProps, folder?: FileStat): Promise | undefined> { const rootNode = await this.getRootNode(folder); if (rootNode) { - const { filePaths } = await remote.dialog.showOpenDialog(this.toOpenDialogOptions(rootNode.uri, props)); + const { filePaths } = await electronRemote.dialog.showOpenDialog(this.toOpenDialogOptions(rootNode.uri, props)); if (filePaths.length === 0) { return undefined; } @@ -64,7 +65,7 @@ export class ElectronFileDialogService extends DefaultFileDialogService { async showSaveDialog(props: SaveFileDialogProps, folder?: FileStat): Promise { const rootNode = await this.getRootNode(folder); if (rootNode) { - const { filePath } = await remote.dialog.showSaveDialog(this.toSaveDialogOptions(rootNode.uri, props)); + const { filePath } = await electronRemote.dialog.showSaveDialog(this.toSaveDialogOptions(rootNode.uri, props)); if (!filePath) { return undefined; } @@ -106,13 +107,23 @@ export class ElectronFileDialogService extends DefaultFileDialogService { } protected toDialogOptions(uri: URI, props: SaveFileDialogProps | OpenFileDialogProps, dialogTitle: string): electron.FileDialogProps { - const title = props.title || dialogTitle; - const defaultPath = FileUri.fsPath(uri); - const filters: FileFilter[] = [{ name: 'All Files', extensions: ['*'] }]; - if (props.filters) { - filters.unshift(...Object.keys(props.filters).map(key => ({ name: key, extensions: props.filters![key] }))); + type Mutable = { -readonly [K in keyof T]: T[K] }; + const electronProps: Mutable = { + title: props.title || dialogTitle, + defaultPath: FileUri.fsPath(uri), + }; + const { + canSelectFiles = true, + canSelectFolders = false, + } = props as OpenFileDialogProps; + if (!isOSX && canSelectFiles && canSelectFolders) { + console.warn('canSelectFiles === true && canSelectFolders === true is only supported on OSX!'); + } + if ((isOSX && canSelectFiles) || !canSelectFolders) { + electronProps.filters = props.filters ? Object.entries(props.filters).map(([name, extensions]) => ({ name, extensions })) : []; + electronProps.filters.push({ name: 'All Files', extensions: ['*'] }); } - return { title, defaultPath, filters }; + return electronProps; } protected toOpenDialogOptions(uri: URI, props: OpenFileDialogProps): OpenDialogOptions { diff --git a/packages/keymaps/package.json b/packages/keymaps/package.json index ac34622181ce0..bcdf8d5112bef 100644 --- a/packages/keymaps/package.json +++ b/packages/keymaps/package.json @@ -8,7 +8,6 @@ "@theia/userstorage": "1.21.0", "@theia/workspace": "1.21.0", "@types/lodash.debounce": "4.0.3", - "ajv": "^6.5.3", "jsonc-parser": "^2.2.0" }, "devDependencies": { diff --git a/packages/mini-browser/src/electron-browser/environment/electron-mini-browser-environment.ts b/packages/mini-browser/src/electron-browser/environment/electron-mini-browser-environment.ts index 7fa7760dd5316..6acb97ecfadbe 100644 --- a/packages/mini-browser/src/electron-browser/environment/electron-mini-browser-environment.ts +++ b/packages/mini-browser/src/electron-browser/environment/electron-mini-browser-environment.ts @@ -16,7 +16,7 @@ import { Endpoint } from '@theia/core/lib/browser'; import { ElectronSecurityToken } from '@theia/core/lib/electron-common/electron-token'; -import { remote } from '@theia/core/shared/electron'; +import * as electronRemote from '@theia/core/electron-shared/@electron/remote'; import { inject, injectable } from '@theia/core/shared/inversify'; import { MiniBrowserEnvironment } from '../../browser/environment/mini-browser-environment'; @@ -29,7 +29,7 @@ export class ElectronMiniBrowserEnvironment extends MiniBrowserEnvironment { getEndpoint(uuid: string, hostname?: string): Endpoint { const endpoint = super.getEndpoint(uuid, hostname); // Note: This call is async, but clients expect sync logic. - remote.session.defaultSession.cookies.set({ + electronRemote.session.defaultSession.cookies.set({ url: endpoint.getRestUrl().toString(true), name: ElectronSecurityToken, value: JSON.stringify(this.electronSecurityToken), diff --git a/packages/navigator/src/electron-browser/electron-navigator-menu-contribution.ts b/packages/navigator/src/electron-browser/electron-navigator-menu-contribution.ts index 6fb0eb1c9db23..8bf7992ee6397 100644 --- a/packages/navigator/src/electron-browser/electron-navigator-menu-contribution.ts +++ b/packages/navigator/src/electron-browser/electron-navigator-menu-contribution.ts @@ -17,7 +17,8 @@ import { Command, CommandContribution, CommandRegistry, MenuContribution, MenuModelRegistry } from '@theia/core'; import { CommonCommands, KeybindingContribution, KeybindingRegistry } from '@theia/core/lib/browser'; import { WidgetManager } from '@theia/core/lib/browser/widget-manager'; -import * as electron from '@theia/core/shared/electron'; +import * as electron from '@theia/core/electron-shared/electron'; +import * as electronRemote from '@theia/core/electron-shared/@electron/remote'; import { inject, injectable } from '@theia/core/shared/inversify'; import { FileStatNode } from '@theia/filesystem/lib/browser'; import { FileNavigatorWidget, FILE_NAVIGATOR_ID } from '../browser'; @@ -45,7 +46,7 @@ export class ElectronNavigatorMenuContribution implements MenuContribution, Comm execute: () => { // workaround for https://github.com/electron/electron/issues/4349: // use electron.remote.shell to open the window in the foreground on Windows - const shell = electron.remote?.shell ?? electron.shell; + const shell = isWindows ? electronRemote.shell : electron.shell; this.getSelectedFileStatNodes().forEach(node => { shell.showItemInFolder(node.uri['codeUri'].fsPath); }); diff --git a/packages/plugin-ext-vscode/compile.tsconfig.json b/packages/plugin-ext-vscode/compile.tsconfig.json deleted file mode 100644 index 01282b0662859..0000000000000 --- a/packages/plugin-ext-vscode/compile.tsconfig.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "extends": "../../configs/base.tsconfig", - "compilerOptions": { - "composite": true, - "rootDir": "src", - "outDir": "lib", - "lib": [ - "es6", - "dom", - "webworker" - ] - }, - "include": [ - "src" - ], - "references": [ - { - "path": "../core/compile.tsconfig.json" - }, - { - "path": "../editor/compile.tsconfig.json" - }, - { - "path": "../monaco/compile.tsconfig.json" - }, - { - "path": "../plugin/compile.tsconfig.json" - }, - { - "path": "../plugin-ext/compile.tsconfig.json" - }, - { - "path": "../userstorage/compile.tsconfig.json" - }, - { - "path": "../workspace/compile.tsconfig.json" - }, - { - "path": "../filesystem/compile.tsconfig.json" - }, - { - "path": "../navigator/compile.tsconfig.json" - }, - { - "path": "../terminal/compile.tsconfig.json" - }, - { - "path": "../callhierarchy/compile.tsconfig.json" - } - ] -} diff --git a/packages/plugin-ext/compile.tsconfig.json b/packages/plugin-ext/compile.tsconfig.json deleted file mode 100644 index bbd1054db6764..0000000000000 --- a/packages/plugin-ext/compile.tsconfig.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "extends": "../../configs/base.tsconfig", - "compilerOptions": { - "composite": true, - "rootDir": "src", - "outDir": "lib", - "lib": [ - "es6", - "dom", - "webworker" - ] - }, - "include": [ - "src" - ], - "references": [ - { - "path": "../bulk-edit/compile.tsconfig.json" - }, - { - "path": "../callhierarchy/compile.tsconfig.json" - }, - { - "path": "../console/compile.tsconfig.json" - }, - { - "path": "../core/compile.tsconfig.json" - }, - { - "path": "../debug/compile.tsconfig.json" - }, - { - "path": "../editor/compile.tsconfig.json" - }, - { - "path": "../file-search/compile.tsconfig.json" - }, - { - "path": "../filesystem/compile.tsconfig.json" - }, - { - "path": "../markers/compile.tsconfig.json" - }, - { - "path": "../messages/compile.tsconfig.json" - }, - { - "path": "../monaco/compile.tsconfig.json" - }, - { - "path": "../navigator/compile.tsconfig.json" - }, - { - "path": "../output/compile.tsconfig.json" - }, - { - "path": "../plugin/compile.tsconfig.json" - }, - { - "path": "../preferences/compile.tsconfig.json" - }, - { - "path": "../scm/compile.tsconfig.json" - }, - { - "path": "../search-in-workspace/compile.tsconfig.json" - }, - { - "path": "../task/compile.tsconfig.json" - }, - { - "path": "../terminal/compile.tsconfig.json" - }, - { - "path": "../timeline/compile.tsconfig.json" - }, - { - "path": "../workspace/compile.tsconfig.json" - } - ] -} diff --git a/packages/plugin-ext/src/main/electron-browser/webview/electron-webview-widget-factory.ts b/packages/plugin-ext/src/main/electron-browser/webview/electron-webview-widget-factory.ts index 22d98ca9db393..d0d67e5056a29 100644 --- a/packages/plugin-ext/src/main/electron-browser/webview/electron-webview-widget-factory.ts +++ b/packages/plugin-ext/src/main/electron-browser/webview/electron-webview-widget-factory.ts @@ -14,7 +14,7 @@ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 ********************************************************************************/ -import { remote } from '@theia/core/shared/electron'; +import * as electronRemote from '@theia/core/electron-shared/@electron/remote'; import { ElectronSecurityToken } from '@theia/core/lib/electron-common/electron-token'; import { WebviewWidgetFactory } from '../../browser/webview/webview-widget-factory'; import { WebviewWidgetIdentifier, WebviewWidget } from '../../browser/webview/webview'; @@ -35,7 +35,7 @@ export class ElectronWebviewWidgetFactory extends WebviewWidgetFactory { * @param endpoint cookie's target url */ protected async attachElectronSecurityCookie(endpoint: string): Promise { - await remote.session.defaultSession!.cookies.set({ + await electronRemote.session.defaultSession!.cookies.set({ url: endpoint, name: ElectronSecurityToken, value: JSON.stringify(this.container.get(ElectronSecurityToken)), @@ -59,7 +59,7 @@ export class ElectronCustomEditorWidgetFactory extends CustomEditorWidgetFactory * @param endpoint cookie's target url */ protected async attachElectronSecurityCookie(endpoint: string): Promise { - await remote.session.defaultSession!.cookies.set({ + await electronRemote.session.defaultSession!.cookies.set({ url: endpoint, name: ElectronSecurityToken, value: JSON.stringify(this.container.get(ElectronSecurityToken)), diff --git a/packages/process/package.json b/packages/process/package.json index 78360dfcab238..ae282ba9dc788 100644 --- a/packages/process/package.json +++ b/packages/process/package.json @@ -4,7 +4,7 @@ "description": "Theia process support.", "dependencies": { "@theia/core": "1.21.0", - "@theia/node-pty": "0.9.0-theia.6", + "node-pty": "0.11.0-beta17", "string-argv": "^0.1.1" }, "publishConfig": { diff --git a/packages/process/src/node/pseudo-pty.ts b/packages/process/src/node/pseudo-pty.ts index d14a9222d0eba..66e081422407b 100644 --- a/packages/process/src/node/pseudo-pty.ts +++ b/packages/process/src/node/pseudo-pty.ts @@ -14,7 +14,7 @@ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 ********************************************************************************/ -import { IPty } from '@theia/node-pty'; +import { IPty } from 'node-pty'; import { Event } from '@theia/core'; export class PseudoPty implements IPty { @@ -48,4 +48,7 @@ export class PseudoPty implements IPty { kill(signal?: string): void { } + pause(): void { } + + resume(): void { } } diff --git a/packages/process/src/node/terminal-process.ts b/packages/process/src/node/terminal-process.ts index cf350ad7d294a..67119b80f26ac 100644 --- a/packages/process/src/node/terminal-process.ts +++ b/packages/process/src/node/terminal-process.ts @@ -17,9 +17,9 @@ import { injectable, inject, named } from '@theia/core/shared/inversify'; import { isWindows } from '@theia/core'; import { ILogger } from '@theia/core/lib/common'; -import { Process, ProcessType, ProcessOptions, ProcessErrorEvent } from './process'; +import { Process, ProcessType, ProcessOptions, /* ProcessErrorEvent */ } from './process'; import { ProcessManager } from './process-manager'; -import { IPty, spawn } from '@theia/node-pty'; +import { IPty, spawn } from 'node-pty'; import { MultiRingBuffer, MultiRingBufferReadableStream } from './multi-ring-buffer'; import { DevNullStream } from './dev-null-stream'; import { signame } from './utils'; @@ -40,6 +40,11 @@ export interface TerminalProcessFactory { (options: TerminalProcessOptions): TerminalProcess; } +export enum NodePtyErrors { + EACCES = 'Permission denied', + ENOENT = 'No such file or directory' +} + /** * Run arbitrary processes inside pseudo-terminals (PTY). * @@ -78,17 +83,10 @@ export class TerminalProcess extends Process { this.terminal = spawn( options.command, (isWindows && options.commandLine) || options.args || [], - options.options || {}); + options.options || {} + ); - this.terminal.on('exec', (reason: string | undefined) => { - if (reason === undefined) { - this.emitOnStarted(); - } else { - const error = new Error(reason) as ProcessErrorEvent; - error.code = reason; - this.emitOnError(error); - } - }); + process.nextTick(() => this.emitOnStarted()); // node-pty actually wait for the underlying streams to be closed before emitting exit. // We should emulate the `exit` and `close` sequence. @@ -133,10 +131,14 @@ export class TerminalProcess extends Process { // situation. const message: string = error.message; - if (message.startsWith('File not found: ')) { + if (message.startsWith('File not found: ') || message.endsWith(NodePtyErrors.ENOENT)) { error.errno = 'ENOENT'; error.code = 'ENOENT'; error.path = options.command; + } else if (message.endsWith(NodePtyErrors.EACCES)) { + error.errno = 'EACCES'; + error.code = 'EACCES'; + error.path = options.command; } // node-pty throws exceptions on Windows. diff --git a/packages/task/src/browser/task-schema-updater.ts b/packages/task/src/browser/task-schema-updater.ts index 8a50298e233ef..d9698d8d21870 100644 --- a/packages/task/src/browser/task-schema-updater.ts +++ b/packages/task/src/browser/task-schema-updater.ts @@ -20,7 +20,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as Ajv from 'ajv'; +import * as Ajv from '@theia/core/shared/ajv'; import debounce = require('p-debounce'); import { postConstruct, injectable, inject } from '@theia/core/shared/inversify'; import { JsonSchemaContribution, JsonSchemaRegisterContext } from '@theia/core/lib/browser/json-schema-store'; diff --git a/packages/terminal/package.json b/packages/terminal/package.json index 93a2a9277e35a..3bbba9d5e746b 100644 --- a/packages/terminal/package.json +++ b/packages/terminal/package.json @@ -9,9 +9,9 @@ "@theia/monaco": "1.21.0", "@theia/process": "1.21.0", "@theia/workspace": "1.21.0", - "xterm": "~4.11.0", - "xterm-addon-fit": "~0.5.0", - "xterm-addon-search": "~0.8.0" + "xterm": "^4.16.0", + "xterm-addon-fit": "^0.5.0", + "xterm-addon-search": "^0.8.2" }, "publishConfig": { "access": "public" diff --git a/packages/workspace/src/browser/workspace-service.ts b/packages/workspace/src/browser/workspace-service.ts index 659b824b4fbd1..9919d1a6e3ac5 100644 --- a/packages/workspace/src/browser/workspace-service.ts +++ b/packages/workspace/src/browser/workspace-service.ts @@ -27,7 +27,7 @@ import { EnvVariablesServer } from '@theia/core/lib/common/env-variables'; import { ILogger, Disposable, DisposableCollection, Emitter, Event, MaybePromise, MessageService, nls } from '@theia/core'; import { WorkspacePreferences } from './workspace-preferences'; import * as jsoncparser from 'jsonc-parser'; -import * as Ajv from 'ajv'; +import * as Ajv from '@theia/core/shared/ajv'; import { FrontendApplicationConfigProvider } from '@theia/core/lib/browser/frontend-application-config-provider'; import { FileStat, BaseStat } from '@theia/filesystem/lib/common/files'; import { FileService } from '@theia/filesystem/lib/browser/file-service'; diff --git a/scripts/compile-references.js b/scripts/compile-references.js index c3d2a2e478a28..d81d9650bb447 100644 --- a/scripts/compile-references.js +++ b/scripts/compile-references.js @@ -42,6 +42,15 @@ const YARN_WORKSPACES = JSON.parse(cp.execSync('yarn --silent workspaces info', // Add the package name inside each package object. for (const [packageName, yarnWorkspace] of Object.entries(YARN_WORKSPACES)) { yarnWorkspace.name = packageName; + // For some reason Yarn doesn't report local peer dependencies, so we'll manually do it: + const { peerDependencies } = require(path.resolve(ROOT, yarnWorkspace.location, 'package.json')); + if (typeof peerDependencies === 'object') { + for (const peerDependency of Object.keys(peerDependencies)) { + if (peerDependency in YARN_WORKSPACES) { + yarnWorkspace.workspaceDependencies.push(peerDependency); + } + } + } } /** @type {YarnWorkspace} */ diff --git a/scripts/performance/base-package.json b/scripts/performance/base-package.json index ee133ef164ff5..15cb0b2f4f846 100644 --- a/scripts/performance/base-package.json +++ b/scripts/performance/base-package.json @@ -25,11 +25,11 @@ }, "scripts": { "clean": "theia clean", - "build": "yarn compile && yarn bundle", + "build": "yarn -s compile && yarn -s bundle", "bundle": "theia build --mode development", "compile": "tsc -b", "rebuild": "theia rebuild:{{app}} --cacheRoot ../..", - "start": "yarn rebuild && THEIA_CONFIG_DIR=./theia-config-dir theia start --plugins=local-dir:../../noPlugins --log-level=fatal" + "start": "yarn -s rebuild && THEIA_CONFIG_DIR=./theia-config-dir theia start --plugins=local-dir:../../noPlugins --log-level=fatal" }, "devDependencies": { "@theia/cli": "{{version}}" diff --git a/tsconfig.json b/tsconfig.json index d980c388814b0..7317e62596ff7 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -16,7 +16,7 @@ "path": "dev-packages/cli" }, { - "path": "dev-packages/eslint-plugin" + "path": "dev-packages/ffmpeg" }, { "path": "dev-packages/localization-manager" @@ -24,6 +24,12 @@ { "path": "dev-packages/ovsx-client" }, + { + "path": "dev-packages/private-eslint-plugin" + }, + { + "path": "dev-packages/private-re-exports" + }, { "path": "examples/api-samples" }, diff --git a/yarn.lock b/yarn.lock index 0a33fb80848fc..cb0cec7d42b4b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9,32 +9,32 @@ dependencies: "@babel/highlight" "^7.10.4" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.0.tgz#0dfc80309beec8411e65e706461c408b0bb9b431" - integrity sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" + integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== dependencies: - "@babel/highlight" "^7.16.0" + "@babel/highlight" "^7.16.7" -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.0", "@babel/compat-data@^7.16.4": - version "7.16.4" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.16.4.tgz#081d6bbc336ec5c2435c6346b2ae1fb98b5ac68e" - integrity sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q== +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.4", "@babel/compat-data@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.16.8.tgz#31560f9f29fdf1868de8cb55049538a1b9732a60" + integrity sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q== "@babel/core@^7.10.0", "@babel/core@^7.7.5": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.16.0.tgz#c4ff44046f5fe310525cc9eb4ef5147f0c5374d4" - integrity sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ== - dependencies: - "@babel/code-frame" "^7.16.0" - "@babel/generator" "^7.16.0" - "@babel/helper-compilation-targets" "^7.16.0" - "@babel/helper-module-transforms" "^7.16.0" - "@babel/helpers" "^7.16.0" - "@babel/parser" "^7.16.0" - "@babel/template" "^7.16.0" - "@babel/traverse" "^7.16.0" - "@babel/types" "^7.16.0" + version "7.16.10" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.16.10.tgz#ebd034f8e7ac2b6bfcdaa83a161141a646f74b50" + integrity sha512-pbiIdZbCiMx/MM6toR+OfXarYix3uz0oVsnNtfdAGTcCTu3w/JGF8JhirevXLBJUu0WguSZI12qpKnx7EeMyLA== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.16.8" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helpers" "^7.16.7" + "@babel/parser" "^7.16.10" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.10" + "@babel/types" "^7.16.8" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -42,64 +42,65 @@ semver "^6.3.0" source-map "^0.5.0" -"@babel/generator@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.0.tgz#d40f3d1d5075e62d3500bccb67f3daa8a95265b2" - integrity sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew== +"@babel/generator@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.8.tgz#359d44d966b8cd059d543250ce79596f792f2ebe" + integrity sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.16.8" jsesc "^2.5.1" source-map "^0.5.0" -"@babel/helper-annotate-as-pure@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz#9a1f0ebcda53d9a2d00108c4ceace6a5d5f1f08d" - integrity sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg== +"@babel/helper-annotate-as-pure@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862" + integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.16.7" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.0.tgz#f1a686b92da794020c26582eb852e9accd0d7882" - integrity sha512-9KuleLT0e77wFUku6TUkqZzCEymBdtuQQ27MhEKzf9UOOJu3cYj98kyaDAzxpC7lV6DGiZFuC8XqDsq8/Kl6aQ== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz#38d138561ea207f0f69eb1626a418e4f7e6a580b" + integrity sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA== dependencies: - "@babel/helper-explode-assignable-expression" "^7.16.0" - "@babel/types" "^7.16.0" + "@babel/helper-explode-assignable-expression" "^7.16.7" + "@babel/types" "^7.16.7" -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.0", "@babel/helper-compilation-targets@^7.16.3": - version "7.16.3" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.3.tgz#5b480cd13f68363df6ec4dc8ac8e2da11363cbf0" - integrity sha512-vKsoSQAyBmxS35JUOOt+07cLc6Nk/2ljLIHwmq2/NM6hdioUaqEXq/S+nXvbvXbZkNDlWOymPanJGOc4CBjSJA== +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz#06e66c5f299601e6c7da350049315e83209d551b" + integrity sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA== dependencies: - "@babel/compat-data" "^7.16.0" - "@babel/helper-validator-option" "^7.14.5" + "@babel/compat-data" "^7.16.4" + "@babel/helper-validator-option" "^7.16.7" browserslist "^4.17.5" semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.0.tgz#090d4d166b342a03a9fec37ef4fd5aeb9c7c6a4b" - integrity sha512-XLwWvqEaq19zFlF5PTgOod4bUA+XbkR4WLQBct1bkzmxJGB0ZEJaoKF4c8cgH9oBtCDuYJ8BP5NB9uFiEgO5QA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.0" - "@babel/helper-function-name" "^7.16.0" - "@babel/helper-member-expression-to-functions" "^7.16.0" - "@babel/helper-optimise-call-expression" "^7.16.0" - "@babel/helper-replace-supers" "^7.16.0" - "@babel/helper-split-export-declaration" "^7.16.0" - -"@babel/helper-create-regexp-features-plugin@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.0.tgz#06b2348ce37fccc4f5e18dcd8d75053f2a7c44ff" - integrity sha512-3DyG0zAFAZKcOp7aVr33ddwkxJ0Z0Jr5V99y3I690eYLpukJsJvAbzTy1ewoCqsML8SbIrjH14Jc/nSQ4TvNPA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.0" +"@babel/helper-create-class-features-plugin@^7.16.10", "@babel/helper-create-class-features-plugin@^7.16.7": + version "7.16.10" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.10.tgz#8a6959b9cc818a88815ba3c5474619e9c0f2c21c" + integrity sha512-wDeej0pu3WN/ffTxMNCPW5UCiOav8IcLRxSIyp/9+IF2xJUM9h/OYjg0IJLHaL6F8oU8kqMz9nc1vryXhMsgXg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-member-expression-to-functions" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + +"@babel/helper-create-regexp-features-plugin@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.7.tgz#0cb82b9bac358eb73bfbd73985a776bfa6b14d48" + integrity sha512-fk5A6ymfp+O5+p2yCkXAu5Kyj6v0xh0RBeNcAkYUMDvvAAoxvSKXn+Jb37t/yWFiQVDFK1ELpUTD8/aLhCPu+g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" regexpu-core "^4.7.1" -"@babel/helper-define-polyfill-provider@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.0.tgz#c5b10cf4b324ff840140bb07e05b8564af2ae971" - integrity sha512-7hfT8lUljl/tM3h+izTX/pO3W3frz2ok6Pk+gzys8iJqDfZrZy2pXjRTZAvG2YmfHun1X4q8/UZRLatMfqc5Tg== +"@babel/helper-define-polyfill-provider@^0.3.1": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz#52411b445bdb2e676869e5a74960d2d3826d2665" + integrity sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA== dependencies: "@babel/helper-compilation-targets" "^7.13.0" "@babel/helper-module-imports" "^7.12.13" @@ -110,101 +111,109 @@ resolve "^1.14.2" semver "^6.1.2" -"@babel/helper-explode-assignable-expression@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.0.tgz#753017337a15f46f9c09f674cff10cee9b9d7778" - integrity sha512-Hk2SLxC9ZbcOhLpg/yMznzJ11W++lg5GMbxt1ev6TXUiJB0N42KPC+7w8a+eWGuqDnUYuwStJoZHM7RgmIOaGQ== +"@babel/helper-environment-visitor@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz#ff484094a839bde9d89cd63cba017d7aae80ecd7" + integrity sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.16.7" -"@babel/helper-function-name@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz#b7dd0797d00bbfee4f07e9c4ea5b0e30c8bb1481" - integrity sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog== +"@babel/helper-explode-assignable-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz#12a6d8522fdd834f194e868af6354e8650242b7a" + integrity sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ== dependencies: - "@babel/helper-get-function-arity" "^7.16.0" - "@babel/template" "^7.16.0" - "@babel/types" "^7.16.0" + "@babel/types" "^7.16.7" -"@babel/helper-get-function-arity@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz#0088c7486b29a9cb5d948b1a1de46db66e089cfa" - integrity sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ== +"@babel/helper-function-name@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz#f1ec51551fb1c8956bc8dd95f38523b6cf375f8f" + integrity sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA== dependencies: - "@babel/types" "^7.16.0" + "@babel/helper-get-function-arity" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/types" "^7.16.7" -"@babel/helper-hoist-variables@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz#4c9023c2f1def7e28ff46fc1dbcd36a39beaa81a" - integrity sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg== +"@babel/helper-get-function-arity@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz#ea08ac753117a669f1508ba06ebcc49156387419" + integrity sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.16.7" -"@babel/helper-member-expression-to-functions@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz#29287040efd197c77636ef75188e81da8bccd5a4" - integrity sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ== +"@babel/helper-hoist-variables@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" + integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.16.7" -"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz#90538e60b672ecf1b448f5f4f5433d37e79a3ec3" - integrity sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg== +"@babel/helper-member-expression-to-functions@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz#42b9ca4b2b200123c3b7e726b0ae5153924905b0" + integrity sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.16.7" -"@babel/helper-module-transforms@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz#1c82a8dd4cb34577502ebd2909699b194c3e9bb5" - integrity sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA== - dependencies: - "@babel/helper-module-imports" "^7.16.0" - "@babel/helper-replace-supers" "^7.16.0" - "@babel/helper-simple-access" "^7.16.0" - "@babel/helper-split-export-declaration" "^7.16.0" - "@babel/helper-validator-identifier" "^7.15.7" - "@babel/template" "^7.16.0" - "@babel/traverse" "^7.16.0" - "@babel/types" "^7.16.0" +"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" + integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== + dependencies: + "@babel/types" "^7.16.7" -"@babel/helper-optimise-call-expression@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz#cecdb145d70c54096b1564f8e9f10cd7d193b338" - integrity sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw== +"@babel/helper-module-transforms@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz#7665faeb721a01ca5327ddc6bba15a5cb34b6a41" + integrity sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng== dependencies: - "@babel/types" "^7.16.0" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-simple-access" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/helper-validator-identifier" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.7" + "@babel/types" "^7.16.7" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" - integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== +"@babel/helper-optimise-call-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz#a34e3560605abbd31a18546bd2aad3e6d9a174f2" + integrity sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w== + dependencies: + "@babel/types" "^7.16.7" -"@babel/helper-remap-async-to-generator@^7.16.0", "@babel/helper-remap-async-to-generator@^7.16.4": - version "7.16.4" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.4.tgz#5d7902f61349ff6b963e07f06a389ce139fbfe6e" - integrity sha512-vGERmmhR+s7eH5Y/cp8PCVzj4XEjerq8jooMfxFdA5xVtAk9Sh4AQsrWgiErUEBjtGrBtOFKDUcWQFW4/dFwMA== +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5" + integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== + +"@babel/helper-remap-async-to-generator@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz#29ffaade68a367e2ed09c90901986918d25e57e3" + integrity sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.0" - "@babel/helper-wrap-function" "^7.16.0" - "@babel/types" "^7.16.0" + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-wrap-function" "^7.16.8" + "@babel/types" "^7.16.8" -"@babel/helper-replace-supers@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz#73055e8d3cf9bcba8ddb55cad93fedc860f68f17" - integrity sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA== +"@babel/helper-replace-supers@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz#e9f5f5f32ac90429c1a4bdec0f231ef0c2838ab1" + integrity sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw== dependencies: - "@babel/helper-member-expression-to-functions" "^7.16.0" - "@babel/helper-optimise-call-expression" "^7.16.0" - "@babel/traverse" "^7.16.0" - "@babel/types" "^7.16.0" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-member-expression-to-functions" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/traverse" "^7.16.7" + "@babel/types" "^7.16.7" -"@babel/helper-simple-access@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz#21d6a27620e383e37534cf6c10bba019a6f90517" - integrity sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw== +"@babel/helper-simple-access@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz#d656654b9ea08dbb9659b69d61063ccd343ff0f7" + integrity sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.16.7" "@babel/helper-skip-transparent-expression-wrappers@^7.16.0": version "7.16.0" @@ -213,199 +222,199 @@ dependencies: "@babel/types" "^7.16.0" -"@babel/helper-split-export-declaration@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz#29672f43663e936df370aaeb22beddb3baec7438" - integrity sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw== +"@babel/helper-split-export-declaration@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" + integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== dependencies: - "@babel/types" "^7.16.0" + "@babel/types" "^7.16.7" -"@babel/helper-validator-identifier@^7.15.7": - version "7.15.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" - integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w== +"@babel/helper-validator-identifier@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" + integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== -"@babel/helper-validator-option@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" - integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow== +"@babel/helper-validator-option@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" + integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== -"@babel/helper-wrap-function@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.16.0.tgz#b3cf318afce774dfe75b86767cd6d68f3482e57c" - integrity sha512-VVMGzYY3vkWgCJML+qVLvGIam902mJW0FvT7Avj1zEe0Gn7D93aWdLblYARTxEw+6DhZmtzhBM2zv0ekE5zg1g== +"@babel/helper-wrap-function@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz#58afda087c4cd235de92f7ceedebca2c41274200" + integrity sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw== dependencies: - "@babel/helper-function-name" "^7.16.0" - "@babel/template" "^7.16.0" - "@babel/traverse" "^7.16.0" - "@babel/types" "^7.16.0" + "@babel/helper-function-name" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.8" + "@babel/types" "^7.16.8" -"@babel/helpers@^7.16.0": - version "7.16.3" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.16.3.tgz#27fc64f40b996e7074dc73128c3e5c3e7f55c43c" - integrity sha512-Xn8IhDlBPhvYTvgewPKawhADichOsbkZuzN7qz2BusOM0brChsyXMDJvldWaYMMUNiCQdQzNEioXTp3sC8Nt8w== +"@babel/helpers@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.16.7.tgz#7e3504d708d50344112767c3542fc5e357fffefc" + integrity sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw== dependencies: - "@babel/template" "^7.16.0" - "@babel/traverse" "^7.16.3" - "@babel/types" "^7.16.0" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.7" + "@babel/types" "^7.16.7" -"@babel/highlight@^7.10.4", "@babel/highlight@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.0.tgz#6ceb32b2ca4b8f5f361fb7fd821e3fddf4a1725a" - integrity sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g== +"@babel/highlight@^7.10.4", "@babel/highlight@^7.16.7": + version "7.16.10" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.10.tgz#744f2eb81579d6eea753c227b0f570ad785aba88" + integrity sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw== dependencies: - "@babel/helper-validator-identifier" "^7.15.7" + "@babel/helper-validator-identifier" "^7.16.7" chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.16.0", "@babel/parser@^7.16.3": - version "7.16.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.4.tgz#d5f92f57cf2c74ffe9b37981c0e72fee7311372e" - integrity sha512-6V0qdPUaiVHH3RtZeLIsc+6pDhbYzHR8ogA8w+f+Wc77DuXto19g2QUwveINoS34Uw+W8/hQDGJCx+i4n7xcng== +"@babel/parser@^7.16.10", "@babel/parser@^7.16.7": + version "7.16.10" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.10.tgz#aba1b1cb9696a24a19f59c41af9cf17d1c716a88" + integrity sha512-Sm/S9Or6nN8uiFsQU1yodyDW3MWXQhFeqzMPM+t8MJjM+pLsnFVxFZzkpXKvUXh+Gz9cbMoYYs484+Jw/NTEFQ== -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.2": - version "7.16.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.2.tgz#2977fca9b212db153c195674e57cfab807733183" - integrity sha512-h37CvpLSf8gb2lIJ2CgC3t+EjFbi0t8qS7LCS1xcJIlEXE4czlofwaW7W1HA8zpgOCzI9C1nmoqNR1zWkk0pQg== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz#4eda6d6c2a0aa79c70fa7b6da67763dfe2141050" + integrity sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.0.tgz#358972eaab006f5eb0826183b0c93cbcaf13e1e2" - integrity sha512-4tcFwwicpWTrpl9qjf7UsoosaArgImF85AxqCRZlgc3IQDvkUHjJpruXAL58Wmj+T6fypWTC/BakfEkwIL/pwA== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz#cc001234dfc139ac45f6bcf801866198c8c72ff9" + integrity sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" - "@babel/plugin-proposal-optional-chaining" "^7.16.0" + "@babel/plugin-proposal-optional-chaining" "^7.16.7" -"@babel/plugin-proposal-async-generator-functions@^7.16.4": - version "7.16.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.4.tgz#e606eb6015fec6fa5978c940f315eae4e300b081" - integrity sha512-/CUekqaAaZCQHleSK/9HajvcD/zdnJiKRiuUFq8ITE+0HsPzquf53cpFiqAwl/UfmJbR6n5uGPQSPdrmKOvHHg== +"@babel/plugin-proposal-async-generator-functions@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz#3bdd1ebbe620804ea9416706cd67d60787504bc8" + integrity sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-remap-async-to-generator" "^7.16.4" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-remap-async-to-generator" "^7.16.8" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-proposal-class-properties@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.0.tgz#c029618267ddebc7280fa286e0f8ca2a278a2d1a" - integrity sha512-mCF3HcuZSY9Fcx56Lbn+CGdT44ioBMMvjNVldpKtj8tpniETdLjnxdHI1+sDWXIM1nNt+EanJOZ3IG9lzVjs7A== +"@babel/plugin-proposal-class-properties@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz#925cad7b3b1a2fcea7e59ecc8eb5954f961f91b0" + integrity sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww== dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-proposal-class-static-block@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.0.tgz#5296942c564d8144c83eea347d0aa8a0b89170e7" - integrity sha512-mAy3sdcY9sKAkf3lQbDiv3olOfiLqI51c9DR9b19uMoR2Z6r5pmGl7dfNFqEvqOyqbf1ta4lknK4gc5PJn3mfA== +"@babel/plugin-proposal-class-static-block@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.7.tgz#712357570b612106ef5426d13dc433ce0f200c2a" + integrity sha512-dgqJJrcZoG/4CkMopzhPJjGxsIe9A8RlkQLnL/Vhhx8AA9ZuaRwGSlscSh42hazc7WSrya/IK7mTeoF0DP9tEw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-proposal-dynamic-import@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.0.tgz#783eca61d50526202f9b296095453977e88659f1" - integrity sha512-QGSA6ExWk95jFQgwz5GQ2Dr95cf7eI7TKutIXXTb7B1gCLTCz5hTjFTQGfLFBBiC5WSNi7udNwWsqbbMh1c4yQ== +"@babel/plugin-proposal-dynamic-import@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz#c19c897eaa46b27634a00fee9fb7d829158704b2" + integrity sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-proposal-export-namespace-from@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.0.tgz#9c01dee40b9d6b847b656aaf4a3976a71740f222" - integrity sha512-CjI4nxM/D+5wCnhD11MHB1AwRSAYeDT+h8gCdcVJZ/OK7+wRzFsf7PFPWVpVpNRkHMmMkQWAHpTq+15IXQ1diA== +"@babel/plugin-proposal-export-namespace-from@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz#09de09df18445a5786a305681423ae63507a6163" + integrity sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-proposal-json-strings@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.0.tgz#cae35a95ed1d2a7fa29c4dc41540b84a72e9ab25" - integrity sha512-kouIPuiv8mSi5JkEhzApg5Gn6hFyKPnlkO0a9YSzqRurH8wYzSlf6RJdzluAsbqecdW5pBvDJDfyDIUR/vLxvg== +"@babel/plugin-proposal-json-strings@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz#9732cb1d17d9a2626a08c5be25186c195b6fa6e8" + integrity sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-proposal-logical-assignment-operators@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.0.tgz#a711b8ceb3ffddd3ef88d3a49e86dbd3cc7db3fd" - integrity sha512-pbW0fE30sVTYXXm9lpVQQ/Vc+iTeQKiXlaNRZPPN2A2VdlWyAtsUrsQ3xydSlDW00TFMK7a8m3cDTkBF5WnV3Q== +"@babel/plugin-proposal-logical-assignment-operators@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz#be23c0ba74deec1922e639832904be0bea73cdea" + integrity sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.0.tgz#44e1cce08fe2427482cf446a91bb451528ed0596" - integrity sha512-3bnHA8CAFm7cG93v8loghDYyQ8r97Qydf63BeYiGgYbjKKB/XP53W15wfRC7dvKfoiJ34f6Rbyyx2btExc8XsQ== +"@babel/plugin-proposal-nullish-coalescing-operator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz#141fc20b6857e59459d430c850a0011e36561d99" + integrity sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-proposal-numeric-separator@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.0.tgz#5d418e4fbbf8b9b7d03125d3a52730433a373734" - integrity sha512-FAhE2I6mjispy+vwwd6xWPyEx3NYFS13pikDBWUAFGZvq6POGs5eNchw8+1CYoEgBl9n11I3NkzD7ghn25PQ9Q== +"@babel/plugin-proposal-numeric-separator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz#d6b69f4af63fb38b6ca2558442a7fb191236eba9" + integrity sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.0.tgz#5fb32f6d924d6e6712810362a60e12a2609872e6" - integrity sha512-LU/+jp89efe5HuWJLmMmFG0+xbz+I2rSI7iLc1AlaeSMDMOGzWlc5yJrMN1d04osXN4sSfpo4O+azkBNBes0jg== +"@babel/plugin-proposal-object-rest-spread@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.7.tgz#94593ef1ddf37021a25bdcb5754c4a8d534b01d8" + integrity sha512-3O0Y4+dw94HA86qSg9IHfyPktgR7q3gpNVAeiKQd+8jBKFaU5NQS1Yatgo4wY+UFNuLjvxcSmzcsHqrhgTyBUA== dependencies: - "@babel/compat-data" "^7.16.0" - "@babel/helper-compilation-targets" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/compat-data" "^7.16.4" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.16.0" + "@babel/plugin-transform-parameters" "^7.16.7" -"@babel/plugin-proposal-optional-catch-binding@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.0.tgz#5910085811ab4c28b00d6ebffa4ab0274d1e5f16" - integrity sha512-kicDo0A/5J0nrsCPbn89mTG3Bm4XgYi0CZtvex9Oyw7gGZE3HXGD0zpQNH+mo+tEfbo8wbmMvJftOwpmPy7aVw== +"@babel/plugin-proposal-optional-catch-binding@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz#c623a430674ffc4ab732fd0a0ae7722b67cb74cf" + integrity sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-proposal-optional-chaining@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.0.tgz#56dbc3970825683608e9efb55ea82c2a2d6c8dc0" - integrity sha512-Y4rFpkZODfHrVo70Uaj6cC1JJOt3Pp0MdWSwIKtb8z1/lsjl9AmnB7ErRFV+QNGIfcY1Eruc2UMx5KaRnXjMyg== +"@babel/plugin-proposal-optional-chaining@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz#7cd629564724816c0e8a969535551f943c64c39a" + integrity sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-proposal-private-methods@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.0.tgz#b4dafb9c717e4301c5776b30d080d6383c89aff6" - integrity sha512-IvHmcTHDFztQGnn6aWq4t12QaBXTKr1whF/dgp9kz84X6GUcwq9utj7z2wFCUfeOup/QKnOlt2k0zxkGFx9ubg== +"@babel/plugin-proposal-private-methods@^7.16.11": + version "7.16.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz#e8df108288555ff259f4527dbe84813aac3a1c50" + integrity sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-create-class-features-plugin" "^7.16.10" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-proposal-private-property-in-object@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.0.tgz#69e935b2c5c79d2488112d886f0c4e2790fee76f" - integrity sha512-3jQUr/HBbMVZmi72LpjQwlZ55i1queL8KcDTQEkAHihttJnAPrcvG9ZNXIfsd2ugpizZo595egYV6xy+pv4Ofw== +"@babel/plugin-proposal-private-property-in-object@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz#b0b8cef543c2c3d57e59e2c611994861d46a3fce" + integrity sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.0" - "@babel/helper-create-class-features-plugin" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-proposal-unicode-property-regex@^7.16.0", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.0.tgz#890482dfc5ea378e42e19a71e709728cabf18612" - integrity sha512-ti7IdM54NXv29cA4+bNNKEMS4jLMCbJgl+Drv+FgYy0erJLAxNAIXcNjNjrRZEcWq0xJHsNVwQezskMFpF8N9g== +"@babel/plugin-proposal-unicode-property-regex@^7.16.7", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz#635d18eb10c6214210ffc5ff4932552de08188a2" + integrity sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -505,292 +514,294 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-arrow-functions@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.0.tgz#951706f8b449c834ed07bd474c0924c944b95a8e" - integrity sha512-vIFb5250Rbh7roWARvCLvIJ/PtAU5Lhv7BtZ1u24COwpI9Ypjsh+bZcKk6rlIyalK+r0jOc1XQ8I4ovNxNrWrA== +"@babel/plugin-transform-arrow-functions@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz#44125e653d94b98db76369de9c396dc14bef4154" + integrity sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-async-to-generator@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.0.tgz#df12637f9630ddfa0ef9d7a11bc414d629d38604" - integrity sha512-PbIr7G9kR8tdH6g8Wouir5uVjklETk91GMVSUq+VaOgiinbCkBP6Q7NN/suM/QutZkMJMvcyAriogcYAdhg8Gw== +"@babel/plugin-transform-async-to-generator@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz#b83dff4b970cf41f1b819f8b49cc0cfbaa53a808" + integrity sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg== dependencies: - "@babel/helper-module-imports" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-remap-async-to-generator" "^7.16.0" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-remap-async-to-generator" "^7.16.8" -"@babel/plugin-transform-block-scoped-functions@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.0.tgz#c618763233ad02847805abcac4c345ce9de7145d" - integrity sha512-V14As3haUOP4ZWrLJ3VVx5rCnrYhMSHN/jX7z6FAt5hjRkLsb0snPCmJwSOML5oxkKO4FNoNv7V5hw/y2bjuvg== +"@babel/plugin-transform-block-scoped-functions@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz#4d0d57d9632ef6062cdf354bb717102ee042a620" + integrity sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-block-scoping@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.0.tgz#bcf433fb482fe8c3d3b4e8a66b1c4a8e77d37c16" - integrity sha512-27n3l67/R3UrXfizlvHGuTwsRIFyce3D/6a37GRxn28iyTPvNXaW4XvznexRh1zUNLPjbLL22Id0XQElV94ruw== +"@babel/plugin-transform-block-scoping@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz#f50664ab99ddeaee5bc681b8f3a6ea9d72ab4f87" + integrity sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-classes@^7.10.0", "@babel/plugin-transform-classes@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.0.tgz#54cf5ff0b2242c6573d753cd4bfc7077a8b282f5" - integrity sha512-HUxMvy6GtAdd+GKBNYDWCIA776byUQH8zjnfjxwT1P1ARv/wFu8eBDpmXQcLS/IwRtrxIReGiplOwMeyO7nsDQ== +"@babel/plugin-transform-classes@^7.10.0", "@babel/plugin-transform-classes@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz#8f4b9562850cd973de3b498f1218796eb181ce00" + integrity sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.0" - "@babel/helper-function-name" "^7.16.0" - "@babel/helper-optimise-call-expression" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-replace-supers" "^7.16.0" - "@babel/helper-split-export-declaration" "^7.16.0" + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.0.tgz#e0c385507d21e1b0b076d66bed6d5231b85110b7" - integrity sha512-63l1dRXday6S8V3WFY5mXJwcRAnPYxvFfTlt67bwV1rTyVTM5zrp0DBBb13Kl7+ehkCVwIZPumPpFP/4u70+Tw== +"@babel/plugin-transform-computed-properties@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz#66dee12e46f61d2aae7a73710f591eb3df616470" + integrity sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-destructuring@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.0.tgz#ad3d7e74584ad5ea4eadb1e6642146c590dee33c" - integrity sha512-Q7tBUwjxLTsHEoqktemHBMtb3NYwyJPTJdM+wDwb0g8PZ3kQUIzNvwD5lPaqW/p54TXBc/MXZu9Jr7tbUEUM8Q== +"@babel/plugin-transform-destructuring@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.7.tgz#ca9588ae2d63978a4c29d3f33282d8603f618e23" + integrity sha512-VqAwhTHBnu5xBVDCvrvqJbtLUa++qZaWC0Fgr2mqokBlulZARGyIvZDoqbPlPaKImQ9dKAcCzbv+ul//uqu70A== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-dotall-regex@^7.16.0", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.0.tgz#50bab00c1084b6162d0a58a818031cf57798e06f" - integrity sha512-FXlDZfQeLILfJlC6I1qyEwcHK5UpRCFkaoVyA1nk9A1L1Yu583YO4un2KsLBsu3IJb4CUbctZks8tD9xPQubLw== +"@babel/plugin-transform-dotall-regex@^7.16.7", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz#6b2d67686fab15fb6a7fd4bd895d5982cfc81241" + integrity sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-duplicate-keys@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.0.tgz#8bc2e21813e3e89e5e5bf3b60aa5fc458575a176" - integrity sha512-LIe2kcHKAZOJDNxujvmp6z3mfN6V9lJxubU4fJIGoQCkKe3Ec2OcbdlYP+vW++4MpxwG0d1wSDOJtQW5kLnkZQ== +"@babel/plugin-transform-duplicate-keys@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz#2207e9ca8f82a0d36a5a67b6536e7ef8b08823c9" + integrity sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-exponentiation-operator@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.0.tgz#a180cd2881e3533cef9d3901e48dad0fbeff4be4" - integrity sha512-OwYEvzFI38hXklsrbNivzpO3fh87skzx8Pnqi4LoSYeav0xHlueSoCJrSgTPfnbyzopo5b3YVAJkFIcUpK2wsw== +"@babel/plugin-transform-exponentiation-operator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz#efa9862ef97e9e9e5f653f6ddc7b665e8536fe9b" + integrity sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-for-of@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.0.tgz#f7abaced155260e2461359bbc7c7248aca5e6bd2" - integrity sha512-5QKUw2kO+GVmKr2wMYSATCTTnHyscl6sxFRAY+rvN7h7WB0lcG0o4NoV6ZQU32OZGVsYUsfLGgPQpDFdkfjlJQ== +"@babel/plugin-transform-for-of@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz#649d639d4617dff502a9a158c479b3b556728d8c" + integrity sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-function-name@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.0.tgz#02e3699c284c6262236599f751065c5d5f1f400e" - integrity sha512-lBzMle9jcOXtSOXUpc7tvvTpENu/NuekNJVova5lCCWCV9/U1ho2HH2y0p6mBg8fPm/syEAbfaaemYGOHCY3mg== +"@babel/plugin-transform-function-name@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz#5ab34375c64d61d083d7d2f05c38d90b97ec65cf" + integrity sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA== dependencies: - "@babel/helper-function-name" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-literals@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.0.tgz#79711e670ffceb31bd298229d50f3621f7980cac" - integrity sha512-gQDlsSF1iv9RU04clgXqRjrPyyoJMTclFt3K1cjLmTKikc0s/6vE3hlDeEVC71wLTRu72Fq7650kABrdTc2wMQ== +"@babel/plugin-transform-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz#254c9618c5ff749e87cb0c0cef1a0a050c0bdab1" + integrity sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-member-expression-literals@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.0.tgz#5251b4cce01eaf8314403d21aedb269d79f5e64b" - integrity sha512-WRpw5HL4Jhnxw8QARzRvwojp9MIE7Tdk3ez6vRyUk1MwgjJN0aNpRoXainLR5SgxmoXx/vsXGZ6OthP6t/RbUg== +"@babel/plugin-transform-member-expression-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz#6e5dcf906ef8a098e630149d14c867dd28f92384" + integrity sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-modules-amd@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.0.tgz#09abd41e18dcf4fd479c598c1cef7bd39eb1337e" - integrity sha512-rWFhWbCJ9Wdmzln1NmSCqn7P0RAD+ogXG/bd9Kg5c7PKWkJtkiXmYsMBeXjDlzHpVTJ4I/hnjs45zX4dEv81xw== +"@babel/plugin-transform-modules-amd@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz#b28d323016a7daaae8609781d1f8c9da42b13186" + integrity sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g== dependencies: - "@babel/helper-module-transforms" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.0.tgz#add58e638c8ddc4875bd9a9ecb5c594613f6c922" - integrity sha512-Dzi+NWqyEotgzk/sb7kgQPJQf7AJkQBWsVp1N6JWc1lBVo0vkElUnGdr1PzUBmfsCCN5OOFya3RtpeHk15oLKQ== +"@babel/plugin-transform-modules-commonjs@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz#cdee19aae887b16b9d331009aa9a219af7c86afe" + integrity sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA== dependencies: - "@babel/helper-module-transforms" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-simple-access" "^7.16.0" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-simple-access" "^7.16.7" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.0.tgz#a92cf240afeb605f4ca16670453024425e421ea4" - integrity sha512-yuGBaHS3lF1m/5R+6fjIke64ii5luRUg97N2wr+z1sF0V+sNSXPxXDdEEL/iYLszsN5VKxVB1IPfEqhzVpiqvg== +"@babel/plugin-transform-modules-systemjs@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz#887cefaef88e684d29558c2b13ee0563e287c2d7" + integrity sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw== dependencies: - "@babel/helper-hoist-variables" "^7.16.0" - "@babel/helper-module-transforms" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-validator-identifier" "^7.15.7" + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-identifier" "^7.16.7" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-umd@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.0.tgz#195f26c2ad6d6a391b70880effce18ce625e06a7" - integrity sha512-nx4f6no57himWiHhxDM5pjwhae5vLpTK2zCnDH8+wNLJy0TVER/LJRHl2bkt6w9Aad2sPD5iNNoUpY3X9sTGDg== +"@babel/plugin-transform-modules-umd@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz#23dad479fa585283dbd22215bff12719171e7618" + integrity sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ== dependencies: - "@babel/helper-module-transforms" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-named-capturing-groups-regex@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.0.tgz#d3db61cc5d5b97986559967cd5ea83e5c32096ca" - integrity sha512-LogN88uO+7EhxWc8WZuQ8vxdSyVGxhkh8WTC3tzlT8LccMuQdA81e9SGV6zY7kY2LjDhhDOFdQVxdGwPyBCnvg== +"@babel/plugin-transform-named-capturing-groups-regex@^7.16.8": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz#7f860e0e40d844a02c9dcf9d84965e7dfd666252" + integrity sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.0" + "@babel/helper-create-regexp-features-plugin" "^7.16.7" -"@babel/plugin-transform-new-target@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.0.tgz#af823ab576f752215a49937779a41ca65825ab35" - integrity sha512-fhjrDEYv2DBsGN/P6rlqakwRwIp7rBGLPbrKxwh7oVt5NNkIhZVOY2GRV+ULLsQri1bDqwDWnU3vhlmx5B2aCw== +"@babel/plugin-transform-new-target@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz#9967d89a5c243818e0800fdad89db22c5f514244" + integrity sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-object-super@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.0.tgz#fb20d5806dc6491a06296ac14ea8e8d6fedda72b" - integrity sha512-fds+puedQHn4cPLshoHcR1DTMN0q1V9ou0mUjm8whx9pGcNvDrVVrgw+KJzzCaiTdaYhldtrUps8DWVMgrSEyg== +"@babel/plugin-transform-object-super@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz#ac359cf8d32cf4354d27a46867999490b6c32a94" + integrity sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-replace-supers" "^7.16.0" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" -"@babel/plugin-transform-parameters@^7.16.0", "@babel/plugin-transform-parameters@^7.16.3": - version "7.16.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.3.tgz#fa9e4c874ee5223f891ee6fa8d737f4766d31d15" - integrity sha512-3MaDpJrOXT1MZ/WCmkOFo7EtmVVC8H4EUZVrHvFOsmwkk4lOjQj8rzv8JKUZV4YoQKeoIgk07GO+acPU9IMu/w== +"@babel/plugin-transform-parameters@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz#a1721f55b99b736511cb7e0152f61f17688f331f" + integrity sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-property-literals@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.0.tgz#a95c552189a96a00059f6776dc4e00e3690c78d1" - integrity sha512-XLldD4V8+pOqX2hwfWhgwXzGdnDOThxaNTgqagOcpBgIxbUvpgU2FMvo5E1RyHbk756WYgdbS0T8y0Cj9FKkWQ== +"@babel/plugin-transform-property-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz#2dadac85155436f22c696c4827730e0fe1057a55" + integrity sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-regenerator@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.0.tgz#eaee422c84b0232d03aea7db99c97deeaf6125a4" - integrity sha512-JAvGxgKuwS2PihiSFaDrp94XOzzTUeDeOQlcKzVAyaPap7BnZXK/lvMDiubkPTdotPKOIZq9xWXWnggUMYiExg== +"@babel/plugin-transform-regenerator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz#9e7576dc476cb89ccc5096fff7af659243b4adeb" + integrity sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q== dependencies: regenerator-transform "^0.14.2" -"@babel/plugin-transform-reserved-words@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.0.tgz#fff4b9dcb19e12619394bda172d14f2d04c0379c" - integrity sha512-Dgs8NNCehHSvXdhEhln8u/TtJxfVwGYCgP2OOr5Z3Ar+B+zXicEOKNTyc+eca2cuEOMtjW6m9P9ijOt8QdqWkg== +"@babel/plugin-transform-reserved-words@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz#1d798e078f7c5958eec952059c460b220a63f586" + integrity sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-transform-runtime@^7.10.0": - version "7.16.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.16.4.tgz#f9ba3c7034d429c581e1bd41b4952f3db3c2c7e8" - integrity sha512-pru6+yHANMTukMtEZGC4fs7XPwg35v8sj5CIEmE+gEkFljFiVJxEWxx/7ZDkTK+iZRYo1bFXBtfIN95+K3cJ5A== + version "7.16.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.16.10.tgz#53d9fd3496daedce1dd99639097fa5d14f4c7c2c" + integrity sha512-9nwTiqETv2G7xI4RvXHNfpGdr8pAA+Q/YtN3yLK7OoK7n9OibVm/xymJ838a9A6E/IciOLPj82lZk0fW6O4O7w== dependencies: - "@babel/helper-module-imports" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" babel-plugin-polyfill-corejs2 "^0.3.0" - babel-plugin-polyfill-corejs3 "^0.4.0" + babel-plugin-polyfill-corejs3 "^0.5.0" babel-plugin-polyfill-regenerator "^0.3.0" semver "^6.3.0" -"@babel/plugin-transform-shorthand-properties@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.0.tgz#090372e3141f7cc324ed70b3daf5379df2fa384d" - integrity sha512-iVb1mTcD8fuhSv3k99+5tlXu5N0v8/DPm2mO3WACLG6al1CGZH7v09HJyUb1TtYl/Z+KrM6pHSIJdZxP5A+xow== +"@babel/plugin-transform-shorthand-properties@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz#e8549ae4afcf8382f711794c0c7b6b934c5fbd2a" + integrity sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-spread@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.0.tgz#d21ca099bbd53ab307a8621e019a7bd0f40cdcfb" - integrity sha512-Ao4MSYRaLAQczZVp9/7E7QHsCuK92yHRrmVNRe/SlEJjhzivq0BSn8mEraimL8wizHZ3fuaHxKH0iwzI13GyGg== +"@babel/plugin-transform-spread@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz#a303e2122f9f12e0105daeedd0f30fb197d8ff44" + integrity sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" -"@babel/plugin-transform-sticky-regex@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.0.tgz#c35ea31a02d86be485f6aa510184b677a91738fd" - integrity sha512-/ntT2NljR9foobKk4E/YyOSwcGUXtYWv5tinMK/3RkypyNBNdhHUaq6Orw5DWq9ZcNlS03BIlEALFeQgeVAo4Q== +"@babel/plugin-transform-sticky-regex@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz#c84741d4f4a38072b9a1e2e3fd56d359552e8660" + integrity sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-template-literals@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.0.tgz#a8eced3a8e7b8e2d40ec4ec4548a45912630d302" - integrity sha512-Rd4Ic89hA/f7xUSJQk5PnC+4so50vBoBfxjdQAdvngwidM8jYIBVxBZ/sARxD4e0yMXRbJVDrYf7dyRtIIKT6Q== +"@babel/plugin-transform-template-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz#f3d1c45d28967c8e80f53666fc9c3e50618217ab" + integrity sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-typeof-symbol@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.0.tgz#8b19a244c6f8c9d668dca6a6f754ad6ead1128f2" - integrity sha512-++V2L8Bdf4vcaHi2raILnptTBjGEFxn5315YU+e8+EqXIucA+q349qWngCLpUYqqv233suJ6NOienIVUpS9cqg== +"@babel/plugin-transform-typeof-symbol@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz#9cdbe622582c21368bd482b660ba87d5545d4f7e" + integrity sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-unicode-escapes@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.0.tgz#1a354064b4c45663a32334f46fa0cf6100b5b1f3" - integrity sha512-VFi4dhgJM7Bpk8lRc5CMaRGlKZ29W9C3geZjt9beuzSUrlJxsNwX7ReLwaL6WEvsOf2EQkyIJEPtF8EXjB/g2A== +"@babel/plugin-transform-unicode-escapes@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz#da8717de7b3287a2c6d659750c964f302b31ece3" + integrity sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q== dependencies: - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-unicode-regex@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.0.tgz#293b80950177c8c85aede87cef280259fb995402" - integrity sha512-jHLK4LxhHjvCeZDWyA9c+P9XH1sOxRd1RO9xMtDVRAOND/PczPqizEtVdx4TQF/wyPaewqpT+tgQFYMnN/P94A== +"@babel/plugin-transform-unicode-regex@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz#0f7aa4a501198976e25e82702574c34cfebe9ef2" + integrity sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.0" - "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" "@babel/preset-env@^7.10.0": - version "7.16.4" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.16.4.tgz#4f6ec33b2a3fe72d6bfdcdf3859500232563a2e3" - integrity sha512-v0QtNd81v/xKj4gNKeuAerQ/azeNn/G1B1qMLeXOcV8+4TWlD2j3NV1u8q29SDFBXx/NBq5kyEAO+0mpRgacjA== - dependencies: - "@babel/compat-data" "^7.16.4" - "@babel/helper-compilation-targets" "^7.16.3" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-validator-option" "^7.14.5" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.16.2" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.16.0" - "@babel/plugin-proposal-async-generator-functions" "^7.16.4" - "@babel/plugin-proposal-class-properties" "^7.16.0" - "@babel/plugin-proposal-class-static-block" "^7.16.0" - "@babel/plugin-proposal-dynamic-import" "^7.16.0" - "@babel/plugin-proposal-export-namespace-from" "^7.16.0" - "@babel/plugin-proposal-json-strings" "^7.16.0" - "@babel/plugin-proposal-logical-assignment-operators" "^7.16.0" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.0" - "@babel/plugin-proposal-numeric-separator" "^7.16.0" - "@babel/plugin-proposal-object-rest-spread" "^7.16.0" - "@babel/plugin-proposal-optional-catch-binding" "^7.16.0" - "@babel/plugin-proposal-optional-chaining" "^7.16.0" - "@babel/plugin-proposal-private-methods" "^7.16.0" - "@babel/plugin-proposal-private-property-in-object" "^7.16.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.16.0" + version "7.16.11" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.16.11.tgz#5dd88fd885fae36f88fd7c8342475c9f0abe2982" + integrity sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g== + dependencies: + "@babel/compat-data" "^7.16.8" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-option" "^7.16.7" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.16.7" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.16.7" + "@babel/plugin-proposal-async-generator-functions" "^7.16.8" + "@babel/plugin-proposal-class-properties" "^7.16.7" + "@babel/plugin-proposal-class-static-block" "^7.16.7" + "@babel/plugin-proposal-dynamic-import" "^7.16.7" + "@babel/plugin-proposal-export-namespace-from" "^7.16.7" + "@babel/plugin-proposal-json-strings" "^7.16.7" + "@babel/plugin-proposal-logical-assignment-operators" "^7.16.7" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.7" + "@babel/plugin-proposal-numeric-separator" "^7.16.7" + "@babel/plugin-proposal-object-rest-spread" "^7.16.7" + "@babel/plugin-proposal-optional-catch-binding" "^7.16.7" + "@babel/plugin-proposal-optional-chaining" "^7.16.7" + "@babel/plugin-proposal-private-methods" "^7.16.11" + "@babel/plugin-proposal-private-property-in-object" "^7.16.7" + "@babel/plugin-proposal-unicode-property-regex" "^7.16.7" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" "@babel/plugin-syntax-class-static-block" "^7.14.5" @@ -805,44 +816,44 @@ "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-transform-arrow-functions" "^7.16.0" - "@babel/plugin-transform-async-to-generator" "^7.16.0" - "@babel/plugin-transform-block-scoped-functions" "^7.16.0" - "@babel/plugin-transform-block-scoping" "^7.16.0" - "@babel/plugin-transform-classes" "^7.16.0" - "@babel/plugin-transform-computed-properties" "^7.16.0" - "@babel/plugin-transform-destructuring" "^7.16.0" - "@babel/plugin-transform-dotall-regex" "^7.16.0" - "@babel/plugin-transform-duplicate-keys" "^7.16.0" - "@babel/plugin-transform-exponentiation-operator" "^7.16.0" - "@babel/plugin-transform-for-of" "^7.16.0" - "@babel/plugin-transform-function-name" "^7.16.0" - "@babel/plugin-transform-literals" "^7.16.0" - "@babel/plugin-transform-member-expression-literals" "^7.16.0" - "@babel/plugin-transform-modules-amd" "^7.16.0" - "@babel/plugin-transform-modules-commonjs" "^7.16.0" - "@babel/plugin-transform-modules-systemjs" "^7.16.0" - "@babel/plugin-transform-modules-umd" "^7.16.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.16.0" - "@babel/plugin-transform-new-target" "^7.16.0" - "@babel/plugin-transform-object-super" "^7.16.0" - "@babel/plugin-transform-parameters" "^7.16.3" - "@babel/plugin-transform-property-literals" "^7.16.0" - "@babel/plugin-transform-regenerator" "^7.16.0" - "@babel/plugin-transform-reserved-words" "^7.16.0" - "@babel/plugin-transform-shorthand-properties" "^7.16.0" - "@babel/plugin-transform-spread" "^7.16.0" - "@babel/plugin-transform-sticky-regex" "^7.16.0" - "@babel/plugin-transform-template-literals" "^7.16.0" - "@babel/plugin-transform-typeof-symbol" "^7.16.0" - "@babel/plugin-transform-unicode-escapes" "^7.16.0" - "@babel/plugin-transform-unicode-regex" "^7.16.0" + "@babel/plugin-transform-arrow-functions" "^7.16.7" + "@babel/plugin-transform-async-to-generator" "^7.16.8" + "@babel/plugin-transform-block-scoped-functions" "^7.16.7" + "@babel/plugin-transform-block-scoping" "^7.16.7" + "@babel/plugin-transform-classes" "^7.16.7" + "@babel/plugin-transform-computed-properties" "^7.16.7" + "@babel/plugin-transform-destructuring" "^7.16.7" + "@babel/plugin-transform-dotall-regex" "^7.16.7" + "@babel/plugin-transform-duplicate-keys" "^7.16.7" + "@babel/plugin-transform-exponentiation-operator" "^7.16.7" + "@babel/plugin-transform-for-of" "^7.16.7" + "@babel/plugin-transform-function-name" "^7.16.7" + "@babel/plugin-transform-literals" "^7.16.7" + "@babel/plugin-transform-member-expression-literals" "^7.16.7" + "@babel/plugin-transform-modules-amd" "^7.16.7" + "@babel/plugin-transform-modules-commonjs" "^7.16.8" + "@babel/plugin-transform-modules-systemjs" "^7.16.7" + "@babel/plugin-transform-modules-umd" "^7.16.7" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.16.8" + "@babel/plugin-transform-new-target" "^7.16.7" + "@babel/plugin-transform-object-super" "^7.16.7" + "@babel/plugin-transform-parameters" "^7.16.7" + "@babel/plugin-transform-property-literals" "^7.16.7" + "@babel/plugin-transform-regenerator" "^7.16.7" + "@babel/plugin-transform-reserved-words" "^7.16.7" + "@babel/plugin-transform-shorthand-properties" "^7.16.7" + "@babel/plugin-transform-spread" "^7.16.7" + "@babel/plugin-transform-sticky-regex" "^7.16.7" + "@babel/plugin-transform-template-literals" "^7.16.7" + "@babel/plugin-transform-typeof-symbol" "^7.16.7" + "@babel/plugin-transform-unicode-escapes" "^7.16.7" + "@babel/plugin-transform-unicode-regex" "^7.16.7" "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.16.0" + "@babel/types" "^7.16.8" babel-plugin-polyfill-corejs2 "^0.3.0" - babel-plugin-polyfill-corejs3 "^0.4.0" + babel-plugin-polyfill-corejs3 "^0.5.0" babel-plugin-polyfill-regenerator "^0.3.0" - core-js-compat "^3.19.1" + core-js-compat "^3.20.2" semver "^6.3.0" "@babel/preset-modules@^0.1.5": @@ -857,42 +868,43 @@ esutils "^2.0.2" "@babel/runtime@^7.10.0", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7": - version "7.16.3" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.3.tgz#b86f0db02a04187a3c17caa77de69840165d42d5" - integrity sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ== + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.7.tgz#03ff99f64106588c9c403c6ecb8c3bafbbdff1fa" + integrity sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ== dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.0.tgz#d16a35ebf4cd74e202083356fab21dd89363ddd6" - integrity sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A== - dependencies: - "@babel/code-frame" "^7.16.0" - "@babel/parser" "^7.16.0" - "@babel/types" "^7.16.0" - -"@babel/traverse@^7.13.0", "@babel/traverse@^7.16.0", "@babel/traverse@^7.16.3": - version "7.16.3" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.3.tgz#f63e8a938cc1b780f66d9ed3c54f532ca2d14787" - integrity sha512-eolumr1vVMjqevCpwVO99yN/LoGL0EyHiLO5I043aYQvwOJ9eR5UsZSClHVCzfhBduMAsSzgA/6AyqPjNayJag== - dependencies: - "@babel/code-frame" "^7.16.0" - "@babel/generator" "^7.16.0" - "@babel/helper-function-name" "^7.16.0" - "@babel/helper-hoist-variables" "^7.16.0" - "@babel/helper-split-export-declaration" "^7.16.0" - "@babel/parser" "^7.16.3" - "@babel/types" "^7.16.0" +"@babel/template@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" + integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/parser" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/traverse@^7.13.0", "@babel/traverse@^7.16.10", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8": + version "7.16.10" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.10.tgz#448f940defbe95b5a8029975b051f75993e8239f" + integrity sha512-yzuaYXoRJBGMlBhsMJoUW7G1UmSb/eXr/JHYM/MsOJgavJibLwASijW7oXBdw3NQ6T0bW7Ty5P/VarOs9cHmqw== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.16.8" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/parser" "^7.16.10" + "@babel/types" "^7.16.8" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.16.0", "@babel/types@^7.4.4": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.0.tgz#db3b313804f96aadd0b776c4823e127ad67289ba" - integrity sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg== +"@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.4.4": + version "7.16.8" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.8.tgz#0ba5da91dd71e0a4e7781a30f22770831062e3c1" + integrity sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg== dependencies: - "@babel/helper-validator-identifier" "^7.15.7" + "@babel/helper-validator-identifier" "^7.16.7" to-fast-properties "^2.0.0" "@discoveryjs/json-ext@^0.5.0": @@ -900,7 +912,7 @@ resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.6.tgz#d5e0706cf8c6acd8c6032f8d54070af261bbbb2f" integrity sha512-ws57AidsDvREKrZKYffXddNkyaF14iHNHm8VQnZH6t99E8gczjNN0GpvcGny0imC80yQ0tHz1xVUKk/KFQSUyA== -"@electron/get@^1.0.1", "@electron/get@^1.12.4": +"@electron/get@^1.12.4", "@electron/get@^1.13.0": version "1.13.1" resolved "https://registry.yarnpkg.com/@electron/get/-/get-1.13.1.tgz#42a0aa62fd1189638bd966e23effaebb16108368" integrity sha512-U5vkXDZ9DwXtkPqlB45tfYnnYBN8PePp1z/XDCupnSpdrxT8/ThCv9WCwPLf9oqiSGZTkH6dx2jDUPuoXpjkcA== @@ -916,6 +928,11 @@ global-agent "^3.0.0" global-tunnel-ng "^2.7.1" +"@electron/remote@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@electron/remote/-/remote-2.0.1.tgz#810cbc595a21f0f94641eb2d7e8264063a3f84de" + integrity sha512-bGX4/yB2bPZwXm1DsxgoABgH0Cz7oFtXJgkerB8VrStYdTyvhGAULzNLRn9rVmeAuC3VUDXaXpZIlZAZHpsLIA== + "@eslint/eslintrc@^0.4.3": version "0.4.3" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" @@ -2009,13 +2026,6 @@ resolved "https://registry.yarnpkg.com/@theia/monaco-editor-core/-/monaco-editor-core-0.23.0.tgz#7a1cbb7a857a509ce8e75c9965abea752bd76e80" integrity sha512-WyrotTd6ZfeXAX4icgFALTzlqE356tAQ5nRuwa2E0Qdp2YIO9GDcw5G2l2NJ8INO2ygujbE5pEdD5kJM5N4TOQ== -"@theia/node-pty@0.9.0-theia.6": - version "0.9.0-theia.6" - resolved "https://registry.yarnpkg.com/@theia/node-pty/-/node-pty-0.9.0-theia.6.tgz#b34710419a0b4917cc97e6a7f4d1b5535cae03ab" - integrity sha512-TvzoyV1dXWIldBldc7emPNqj9Iy8hWmlNZt/kV6m4bW1NyQrG2/P2MGOy8Ei85IA6G8GVcfZms8TwNiqscC0TA== - dependencies: - nan "^2.14.0" - "@tootallnate/once@1": version "1.1.2" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" @@ -2078,14 +2088,14 @@ "@types/node" "*" "@types/diff@^3.2.2": - version "3.5.4" - resolved "https://registry.yarnpkg.com/@types/diff/-/diff-3.5.4.tgz#ddf2e7139bdf7082e446e963da70aa91432205d7" - integrity sha512-/eg1PwPsu0YWSRDM0SIUSOEA70LNPRsO+wt+jzYEN3n5fRbHKsaqYfbWDfcL4Wscez/9ar9U4UypDzBU8n/evg== + version "3.5.5" + resolved "https://registry.yarnpkg.com/@types/diff/-/diff-3.5.5.tgz#d1ddc082c03a26f0490856da47d57c29093d1e76" + integrity sha512-aqcrAbqT/0+ULJJ73bwKWsiFkBh3ZnAelj9u+iI5/cr4Nz3yXGf3w4glx5am6uvvgBbKinK1PAqSJs7fSKD6ig== "@types/dompurify@^2.2.2": - version "2.3.2" - resolved "https://registry.yarnpkg.com/@types/dompurify/-/dompurify-2.3.2.tgz#85e8fd9ab1d7d0d3078968682e458094d41a8ad6" - integrity sha512-iht/O0jie/hDur39Z1NzjfOT/O9Kn2aWY99aqOn7lwsjSttEoMyGWvZIuAzZy0cNvAZdjmqySp7Z4d3GfBEGQw== + version "2.3.3" + resolved "https://registry.yarnpkg.com/@types/dompurify/-/dompurify-2.3.3.tgz#c24c92f698f77ed9cc9d9fa7888f90cf2bfaa23f" + integrity sha512-nnVQSgRVuZ/843oAfhA25eRSNzUFcBPk/LOiw5gm8mD9/X7CNcbRkQu/OsjCewO8+VIYfPxUnXvPEVGenw14+w== dependencies: "@types/trusted-types" "*" @@ -2095,17 +2105,17 @@ integrity sha512-6dhZJLbA7aOwkYB2GDGdIqJ20wmHnkDzaxV9PJXe7O02I2dSFTERzRB6JrX6cWKaS+VqhhY7cQUMCbO5kloFUw== "@types/eslint-scope@^3.7.0": - version "3.7.1" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.1.tgz#8dc390a7b4f9dd9f1284629efce982e41612116e" - integrity sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g== + version "3.7.3" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.3.tgz#125b88504b61e3c8bc6f870882003253005c3224" + integrity sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g== dependencies: "@types/eslint" "*" "@types/estree" "*" "@types/eslint@*": - version "8.2.1" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.2.1.tgz#13f3d69bac93c2ae008019c28783868d0a1d6605" - integrity sha512-UP9rzNn/XyGwb5RQ2fok+DzcIRIYwc16qTXse5+Smsy8MOIccCChT15KAwnsgQx4PzJkaMq4myFyZ4CL5TjhIQ== + version "8.4.0" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.4.0.tgz#95712d5b32fd99a0d9493c31c6197ea7471c3ba6" + integrity sha512-JUYa/5JwoqikCy7O7jKtuNe9Z4ZZt615G+1EKfaDGSNEpzaA2OwbV/G1v08Oa7fd1XzlFoSCvt9ePl9/6FyAug== dependencies: "@types/estree" "*" "@types/json-schema" "*" @@ -2121,9 +2131,9 @@ integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== "@types/express-serve-static-core@^4.17.18": - version "4.17.26" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.26.tgz#5d9a8eeecb9d5f9d7fc1d85f541512a84638ae88" - integrity sha512-zeu3tpouA043RHxW0gzRxwCHchMgftE8GArRsvYT0ByDMbn19olQHx5jLue0LxWY6iYtXb7rXmuVtSkhy9YZvQ== + version "4.17.28" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz#c47def9f34ec81dc6328d0b1b5303d1ec98d86b8" + integrity sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig== dependencies: "@types/node" "*" "@types/qs" "*" @@ -2258,9 +2268,9 @@ integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== "@types/minipass@*": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@types/minipass/-/minipass-3.1.0.tgz#616dcc2205982d4c720f4c7e9a9fddc497245273" - integrity sha512-b2yPKwCrB8x9SB65kcCistMoe3wrYnxxt5rJSZ1kprw0uOXvhuKi9kTQ746Y+Pbqoh+9C0N4zt0ztmTnG9yg7A== + version "3.1.2" + resolved "https://registry.yarnpkg.com/@types/minipass/-/minipass-3.1.2.tgz#e2d7f9df0698aff421dcf145b4fc05b8183b9030" + integrity sha512-foLGjgrJkUjLG/o2t2ymlZGEoBNBa/TfoUZ7oCTkOjP1T43UGBJspovJou/l3ZuHvye2ewR5cZNtp2zyWgILMA== dependencies: "@types/node" "*" @@ -2283,6 +2293,16 @@ dependencies: "@types/express" "*" +"@types/mustache@^4.1.2": + version "4.1.2" + resolved "https://registry.yarnpkg.com/@types/mustache/-/mustache-4.1.2.tgz#d0e158013c81674a5b6d8780bc3fe234e1804eaf" + integrity sha512-c4OVMMcyodKQ9dpwBwh3ofK9P6U9ZktKU9S+p33UqwMNN1vlv2P0zJZUScTshnx7OEoIIRcCFNQ904sYxZz8kg== + +"@types/node-abi@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/node-abi/-/node-abi-3.0.0.tgz#dd9745f82b744ddf06ab364f31371514bdc9a445" + integrity sha512-lhjcQxXaKhbP3SpIjJONnx4cy6cUW2bdCSwPJISuznG3S889TUPQZsYswxYhS4vg8eJDIG5/6pg533HorQI0rw== + "@types/node-fetch@^2.5.7": version "2.5.12" resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.12.tgz#8a6f779b1d4e60b7a57fb6fd48d84fb545b9cc66" @@ -2291,10 +2311,10 @@ "@types/node" "*" form-data "^3.0.0" -"@types/node@*", "@types/node@12", "@types/node@^10.14.22", "@types/node@^12.0.12": - version "12.20.37" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.37.tgz#abb38afa9d6e8a2f627a8cb52290b3c80fbe61ed" - integrity sha512-i1KGxqcvJaLQali+WuypQnXwcplhtNtjs66eNsZpp2P2FL/trJJxx/VWsM0YCL2iMoIJrbXje48lvIQAQ4p2ZA== +"@types/node@*", "@types/node@12", "@types/node@^10.14.22", "@types/node@^14.6.2": + version "12.20.42" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.42.tgz#2f021733232c2130c26f9eabbdd3bfd881774733" + integrity sha512-aI3/oo5DzyiI5R/xAhxxRzfZlWlsbbqdgxfTPkqu/Zt+23GXiJvMCyPJT4+xKSXOnLqoL8jJYMLTwvK2M3a5hw== "@types/normalize-package-data@^2.4.0": version "2.4.1" @@ -2324,9 +2344,9 @@ "@types/node" "*" "@types/ps-tree@^1.1.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@types/ps-tree/-/ps-tree-1.1.1.tgz#9e3ee4ffefe98238ef6dccfee9a76e9a4ce12447" - integrity sha512-0AEOnEUY/ZchFCzpTik+m8/6BvQ4ePf21HhdtAy0gVDYQEhLMbinPXDoxCSjbt49r84+FkdUqIWiQ2Nlqupxdg== + version "1.1.2" + resolved "https://registry.yarnpkg.com/@types/ps-tree/-/ps-tree-1.1.2.tgz#5c60773a38ffb1402e049902a7b7a8d3c67cd59a" + integrity sha512-ZREFYlpUmPQJ0esjxoG1fMvB2HNaD3z+mjqdSosZvd3RalncI9NEur73P8ZJz4YQdL64CmV1w0RuqoRUlhQRBw== "@types/puppeteer@^2.0.0": version "2.1.6" @@ -2353,17 +2373,17 @@ "@types/react" "^16" "@types/react-virtualized@^9.18.3": - version "9.21.15" - resolved "https://registry.yarnpkg.com/@types/react-virtualized/-/react-virtualized-9.21.15.tgz#349a4f9774504e514ea4c8ebbbfe6cc8db17f045" - integrity sha512-R4ntUW+Y/a7RgRpfeYz3iRe+kaDWtXieMeQum4AoYjjZsR/QhpKqFu4muSBhzA7OHJHd6qA0KkeTzxj5ah5tmQ== + version "9.21.16" + resolved "https://registry.yarnpkg.com/@types/react-virtualized/-/react-virtualized-9.21.16.tgz#5e33c7e8a7c187f2b6d542132fc7a1d132b34f9d" + integrity sha512-25QMrouz1VKq5T68+9JfRq3GP4JmN20ARi+hl5z7NMmriy07XmGd1Yh3I4EIZjmifpXhHZoQS/ny2fzZRyiAiw== dependencies: "@types/prop-types" "*" "@types/react" "*" "@types/react@*": - version "17.0.37" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.37.tgz#6884d0aa402605935c397ae689deed115caad959" - integrity sha512-2FS1oTqBGcH/s0E+CjrCCR9+JMpsu9b69RTFO+40ua43ZqP5MmQ4iUde/dMjWR909KxZwmOQIFq6AV6NjEG5xg== + version "17.0.38" + resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.38.tgz#f24249fefd89357d5fa71f739a686b8d7c7202bd" + integrity sha512-SI92X1IA+FMnP3qM5m4QReluXzhcmovhZnLNm3pyeQlooi02qI7sLiepEYqT678uNiyc25XfCqxREFpy3W7YhQ== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -2379,9 +2399,9 @@ csstype "^3.0.2" "@types/request@*", "@types/request@^2.0.3": - version "2.48.7" - resolved "https://registry.yarnpkg.com/@types/request/-/request-2.48.7.tgz#a962d11a26e0d71d9a9913d96bb806dc4d4c2f19" - integrity sha512-GWP9AZW7foLd4YQxyFZDBepl0lPsWLMEXDZUjQ/c1gqVPDPECrRZyEzuhJdnPWioFCq3Tv0qoGpMD6U+ygd4ZA== + version "2.48.8" + resolved "https://registry.yarnpkg.com/@types/request/-/request-2.48.8.tgz#0b90fde3b655ab50976cb8c5ac00faca22f5a82c" + integrity sha512-whjk1EDJPcAR2kYHRbFl/lKeeKYTi05A15K9bnLInCVroNDCtXce57xKdI0/rQaA3K+6q0eFyUBPmqfSndUZdQ== dependencies: "@types/caseless" "*" "@types/node" "*" @@ -2405,9 +2425,9 @@ "@types/node" "*" "@types/route-parser@^0.1.1": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@types/route-parser/-/route-parser-0.1.3.tgz#f8af16886ebe0b525879628c04f81433ac617af0" - integrity sha512-1AQYpsMbxangSnApsyIHzck5TP8cfas8fzmemljLi2APssJvlZiHkTar/ZtcZwOtK/Ory/xwLg2X8dwhkbnM+g== + version "0.1.4" + resolved "https://registry.yarnpkg.com/@types/route-parser/-/route-parser-0.1.4.tgz#155686e569d19ff97779bf6bcb513360587748dd" + integrity sha512-lwH3SeyKwCAwP7oUoJNryPDdbW3Bx5lrB6mhV5iebqzOJHIut6wlaSxpQR4Lsk6j7wC08pGenr/xE8I/A4J3Fg== "@types/safer-buffer@^2.1.0": version "2.1.0" @@ -2426,6 +2446,11 @@ resolved "https://registry.yarnpkg.com/@types/semver/-/semver-5.5.0.tgz#146c2a29ee7d3bae4bf2fcb274636e264c813c45" integrity sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ== +"@types/semver@^7.3.8": + version "7.3.9" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.9.tgz#152c6c20a7688c30b967ec1841d31ace569863fc" + integrity sha512-L/TMpyURfBkf+o/526Zb6kd/tchUP3iBDEPjqjb+U2MAJhVRxxrmr2fwpe08E7QsV7YLcpq0tUaQ9O9x97ZIxQ== + "@types/serve-static@*": version "1.13.10" resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.10.tgz#f5e0ce8797d2d7cc5ebeda48a52c96c4fa47a8d9" @@ -2440,9 +2465,9 @@ integrity sha512-50ehC3IAijfkvoNqmQ+VL73S7orOxmAK8ljQAFBv8o7G66lAZyxQj1L3BAv2dD86myLXI+sgKP1kcxAaxW356w== "@types/sinon@^10.0.6": - version "10.0.6" - resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-10.0.6.tgz#bc3faff5154e6ecb69b797d311b7cf0c1b523a1d" - integrity sha512-6EF+wzMWvBNeGrfP3Nx60hhx+FfwSg1JJBLAAP/IdIUq0EYkqCYf70VT3PhuhPX9eLD+Dp+lNdpb/ZeHG8Yezg== + version "10.0.8" + resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-10.0.8.tgz#e43c3722629248470a866c86ecc06e5523ac0b4e" + integrity sha512-XZbSLlox2KM7VaEJPZ5G/fMZXJNuAtYiFOax7UT51quZMAJRWKvugPMqNA0mV3jC9HIYpQSg6qbV+ilQMwLqyA== dependencies: "@sinonjs/fake-timers" "^7.1.0" @@ -2486,6 +2511,13 @@ resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.2.tgz#fc25ad9943bcac11cceb8168db4f275e0e72e756" integrity sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg== +"@types/unzipper@^0.9.2": + version "0.9.2" + resolved "https://registry.yarnpkg.com/@types/unzipper/-/unzipper-0.9.2.tgz#852f7db5b1656c3c7e93549d8fc31d490111352e" + integrity sha512-9K8sLpn1dxIzbXMDgUerkyO1z0deg5RqN/F6df8waAM94aPnS7x7V0l12kkUYoUlM8r4xWgvlcXLdWQvt6KdUA== + dependencies: + "@types/node" "*" + "@types/uuid@^7.0.3": version "7.0.5" resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-7.0.5.tgz#b1d2f772142a301538fae9bdf9cf15b9f2573a29" @@ -2637,9 +2669,9 @@ eslint-visitor-keys "^2.0.0" "@vscode/codicons@*": - version "0.0.26" - resolved "https://registry.yarnpkg.com/@vscode/codicons/-/codicons-0.0.26.tgz#affdbc4499d3bd0db1156e4c9d323f885d299e03" - integrity sha512-GrYFJPbZ+hRM3NUVdAIpDepWkYCizVb13a6pJDAhckElDvaf4UCmNpuBS4MSydXNK63Ccts0XpvJ6JOW+/aU1g== + version "0.0.27" + resolved "https://registry.yarnpkg.com/@vscode/codicons/-/codicons-0.0.27.tgz#3b842cbcfb478e1c9e1dc6efbbdedd059cc3e567" + integrity sha512-NpLkfzPfEOO6s2HH+ISITlaXKYB2XeoYZQY2IV39EaJV3NIBygiLqybHrVtKbaDFfeXyP8McmvvnbWd6YykpGg== "@webassemblyjs/ast@1.11.1": version "1.11.1" @@ -2854,9 +2886,9 @@ acorn@^7.4.0: integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== acorn@^8.4.1: - version "8.6.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.6.0.tgz#e3692ba0eb1a0c83eaa4f37f5fa7368dd7142895" - integrity sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw== + version "8.7.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" + integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== add-stream@^1.0.0: version "1.0.0" @@ -2876,9 +2908,9 @@ agent-base@6, agent-base@^6.0.2: debug "4" agentkeepalive@^4.1.3: - version "4.1.4" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.1.4.tgz#d928028a4862cb11718e55227872e842a44c945b" - integrity sha512-+V/rGa3EuU74H6wR04plBb7Ks10FbtUQgRj/FQOG7uUIEuaINI+AiqJR1k6t3SVNs7o7ZjIdus6706qqzVq8jQ== + version "4.2.0" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.2.0.tgz#616ce94ccb41d1a39a45d203d8076fe98713062d" + integrity sha512-0PhAp58jZNw13UJv7NVdTGb0ZcghHUb3DrZ046JiiJY/BOaTTpbwdHq2VObPCBV8M2GPh7sgrJ3AQ8Ey468LJw== dependencies: debug "^4.1.0" depd "^1.1.2" @@ -2911,7 +2943,7 @@ ajv-keywords@^5.0.0: dependencies: fast-deep-equal "^3.1.3" -ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5, ajv@^6.5.3: +ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5, ajv@^6.5.3: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -2921,10 +2953,10 @@ ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5, ajv@^6.5.3: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.0, ajv@^8.0.1, ajv@^8.8.0: - version "8.8.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.8.2.tgz#01b4fef2007a28bf75f0b7fc009f62679de4abbb" - integrity sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw== +ajv@^8.0.0, ajv@^8.0.1, ajv@^8.6.3, ajv@^8.8.0: + version "8.9.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.9.0.tgz#738019146638824dea25edcf299dcba1b0e7eb18" + integrity sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ== dependencies: fast-deep-equal "^3.1.1" json-schema-traverse "^1.0.0" @@ -3177,6 +3209,11 @@ at-least-node@^1.0.0: resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== +atomically@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/atomically/-/atomically-1.7.0.tgz#c07a0458432ea6dbc9a3506fffa424b48bccaafe" + integrity sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w== + autosize@^4.0.2: version "4.0.4" resolved "https://registry.yarnpkg.com/autosize/-/autosize-4.0.4.tgz#924f13853a466b633b9309330833936d8bccce03" @@ -3210,28 +3247,45 @@ babel-plugin-dynamic-import-node@^2.3.3: object.assign "^4.1.0" babel-plugin-polyfill-corejs2@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.0.tgz#407082d0d355ba565af24126fb6cb8e9115251fd" - integrity sha512-wMDoBJ6uG4u4PNFh72Ty6t3EgfA91puCuAwKIazbQlci+ENb/UU9A3xG5lutjUIiXCIn1CY5L15r9LimiJyrSA== + version "0.3.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz#440f1b70ccfaabc6b676d196239b138f8a2cfba5" + integrity sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w== dependencies: "@babel/compat-data" "^7.13.11" - "@babel/helper-define-polyfill-provider" "^0.3.0" + "@babel/helper-define-polyfill-provider" "^0.3.1" semver "^6.1.1" -babel-plugin-polyfill-corejs3@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.4.0.tgz#0b571f4cf3d67f911512f5c04842a7b8e8263087" - integrity sha512-YxFreYwUfglYKdLUGvIF2nJEsGwj+RhWSX/ije3D2vQPOXuyMLMtg/cCGMDpOA7Nd+MwlNdnGODbd2EwUZPlsw== +babel-plugin-polyfill-corejs3@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.1.tgz#d66183bf10976ea677f4149a7fcc4d8df43d4060" + integrity sha512-TihqEe4sQcb/QcPJvxe94/9RZuLQuF1+To4WqQcRvc+3J3gLCPIPgDKzGLG6zmQLfH3nn25heRuDNkS2KR4I8A== dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.0" - core-js-compat "^3.18.0" + "@babel/helper-define-polyfill-provider" "^0.3.1" + core-js-compat "^3.20.0" babel-plugin-polyfill-regenerator@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.0.tgz#9ebbcd7186e1a33e21c5e20cae4e7983949533be" - integrity sha512-dhAPTDLGoMW5/84wkgwiLRwMnio2i1fUe53EuvtKMv0pn2p3S8OCoV1xAzfJPl0KOX7IB89s2ib85vbYiea3jg== + version "0.3.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz#2c0678ea47c75c8cc2fbb1852278d8fb68233990" + integrity sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.1" + +babel-polyfill@^6.2.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" + integrity sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM= + dependencies: + babel-runtime "^6.26.0" + core-js "^2.5.0" + regenerator-runtime "^0.10.5" + +babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.0" + core-js "^2.4.0" + regenerator-runtime "^0.11.0" back@~0.1.5: version "0.1.5" @@ -3331,23 +3385,7 @@ bluebird@~3.4.1: resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" integrity sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM= -body-parser@1.19.0: - version "1.19.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" - integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== - dependencies: - bytes "3.1.0" - content-type "~1.0.4" - debug "2.6.9" - depd "~1.1.2" - http-errors "1.7.2" - iconv-lite "0.4.24" - on-finished "~2.3.0" - qs "6.7.0" - raw-body "2.4.0" - type-is "~1.6.17" - -body-parser@^1.17.2, body-parser@^1.18.3: +body-parser@1.19.1, body-parser@^1.17.2, body-parser@^1.18.3: version "1.19.1" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.1.tgz#1499abbaa9274af3ecc9f6f10396c995943e31d4" integrity sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA== @@ -3393,13 +3431,13 @@ browser-stdout@1.3.1: resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== -browserslist@^4.14.5, browserslist@^4.17.5, browserslist@^4.18.1: - version "4.18.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.18.1.tgz#60d3920f25b6860eb917c6c7b185576f4d8b017f" - integrity sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ== +browserslist@^4.14.5, browserslist@^4.17.5, browserslist@^4.19.1: + version "4.19.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.19.1.tgz#4ac0435b35ab655896c31d53018b6dd5e9e4c9a3" + integrity sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A== dependencies: - caniuse-lite "^1.0.30001280" - electron-to-chromium "^1.3.896" + caniuse-lite "^1.0.30001286" + electron-to-chromium "^1.4.17" escalade "^3.1.1" node-releases "^2.0.1" picocolors "^1.0.0" @@ -3486,11 +3524,6 @@ byte-size@^7.0.0: resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-7.0.1.tgz#b1daf3386de7ab9d706b941a748dbfc71130dee3" integrity sha512-crQdqyCwhokxwV1UyDzLZanhkugAgft7vt0qbbdt60C6Zf3CAiGmtUCylbtYwrU6loOUw3euGrNtW1J651ot1A== -bytes@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" - integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== - bytes@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.1.tgz#3f018291cb4cbad9accb6e6970bca9c8889e879a" @@ -3575,10 +3608,10 @@ camelcase@^5.0.0, camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -caniuse-lite@^1.0.30001280: - version "1.0.30001286" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001286.tgz#3e9debad420419618cfdf52dc9b6572b28a8fff6" - integrity sha512-zaEMRH6xg8ESMi2eQ3R4eZ5qw/hJiVsO/HlLwniIwErij0JDr9P+8V4dtx1l+kLq6j3yy8l8W4fst1lBnat5wQ== +caniuse-lite@^1.0.30001286: + version "1.0.30001301" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001301.tgz#ebc9086026534cab0dab99425d9c3b4425e5f450" + integrity sha512-csfD/GpHMqgEL3V3uIgosvh+SVIQvCh43SNu9HRbP1lnxkKm1kjDG4f32PP571JplkLjfS+mg2p1gxR7MYrrIA== caseless@~0.12.0: version "0.12.0" @@ -3878,9 +3911,9 @@ compare-func@^2.0.0: dot-prop "^5.1.0" compression-webpack-plugin@^9.0.0: - version "9.1.2" - resolved "https://registry.yarnpkg.com/compression-webpack-plugin/-/compression-webpack-plugin-9.1.2.tgz#55490e6eca44f93024c26a235ac28f8f938cdd9b" - integrity sha512-mRVfU0G9tlZhCN/DUQm4Kcq0QdZOYd6E2FeJUvKM9hTUUYtBffHNnfkGvUuZXfv/zPlVau4v7goMUkuDL/noBg== + version "9.2.0" + resolved "https://registry.yarnpkg.com/compression-webpack-plugin/-/compression-webpack-plugin-9.2.0.tgz#57fd539d17c5907eebdeb4e83dcfe2d7eceb9ef6" + integrity sha512-R/Oi+2+UHotGfu72fJiRoVpuRifZT0tTC6UqFD/DUo+mv8dbOow9rVOuTvDv5nPPm3GZhHL/fKkwxwIHnJ8Nyw== dependencies: schema-utils "^4.0.0" serialize-javascript "^6.0.0" @@ -3930,21 +3963,21 @@ concurrently@^3.5.0: supports-color "^3.2.3" tree-kill "^1.1.0" -conf@^6.2.1: - version "6.2.4" - resolved "https://registry.yarnpkg.com/conf/-/conf-6.2.4.tgz#49d23c4e21ef2ac2860f7b5ed25b7b7e484f769f" - integrity sha512-GjgyPRLo1qK1LR9RWAdUagqo+DP18f5HWCFk4va7GS+wpxQTOzfuKTwKOvGW2c01/YXNicAyyoyuSddmdkBzZQ== +conf@^10.0.3: + version "10.1.1" + resolved "https://registry.yarnpkg.com/conf/-/conf-10.1.1.tgz#ff08046d5aeeee0eaff55d57f5b4319193c3dfda" + integrity sha512-z2civwq/k8TMYtcn3SVP0Peso4otIWnHtcTuHhQ0zDZDdP4NTxqEc8owfkz4zBsdMYdn/LFcE+ZhbCeqkhtq3Q== dependencies: - ajv "^6.10.2" - debounce-fn "^3.0.1" - dot-prop "^5.0.0" - env-paths "^2.2.0" - json-schema-typed "^7.0.1" - make-dir "^3.0.0" - onetime "^5.1.0" - pkg-up "^3.0.1" - semver "^6.2.0" - write-file-atomic "^3.0.0" + ajv "^8.6.3" + ajv-formats "^2.1.1" + atomically "^1.7.0" + debounce-fn "^4.0.0" + dot-prop "^6.0.1" + env-paths "^2.2.1" + json-schema-typed "^7.0.3" + onetime "^5.1.2" + pkg-up "^3.1.0" + semver "^7.3.5" config-chain@^1.1.11, config-chain@^1.1.12: version "1.1.13" @@ -3959,12 +3992,12 @@ console-control-strings@^1.0.0, console-control-strings@~1.1.0: resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= -content-disposition@0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" - integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== dependencies: - safe-buffer "5.1.2" + safe-buffer "5.2.1" content-type@~1.0.4: version "1.0.4" @@ -4005,13 +4038,13 @@ conventional-changelog-preset-loader@^2.3.4: integrity sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g== conventional-changelog-writer@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-5.0.0.tgz#c4042f3f1542f2f41d7d2e0d6cad23aba8df8eec" - integrity sha512-HnDh9QHLNWfL6E1uHz6krZEQOgm8hN7z/m7tT16xwd802fwgMN0Wqd7AQYVkhpsjDUx/99oo+nGgvKF657XP5g== + version "5.0.1" + resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz#e0757072f045fe03d91da6343c843029e702f359" + integrity sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ== dependencies: conventional-commits-filter "^2.0.7" dateformat "^3.0.0" - handlebars "^4.7.6" + handlebars "^4.7.7" json-stringify-safe "^5.0.1" lodash "^4.17.15" meow "^8.0.0" @@ -4028,9 +4061,9 @@ conventional-commits-filter@^2.0.7: modify-values "^1.0.0" conventional-commits-parser@^3.2.0: - version "3.2.3" - resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.3.tgz#fc43704698239451e3ef35fd1d8ed644f46bd86e" - integrity sha512-YyRDR7On9H07ICFpRm/igcdjIqebXbvf4Cff+Pf0BrBys1i1EOzx9iFXNlAbdrLAR8jf7bkUYkDAr8pEy0q4Pw== + version "3.2.4" + resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz#a7d3b77758a202a9b2293d2112a8d8052c740972" + integrity sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q== dependencies: JSONStream "^1.0.4" is-text-path "^1.0.1" @@ -4065,12 +4098,7 @@ cookie-signature@1.0.6: resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= -cookie@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" - integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== - -cookie@^0.4.0: +cookie@0.4.1, cookie@^0.4.0: version "0.4.1" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1" integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== @@ -4095,14 +4123,19 @@ copy-webpack-plugin@^8.1.1: schema-utils "^3.0.0" serialize-javascript "^5.0.1" -core-js-compat@^3.18.0, core-js-compat@^3.19.1: - version "3.19.3" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.19.3.tgz#de75e5821c5ce924a0a1e7b7d5c2cb973ff388aa" - integrity sha512-59tYzuWgEEVU9r+SRgceIGXSSUn47JknoiXW6Oq7RW8QHjXWz3/vp8pa7dbtuVu40sewz3OP3JmQEcDdztrLhA== +core-js-compat@^3.20.0, core-js-compat@^3.20.2: + version "3.20.3" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.20.3.tgz#d71f85f94eb5e4bea3407412e549daa083d23bd6" + integrity sha512-c8M5h0IkNZ+I92QhIpuSijOxGAcj3lgpsWdkCqmUTZNwidujF4r3pi6x1DCN+Vcs5qTS2XWWMfWSuCqyupX8gw== dependencies: - browserslist "^4.18.1" + browserslist "^4.19.1" semver "7.0.0" +core-js@^2.4.0, core-js@^2.5.0: + version "2.6.12" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" + integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== + core-util-is@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" @@ -4227,12 +4260,12 @@ dateformat@^3.0.0: resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== -debounce-fn@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/debounce-fn/-/debounce-fn-3.0.1.tgz#034afe8b904d985d1ec1aa589cd15f388741d680" - integrity sha512-aBoJh5AhpqlRoHZjHmOzZlRx+wz2xVwGL9rjs+Kj0EWUrL4/h4K7OD176thl2Tdoqui/AaA4xhHrNArGLAaI3Q== +debounce-fn@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/debounce-fn/-/debounce-fn-4.0.0.tgz#ed76d206d8a50e60de0dd66d494d82835ffe61c7" + integrity sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ== dependencies: - mimic-fn "^2.1.0" + mimic-fn "^3.0.0" debug@2.6.9, debug@^2.5.1, debug@^2.6.9: version "2.6.9" @@ -4539,7 +4572,7 @@ dompurify@^2.2.9: resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.3.4.tgz#1cf5cf0105ccb4debdf6db162525bd41e6ddacc6" integrity sha512-6BVcgOAVFXjI0JTjEvZy901Rghm+7fDQOrNIcxB4+gdhj6Kwp6T9VBhBY/AbagKHJocRkDYGd6wvI+p4/10xtQ== -dot-prop@^5.0.0, dot-prop@^5.1.0: +dot-prop@^5.1.0: version "5.3.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== @@ -4628,7 +4661,7 @@ electron-mocha@^8.2.0: which "^2.0.2" yargs "^15.3.1" -electron-rebuild@^1.8.6: +electron-rebuild@^1.11.0: version "1.11.0" resolved "https://registry.yarnpkg.com/electron-rebuild/-/electron-rebuild-1.11.0.tgz#e384773a9ad30fe0a6a5bbb326b779d51f668b6a" integrity sha512-cn6AqZBQBVtaEyj5jZW1/LOezZZ22PA1HvhEP7asvYPJ8PDF4i4UFt9be4i9T7xJKiSiomXvY5Fd+dSq3FXZxA== @@ -4643,18 +4676,18 @@ electron-rebuild@^1.8.6: spawn-rx "^3.0.0" yargs "^14.2.0" -electron-store@^5.1.1: - version "5.2.0" - resolved "https://registry.yarnpkg.com/electron-store/-/electron-store-5.2.0.tgz#a15718fc1fa21acfd07af55f9b94f9fa6a536665" - integrity sha512-iU3WDqEDAYNYR9XV7p0tJajq/zs9z7Nrn0sAoR5nDyn8h/9dr9kusKbTxD8NtVEBD1TB1pkGMqcbIt/y6knDwQ== +electron-store@^8.0.0: + version "8.0.1" + resolved "https://registry.yarnpkg.com/electron-store/-/electron-store-8.0.1.tgz#9b598c1d2edeffebee9d8c1cd957ad368c528925" + integrity sha512-ZyLvNywiqSpbwC/pp89O/AycVWY/UJIkmtyzF2Bd0Nm/rLmcFc0NTGuLdg6+LE8mS8qsiK5JMoe4PnrecLHH5w== dependencies: - conf "^6.2.1" - type-fest "^0.7.1" + conf "^10.0.3" + type-fest "^1.0.2" -electron-to-chromium@^1.3.896: - version "1.4.16" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.16.tgz#38ddecc616385e6f101359d1b978c802664157d2" - integrity sha512-BQb7FgYwnu6haWLU63/CdVW+9xhmHls3RCQUFiV4lvw3wimEHTVcUk2hkuZo76QhR8nnDdfZE7evJIZqijwPdA== +electron-to-chromium@^1.4.17: + version "1.4.49" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.49.tgz#5b6a3dc032590beef4be485a4b0b3fe7d0e3dfd7" + integrity sha512-k/0t1TRfonHIp8TJKfjBu2cKj8MqYTiEpOhci+q7CVEE5xnCQnx1pTa+V8b/sdhe4S3PR4p4iceEQWhGrKQORQ== electron-window@^0.8.0: version "0.8.1" @@ -4663,13 +4696,13 @@ electron-window@^0.8.0: dependencies: is-electron-renderer "^2.0.0" -electron@^9.0.2: - version "9.4.4" - resolved "https://registry.yarnpkg.com/electron/-/electron-9.4.4.tgz#2a74a0655a74bd326216672c5ae6ed3a44451446" - integrity sha512-dcPlTrMWQu5xuSm6sYV42KK/BRIqh3erM8v/WtZqaDmG7pkCeJpvw26Dgbqhdt78XmqqGiN96giEe6A3S9vpAQ== +electron@^15.3.5: + version "15.3.5" + resolved "https://registry.yarnpkg.com/electron/-/electron-15.3.5.tgz#62fc7d2289d3f47e9e05c0aa9bb6d929a6faf398" + integrity sha512-z0/7+p3uZYBmjf7UEVBfcMTVgW6ThGgfI4jdbQ1TH4XOLYkj560/abv91/s8kK0MZ7JQg4KRP1JwQZ4q6+BPFw== dependencies: - "@electron/get" "^1.0.1" - "@types/node" "^12.0.12" + "@electron/get" "^1.13.0" + "@types/node" "^14.6.2" extract-zip "^1.0.3" emoji-regex@^7.0.1: @@ -4726,7 +4759,7 @@ entities@~2.1.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5" integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w== -env-paths@^2.2.0: +env-paths@^2.2.0, env-paths@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== @@ -4845,16 +4878,15 @@ eslint-import-resolver-node@^0.3.6: debug "^3.2.7" resolve "^1.20.0" -eslint-module-utils@^2.7.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.1.tgz#b435001c9f8dd4ab7f6d0efcae4b9696d4c24b7c" - integrity sha512-fjoetBXQZq2tSTWZ9yWVl2KuFrTZZH3V+9iD1V1RfpDgxzJR+mPd/KZmMiA8gbPqdBzpNiEHOuT7IYEWxrH0zQ== +eslint-module-utils@^2.7.2: + version "2.7.2" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.2.tgz#1d0aa455dcf41052339b63cada8ab5fd57577129" + integrity sha512-zquepFnWCY2ISMFwD/DqzaM++H+7PDzOpUvotJWm/y1BAFt5R4oeULgdrTejKqLkz7MA/tgstsUMNYc7wNdTrg== dependencies: debug "^3.2.7" find-up "^2.1.0" - pkg-dir "^2.0.0" -eslint-plugin-deprecation@^1.1.0: +eslint-plugin-deprecation@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/eslint-plugin-deprecation/-/eslint-plugin-deprecation-1.2.1.tgz#ab1b80d7d0b8ce694f646ed41e03f90d3f0fbcd0" integrity sha512-8KFAWPO3AvF0szxIh1ivRtHotd1fzxVOuNR3NI8dfCsQKgcxu9fAgEY+eTKvCRLAwwI8kaDDfImMt+498+EgRw== @@ -4863,39 +4895,39 @@ eslint-plugin-deprecation@^1.1.0: tslib "^1.10.0" tsutils "^3.0.0" -eslint-plugin-import@^2.22.1: - version "2.25.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.25.3.tgz#a554b5f66e08fb4f6dc99221866e57cfff824766" - integrity sha512-RzAVbby+72IB3iOEL8clzPLzL3wpDrlwjsTBAQXgyp5SeTqqY+0bFubwuo+y/HLhNZcXV4XqTBO4LGsfyHIDXg== +eslint-plugin-import@latest: + version "2.25.4" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz#322f3f916a4e9e991ac7af32032c25ce313209f1" + integrity sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA== dependencies: array-includes "^3.1.4" array.prototype.flat "^1.2.5" debug "^2.6.9" doctrine "^2.1.0" eslint-import-resolver-node "^0.3.6" - eslint-module-utils "^2.7.1" + eslint-module-utils "^2.7.2" has "^1.0.3" is-core-module "^2.8.0" is-glob "^4.0.3" minimatch "^3.0.4" object.values "^1.1.5" resolve "^1.20.0" - tsconfig-paths "^3.11.0" + tsconfig-paths "^3.12.0" -eslint-plugin-no-null@^1.0.2: +eslint-plugin-no-null@latest: version "1.0.2" resolved "https://registry.yarnpkg.com/eslint-plugin-no-null/-/eslint-plugin-no-null-1.0.2.tgz#1236a812391390a1877ad4007c26e745341c951f" integrity sha1-EjaoEjkTkKGHetQAfCbnRTQclR8= -eslint-plugin-no-unsanitized@^3.1.4: - version "3.2.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-no-unsanitized/-/eslint-plugin-no-unsanitized-3.2.0.tgz#a74239ae51363a5edbe6920eb34fe09aab925a9c" - integrity sha512-92opuXbjWmXcod94EyCKhp36V1QHLM/ArAST2ssgKOojALne0eZvSPfrg4oyr0EwTXvy0RJNe/Tkm33VkDUrKQ== +eslint-plugin-no-unsanitized@latest: + version "4.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-no-unsanitized/-/eslint-plugin-no-unsanitized-4.0.1.tgz#e2343265467ba2270ade478cbe07bbafeaea412d" + integrity sha512-y/lAMWnPPC7RYuUdxlEL/XiCL8FehN9h9s3Kjqbp/Kv0i9NZs+IXSC2kS546Fa4Bumwy31HlVS/OdWX0Kxb5Xg== -eslint-plugin-react@^7.21.5: - version "7.27.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.27.1.tgz#469202442506616f77a854d91babaae1ec174b45" - integrity sha512-meyunDjMMYeWr/4EBLTV1op3iSG3mjT/pz5gti38UzfM4OPpNc2m0t2xvKCOMU5D6FSdd34BIMFOvQbW+i8GAA== +eslint-plugin-react@latest: + version "7.28.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.28.0.tgz#8f3ff450677571a659ce76efc6d80b6a525adbdf" + integrity sha512-IOlFIRHzWfEQQKcAD4iyYDndHwTQiCMcJVJjxempf203jnNLUnW34AXLrV33+nEXoifJE2ZEGmcjKPL8957eSw== dependencies: array-includes "^3.1.4" array.prototype.flatmap "^1.2.5" @@ -4944,7 +4976,7 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== -eslint@^7.14.0: +eslint@7: version "7.32.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== @@ -5111,16 +5143,16 @@ expand-template@^2.0.3: integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== express@^4.16.3: - version "4.17.1" - resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" - integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== + version "4.17.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.2.tgz#c18369f265297319beed4e5558753cc8c1364cb3" + integrity sha512-oxlxJxcQlYwqPWKVJJtvQiwHgosH/LrLSPA+H4UxpyvSS6jC5aH+5MoHFM+KABgTOt0APue4w66Ha8jCUo9QGg== dependencies: accepts "~1.3.7" array-flatten "1.1.1" - body-parser "1.19.0" - content-disposition "0.5.3" + body-parser "1.19.1" + content-disposition "0.5.4" content-type "~1.0.4" - cookie "0.4.0" + cookie "0.4.1" cookie-signature "1.0.6" debug "2.6.9" depd "~1.1.2" @@ -5134,13 +5166,13 @@ express@^4.16.3: on-finished "~2.3.0" parseurl "~1.3.3" path-to-regexp "0.1.7" - proxy-addr "~2.0.5" - qs "6.7.0" + proxy-addr "~2.0.7" + qs "6.9.6" range-parser "~1.2.1" - safe-buffer "5.1.2" - send "0.17.1" - serve-static "1.14.1" - setprototypeof "1.1.1" + safe-buffer "5.2.1" + send "0.17.2" + serve-static "1.14.2" + setprototypeof "1.2.0" statuses "~1.5.0" type-is "~1.6.18" utils-merge "1.0.1" @@ -5185,10 +5217,10 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.1.1, fast-glob@^3.2.5: - version "3.2.7" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" - integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== +fast-glob@^3.2.5, fast-glob@^3.2.9: + version "3.2.11" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" + integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -5630,9 +5662,9 @@ getpass@^0.1.1: assert-plus "^1.0.0" git-raw-commits@^2.0.8: - version "2.0.10" - resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.10.tgz#e2255ed9563b1c9c3ea6bd05806410290297bbc1" - integrity sha512-sHhX5lsbG9SOO6yXdlwgEMQ/ljIn7qMpAbJZCGfXX2fq5T8M5SrDnpYk9/4HswTildcIqatsWa91vty6VhWSaQ== + version "2.0.11" + resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.11.tgz#bc3576638071d18655e1cc60d7f524920008d723" + integrity sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A== dependencies: dargs "^7.0.0" lodash "^4.17.15" @@ -5761,15 +5793,15 @@ globalthis@^1.0.1: define-properties "^1.1.3" globby@^11.0.2, globby@^11.0.3: - version "11.0.4" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" - integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg== + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== dependencies: array-union "^2.1.0" dir-glob "^3.0.1" - fast-glob "^3.1.1" - ignore "^5.1.4" - merge2 "^1.3.0" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" slash "^3.0.0" globby@^7.1.1: @@ -5801,17 +5833,17 @@ got@^9.6.0: to-readable-stream "^1.0.0" url-parse-lax "^3.0.0" -graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.3, graceful-fs@^4.2.4: - version "4.2.8" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" - integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== +graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.3, graceful-fs@^4.2.4, graceful-fs@^4.2.9: + version "4.2.9" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" + integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== growl@1.10.5: version "1.10.5" resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== -handlebars@^4.7.6, handlebars@^4.7.7: +handlebars@^4.7.7: version "4.7.7" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== @@ -5899,9 +5931,9 @@ he@1.2.0: integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== highlight.js@*: - version "11.3.1" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-11.3.1.tgz#813078ef3aa519c61700f84fe9047231c5dc3291" - integrity sha512-PUhCRnPjLtiLHZAQ5A/Dt5F8cWZeMyj9KRsACsWT+OD6OP0x6dp5OmT5jdx0JgEyPxPZZIPQpRN2TciUT7occw== + version "11.4.0" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-11.4.0.tgz#34ceadd49e1596ee5aba3d99346cdfd4845ee05a" + integrity sha512-nawlpCBCSASs7EdvZOYOYVkJpGmAOKMYZgZtUqSRqodZE0GRVcFKwo1RcpeOemqh9hyttTdd5wDBwHkuSyUfnA== highlight.js@10.4.1: version "10.4.1" @@ -5914,9 +5946,9 @@ hosted-git-info@^2.1.4: integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== hosted-git-info@^4.0.0, hosted-git-info@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.0.2.tgz#5e425507eede4fea846b7262f0838456c4209961" - integrity sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg== + 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" @@ -5937,17 +5969,6 @@ http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0: resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== -http-errors@1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" - integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - http-errors@1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c" @@ -5959,17 +5980,6 @@ http-errors@1.8.1: statuses ">= 1.5.0 < 2" toidentifier "1.0.1" -http-errors@~1.7.2: - version "1.7.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" - integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - http-https@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/http-https/-/http-https-1.0.0.tgz#2f908dd5f1db4068c058cd6e6d4ce392c913389b" @@ -6055,6 +6065,13 @@ ieee754@^1.1.13, ieee754@^1.2.1: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== +if-env@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/if-env/-/if-env-1.0.4.tgz#8b2b6bd308af86a3a19bb273426761085104878b" + integrity sha1-iytr0wivhqOhm7JzQmdhCFEEh4s= + dependencies: + npm-run-all "1.4.0" + ignore-loader@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/ignore-loader/-/ignore-loader-0.1.2.tgz#d81f240376d0ba4f0d778972c3ad25874117a463" @@ -6082,10 +6099,10 @@ ignore@^4.0.6: resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -ignore@^5.1.4, ignore@^5.1.8: - version "5.1.9" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.9.tgz#9ec1a5cbe8e1446ec60d4420060d43aa6e7382fb" - integrity sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ== +ignore@^5.1.8, ignore@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== image-size@~0.5.0: version "0.5.5" @@ -6101,9 +6118,9 @@ import-fresh@^3.0.0, import-fresh@^3.2.1: resolve-from "^4.0.0" import-local@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.3.tgz#4d51c2c495ca9393da259ec66b62e022920211e0" - integrity sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA== + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== dependencies: pkg-dir "^4.2.0" resolve-cwd "^3.0.0" @@ -6136,11 +6153,6 @@ inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, i resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= - ini@^1.3.2, ini@^1.3.4, ini@~1.3.0: version "1.3.8" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" @@ -6257,9 +6269,9 @@ is-ci@^2.0.0: ci-info "^2.0.0" is-core-module@^2.2.0, is-core-module@^2.5.0, is-core-module@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.0.tgz#0321336c3d0925e497fd97f5d95cb114a5ccd548" - integrity sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw== + version "2.8.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" + integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== dependencies: has "^1.0.3" @@ -6520,17 +6532,17 @@ istanbul-lib-source-maps@^4.0.0: source-map "^0.6.1" istanbul-reports@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.1.tgz#7085857f17d2441053c6ce5c3b8fdf6882289397" - integrity sha512-q1kvhAXWSsXfMjCdNHNPKZZv94OlspKnoGv+R9RGbnqOOQ0VbNfLFgQDVgi7hHenKsndGq3/o0OBdzDXthWcNw== + version "3.1.3" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.3.tgz#4bcae3103b94518117930d51283690960b50d3c2" + integrity sha512-x9LtDVtfm/t1GFiLl3NffC7hz+I1ragvgX1P/Lg1NlIagifZDKUkuuaAxH/qpwj2IuEfD8G2Bs/UKp+sZ/pKkg== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -jest-worker@^27.0.6: - version "27.4.4" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.4.4.tgz#9390a97c013a54d07f5c2ad2b5f6109f30c4966d" - integrity sha512-jfwxYJvfua1b1XkyuyPh01ATmgg4e5fPM/muLmhy9Qc6dmiwacQB0MLHaU6IjEsv/+nAixHGxTn8WllA27Pn0w== +jest-worker@^27.4.1: + version "27.4.6" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.4.6.tgz#5d2d93db419566cb680752ca0792780e71b3273e" + integrity sha512-gHWJF/6Xi5CTG5QCvROr6GcmpIqNYpDJyc8A1h/DyXqH1tD6SnRCM0d3U5msV31D2LB/U+E0M+W4oyvKV44oNw== dependencies: "@types/node" "*" merge-stream "^2.0.0" @@ -6634,7 +6646,7 @@ json-schema-traverse@^1.0.0: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== -json-schema-typed@^7.0.1: +json-schema-typed@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/json-schema-typed/-/json-schema-typed-7.0.3.tgz#23ff481b8b4eebcd2ca123b4fa0409e66469a2d9" integrity sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A== @@ -7197,7 +7209,7 @@ merge-stream@^2.0.0: resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -merge2@^1.3.0: +merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== @@ -7247,6 +7259,11 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== +mimic-fn@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-3.1.0.tgz#65755145bbf3e36954b949c16450427451d5ca74" + integrity sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ== + mimic-response@^1.0.0, mimic-response@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" @@ -7459,7 +7476,7 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.0.0, ms@^2.1.1: +ms@2.1.3, ms@^2.0.0, 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== @@ -7489,6 +7506,11 @@ multimatch@^5.0.0: arrify "^2.0.1" minimatch "^3.0.4" +mustache@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/mustache/-/mustache-4.2.0.tgz#e5892324d60a12ec9c2a73359edca52972bf6f64" + integrity sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ== + mute-stream@0.0.8, mute-stream@~0.0.4: version "0.0.8" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" @@ -7500,16 +7522,16 @@ nan@^2.14.0: integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ== nanoid@^3.1.30: - version "3.1.30" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.30.tgz#63f93cc548d2a113dc5dfbc63bfa09e2b9b64362" - integrity sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ== + version "3.2.0" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.2.0.tgz#62667522da6673971cca916a6d3eff3f415ff80c" + integrity sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA== 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== -native-keymap@^2.1.2: +native-keymap@^2.2.1: version "2.5.0" resolved "https://registry.yarnpkg.com/native-keymap/-/native-keymap-2.5.0.tgz#4d567497efb0d2efbfd53048f14093f25984c2b4" integrity sha512-EfdMpTcX40mlHBJSWidFV4WLpwwaebK3D3JFuO/42voOAnG2WHgDdg6JerbqcxXvRhvIg934GV+9PjB3jzfu9A== @@ -7550,7 +7572,14 @@ nise@^5.1.0: just-extend "^4.0.2" path-to-regexp "^1.7.0" -node-abi@^2.11.0, node-abi@^2.18.0, node-abi@^2.21.0, node-abi@^2.7.0: +node-abi@*: + version "3.5.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.5.0.tgz#26e8b7b251c3260a5ac5ba5aef3b4345a0229248" + integrity sha512-LtHvNIBgOy5mO8mPEUtkCW/YCRWYEKshIvqhe1GHHyXEHEB5mgICyYnAcl4qan3uFeRROErKGzatFHPf6kDxWw== + dependencies: + semver "^7.3.5" + +node-abi@^2.11.0, node-abi@^2.21.0, node-abi@^2.7.0: version "2.30.1" resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.30.1.tgz#c437d4b1fe0e285aaf290d45b45d4d7afedac4cf" integrity sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w== @@ -7558,9 +7587,9 @@ node-abi@^2.11.0, node-abi@^2.18.0, node-abi@^2.21.0, node-abi@^2.7.0: semver "^5.4.1" node-addon-api@*: - version "4.2.0" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-4.2.0.tgz#117cbb5a959dff0992e1c586ae0393573e4d2a87" - integrity sha512-eazsqzwG2lskuzBqCGPi7Ac2UgOoMz8JVOXVhTvvPDYhthvNpefx8jWD8Np7Gv+2Sz0FlPWZk0nJV0z598Wn8Q== + 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-addon-api@^3.0.0: version "3.2.1" @@ -7575,14 +7604,7 @@ node-environment-flags@1.0.6: object.getownpropertydescriptors "^2.0.3" semver "^5.7.0" -node-fetch@^2.6.1: - version "2.6.6" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.6.tgz#1751a7c01834e8e1697758732e9efb6eeadfaf89" - integrity sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA== - dependencies: - whatwg-url "^5.0.0" - -node-fetch@^2.6.7: +node-fetch@^2.6.1, node-fetch@^2.6.7: version "2.6.7" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== @@ -7623,7 +7645,7 @@ node-gyp@^6.0.1: tar "^4.4.12" which "^1.3.1" -node-gyp@^7.0.0, node-gyp@^7.1.0: +node-gyp@^7.1.0: version "7.1.2" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-7.1.2.tgz#21a810aebb187120251c3bcec979af1587b188ae" integrity sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ== @@ -7646,6 +7668,13 @@ node-preload@^0.2.1: dependencies: process-on-spawn "^1.0.0" +node-pty@0.11.0-beta17: + version "0.11.0-beta17" + resolved "https://registry.yarnpkg.com/node-pty/-/node-pty-0.11.0-beta17.tgz#7df6a60dced6bf7a3a282b65cf51980c68954af6" + integrity sha512-JALo4LgYKmzmmXI23CIfS6DpCuno647YJpNg3RT6jCKTHWrt+RHeB6JAlb/pJG9dFNSeaiIAWD+0waEg2AzlfA== + dependencies: + nan "^2.14.0" + node-releases@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5" @@ -7802,6 +7831,17 @@ npm-registry-fetch@^9.0.0: minizlib "^2.0.0" npm-package-arg "^8.0.0" +npm-run-all@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-1.4.0.tgz#a469bb9feabe5bf3aa9916833baf6776582e8948" + integrity sha1-pGm7n+q+W/OqmRaDO69ndlguiUg= + dependencies: + babel-polyfill "^6.2.0" + minimatch "^3.0.0" + ps-tree "^1.0.1" + shell-quote "^1.4.3" + which "^1.2.0" + npm-run-path@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-1.0.0.tgz#f5c32bf595fe81ae927daec52e82f8b000ac3c8f" @@ -7894,9 +7934,9 @@ object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= object-inspect@^1.11.0, object-inspect@^1.9.0: - version "1.11.1" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.1.tgz#d4bd7d7de54b9a75599f59a00bd698c1f1c6549b" - integrity sha512-If7BjFlpkzzBeV1cqgT3OSWT3azyoxDGajR+iGnFBfVV2EWyDyWaZZW2ERDjUaY2QM8i5jI3Sj7mhsM4DDAqWA== + version "1.12.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0" + integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g== object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" @@ -8320,7 +8360,7 @@ path-key@^3.0.0, path-key@^3.1.0: resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-parse@^1.0.6: +path-parse@^1.0.6, path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== @@ -8372,9 +8412,9 @@ pend@~1.2.0: integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= perfect-scrollbar@^1.3.0, perfect-scrollbar@^1.5.0: - version "1.5.3" - resolved "https://registry.yarnpkg.com/perfect-scrollbar/-/perfect-scrollbar-1.5.3.tgz#dbdd84071f8460db9ff893214ed501596ad9dc5a" - integrity sha512-+Lo6t61lSuCY9ghpqh1NFMXOu8fNwlYGqPoUMOZ3HTFIL4g7+L7zD7hQCLW5yjkOZ6LGTw1m9+MfEew7cngtAQ== + version "1.5.5" + resolved "https://registry.yarnpkg.com/perfect-scrollbar/-/perfect-scrollbar-1.5.5.tgz#41a211a2fb52a7191eff301432134ea47052b27f" + integrity sha512-dzalfutyP3e/FOpdlhVryN4AJ5XDVauVWxybSkLZmakFE2sS3y3pc4JnSprw8tGmHvkaG5Edr5T7LBTZ+WWU2g== performance-now@^2.1.0: version "2.1.0" @@ -8387,9 +8427,9 @@ picocolors@^1.0.0: integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== picomatch@^2.0.4, picomatch@^2.2.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" - integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== pify@^2.2.0, pify@^2.3.0: version "2.3.0" @@ -8423,13 +8463,6 @@ pinkie@^2.0.0: resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= -pkg-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" - integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= - dependencies: - find-up "^2.1.0" - pkg-dir@^4.1.0, pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" @@ -8437,7 +8470,7 @@ pkg-dir@^4.1.0, pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" -pkg-up@^3.0.1: +pkg-up@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== @@ -8478,9 +8511,9 @@ postcss-modules-values@^4.0.0: icss-utils "^5.0.0" postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: - version "6.0.7" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.7.tgz#48404830a635113a71fd79397de8209ed05a66fc" - integrity sha512-U+b/Deoi4I/UmE6KOVPpnhS7I7AYdKbhGcat+qTQ27gycvaACvNEw11ba6RrkwVmDVRW7sigWgLj4/KbbJjeDA== + version "6.0.9" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz#ee71c3b9ff63d9cd130838876c13a2ec1a992b2f" + integrity sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ== dependencies: cssesc "^3.0.0" util-deprecate "^1.0.2" @@ -8604,13 +8637,13 @@ promzard@^0.3.0: read "1" prop-types@^15.5.6, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: - version "15.7.2" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" - integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== dependencies: loose-envify "^1.4.0" object-assign "^4.1.1" - react-is "^16.8.1" + react-is "^16.13.1" proto-list@~1.2.1: version "1.2.4" @@ -8622,7 +8655,7 @@ protocols@^1.1.0, protocols@^1.4.0: resolved "https://registry.yarnpkg.com/protocols/-/protocols-1.4.8.tgz#48eea2d8f58d9644a4a32caae5d5db290a075ce8" integrity sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg== -proxy-addr@~2.0.5: +proxy-addr@~2.0.7: version "2.0.7" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== @@ -8640,7 +8673,7 @@ prr@~1.0.1: resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= -ps-tree@^1.2.0: +ps-tree@^1.0.1, ps-tree@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.2.0.tgz#5e7425b89508736cdd4f2224d028f7bb3f722ebd" integrity sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA== @@ -8709,27 +8742,22 @@ q@^1.5.1: resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= -qs@6.7.0: - version "6.7.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" - integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== - qs@6.9.6: version "6.9.6" resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.6.tgz#26ed3c8243a431b2924aca84cc90471f35d5a0ee" integrity sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ== qs@^6.9.4: - version "6.10.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.2.tgz#c1431bea37fc5b24c5bdbafa20f16bdf2a4b9ffe" - integrity sha512-mSIdjzqznWgfd4pMii7sHtaYF8rx8861hBO80SraY5GT0XQibWZWJSid0avzHGkDIZLImux2S5mXO0Hfct2QCw== + version "6.10.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e" + integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== dependencies: side-channel "^1.0.4" qs@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + version "6.5.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" + integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== query-string@^6.13.8: version "6.14.1" @@ -8763,16 +8791,6 @@ range-parser@~1.2.1: resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" - integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== - dependencies: - bytes "3.1.0" - http-errors "1.7.2" - iconv-lite "0.4.24" - unpipe "1.0.0" - raw-body@2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.2.tgz#baf3e9c21eebced59dd6533ac872b71f7b61cb32" @@ -8812,7 +8830,7 @@ react-dom@^16.8.0: prop-types "^15.6.2" scheduler "^0.19.1" -react-is@^16.8.1: +react-is@^16.13.1: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== @@ -9067,6 +9085,16 @@ regenerate@^1.4.2: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== +regenerator-runtime@^0.10.5: + version "0.10.5" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" + integrity sha1-M2w+/BIgrc7dosn6tntaeVWjNlg= + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== + regenerator-runtime@^0.13.4: version "0.13.9" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" @@ -9080,9 +9108,9 @@ regenerator-transform@^0.14.2: "@babel/runtime" "^7.8.4" regexp.prototype.flags@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26" - integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA== + version "1.4.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz#b3f4c0059af9e47eca9f3f660e51d81307e72307" + integrity sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ== dependencies: call-bind "^1.0.2" define-properties "^1.1.3" @@ -9207,12 +9235,13 @@ resolve-from@^5.0.0: integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== resolve@^1.1.6, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.20.0, resolve@^1.3.2, resolve@^1.9.0: - version "1.20.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" - integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== + version "1.21.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.21.1.tgz#1a88c73f5ca8ab0aabc8b888c4170de26c92c4cc" + integrity sha512-lfEImVbnolPuaSZuLQ52cAxPBHeI77sPwCOWRdy12UG/CNa8an7oBHH1R+Fp1/mUqSJi4c8TIP6FOIPSZAUrEQ== dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" + is-core-module "^2.8.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" resolve@^2.0.0-next.3: version "2.0.0-next.3" @@ -9317,16 +9346,16 @@ rxjs@^6.3.1, rxjs@^6.6.0: dependencies: tslib "^1.9.0" -safe-buffer@5.1.2, 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== - -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.1, safe-buffer@~5.2.0: +safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.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== + "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@^2.1.2, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" @@ -9407,10 +9436,10 @@ semver@^7.1.1, semver@^7.1.3, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semve dependencies: lru-cache "^6.0.0" -send@0.17.1: - version "0.17.1" - resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" - integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== +send@0.17.2: + version "0.17.2" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.2.tgz#926622f76601c41808012c8bf1688fe3906f7820" + integrity sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww== dependencies: debug "2.6.9" depd "~1.1.2" @@ -9419,9 +9448,9 @@ send@0.17.1: escape-html "~1.0.3" etag "~1.8.1" fresh "0.5.2" - http-errors "~1.7.2" + http-errors "1.8.1" mime "1.6.0" - ms "2.1.1" + ms "2.1.3" on-finished "~2.3.0" range-parser "~1.2.1" statuses "~1.5.0" @@ -9447,15 +9476,15 @@ serialize-javascript@^6.0.0: dependencies: randombytes "^2.1.0" -serve-static@1.14.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" - integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== +serve-static@1.14.2: + version "1.14.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.2.tgz#722d6294b1d62626d41b43a013ece4598d292bfa" + integrity sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ== dependencies: encodeurl "~1.0.2" escape-html "~1.0.3" parseurl "~1.3.3" - send "0.17.1" + send "0.17.2" set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" @@ -9467,11 +9496,6 @@ setimmediate@^1.0.5, setimmediate@~1.0.4: resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= -setprototypeof@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" - integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== - setprototypeof@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" @@ -9512,10 +9536,15 @@ shell-path@^2.1.0: dependencies: shell-env "^0.3.0" +shell-quote@^1.4.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123" + integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw== + shelljs@^0.8.4: - version "0.8.4" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.4.tgz#de7684feeb767f8716b326078a8a00875890e3c2" - integrity sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ== + version "0.8.5" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" + integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== dependencies: glob "^7.0.0" interpret "^1.0.0" @@ -9652,9 +9681,9 @@ source-map-js@^0.6.2: integrity sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug== source-map-js@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.1.tgz#a1741c131e3c77d048252adfa24e23b908670caf" - integrity sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA== + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== source-map-loader@^2.0.1: version "2.0.2" @@ -9777,9 +9806,9 @@ sprintf-js@~1.0.2: integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= sshpk@^1.7.0: - version "1.16.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" - integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + version "1.17.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" + integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" @@ -10052,15 +10081,20 @@ supports-color@^8.0.0: dependencies: has-flag "^4.0.0" +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + symbol-tree@^3.2.2: version "3.2.4" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== table@^6.0.9: - version "6.7.5" - resolved "https://registry.yarnpkg.com/table/-/table-6.7.5.tgz#f04478c351ef3d8c7904f0e8be90a1b62417d238" - integrity sha512-LFNeryOqiQHqCVKzhkymKwt6ozeRhlm8IL1mE8rNUurkir4heF6PzMyRgaTa4tlyPTGGgXuvVOF/OLWiH09Lqw== + version "6.8.0" + resolved "https://registry.yarnpkg.com/table/-/table-6.8.0.tgz#87e28f14fa4321c3377ba286f07b79b281a3b3ca" + integrity sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA== dependencies: ajv "^8.0.1" lodash.truncate "^4.4.2" @@ -10181,11 +10215,11 @@ temp@^0.9.1: rimraf "~2.6.2" terser-webpack-plugin@^5.1.3: - version "5.2.5" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.2.5.tgz#ce65b9880a0c36872555c4874f45bbdb02ee32c9" - integrity sha512-3luOVHku5l0QBeYS8r4CdHYWEGMmIj3H1U64jgkdZzECcSOJAyJ9TjuqcQZvw1Y+4AOBN9SeYJPJmFn2cM4/2g== + version "5.3.0" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.0.tgz#21641326486ecf91d8054161c816e464435bae9f" + integrity sha512-LPIisi3Ol4chwAaPP8toUJ3L4qCM1G0wao7L3qNv57Drezxj6+VEyySpPw4B1HSO2Eg/hDY/MNF5XihCAoqnsQ== dependencies: - jest-worker "^27.0.6" + jest-worker "^27.4.1" schema-utils "^3.1.1" serialize-javascript "^6.0.0" source-map "^0.6.1" @@ -10268,11 +10302,6 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -toidentifier@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" - integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== - toidentifier@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" @@ -10347,7 +10376,7 @@ ts-md5@^1.2.2: resolved "https://registry.yarnpkg.com/ts-md5/-/ts-md5-1.2.10.tgz#65c9208697a2478269e5e4f45518090fe46dcdcb" integrity sha512-ZpBxcZRHSqVMWU4lE6pTMM6PTxSNZM6ziLwasimxxE/SiItgdalL8bKproawJ+6cPR4M2mSD4+cAgt90VYzjUQ== -tsconfig-paths@^3.11.0: +tsconfig-paths@^3.12.0: version "3.12.0" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz#19769aca6ee8f6a1a341e38c8fa45dd9fb18899b" integrity sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg== @@ -10466,17 +10495,17 @@ type-fest@^0.6.0: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== -type-fest@^0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" - integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== - type-fest@^0.8.0, type-fest@^0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -type-is@^1.6.4, type-is@~1.6.17, type-is@~1.6.18: +type-fest@^1.0.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" + integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== + +type-is@^1.6.4, type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== @@ -10529,9 +10558,9 @@ typescript@^3.9.2: integrity sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q== typescript@^4.4.3: - version "4.5.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.3.tgz#afaa858e68c7103317d89eb90c5d8906268d353c" - integrity sha512-eVYaEHALSt+s9LbvgEv4Ef+Tdq7hBiIZgii12xXJnukryt3pMgJf6aKhoCZ3FWQsu6sydEnkg11fYXLzhLBjeQ== + version "4.5.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.5.tgz#d8c953832d28924a9e3d37c73d729c846c5896f3" + integrity sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA== uc.micro@^1.0.1, uc.micro@^1.0.5: version "1.0.6" @@ -10808,9 +10837,9 @@ vscode-oniguruma@^1.6.1: integrity sha512-vc4WhSIaVpgJ0jJIejjYxPvURJavX6QG41vu0mGhqywMkQqulezEqEQ3cO3gc8GvcOpX6ycmKGqRoROEMBNXTQ== vscode-ripgrep@^1.2.4: - version "1.12.1" - resolved "https://registry.yarnpkg.com/vscode-ripgrep/-/vscode-ripgrep-1.12.1.tgz#4a319809d4010ea230659ce605fddacd1e36a589" - integrity sha512-4edKlcXNSKdC9mIQmQ9Wl25v0SF5DOK31JlvKHKHYV4co0V2MjI9pbDPdmogwbtiykz+kFV/cKnZH2TgssEasQ== + version "1.13.2" + resolved "https://registry.yarnpkg.com/vscode-ripgrep/-/vscode-ripgrep-1.13.2.tgz#8ccebc33f14d54442c4b11962aead163c55b506e" + integrity sha512-RlK9U87EokgHfiOjDQ38ipQQX936gWOcWPQaJpYf+kAkz1PQ1pK2n7nhiscdOmLu6XGjTs7pWFJ/ckonpN7twQ== dependencies: https-proxy-agent "^4.0.0" proxy-from-env "^1.1.0" @@ -10903,15 +10932,15 @@ webpack-merge@^5.7.3: clone-deep "^4.0.1" wildcard "^2.0.0" -webpack-sources@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.2.tgz#d88e3741833efec57c4c789b6010db9977545260" - integrity sha512-cp5qdmHnu5T8wRg2G3vZZHoJPN14aqQ89SyQ11NpGH5zEMDCclt49rzo+MaRazk7/UeILhAI+/sEtcM+7Fr0nw== +webpack-sources@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" + integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== webpack@^5.48.0: - version "5.65.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.65.0.tgz#ed2891d9145ba1f0d318e4ea4f89c3fa18e6f9be" - integrity sha512-Q5or2o6EKs7+oKmJo7LaqZaMOlDWQse9Tm5l1WAfU/ujLGN5Pb0SqGeVkN/4bpPmEqEP5RnVhiqsOtWtUVwGRw== + version "5.67.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.67.0.tgz#cb43ca2aad5f7cc81c4cd36b626e6b819805dbfd" + integrity sha512-LjFbfMh89xBDpUMgA1W9Ur6Rn/gnr2Cq1jjHFPo4v6a79/ypznSYbAyPgGhwsxBtMIaEmDD1oJoA7BEYw/Fbrw== dependencies: "@types/eslint-scope" "^3.7.0" "@types/estree" "^0.0.50" @@ -10927,7 +10956,7 @@ webpack@^5.48.0: eslint-scope "5.1.1" events "^3.2.0" glob-to-regexp "^0.4.1" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" json-parse-better-errors "^1.0.2" loader-runner "^4.2.0" mime-types "^2.1.27" @@ -10936,7 +10965,7 @@ webpack@^5.48.0: tapable "^2.1.1" terser-webpack-plugin "^5.1.3" watchpack "^2.3.1" - webpack-sources "^3.2.2" + webpack-sources "^3.2.3" whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: version "1.0.5" @@ -11011,7 +11040,7 @@ which-pm-runs@^1.0.0: resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs= -which@1.3.1, which@^1.2.8, which@^1.2.9, which@^1.3.1: +which@1.3.1, which@^1.2.0, which@^1.2.8, which@^1.2.9, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== @@ -11210,20 +11239,20 @@ xtend@^4.0.0, xtend@~4.0.1: resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== -xterm-addon-fit@~0.5.0: +xterm-addon-fit@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/xterm-addon-fit/-/xterm-addon-fit-0.5.0.tgz#2d51b983b786a97dcd6cde805e700c7f913bc596" integrity sha512-DsS9fqhXHacEmsPxBJZvfj2la30Iz9xk+UKjhQgnYNkrUIN5CYLbw7WEfz117c7+S86S/tpHPfvNxJsF5/G8wQ== -xterm-addon-search@~0.8.0: - version "0.8.1" - resolved "https://registry.yarnpkg.com/xterm-addon-search/-/xterm-addon-search-0.8.1.tgz#dfc557e9bcf5fd8ed96292c0d271aa865bc545d5" - integrity sha512-OtOaC9gxD2Q4ZnjZrCSRZmKLwwUjXX3gP7mIzq8Rs50317DGRDqgTLuHTYv/Nx/LvI5ceVFRYCxK36Ixs1nXNw== +xterm-addon-search@^0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/xterm-addon-search/-/xterm-addon-search-0.8.2.tgz#be7aa74d5ff12c901707c6ff674229f214318032" + integrity sha512-I1863mjn8P6uVrqm/X+btalVsqjAKLhnhpbP7SavAOpEkI1jJhbHU2UTp7NjeRtcKTks6UWk/ycgds5snDSejg== -xterm@~4.11.0: - version "4.11.0" - resolved "https://registry.yarnpkg.com/xterm/-/xterm-4.11.0.tgz#d7dabc7af5299579e4663fedf2b3a179af9aaff9" - integrity sha512-NeJH909WTO2vth/ZlC0gkP3AGzupbvVHVlmtrpBw56/sGFXaF9bNdKgqKa3tf8qbGvXMzL2JhCcHVklqFztIRw== +xterm@^4.16.0: + version "4.16.0" + resolved "https://registry.yarnpkg.com/xterm/-/xterm-4.16.0.tgz#af25223c72917438842121e1bcd1b60ffd7e8476" + integrity sha512-nAbuigL9CYkI075mdfqpnB8cHZNKxENCj1CQ9Tm5gSvWkMtkanmRN2mkHGjSaET1/3+X9BqISFFo7Pd2mXVjiQ== y18n@^4.0.0: version "4.0.3"