From 742acc7434dd3796d0ce752d1302fa7a51fe4c7a Mon Sep 17 00:00:00 2001 From: Eric Amodio Date: Wed, 24 Nov 2021 17:49:18 -0500 Subject: [PATCH] Adds a web build for vscode.dev/github.dev --- .eslintignore | 4 +- .eslintrc.base.json | 269 ++++++++++++++++++++++++ .eslintrc.browser.json | 10 + .eslintrc.json | 281 +------------------------ .gitignore | 4 +- .vscode/settings.json | 2 +- .vscodeignore | 7 +- package.json | 7 +- src/@types/lib.textEncoder.d.ts | 5 + src/env/browser/base64.ts | 25 +++ src/env/browser/fetch.ts | 5 + src/env/browser/hex.ts | 43 ++++ src/env/browser/hrtime.ts | 14 ++ src/env/node/base64.ts | 9 + src/env/node/fetch.ts | 5 + src/env/node/hex.ts | 7 + src/env/node/hrtime.ts | 1 + src/git/git.ts | 1 - src/git/gitService.ts | 2 +- src/system/string.ts | 7 +- src/trackers/documentTracker.ts | 2 +- src/webviews/apps/.eslintrc.json | 5 +- src/webviews/apps/tsconfig.json | 6 +- src/webviews/rebaseEditor.ts | 1 - src/webviews/webviewBase.ts | 1 - tsconfig.base.json | 27 +++ tsconfig.browser.json | 12 ++ tsconfig.json | 28 +-- webpack.config.js | 207 +++++++++++------- yarn.lock | 349 ++++++++++++++++++++++++++++++- 30 files changed, 937 insertions(+), 409 deletions(-) create mode 100644 .eslintrc.base.json create mode 100644 .eslintrc.browser.json create mode 100644 src/@types/lib.textEncoder.d.ts create mode 100644 src/env/browser/base64.ts create mode 100644 src/env/browser/fetch.ts create mode 100644 src/env/browser/hex.ts create mode 100644 src/env/browser/hrtime.ts create mode 100644 src/env/node/base64.ts create mode 100644 src/env/node/fetch.ts create mode 100644 src/env/node/hex.ts create mode 100644 src/env/node/hrtime.ts create mode 100644 tsconfig.base.json create mode 100644 tsconfig.browser.json diff --git a/.eslintignore b/.eslintignore index fe3eb447edcec..1dacbb9e0d452 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,4 +1,4 @@ dist/* -src/@types/* +**/@types/* emojis.json -tsconfig.tsbuildinfo +tsconfig*.tsbuildinfo diff --git a/.eslintrc.base.json b/.eslintrc.base.json new file mode 100644 index 0000000000000..906ba5bc7a646 --- /dev/null +++ b/.eslintrc.base.json @@ -0,0 +1,269 @@ +{ + "env": { + "es6": true + }, + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "plugin:@typescript-eslint/recommended-requiring-type-checking", + "plugin:import/recommended", + "plugin:import/typescript", + "prettier" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2019, + "sourceType": "module", + "ecmaFeatures": { + "impliedStrict": true + } + }, + "plugins": ["anti-trojan-source", "import", "@typescript-eslint"], + "reportUnusedDisableDirectives": true, + "root": true, + "rules": { + "anti-trojan-source/no-bidi": "error", + "arrow-parens": ["off"], + "brace-style": ["off", "stroustrup"], + "consistent-return": "error", + "curly": ["error", "multi-line", "consistent"], + "eol-last": "error", + "linebreak-style": ["error", "unix"], + "new-parens": "error", + "no-console": "off", + "no-constant-condition": ["warn", { "checkLoops": false }], + "no-caller": "error", + "no-debugger": "warn", + "no-dupe-class-members": "off", + "no-else-return": "warn", + "no-empty": ["warn", { "allowEmptyCatch": true }], + "no-eval": "error", + "no-ex-assign": "warn", + "no-extend-native": "error", + "no-extra-bind": "error", + "no-floating-decimal": "error", + "no-implicit-coercion": "error", + "no-implied-eval": "error", + // Turn off until fix for: https://github.com/typescript-eslint/typescript-eslint/issues/239 + "no-inner-declarations": "off", + "no-lone-blocks": "error", + "no-lonely-if": "error", + "no-loop-func": "error", + "no-multi-spaces": "error", + "no-return-assign": "error", + "no-return-await": "warn", + "no-self-compare": "error", + "no-sequences": "error", + "no-template-curly-in-string": "warn", + "no-throw-literal": "error", + "no-unmodified-loop-condition": "warn", + "no-unneeded-ternary": "error", + "no-use-before-define": "off", + "no-useless-call": "error", + "no-useless-catch": "error", + "no-useless-computed-key": "error", + "no-useless-concat": "error", + "no-useless-rename": "error", + "no-useless-return": "error", + "no-var": "error", + "no-with": "error", + "object-shorthand": ["error", "never"], + "one-var": ["error", "never"], + "prefer-arrow-callback": "error", + "prefer-const": [ + "error", + { + "destructuring": "all", + "ignoreReadBeforeAssign": false + } + ], + "prefer-numeric-literals": "error", + "prefer-object-spread": "error", + "prefer-rest-params": "error", + "prefer-spread": "error", + "prefer-template": "error", + "quotes": ["error", "single", { "avoidEscape": true, "allowTemplateLiterals": true }], + // Turn off until fix for: https://github.com/eslint/eslint/issues/11899 + "require-atomic-updates": "off", + "semi": ["error", "always"], + "semi-style": ["error", "last"], + "sort-imports": [ + "error", + { + "ignoreCase": true, + "ignoreDeclarationSort": true, + "ignoreMemberSort": false, + "memberSyntaxSortOrder": ["none", "all", "multiple", "single"] + } + ], + "yoda": "error", + "import/export": "off", + "import/extensions": ["error", "never"], + "import/named": "off", + "import/namespace": "off", + "import/newline-after-import": "warn", + "import/no-cycle": "off", + "import/no-dynamic-require": "error", + "import/no-default-export": "error", + "import/no-self-import": "error", + "import/no-unresolved": ["warn", { "ignore": ["vscode", "@env"] }], + "import/order": [ + "warn", + { + "alphabetize": { "order": "asc", "caseInsensitive": true }, + "groups": ["builtin", "external", "internal", ["parent", "sibling", "index"]], + // "groups": ["builtin", "external", "internal", ["index", "sibling", "parent"]], + "newlines-between": "never" + } + ], + "@typescript-eslint/ban-types": [ + "error", + { + "extendDefaults": false, + "types": { + "String": { + "message": "Use string instead", + "fixWith": "string" + }, + "Boolean": { + "message": "Use boolean instead", + "fixWith": "boolean" + }, + "Number": { + "message": "Use number instead", + "fixWith": "number" + }, + "Symbol": { + "message": "Use symbol instead", + "fixWith": "symbol" + }, + // "Function": { + // "message": "The `Function` type accepts any function-like value.\nIt provides no type safety when calling the function, which can be a common source of bugs.\nIt also accepts things like class declarations, which will throw at runtime as they will not be called with `new`.\nIf you are expecting the function to accept certain arguments, you should explicitly define the function shape." + // }, + "Object": { + "message": "The `Object` type actually means \"any non-nullish value\", so it is marginally better than `unknown`.\n- If you want a type meaning \"any object\", you probably want `Record` instead.\n- If you want a type meaning \"any value\", you probably want `unknown` instead." + }, + "{}": { + "message": "`{}` actually means \"any non-nullish value\".\n- If you want a type meaning \"any object\", you probably want `object` or `Record` instead.\n- If you want a type meaning \"any value\", you probably want `unknown` instead.", + "fixWith": "object" + } + // "object": { + // "message": "The `object` type is currently hard to use ([see this issue](https://github.com/microsoft/TypeScript/issues/21732)).\nConsider using `Record` instead, as it allows you to more easily inspect and use the keys." + // } + } + } + ], + "@typescript-eslint/consistent-type-assertions": [ + "error", + { + "assertionStyle": "as", + "objectLiteralTypeAssertions": "allow-as-parameter" + } + ], + "@typescript-eslint/explicit-function-return-type": "off", + "@typescript-eslint/explicit-member-accessibility": "off", + "@typescript-eslint/explicit-module-boundary-types": "off", // TODO@eamodio revisit + "@typescript-eslint/naming-convention": [ + "error", + { + "selector": "variable", + "format": ["camelCase", "PascalCase"], + "leadingUnderscore": "allow", + "filter": { + "regex": "^_$", + "match": false + } + }, + { + "selector": "variableLike", + "format": ["camelCase"], + "leadingUnderscore": "allow", + "filter": { + "regex": "^_$", + "match": false + } + }, + { + "selector": "memberLike", + "modifiers": ["private"], + "format": ["camelCase"], + "leadingUnderscore": "allow" + }, + { + "selector": "memberLike", + "modifiers": ["private", "readonly"], + "format": ["camelCase", "PascalCase"], + "leadingUnderscore": "allow" + }, + { + "selector": "memberLike", + "modifiers": ["static", "readonly"], + "format": ["camelCase", "PascalCase"] + }, + { + "selector": "interface", + "format": ["PascalCase"], + "custom": { + "regex": "^I[A-Z]", + "match": false + } + } + ], + "@typescript-eslint/no-duplicate-imports": "error", + "@typescript-eslint/no-empty-function": "off", + "@typescript-eslint/no-empty-interface": "error", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-floating-promises": "error", + "@typescript-eslint/no-inferrable-types": ["warn", { "ignoreParameters": true, "ignoreProperties": true }], + "@typescript-eslint/no-misused-promises": ["error", { "checksVoidReturn": false }], + "@typescript-eslint/no-namespace": "off", + "@typescript-eslint/no-non-null-assertion": "off", + "@typescript-eslint/no-parameter-properties": "off", + "@typescript-eslint/no-unnecessary-condition": "off", + "@typescript-eslint/no-unsafe-argument": "off", + "@typescript-eslint/no-unsafe-assignment": "off", + "@typescript-eslint/no-unsafe-call": "off", + "@typescript-eslint/no-unsafe-member-access": "off", + "@typescript-eslint/no-unsafe-return": "off", + "@typescript-eslint/no-unused-expressions": ["warn", { "allowShortCircuit": true }], + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "args": "after-used", + "argsIgnorePattern": "^_", + "ignoreRestSiblings": true, + "varsIgnorePattern": "^_$" + } + ], + "@typescript-eslint/no-use-before-define": "off", + "@typescript-eslint/prefer-nullish-coalescing": "off", + "@typescript-eslint/prefer-optional-chain": "warn", + "@typescript-eslint/restrict-template-expressions": [ + "error", + { "allowAny": true, "allowBoolean": true, "allowNumber": true, "allowNullish": true } + ], + "@typescript-eslint/strict-boolean-expressions": [ + "warn", + { + "allowString": true, + "allowNumber": true, + "allowNullableObject": false, + "allowNullableBoolean": true, + "allowNullableNumber": true, + "allowNullableString": true, + "allowAny": false + } + ], + "@typescript-eslint/unbound-method": "off" // Too many bugs right now: https://github.com/typescript-eslint/typescript-eslint/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+unbound-method + }, + "settings": { + "import/parsers": { + "@typescript-eslint/parser": [".ts", ".tsx"] + }, + "import/resolver": { + "typescript": { + "alwaysTryTypes": true // always try to resolve types under `@types` directory even it doesn't contain any source code, like `@types/unist` + } + } + } +} diff --git a/.eslintrc.browser.json b/.eslintrc.browser.json new file mode 100644 index 0000000000000..cd1ce88996188 --- /dev/null +++ b/.eslintrc.browser.json @@ -0,0 +1,10 @@ +{ + "extends": [".eslintrc.base.json"], + "env": { + "worker": true + }, + "ignorePatterns": ["src/webviews/apps/**/*", "src/env/node/*"], + "parserOptions": { + "project": "tsconfig.browser.json" + } +} diff --git a/.eslintrc.json b/.eslintrc.json index 27e52b1176405..88e5692efa004 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,287 +1,10 @@ { + "extends": [".eslintrc.base.json"], "env": { - "es6": true, "node": true }, - "extends": [ - "eslint:recommended", - "plugin:@typescript-eslint/recommended", - "plugin:@typescript-eslint/recommended-requiring-type-checking", - "plugin:import/recommended", - "plugin:import/typescript", - "prettier" - ], - "parser": "@typescript-eslint/parser", + "ignorePatterns": ["src/webviews/apps/**/*", "src/env/browser/*"], "parserOptions": { - "ecmaVersion": 2019, - "sourceType": "module", - "ecmaFeatures": { - "impliedStrict": true - }, "project": "tsconfig.json" - }, - "plugins": ["anti-trojan-source", "import", "@typescript-eslint"], - "reportUnusedDisableDirectives": true, - "root": true, - "rules": { - "anti-trojan-source/no-bidi": "error", - "arrow-parens": ["off"], - "brace-style": ["off", "stroustrup"], - "consistent-return": "error", - "curly": ["error", "multi-line", "consistent"], - "eol-last": "error", - "linebreak-style": ["error", "unix"], - "new-parens": "error", - "no-console": "off", - "no-constant-condition": ["warn", { "checkLoops": false }], - "no-caller": "error", - "no-debugger": "warn", - "no-dupe-class-members": "off", - "no-else-return": "warn", - "no-empty": ["warn", { "allowEmptyCatch": true }], - "no-eval": "error", - "no-ex-assign": "warn", - "no-extend-native": "error", - "no-extra-bind": "error", - "no-floating-decimal": "error", - "no-implicit-coercion": "error", - "no-implied-eval": "error", - // Turn off until fix for: https://github.com/typescript-eslint/typescript-eslint/issues/239 - "no-inner-declarations": "off", - "no-lone-blocks": "error", - "no-lonely-if": "error", - "no-loop-func": "error", - "no-multi-spaces": "error", - "no-return-assign": "error", - "no-return-await": "warn", - "no-self-compare": "error", - "no-sequences": "error", - "no-template-curly-in-string": "warn", - "no-throw-literal": "error", - "no-unmodified-loop-condition": "warn", - "no-unneeded-ternary": "error", - "no-use-before-define": "off", - "no-useless-call": "error", - "no-useless-catch": "error", - "no-useless-computed-key": "error", - "no-useless-concat": "error", - "no-useless-rename": "error", - "no-useless-return": "error", - "no-var": "error", - "no-with": "error", - "object-shorthand": ["error", "never"], - "one-var": ["error", "never"], - "prefer-arrow-callback": "error", - "prefer-const": [ - "error", - { - "destructuring": "all", - "ignoreReadBeforeAssign": false - } - ], - "prefer-numeric-literals": "error", - "prefer-object-spread": "error", - "prefer-rest-params": "error", - "prefer-spread": "error", - "prefer-template": "error", - "quotes": ["error", "single", { "avoidEscape": true, "allowTemplateLiterals": true }], - // Turn off until fix for: https://github.com/eslint/eslint/issues/11899 - "require-atomic-updates": "off", - "semi": ["error", "always"], - "semi-style": ["error", "last"], - "sort-imports": [ - "error", - { - "ignoreCase": true, - "ignoreDeclarationSort": true, - "ignoreMemberSort": false, - "memberSyntaxSortOrder": ["none", "all", "multiple", "single"] - } - ], - "yoda": "error", - "import/export": "off", - "import/extensions": ["error", "never"], - "import/named": "off", - "import/namespace": "off", - "import/newline-after-import": "warn", - "import/no-cycle": "off", - "import/no-dynamic-require": "error", - "import/no-default-export": "error", - "import/no-self-import": "error", - "import/no-unresolved": ["warn", { "ignore": ["vscode"] }], - "import/order": [ - "warn", - { - "alphabetize": { "order": "asc", "caseInsensitive": true }, - "groups": ["builtin", "external", "internal", ["parent", "sibling", "index"]], - // "groups": ["builtin", "external", "internal", ["index", "sibling", "parent"]], - "newlines-between": "never" - } - ], - "@typescript-eslint/ban-types": [ - "error", - { - "extendDefaults": false, - "types": { - "String": { - "message": "Use string instead", - "fixWith": "string" - }, - "Boolean": { - "message": "Use boolean instead", - "fixWith": "boolean" - }, - "Number": { - "message": "Use number instead", - "fixWith": "number" - }, - "Symbol": { - "message": "Use symbol instead", - "fixWith": "symbol" - }, - // "Function": { - // "message": "The `Function` type accepts any function-like value.\nIt provides no type safety when calling the function, which can be a common source of bugs.\nIt also accepts things like class declarations, which will throw at runtime as they will not be called with `new`.\nIf you are expecting the function to accept certain arguments, you should explicitly define the function shape." - // }, - "Object": { - "message": "The `Object` type actually means \"any non-nullish value\", so it is marginally better than `unknown`.\n- If you want a type meaning \"any object\", you probably want `Record` instead.\n- If you want a type meaning \"any value\", you probably want `unknown` instead." - }, - "{}": { - "message": "`{}` actually means \"any non-nullish value\".\n- If you want a type meaning \"any object\", you probably want `object` or `Record` instead.\n- If you want a type meaning \"any value\", you probably want `unknown` instead.", - "fixWith": "object" - } - // "object": { - // "message": "The `object` type is currently hard to use ([see this issue](https://github.com/microsoft/TypeScript/issues/21732)).\nConsider using `Record` instead, as it allows you to more easily inspect and use the keys." - // } - } - } - ], - "@typescript-eslint/consistent-type-assertions": [ - "error", - { - "assertionStyle": "as", - "objectLiteralTypeAssertions": "allow-as-parameter" - } - ], - "@typescript-eslint/explicit-function-return-type": "off", - "@typescript-eslint/explicit-member-accessibility": "off", - "@typescript-eslint/explicit-module-boundary-types": "off", // TODO@eamodio revisit - "@typescript-eslint/naming-convention": [ - "error", - { - "selector": "variable", - "format": ["camelCase", "PascalCase"], - "leadingUnderscore": "allow", - "filter": { - "regex": "^_$", - "match": false - } - }, - { - "selector": "variableLike", - "format": ["camelCase"], - "leadingUnderscore": "allow", - "filter": { - "regex": "^_$", - "match": false - } - }, - { - "selector": "memberLike", - "modifiers": ["private"], - "format": ["camelCase"], - "leadingUnderscore": "allow" - }, - { - "selector": "memberLike", - "modifiers": ["private", "readonly"], - "format": ["camelCase", "PascalCase"], - "leadingUnderscore": "allow" - }, - { - "selector": "memberLike", - "modifiers": ["static", "readonly"], - "format": ["camelCase", "PascalCase"] - }, - { - "selector": "interface", - "format": ["PascalCase"], - "custom": { - "regex": "^I[A-Z]", - "match": false - } - } - ], - "@typescript-eslint/no-duplicate-imports": "error", - "@typescript-eslint/no-empty-function": "off", - "@typescript-eslint/no-empty-interface": "error", - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/no-floating-promises": "error", - "@typescript-eslint/no-inferrable-types": ["warn", { "ignoreParameters": true, "ignoreProperties": true }], - "@typescript-eslint/no-misused-promises": ["error", { "checksVoidReturn": false }], - "@typescript-eslint/no-namespace": "off", - "@typescript-eslint/no-non-null-assertion": "off", - "@typescript-eslint/no-parameter-properties": "off", - "@typescript-eslint/no-unnecessary-condition": "off", - "@typescript-eslint/no-unsafe-argument": "off", - "@typescript-eslint/no-unsafe-assignment": "off", - "@typescript-eslint/no-unsafe-call": "off", - "@typescript-eslint/no-unsafe-member-access": "off", - "@typescript-eslint/no-unsafe-return": "off", - "@typescript-eslint/no-unused-expressions": ["warn", { "allowShortCircuit": true }], - "@typescript-eslint/no-unused-vars": [ - "warn", - { - "args": "after-used", - "argsIgnorePattern": "^_", - "ignoreRestSiblings": true, - "varsIgnorePattern": "^_$" - } - ], - "@typescript-eslint/no-use-before-define": "off", - "@typescript-eslint/prefer-nullish-coalescing": "off", - "@typescript-eslint/prefer-optional-chain": "warn", - "@typescript-eslint/restrict-template-expressions": [ - "error", - { "allowAny": true, "allowBoolean": true, "allowNumber": true, "allowNullish": true } - ], - "@typescript-eslint/strict-boolean-expressions": [ - "warn", - { - "allowString": true, - "allowNumber": true, - "allowNullableObject": false, - "allowNullableBoolean": true, - "allowNullableNumber": true, - "allowNullableString": true, - "allowAny": false - } - ], - "@typescript-eslint/unbound-method": "off" // Too many bugs right now: https://github.com/typescript-eslint/typescript-eslint/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+unbound-method - }, - "settings": { - "import/parsers": { - "@typescript-eslint/parser": [".ts", ".tsx"] - }, - "import/resolver": { - "typescript": { - "alwaysTryTypes": true // always try to resolve types under `@types` directory even it doesn't contain any source code, like `@types/unist` - - // // Choose from one of the "project" configs below or omit to use /tsconfig.json by default - - // // use /path/to/folder/tsconfig.json - // "project": "path/to/folder", - - // // Multiple tsconfigs (Useful for monorepos) - - // // use a glob pattern - // "project": "packages/*/tsconfig.json", - - // // use an array - // "project": ["packages/module-a/tsconfig.json", "packages/module-b/tsconfig.json"], - - // // use an array of glob patterns - // "project": ["packages/*/tsconfig.json", "other-packages/*/tsconfig.json"] - } - } } } diff --git a/.gitignore b/.gitignore index 83b95ebcd124d..21079580f4008 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ -.eslintcache +.eslintcache* .vscode-clean/** dist node_modules images/settings gitlens-*.vsix -tsconfig.tsbuildinfo +tsconfig*.tsbuildinfo diff --git a/.vscode/settings.json b/.vscode/settings.json index c93e02ac0fadb..8bb765930f210 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -4,7 +4,7 @@ }, "eslint.packageManager": "yarn", "files.associations": { - ".eslintrc.json": "jsonc" + ".eslintrc*.json": "jsonc" }, "files.trimTrailingWhitespace": true, "githubIssues.queries": [ diff --git a/.vscodeignore b/.vscodeignore index bb776b7c7df09..0a21097db598e 100644 --- a/.vscodeignore +++ b/.vscodeignore @@ -12,6 +12,7 @@ src/** test/** **/*.fig **/*.pdn +**/*.js.LICENSE.txt .eslintcache .eslintignore .eslintrc.json @@ -25,9 +26,9 @@ test/** CODE_OF_CONDUCT.md CONTRIBUTING.md generateEmojiShortcodeMap.js +README.insiders.md tsconfig.eslint.json -tsconfig.json -tsconfig.webviews.json -tsconfig.tsbuildinfo +tsconfig*.json +tsconfig*.tsbuildinfo webpack.config.js yarn.lock diff --git a/package.json b/package.json index 21f7ea7e687d4..3c6e616b00b8c 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,8 @@ "engines": { "vscode": "^1.62.0" }, - "main": "./dist/gitlens", + "main": "./dist/gitlens.js", + "browser": "./dist/browser/gitlens.js", "icon": "images/gitlens-icon.png", "preview": false, "badges": [ @@ -10015,9 +10016,12 @@ "@octokit/graphql": "4.8.0", "@vscode/codicons": "0.0.26", "chroma-js": "2.1.2", + "crypto-browserify": "3.12.0", "dayjs": "1.10.7", "iconv-lite": "0.6.3", "lodash-es": "4.17.21", + "node-fetch": "3.1.0", + "path-browserify": "1.0.1", "sortablejs": "1.14.0" }, "devDependencies": { @@ -10048,6 +10052,7 @@ "html-webpack-plugin": "5.5.0", "image-minimizer-webpack-plugin": "2.2.0", "imagemin-webp": "6.0.0", + "json5": "2.2.0", "mini-css-extract-plugin": "2.4.5", "prettier": "2.5.0", "sass": "1.44.0", diff --git a/src/@types/lib.textEncoder.d.ts b/src/@types/lib.textEncoder.d.ts new file mode 100644 index 0000000000000..9c7bd7903edf2 --- /dev/null +++ b/src/@types/lib.textEncoder.d.ts @@ -0,0 +1,5 @@ +// Define TextEncoder + TextDecoder globals for both browser and node runtimes +// See: https://github.com/microsoft/TypeScript/issues/31535 + +declare let TextDecoder: typeof import('util').TextDecoder; +declare let TextEncoder: typeof import('util').TextEncoder; diff --git a/src/env/browser/base64.ts b/src/env/browser/base64.ts new file mode 100644 index 0000000000000..21a7a5a1a9b9f --- /dev/null +++ b/src/env/browser/base64.ts @@ -0,0 +1,25 @@ +const { fromCharCode } = String; +const textEncoder = new TextEncoder(); + +export function base64(s: string): string; +export function base64(bytes: Uint8Array): string; +export function base64(data: string | Uint8Array): string { + let bytes = typeof data === 'string' ? textEncoder.encode(data) : data; + + let output = ''; + for (let i = 0, { length } = bytes; i < length; i++) { + output += fromCharCode(bytes[i]); + } + return globalThis.btoa(output); +} + +export function fromBase64(s: string): Uint8Array { + const decoded = globalThis.atob(s); + + const len = decoded.length; + const bytes = new Uint8Array(len); + for (let i = 0; i < len; i++) { + bytes[i] = decoded.charCodeAt(i); + } + return bytes; +} diff --git a/src/env/browser/fetch.ts b/src/env/browser/fetch.ts new file mode 100644 index 0000000000000..68dd75826abde --- /dev/null +++ b/src/env/browser/fetch.ts @@ -0,0 +1,5 @@ +export default globalThis.fetch; + +declare type _BodyInit = BodyInit; +declare type _RequestInit = RequestInit; +export type { _BodyInit as BodyInit, _RequestInit as RequestInit }; diff --git a/src/env/browser/hex.ts b/src/env/browser/hex.ts new file mode 100644 index 0000000000000..d2482408b2f7c --- /dev/null +++ b/src/env/browser/hex.ts @@ -0,0 +1,43 @@ +const textDecoder = new TextDecoder(); +const textEncoder = new TextEncoder(); + +// const precomputedByteToHex: string[] = []; +// for (let i = 0; i <= 0xff; ++i) { +// precomputedByteToHex.push(i.toString(16).padStart(2, '0')); +// } + +// prettier-ignore +const precomputedByteToHex = [ + '00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '0a', '0b', '0c', '0d', '0e', '0f', '10', '11', '12', + '13', '14', '15', '16', '17', '18', '19', '1a', '1b', '1c', '1d', '1e', '1f', '20', '21', '22', '23', '24', '25', + '26', '27', '28', '29', '2a', '2b', '2c', '2d', '2e', '2f', '30', '31', '32', '33', '34', '35', '36', '37', '38', + '39', '3a', '3b', '3c', '3d', '3e', '3f', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '4a', '4b', + '4c', '4d', '4e', '4f', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '5a', '5b', '5c', '5d', '5e', + '5f', '60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '6a', '6b', '6c', '6d', '6e', '6f', '70', '71', + '72', '73', '74', '75', '76', '77', '78', '79', '7a', '7b', '7c', '7d', '7e', '7f', '80', '81', '82', '83', '84', + '85', '86', '87', '88', '89', '8a', '8b', '8c', '8d', '8e', '8f', '90', '91', '92', '93', '94', '95', '96', '97', + '98', '99', '9a', '9b', '9c', '9d', '9e', '9f', 'a0', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'a8', 'a9', 'aa', + 'ab', 'ac', 'ad', 'ae', 'af', 'b0', 'b1', 'b2', 'b3', 'b4', 'b5', 'b6', 'b7', 'b8', 'b9', 'ba', 'bb', 'bc', 'bd', + 'be', 'bf', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c7', 'c8', 'c9', 'ca', 'cb', 'cc', 'cd', 'ce', 'cf', 'd0', + 'd1', 'd2', 'd3', 'd4', 'd5', 'd6', 'd7', 'd8', 'd9', 'da', 'db', 'dc', 'dd', 'de', 'df', 'e0', 'e1', 'e2', 'e3', + 'e4', 'e5', 'e6', 'e7', 'e8', 'e9', 'ea', 'eb', 'ec', 'ed', 'ee', 'ef', 'f0', 'f1', 'f2', 'f3', 'f4', 'f5', 'f6', + 'f7', 'f8', 'f9', 'fa', 'fb', 'fc', 'fd', 'fe', 'ff', +]; + +export function encodeUtf8Hex(s: string): string { + const bytes = textEncoder.encode(s); + + const hex = new Array(bytes.length); + for (let i = 0; i < bytes.length; ++i) { + hex[i] = precomputedByteToHex[bytes[i]]; + } + return hex.join(''); +} + +export function decodeUtf8Hex(hex: string): string { + const matches = hex.match(/(\w{2})/g); + if (matches === null) return ''; + + const bytes = new Uint8Array(matches.map(c => parseInt(c, 16))); + return textDecoder.decode(bytes); +} diff --git a/src/env/browser/hrtime.ts b/src/env/browser/hrtime.ts new file mode 100644 index 0000000000000..cb54c572c8ce8 --- /dev/null +++ b/src/env/browser/hrtime.ts @@ -0,0 +1,14 @@ +export function hrtime(time?: [number, number]): [number, number] { + const now = performance.now() * 1e-3; + let seconds = Math.floor(now); + let nanoseconds = Math.floor((now % 1) * 1e9); + if (time !== undefined) { + seconds = seconds - time[0]; + nanoseconds = nanoseconds - time[1]; + if (nanoseconds < 0) { + seconds--; + nanoseconds += 1e9; + } + } + return [seconds, nanoseconds]; +} diff --git a/src/env/node/base64.ts b/src/env/node/base64.ts new file mode 100644 index 0000000000000..77ec85b79a56f --- /dev/null +++ b/src/env/node/base64.ts @@ -0,0 +1,9 @@ +export function base64(s: string): string; +export function base64(bytes: Uint8Array): string; +export function base64(data: string | Uint8Array): string { + return Buffer.from(data).toString('base64'); +} + +export function fromBase64(s: string): Uint8Array { + return Buffer.from(s, 'base64'); +} diff --git a/src/env/node/fetch.ts b/src/env/node/fetch.ts new file mode 100644 index 0000000000000..694dd0f9473f0 --- /dev/null +++ b/src/env/node/fetch.ts @@ -0,0 +1,5 @@ +import fetch from 'node-fetch'; + +// eslint-disable-next-line import/no-default-export +export default fetch; +export type { BodyInit, RequestInit } from 'node-fetch'; diff --git a/src/env/node/hex.ts b/src/env/node/hex.ts new file mode 100644 index 0000000000000..ee87382373751 --- /dev/null +++ b/src/env/node/hex.ts @@ -0,0 +1,7 @@ +export function encodeUtf8Hex(s: string): string { + return Buffer.from(s, 'utf8').toString('hex'); +} + +export function decodeUtf8Hex(hex: string): string { + return Buffer.from(hex, 'hex').toString('utf8'); +} diff --git a/src/env/node/hrtime.ts b/src/env/node/hrtime.ts new file mode 100644 index 0000000000000..622ccb0ff140b --- /dev/null +++ b/src/env/node/hrtime.ts @@ -0,0 +1 @@ +export { hrtime } from 'process'; diff --git a/src/git/git.ts b/src/git/git.ts index 55a9f97802210..5b70256575583 100644 --- a/src/git/git.ts +++ b/src/git/git.ts @@ -1,7 +1,6 @@ /* eslint-disable @typescript-eslint/naming-convention */ 'use strict'; import * as paths from 'path'; -import { TextDecoder } from 'util'; import * as iconv from 'iconv-lite'; import { Uri, window, workspace } from 'vscode'; import { GlyphChars } from '../constants'; diff --git a/src/git/gitService.ts b/src/git/gitService.ts index 7b9e4df19223f..05a058b45f94f 100644 --- a/src/git/gitService.ts +++ b/src/git/gitService.ts @@ -3800,7 +3800,7 @@ export class GitService implements Disposable { } @log() - getVersionedFileBuffer(repoPath: string, fileName: string, ref: string) { + getVersionedFileBuffer(repoPath: string, fileName: string, ref: string): Promise { return Git.show(repoPath, fileName, ref, { encoding: 'buffer' }); } diff --git a/src/system/string.ts b/src/system/string.ts index 7910eb99bc874..da51e0a2b9e8e 100644 --- a/src/system/string.ts +++ b/src/system/string.ts @@ -3,6 +3,8 @@ import { BinaryToTextEncoding, createHash } from 'crypto'; import ansiRegex from 'ansi-regex'; import { isWindows } from '../git/shell'; +export { fromBase64, base64 } from '@env/base64'; + const emptyStr = ''; export const enum CharCode { @@ -20,11 +22,6 @@ export const enum CharCode { z = 122, } -export function base64(s: string): string { - const buffer = Buffer.from(s); - return buffer.toString('base64'); -} - export function compareSubstring( a: string, b: string, diff --git a/src/trackers/documentTracker.ts b/src/trackers/documentTracker.ts index f50aaffc38234..735e0b024ed7b 100644 --- a/src/trackers/documentTracker.ts +++ b/src/trackers/documentTracker.ts @@ -128,7 +128,7 @@ export class DocumentTracker implements Disposable { const doc = this._documentMap.get(editor.document); if (doc != null) { - (await doc).activate(); + void (await doc).activate(); return; } diff --git a/src/webviews/apps/.eslintrc.json b/src/webviews/apps/.eslintrc.json index ddda709583b33..5a988bf14bdfd 100644 --- a/src/webviews/apps/.eslintrc.json +++ b/src/webviews/apps/.eslintrc.json @@ -1,5 +1,8 @@ { - "extends": ["../../../.eslintrc.json"], + "extends": ["../../../.eslintrc.base.json"], + "env": { + "browser": true + }, "parserOptions": { "project": "src/webviews/apps/tsconfig.json" } diff --git a/src/webviews/apps/tsconfig.json b/src/webviews/apps/tsconfig.json index 363189328fe71..e5f2d0f89d036 100644 --- a/src/webviews/apps/tsconfig.json +++ b/src/webviews/apps/tsconfig.json @@ -1,10 +1,10 @@ { - "extends": "../../../tsconfig.json", + "extends": "../../../tsconfig.base.json", "compilerOptions": { "allowSyntheticDefaultImports": true, - "lib": ["dom", "dom.iterable", "es2019"], + "lib": ["dom", "dom.iterable", "es2020"], "outDir": "../../" }, - "include": ["../../config.ts", "../protocol.ts", "**/*"], + "include": ["**/*", "../../config.ts", "../protocol.ts"], "exclude": ["node_modules", "test"] } diff --git a/src/webviews/rebaseEditor.ts b/src/webviews/rebaseEditor.ts index 90a92cfa02553..196e968c74ddd 100644 --- a/src/webviews/rebaseEditor.ts +++ b/src/webviews/rebaseEditor.ts @@ -1,6 +1,5 @@ 'use strict'; import { randomBytes } from 'crypto'; -import { TextDecoder } from 'util'; import { CancellationToken, commands, diff --git a/src/webviews/webviewBase.ts b/src/webviews/webviewBase.ts index 3a274d8af90b9..19a7cca1cd41e 100644 --- a/src/webviews/webviewBase.ts +++ b/src/webviews/webviewBase.ts @@ -1,6 +1,5 @@ 'use strict'; import { randomBytes } from 'crypto'; -import { TextDecoder } from 'util'; import { commands, ConfigurationChangeEvent, diff --git a/tsconfig.base.json b/tsconfig.base.json new file mode 100644 index 0000000000000..84f660b219839 --- /dev/null +++ b/tsconfig.base.json @@ -0,0 +1,27 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "esModuleInterop": true, + "experimentalDecorators": true, + "forceConsistentCasingInFileNames": true, + "incremental": true, + "isolatedModules": true, + "lib": ["es2020"], + "module": "esnext", + "moduleResolution": "node", + "noFallthroughCasesInSwitch": true, + "noImplicitOverride": true, + "noImplicitReturns": true, + "noUnusedLocals": false, + "outDir": "dist", + "resolveJsonModule": true, + "rootDir": "src", + "skipLibCheck": true, + "sourceMap": true, + "strict": true, + "target": "es2020", + "useDefineForClassFields": true, + "useUnknownInCatchVariables": false + }, + "include": ["src/**/*"] +} diff --git a/tsconfig.browser.json b/tsconfig.browser.json new file mode 100644 index 0000000000000..7435b647c3ea7 --- /dev/null +++ b/tsconfig.browser.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "lib": ["dom", "dom.iterable", "es2020"], + "paths": { + "@env/*": ["src/env/browser/*"] + }, + "tsBuildInfoFile": "tsconfig.browser.tsbuildinfo" + }, + "include": ["src/**/*"], + "exclude": ["src/webviews/apps/**/*", "src/env/node/**/*"] +} diff --git a/tsconfig.json b/tsconfig.json index 36bc69792b2cb..8345a3c7a5cde 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,26 +1,10 @@ { + "extends": "./tsconfig.base.json", "compilerOptions": { - "esModuleInterop": true, - "experimentalDecorators": true, - "forceConsistentCasingInFileNames": true, - "incremental": true, - "isolatedModules": true, - "lib": ["es2019"], - "module": "esnext", - "moduleResolution": "node", - "noFallthroughCasesInSwitch": true, - "noImplicitOverride": true, - "noImplicitReturns": true, - "noUnusedLocals": false, - "outDir": "dist", - "resolveJsonModule": true, - "rootDir": "src", - "skipLibCheck": true, - "sourceMap": true, - "strict": true, - "target": "es2019", - "useDefineForClassFields": true, - "useUnknownInCatchVariables": false + "paths": { + "@env/*": ["src/env/node/*"] + } }, - "exclude": ["node_modules", "test", "src/webviews/apps"] + "include": ["src/**/*"], + "exclude": ["src/webviews/apps/**/*", "src/env/browser/**/*"] } diff --git a/webpack.config.js b/webpack.config.js index dc76c14be8d27..d9f08bea69edb 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,13 +1,12 @@ //@ts-check /** @typedef {import('webpack').Configuration} WebpackConfig **/ -/* eslint-disable import/extensions */ -/* eslint-disable import/no-dynamic-require */ /* eslint-disable @typescript-eslint/ban-ts-comment */ /* eslint-disable @typescript-eslint/no-var-requires */ /* eslint-disable @typescript-eslint/strict-boolean-expressions */ /* eslint-disable @typescript-eslint/prefer-optional-chain */ 'use strict'; +const { execFileSync } = require('child_process'); const path = require('path'); const CircularDependencyPlugin = require('circular-dependency-plugin'); const { CleanWebpackPlugin: CleanPlugin } = require('clean-webpack-plugin'); @@ -18,58 +17,12 @@ const { ESBuildMinifyPlugin } = require('esbuild-loader'); const ForkTsCheckerPlugin = require('fork-ts-checker-webpack-plugin'); const HtmlPlugin = require('html-webpack-plugin'); const ImageMinimizerPlugin = require('image-minimizer-webpack-plugin'); +const JSON5 = require('json5'); const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const TerserPlugin = require('terser-webpack-plugin'); const { WebpackError } = require('webpack'); const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; -class InlineChunkHtmlPlugin { - constructor(htmlPlugin, patterns) { - this.htmlPlugin = htmlPlugin; - this.patterns = patterns; - } - - getInlinedTag(publicPath, assets, tag) { - if ( - (tag.tagName !== 'script' || !(tag.attributes && tag.attributes.src)) && - (tag.tagName !== 'link' || !(tag.attributes && tag.attributes.href)) - ) { - return tag; - } - - let chunkName = tag.tagName === 'link' ? tag.attributes.href : tag.attributes.src; - if (publicPath) { - chunkName = chunkName.replace(publicPath, ''); - } - if (!this.patterns.some(pattern => chunkName.match(pattern))) { - return tag; - } - - const asset = assets[chunkName]; - if (asset == null) { - return tag; - } - - return { tagName: tag.tagName === 'link' ? 'style' : tag.tagName, innerHTML: asset.source(), closeTag: true }; - } - - apply(compiler) { - let publicPath = compiler.options.output.publicPath || ''; - if (publicPath && !publicPath.endsWith('/')) { - publicPath += '/'; - } - - compiler.hooks.compilation.tap('InlineChunkHtmlPlugin', compilation => { - const getInlinedTagFn = tag => this.getInlinedTag(publicPath, compilation.assets, tag); - - this.htmlPlugin.getHooks(compilation).alterAssetTagGroups.tap('InlineChunkHtmlPlugin', assets => { - assets.headTags = assets.headTags.map(getInlinedTagFn); - assets.bodyTags = assets.bodyTags.map(getInlinedTagFn); - }); - }); - } -} - module.exports = /** * @param {{ analyzeBundle?: boolean; analyzeDeps?: boolean; esbuild?: boolean; } | undefined } env @@ -86,15 +39,20 @@ module.exports = ...env, }; - return [getExtensionConfig(mode, env), getWebviewsConfig(mode, env)]; + return [ + getExtensionConfig('node', mode, env), + getExtensionConfig('webworker', mode, env), + getWebviewsConfig(mode, env), + ]; }; /** + * @param { 'node' | 'webworker' } target * @param { 'production' | 'development' | 'none' } mode * @param {{ analyzeBundle?: boolean; analyzeDeps?: boolean; esbuild?: boolean; }} env * @returns { WebpackConfig } */ -function getExtensionConfig(mode, env) { +function getExtensionConfig(target, mode, env) { /** * @type WebpackConfig['plugins'] | any */ @@ -102,8 +60,25 @@ function getExtensionConfig(mode, env) { new CleanPlugin({ cleanOnceBeforeBuildPatterns: ['!webviews/**'] }), new ForkTsCheckerPlugin({ async: false, - eslint: { enabled: true, files: 'src/**/*.ts', options: { cache: true } }, + eslint: { + enabled: true, + files: 'src/**/*.ts', + options: { + // cache: true, + cacheLocation: path.join( + __dirname, + target === 'webworker' ? '.eslintcache.browser' : '.eslintcache', + ), + overrideConfigFile: path.join( + __dirname, + target === 'webworker' ? '.eslintrc.browser.json' : '.eslintrc.json', + ), + }, + }, formatter: 'basic', + typescript: { + configFile: path.join(__dirname, target === 'webworker' ? 'tsconfig.browser.json' : 'tsconfig.json'), + }, }), ]; @@ -128,16 +103,15 @@ function getExtensionConfig(mode, env) { } return { - name: 'extension', - entry: './src/extension.ts', - mode: mode, - target: 'node', - node: { - __dirname: false, + name: `extension:${target}`, + entry: { + extension: './src/extension.ts', }, + mode: mode, + target: target, devtool: 'source-map', output: { - path: path.join(__dirname, 'dist'), + path: target === 'webworker' ? path.join(__dirname, 'dist', 'browser') : path.join(__dirname, 'dist'), libraryTarget: 'commonjs2', filename: 'gitlens.js', chunkFilename: 'feature-[name].js', @@ -187,13 +161,22 @@ function getExtensionConfig(mode, env) { options: { implementation: esbuild, loader: 'ts', - target: 'es2019', - tsconfigRaw: require('./tsconfig.json'), + target: 'es2020', + tsconfigRaw: resolveTSConfig( + path.join( + __dirname, + target === 'webworker' ? 'tsconfig.browser.json' : 'tsconfig.json', + ), + ), }, } : { loader: 'ts-loader', options: { + configFile: path.join( + __dirname, + target === 'webworker' ? 'tsconfig.browser.json' : 'tsconfig.json', + ), experimentalWatchApi: true, transpileOnly: true, }, @@ -202,17 +185,35 @@ function getExtensionConfig(mode, env) { ], }, resolve: { - alias: { - 'universal-user-agent': path.join( - __dirname, - 'node_modules', - 'universal-user-agent', - 'dist-node', - 'index.js', - ), - }, + alias: + target === 'webworker' + ? { + '@env': path.resolve(__dirname, 'src', 'env', 'browser'), + } + : { + '@env': path.resolve(__dirname, 'src', 'env', target), + // 'universal-user-agent': path.join( + // __dirname, + // 'node_modules', + // 'universal-user-agent', + // 'dist-node', + // 'index.js', + // ), + }, + fallback: + target === 'webworker' + ? { + child_process: false, + crypto: require.resolve('crypto-browserify'), + fs: false, + os: false, + path: require.resolve('path-browserify'), + stream: false, + url: false, + } + : undefined, + mainFields: target === 'webworker' ? ['browser', 'module', 'main'] : ['module', 'main'], extensions: ['.ts', '.tsx', '.js', '.jsx', '.json'], - symlinks: false, }, plugins: plugins, stats: { @@ -423,8 +424,8 @@ function getWebviewsConfig(mode, env) { options: { implementation: esbuild, loader: 'ts', - target: 'es2019', - tsconfigRaw: require(path.join(basePath, 'tsconfig.json')), + target: 'es2020', + tsconfigRaw: resolveTSConfig(path.join(basePath, 'tsconfig.json')), }, } : { @@ -463,7 +464,6 @@ function getWebviewsConfig(mode, env) { resolve: { extensions: ['.ts', '.tsx', '.js', '.jsx', '.json'], modules: [basePath, 'node_modules'], - symlinks: false, }, plugins: plugins, stats: { @@ -480,3 +480,62 @@ function getWebviewsConfig(mode, env) { }, }; } + +class InlineChunkHtmlPlugin { + constructor(htmlPlugin, patterns) { + this.htmlPlugin = htmlPlugin; + this.patterns = patterns; + } + + getInlinedTag(publicPath, assets, tag) { + if ( + (tag.tagName !== 'script' || !(tag.attributes && tag.attributes.src)) && + (tag.tagName !== 'link' || !(tag.attributes && tag.attributes.href)) + ) { + return tag; + } + + let chunkName = tag.tagName === 'link' ? tag.attributes.href : tag.attributes.src; + if (publicPath) { + chunkName = chunkName.replace(publicPath, ''); + } + if (!this.patterns.some(pattern => chunkName.match(pattern))) { + return tag; + } + + const asset = assets[chunkName]; + if (asset == null) { + return tag; + } + + return { tagName: tag.tagName === 'link' ? 'style' : tag.tagName, innerHTML: asset.source(), closeTag: true }; + } + + apply(compiler) { + let publicPath = compiler.options.output.publicPath || ''; + if (publicPath && !publicPath.endsWith('/')) { + publicPath += '/'; + } + + compiler.hooks.compilation.tap('InlineChunkHtmlPlugin', compilation => { + const getInlinedTagFn = tag => this.getInlinedTag(publicPath, compilation.assets, tag); + + this.htmlPlugin.getHooks(compilation).alterAssetTagGroups.tap('InlineChunkHtmlPlugin', assets => { + assets.headTags = assets.headTags.map(getInlinedTagFn); + assets.bodyTags = assets.bodyTags.map(getInlinedTagFn); + }); + }); + } +} + +function resolveTSConfig(configFile) { + const data = execFileSync('yarn', ['tsc', `-p ${configFile}`, '--showConfig'], { + cwd: __dirname, + encoding: 'utf8', + shell: true, + }); + + const index = data.indexOf('\n'); + const json = JSON5.parse(data.substr(index + 1)); + return json; +} diff --git a/yarn.lock b/yarn.lock index 7170aaf80f89c..001da199cd1cb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -666,6 +666,16 @@ arrify@^1.0.1: resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= +asn1.js@^5.2.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" + integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + safer-buffer "^2.1.0" + at-least-node@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" @@ -764,6 +774,16 @@ bl@^4.0.3: inherits "^2.0.4" readable-stream "^3.4.0" +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: + version "4.12.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + +bn.js@^5.0.0, bn.js@^5.1.1: + version "5.2.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" + integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== + boolbase@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" @@ -784,6 +804,65 @@ braces@^3.0.1, braces@~3.0.2: dependencies: fill-range "^7.0.1" +brorand@^1.0.1, brorand@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" + integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== + dependencies: + bn.js "^5.0.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" + integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== + dependencies: + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.3" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + browserslist@^4.14.5: version "4.18.1" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.18.1.tgz#60d3920f25b6860eb917c6c7b185576f4d8b017f" @@ -823,6 +902,11 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + buffer@^5.2.1, buffer@^5.5.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" @@ -992,6 +1076,14 @@ chrome-trace-event@^1.0.2: resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + circular-dependency-plugin@5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/circular-dependency-plugin/-/circular-dependency-plugin-5.2.2.tgz#39e836079db1d3cf2f988dc48c5188a44058b600" @@ -1139,6 +1231,37 @@ cosmiconfig@^6.0.0: path-type "^4.0.0" yaml "^1.7.2" +create-ecdh@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" + integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== + dependencies: + bn.js "^4.1.0" + elliptic "^6.5.3" + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + cross-env@7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf" @@ -1182,6 +1305,23 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" +crypto-browserify@3.12.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + csp-html-webpack-plugin@5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/csp-html-webpack-plugin/-/csp-html-webpack-plugin-5.1.0.tgz#b3bfa5a50d207fe5b6bb4839dc33aa59621a35a0" @@ -1241,6 +1381,11 @@ cwebp-bin@^5.0.0: bin-wrapper "^4.0.1" logalot "^2.1.0" +data-uri-to-buffer@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz#b5db46aea50f6176428ac05b73be39a57701a64b" + integrity sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA== + dayjs@1.10.7: version "1.10.7" resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.10.7.tgz#2cf5f91add28116748440866a0a1d26f3a6ce468" @@ -1402,11 +1547,28 @@ deprecation@^2.0.0: resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== +des.js@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + detect-libc@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -1523,6 +1685,19 @@ electron-to-chromium@^1.3.896: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.6.tgz#7bf0c03001bcdbd0fc57a45c6b23bc6432246ade" integrity sha512-YDZAXP0P8USm0YoyIXWijxFT3tJHbt3WwY7CTQiK3+Ad6Ai/b9N4GqfDR107jfGilAfxl7Gkhb+h0KPoKXAgqw== +elliptic@^6.5.3: + version "6.5.4" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" @@ -1941,6 +2116,14 @@ events@^3.2.0: resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + exec-buffer@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/exec-buffer/-/exec-buffer-3.2.0.tgz#b1686dbd904c7cf982e652c1f5a79b1e5573082b" @@ -2065,6 +2248,13 @@ fd-slicer@~1.1.0: dependencies: pend "~1.2.0" +fetch-blob@^3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.1.3.tgz#a7dca4855e39d3e3c5a1da62d4ee335c37d26012" + integrity sha512-ax1Y5I9w+9+JiM+wdHkhBoxew+zG4AJ2SvAD1v1szpddUIiPERVGBxrMcB2ZqW0Y3PP8bOWYv2zqQq1Jp2kqUQ== + dependencies: + web-streams-polyfill "^3.0.3" + figures@^1.3.5: version "1.7.0" resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" @@ -2206,6 +2396,13 @@ fork-ts-checker-webpack-plugin@6.5.0: semver "^7.3.2" tapable "^1.0.0" +formdata-polyfill@^4.0.10: + version "4.0.10" + resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" + integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== + dependencies: + fetch-blob "^3.1.2" + from2@^2.1.1: version "2.3.0" resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" @@ -2532,11 +2729,37 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + he@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + hosted-git-info@^2.1.4: version "2.8.9" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" @@ -3022,6 +3245,13 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= +json5@2.2.0, json5@^2.1.2, json5@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" + integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== + dependencies: + minimist "^1.2.5" + json5@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" @@ -3029,13 +3259,6 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" -json5@^2.1.2, json5@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" - integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== - dependencies: - minimist "^1.2.5" - jsonfile@^6.0.1: version "6.1.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" @@ -3260,6 +3483,15 @@ markdown-it@^10.0.0: mdurl "^1.0.1" uc.micro "^1.0.5" +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + mdurl@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" @@ -3324,6 +3556,14 @@ micromatch@^4.0.0, micromatch@^4.0.4: braces "^3.0.1" picomatch "^2.2.3" +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + mime-db@1.51.0, mime-db@^1.28.0: version "1.51.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c" @@ -3373,6 +3613,16 @@ mini-css-extract-plugin@2.4.5: dependencies: schema-utils "^4.0.0" +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + minimatch@^3.0.3, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -3469,6 +3719,15 @@ node-fetch@2.6.1, node-fetch@^2.6.1: resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== +node-fetch@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.1.0.tgz#714f4922dc270239487654eaeeab86b8206cb52e" + integrity sha512-QU0WbIfMUjd5+MUzQOYhenAazakV7Irh1SGkWCsRzBwvm4fAhzEUaHMJ6QLP7gWT6WO9/oH2zhKMMGMuIrDyKw== + dependencies: + data-uri-to-buffer "^4.0.0" + fetch-blob "^3.1.2" + formdata-polyfill "^4.0.10" + node-releases@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5" @@ -3761,6 +4020,17 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" +parse-asn1@^5.0.0, parse-asn1@^5.1.5: + version "5.1.6" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" + integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== + dependencies: + asn1.js "^5.2.0" + browserify-aes "^1.0.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + parse-json@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" @@ -3805,6 +4075,11 @@ pascal-case@^3.1.2: no-case "^3.0.4" tslib "^2.0.3" +path-browserify@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" + integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== + path-exists@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" @@ -3861,6 +4136,17 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== +pbkdf2@^3.0.3: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + pend@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" @@ -4034,6 +4320,18 @@ pseudomap@^1.0.2: resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + pump@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" @@ -4073,13 +4371,21 @@ quick-lru@^5.1.1: resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== -randombytes@^2.1.0: +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: safe-buffer "^5.1.0" +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + rc@^1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" @@ -4146,7 +4452,7 @@ readable-stream@^2.0.0, readable-stream@^2.0.6, readable-stream@^2.3.0, readable string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.1.1, readable-stream@^3.4.0: +readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -4274,6 +4580,14 @@ rimraf@^3.0.0, rimraf@^3.0.2: dependencies: glob "^7.1.3" +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -4286,12 +4600,12 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: 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.2.0: +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, 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== -"safer-buffer@>= 2.1.2 < 3.0.0": +"safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -4400,6 +4714,14 @@ set-blocking@~2.0.0: resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + shallow-clone@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" @@ -5064,6 +5386,11 @@ watchpack@^2.3.0: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" +web-streams-polyfill@^3.0.3: + version "3.2.0" + resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.0.tgz#a6b74026b38e4885869fb5c589e90b95ccfc7965" + integrity sha512-EqPmREeOzttaLRm5HS7io98goBgZ7IVz79aDvqjD0kYXLtFZTc0T/U6wHTPKyIjb+MdN7DFIIX6hgdBEpWmfPA== + webpack-bundle-analyzer@4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.5.0.tgz#1b0eea2947e73528754a6f9af3e91b2b6e0f79d5"