From db3e8a9c6b88adb2a2e4997a2699dbdaf639eac8 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Tue, 5 Oct 2021 17:10:17 +0200 Subject: [PATCH 01/59] rearrange assets and main.js to make them run with vite --- package.json | 5 +- .../platform/web/assets}/config.json | 0 .../web/assets}/download-sandbox.html | 0 .../platform/web/assets}/icon-maskable.png | Bin .../platform/web/assets}/icon-maskable.svg | 0 {assets => src/platform/web/assets}/icon.png | Bin {assets => src/platform/web/assets}/icon.svg | 0 .../platform/web/assets}/manifest.json | 0 src/platform/web/{docroot => }/index.html | 23 ++- src/{ => platform/web}/main.js | 6 +- src/platform/web/sdk/paths/vite.ts | 14 ++ src/platform/web/{docroot => }/sw.js | 0 src/sdk/paths/vite.ts | 12 -- .../ui/view-gallery.html => view-gallery.html | 0 vite.config.js | 7 + yarn.lock | 140 ++++++++++++++++++ 16 files changed, 177 insertions(+), 30 deletions(-) rename {assets => src/platform/web/assets}/config.json (100%) rename {assets => src/platform/web/assets}/download-sandbox.html (100%) rename {assets => src/platform/web/assets}/icon-maskable.png (100%) rename {assets => src/platform/web/assets}/icon-maskable.svg (100%) rename {assets => src/platform/web/assets}/icon.png (100%) rename {assets => src/platform/web/assets}/icon.svg (100%) rename {assets => src/platform/web/assets}/manifest.json (100%) rename src/platform/web/{docroot => }/index.html (62%) rename src/{ => platform/web}/main.js (91%) create mode 100644 src/platform/web/sdk/paths/vite.ts rename src/platform/web/{docroot => }/sw.js (100%) delete mode 100644 src/sdk/paths/vite.ts rename src/platform/web/ui/view-gallery.html => view-gallery.html (100%) create mode 100644 vite.config.js diff --git a/package.json b/package.json index b391a3c0..562b6c7b 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "lint": "eslint --cache src/", "lint-ts": "eslint src/ -c .ts-eslintrc.js --ext .ts", "lint-ci": "eslint src/", - "test": "impunity --entry-point src/main.js --force-esm-dirs lib/ src/", + "test": "impunity --entry-point src/platform/web/main.js --force-esm-dirs lib/ src/", "start": "snowpack dev --port 3000", "build": "node --experimental-modules scripts/build.mjs", "postinstall": "node ./scripts/post-install.js" @@ -66,6 +66,7 @@ "dompurify": "^2.3.0", "es6-promise": "https://github.com/bwindels/es6-promise.git#bwindels/expose-flush", "rollup": "^2.26.4", - "text-encoding": "^0.7.0" + "text-encoding": "^0.7.0", + "vite": "^2.6.3" } } diff --git a/assets/config.json b/src/platform/web/assets/config.json similarity index 100% rename from assets/config.json rename to src/platform/web/assets/config.json diff --git a/assets/download-sandbox.html b/src/platform/web/assets/download-sandbox.html similarity index 100% rename from assets/download-sandbox.html rename to src/platform/web/assets/download-sandbox.html diff --git a/assets/icon-maskable.png b/src/platform/web/assets/icon-maskable.png similarity index 100% rename from assets/icon-maskable.png rename to src/platform/web/assets/icon-maskable.png diff --git a/assets/icon-maskable.svg b/src/platform/web/assets/icon-maskable.svg similarity index 100% rename from assets/icon-maskable.svg rename to src/platform/web/assets/icon-maskable.svg diff --git a/assets/icon.png b/src/platform/web/assets/icon.png similarity index 100% rename from assets/icon.png rename to src/platform/web/assets/icon.png diff --git a/assets/icon.svg b/src/platform/web/assets/icon.svg similarity index 100% rename from assets/icon.svg rename to src/platform/web/assets/icon.svg diff --git a/assets/manifest.json b/src/platform/web/assets/manifest.json similarity index 100% rename from assets/manifest.json rename to src/platform/web/assets/manifest.json diff --git a/src/platform/web/docroot/index.html b/src/platform/web/index.html similarity index 62% rename from src/platform/web/docroot/index.html rename to src/platform/web/index.html index 16f164ae..397aae66 100644 --- a/src/platform/web/docroot/index.html +++ b/src/platform/web/index.html @@ -9,11 +9,11 @@ - + - - - + + + diff --git a/src/main.js b/src/platform/web/main.js similarity index 91% rename from src/main.js rename to src/platform/web/main.js index 0754b2ab..34522ea8 100644 --- a/src/main.js +++ b/src/platform/web/main.js @@ -16,9 +16,9 @@ limitations under the License. */ // import {RecordRequester, ReplayRequester} from "./matrix/net/request/replay.js"; -import {SessionContainer} from "./matrix/SessionContainer.js"; -import {RootViewModel} from "./domain/RootViewModel.js"; -import {createNavigation, createRouter} from "./domain/navigation/index.js"; +import {SessionContainer} from "../../matrix/SessionContainer.js"; +import {RootViewModel} from "../../domain/RootViewModel.js"; +import {createNavigation, createRouter} from "../../domain/navigation/index.js"; // Don't use a default export here, as we use multiple entries during legacy build, // which does not support default exports, // see https://github.com/rollup/plugins/tree/master/packages/multi-entry diff --git a/src/platform/web/sdk/paths/vite.ts b/src/platform/web/sdk/paths/vite.ts new file mode 100644 index 00000000..eca08827 --- /dev/null +++ b/src/platform/web/sdk/paths/vite.ts @@ -0,0 +1,14 @@ +import _downloadSandboxPath from "../../assets/download-sandbox.html?url"; +import _workerPath from "../../worker/main.js?url"; +import olmWasmPath from "@matrix-org/olm/olm.wasm?url"; +import olmJsPath from "@matrix-org/olm/olm.js?url"; +import olmLegacyJsPath from "@matrix-org/olm/olm_legacy.js?url"; + +export const olmPaths = { + wasm: olmWasmPath, + legacyBundle: olmLegacyJsPath, + wasmBundle: olmJsPath, +}; + +export const downloadSandboxPath = _downloadSandboxPath; +export const workerPath = _workerPath; diff --git a/src/platform/web/docroot/sw.js b/src/platform/web/sw.js similarity index 100% rename from src/platform/web/docroot/sw.js rename to src/platform/web/sw.js diff --git a/src/sdk/paths/vite.ts b/src/sdk/paths/vite.ts deleted file mode 100644 index e38648eb..00000000 --- a/src/sdk/paths/vite.ts +++ /dev/null @@ -1,12 +0,0 @@ -import _downloadSandboxPath from "../../../assets/download-sandbox.html?url"; -import olmWasmPath from "../../../lib/olm/olm.wasm?url"; -import olmJsPath from "../../../lib/olm/olm.js?url"; -import olmLegacyJsPath from "../../../lib/olm/olm_legacy.js?url"; - -export const olmPaths = { - wasm: olmWasmPath, - legacyBundle: olmLegacyJsPath, - wasmBundle: olmJsPath, -}; - -export const downloadSandboxPath = _downloadSandboxPath; diff --git a/src/platform/web/ui/view-gallery.html b/view-gallery.html similarity index 100% rename from src/platform/web/ui/view-gallery.html rename to view-gallery.html diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 00000000..d27d8a3a --- /dev/null +++ b/vite.config.js @@ -0,0 +1,7 @@ +export default { + public: false, + root: "src/platform/web", + server: { + hmr: false + } +}; diff --git a/yarn.lock b/yarn.lock index fc159a40..93747878 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2293,6 +2293,61 @@ es-module-lexer@^0.6.0: version "4.2.8" resolved "https://github.com/bwindels/es6-promise.git#112f78f5829e627055b0ff56a52fecb63f6003b1" +esbuild-android-arm64@0.13.4: + version "0.13.4" + resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.13.4.tgz#5178a20d2b7aba741a31c19609f9e67b346996b9" + integrity sha512-elDJt+jNyoHFId0/dKsuVYUPke3EcquIyUwzJCH17a3ERglN3A9aMBI5zbz+xNZ+FbaDNdpn0RaJHCFLbZX+fA== + +esbuild-darwin-64@0.13.4: + version "0.13.4" + resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.13.4.tgz#7a3e66c8e1271b650541b25eed65c84f3564a69d" + integrity sha512-zJQGyHRAdZUXlRzbN7W+7ykmEiGC+bq3Gc4GxKYjjWTgDRSEly98ym+vRNkDjXwXYD3gGzSwvH35+MiHAtWvLA== + +esbuild-darwin-arm64@0.13.4: + version "0.13.4" + resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.4.tgz#793feca6032b2a57ef291eb9b2d33768d60a49d6" + integrity sha512-r8oYvAtqSGq8HNTZCAx4TdLE7jZiGhX9ooGi5AQAey37MA6XNaP8ZNlw9OCpcgpx3ryU2WctXwIqPzkHO7a8dg== + +esbuild-freebsd-64@0.13.4: + version "0.13.4" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.4.tgz#294aec3c2cf4b41fb6900212fc9c33dd8fbbb4a2" + integrity sha512-u9DRGkn09EN8+lCh6z7FKle7awi17PJRBuAKdRNgSo5ZrH/3m+mYaJK2PR2URHMpAfXiwJX341z231tSdVe3Yw== + +esbuild-freebsd-arm64@0.13.4: + version "0.13.4" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.4.tgz#09fe66c751c12f9b976976b1d83f3de594cb2787" + integrity sha512-q3B2k68Uf6gfjATjcK16DqxvjqRQkHL8aPoOfj4op+lSqegdXvBacB1d8jw8PxbWJ8JHpdTLdAVUYU80kotQXA== + +esbuild-linux-32@0.13.4: + version "0.13.4" + resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.13.4.tgz#a9f0793d7bcc9cef4f4ffa4398c525877fba5839" + integrity sha512-UUYJPHSiKAO8KoN3Ls/iZtgDLZvK5HarES96aolDPWZnq9FLx4dIHM/x2z4Rxv9IYqQ/DxlPoE2Co1UPBIYYeA== + +esbuild-linux-64@0.13.4: + version "0.13.4" + resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.13.4.tgz#c0d0b4c9d62e3bbf8bdf2cece37403aa6d60fc2e" + integrity sha512-+RnohAKiiUW4UHLGRkNR1AnENW1gCuDWuygEtd4jxTNPIoeC7lbXGor7rtgjj9AdUzFgOEvAXyNNX01kJ8NueQ== + +esbuild-linux-arm64@0.13.4: + version "0.13.4" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.4.tgz#1292d97bfa64a08d12728f8a7837bf92776c779b" + integrity sha512-+A188cAdd6QuSRxMIwRrWLjgphQA0LDAQ/ECVlrPVJwnx+1i64NjDZivoqPYLOTkSPIKntiWwMhhf0U5/RrPHQ== + +esbuild-linux-arm@0.13.4: + version "0.13.4" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.13.4.tgz#186cd9b8885ac132b9953a4a0afe668168debd10" + integrity sha512-BH5gKve4jglS7UPSsfwHSX79I5agC/lm4eKoRUEyo8lwQs89frQSRp2Xup+6SFQnxt3md5EsKcd2Dbkqeb3gPA== + +esbuild-linux-mips64le@0.13.4: + version "0.13.4" + resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.4.tgz#42049bf72bc586817b4a51cc9e32148d13e5e807" + integrity sha512-0xkwtPaUkG5xMTFGaQPe1AadSe5QAiQuD4Gix1O9k5Xo/U8xGIkw9UFUTvfEUeu71vFb6ZgsIacfP1NLoFjWNw== + +esbuild-linux-ppc64le@0.13.4: + version "0.13.4" + resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.4.tgz#adf1ce2ef2302757c4383887da6ac4dd25be9d4f" + integrity sha512-E1+oJPP7A+j23GPo3CEpBhGwG1bni4B8IbTA3/3rvzjURwUMZdcN3Fhrz24rnjzdLSHmULtOE4VsbT42h1Om4Q== + esbuild-node-loader@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/esbuild-node-loader/-/esbuild-node-loader-0.3.1.tgz#fa761e020eff316549ddc3c51a25ec9ffc159ff2" @@ -2300,11 +2355,58 @@ esbuild-node-loader@^0.3.1: dependencies: esbuild "^0.12.6" +esbuild-openbsd-64@0.13.4: + version "0.13.4" + resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.4.tgz#1c8122101898c52a20c8786935cf3eb7a19b83b4" + integrity sha512-xEkI1o5HYxDzbv9jSox0EsDxpwraG09SRiKKv0W8pH6O3bt+zPSlnoK7+I7Q69tkvONkpIq5n2o+c55uq0X7cw== + +esbuild-sunos-64@0.13.4: + version "0.13.4" + resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.13.4.tgz#4ec95faa14a60f295fe485bebffefff408739337" + integrity sha512-bjXUMcODMnB6hQicLBBmmnBl7OMDyVpFahKvHGXJfDChIi5udiIRKCmFUFIRn+AUAKVlfrofRKdyPC7kBsbvGQ== + +esbuild-windows-32@0.13.4: + version "0.13.4" + resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.13.4.tgz#3182c380487b797b04d0ec2c80c2945666869080" + integrity sha512-z4CH07pfyVY0XF98TCsGmLxKCl0kyvshKDbdpTekW9f2d+dJqn5mmoUyWhpSVJ0SfYWJg86FoD9nMbbaMVyGdg== + +esbuild-windows-64@0.13.4: + version "0.13.4" + resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.13.4.tgz#b9e995f92d81f433a04f33611e603e82f9232e69" + integrity sha512-uVL11vORRPjocGLYam67rwFLd0LvkrHEs+JG+1oJN4UD9MQmNGZPa4gBHo6hDpF+kqRJ9kXgQSeDqUyRy0tj/Q== + +esbuild-windows-arm64@0.13.4: + version "0.13.4" + resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.4.tgz#fb239532f07b764d158f4cc787178ef4c6fadb5c" + integrity sha512-vA6GLvptgftRcDcWngD5cMlL4f4LbL8JjU2UMT9yJ0MT5ra6hdZNFWnOeOoEtY4GtJ6OjZ0i+81sTqhAB0fMkg== + esbuild@^0.12.6: version "0.12.20" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.12.20.tgz#4d3c9d83c99a4031e027b42a4c398c23b6827cb0" integrity sha512-u7+0qTo9Z64MD9PhooEngCmzyEYJ6ovFhPp8PLNh3UasR5Ihjv6HWVXqm8uHmasdQlpsAf0IsY4U0YVUfCpt4Q== +esbuild@^0.13.2: + version "0.13.4" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.13.4.tgz#ce2deb56c4fb360938311cbfc67f8e467bb6841b" + integrity sha512-wMA5eUwpavTBiNl+It6j8OQuKVh69l6z4DKDLzoTIqC+gChnPpcmqdA8WNHptUHRnfyML+mKEQPlW7Mybj8gHg== + optionalDependencies: + esbuild-android-arm64 "0.13.4" + esbuild-darwin-64 "0.13.4" + esbuild-darwin-arm64 "0.13.4" + esbuild-freebsd-64 "0.13.4" + esbuild-freebsd-arm64 "0.13.4" + esbuild-linux-32 "0.13.4" + esbuild-linux-64 "0.13.4" + esbuild-linux-arm "0.13.4" + esbuild-linux-arm64 "0.13.4" + esbuild-linux-mips64le "0.13.4" + esbuild-linux-ppc64le "0.13.4" + esbuild-openbsd-64 "0.13.4" + esbuild-sunos-64 "0.13.4" + esbuild-windows-32 "0.13.4" + esbuild-windows-64 "0.13.4" + esbuild-windows-arm64 "0.13.4" + esbuild@~0.9.0: version "0.9.7" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.9.7.tgz#ea0d639cbe4b88ec25fbed4d6ff00c8d788ef70b" @@ -3683,6 +3785,11 @@ nanoid@^3.1.23: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.23.tgz#f744086ce7c2bc47ee0a8472574d5c78e4183a81" integrity sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw== +nanoid@^3.1.28: + version "3.1.28" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.28.tgz#3c01bac14cb6c5680569014cc65a2f26424c6bd4" + integrity sha512-gSu9VZ2HtmoKYe/lmyPFES5nknFrHa+/DT9muUFWFMi6Jh9E1I7bkvlQ8xxf1Kos9pi9o8lBnIOkatMhKX/YUw== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -4105,6 +4212,11 @@ periscopic@^2.0.3: estree-walker "^2.0.2" is-reference "^1.1.4" +picocolors@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f" + integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA== + picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" @@ -4271,6 +4383,15 @@ postcss@^8.3.5: nanoid "^3.1.23" source-map-js "^0.6.2" +postcss@^8.3.8: + version "8.3.9" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.3.9.tgz#98754caa06c4ee9eb59cc48bd073bb6bd3437c31" + integrity sha512-f/ZFyAKh9Dnqytx5X62jgjhhzttjZS7hMsohcI7HEI5tjELX/HxCy3EFhsRxyzGvrzFF+82XPvCS8T9TFleVJw== + dependencies: + nanoid "^3.1.28" + picocolors "^0.2.1" + source-map-js "^0.6.2" + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -4602,6 +4723,13 @@ rollup@^2.26.4: optionalDependencies: fsevents "~2.1.2" +rollup@^2.57.0: + version "2.58.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.58.0.tgz#a643983365e7bf7f5b7c62a8331b983b7c4c67fb" + integrity sha512-NOXpusKnaRpbS7ZVSzcEXqxcLDOagN6iFS8p45RkoiMqPHDLwJm758UF05KlMoCRbLBTZsPOIa887gZJ1AiXvw== + optionalDependencies: + fsevents "~2.3.2" + rollup@~2.37.1: version "2.37.1" resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.37.1.tgz#aa7aadffd75c80393f9314f9857e851b0ffd34e7" @@ -5239,6 +5367,18 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" +vite@^2.6.3: + version "2.6.3" + resolved "https://registry.yarnpkg.com/vite/-/vite-2.6.3.tgz#5bbc1d3fcff6bfee9c5e3c0d0a689b18e5974b38" + integrity sha512-mLiN4WR8zpmn04khhBf7YvC3FHrGhZt9S6xm53uDWgtYcUVNtV5LXHLI2Sc4SpL8jd/dsSIHzRxj7JTIu+MTDQ== + dependencies: + esbuild "^0.13.2" + postcss "^8.3.8" + resolve "^1.20.0" + rollup "^2.57.0" + optionalDependencies: + fsevents "~2.3.2" + vm2@^3.9.2: version "3.9.3" resolved "https://registry.yarnpkg.com/vm2/-/vm2-3.9.3.tgz#29917f6cc081cc43a3f580c26c5b553fd3c91f40" From b6fda8865faf3e1857f6eca18d82176af224da18 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Tue, 5 Oct 2021 17:51:10 +0200 Subject: [PATCH 02/59] make all dependencies use vite and remove post-install script / lib dir --- package.json | 5 +- scripts/post-install.js | 132 ------------------ .../session/room/timeline/deserialize.js | 2 +- src/matrix/e2ee/Account.js | 2 +- src/matrix/e2ee/common.js | 2 +- src/mocks/Storage.ts | 3 +- src/platform/web/LegacyPlatform.js | 2 +- src/platform/web/dom/Crypto.js | 2 +- src/platform/web/legacy-polyfill.js | 2 +- src/platform/web/utils/Base58.js | 2 +- src/platform/web/utils/Base64.js | 2 +- src/platform/web/worker/polyfill.js | 2 +- vite.config.js | 6 + 13 files changed, 19 insertions(+), 145 deletions(-) delete mode 100644 scripts/post-install.js diff --git a/package.json b/package.json index 562b6c7b..edf2e673 100644 --- a/package.json +++ b/package.json @@ -10,10 +10,9 @@ "lint": "eslint --cache src/", "lint-ts": "eslint src/ -c .ts-eslintrc.js --ext .ts", "lint-ci": "eslint src/", - "test": "impunity --entry-point src/platform/web/main.js --force-esm-dirs lib/ src/", + "test": "impunity --entry-point src/platform/web/main.js --force-esm-dirs src/", "start": "snowpack dev --port 3000", - "build": "node --experimental-modules scripts/build.mjs", - "postinstall": "node ./scripts/post-install.js" + "build": "node --experimental-modules scripts/build.mjs" }, "repository": { "type": "git", diff --git a/scripts/post-install.js b/scripts/post-install.js deleted file mode 100644 index 39ccf06a..00000000 --- a/scripts/post-install.js +++ /dev/null @@ -1,132 +0,0 @@ -/* -Copyright 2020 The Matrix.org Foundation C.I.C. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -const fsRoot = require("fs"); -const fs = fsRoot.promises; -const path = require("path"); -const { rollup } = require('rollup'); -const { fileURLToPath } = require('url'); -const { dirname } = require('path'); -// needed to translate commonjs modules to esm -const commonjs = require('@rollup/plugin-commonjs'); -const json = require('@rollup/plugin-json'); -const { nodeResolve } = require('@rollup/plugin-node-resolve'); - -const projectDir = path.join(__dirname, "../"); - -async function removeDirIfExists(targetDir) { - try { - await fs.rmdir(targetDir, {recursive: true}); - } catch (err) { - if (err.code !== "ENOENT") { - throw err; - } - } -} - -/** function used to resolve common-js require calls below. */ -function packageIterator(request, start, defaultIterator) { - // this is just working for bs58, would need to tune it further for other dependencies - if (request === "safe-buffer") { - return [path.join(projectDir, "/scripts/package-overrides/safe-buffer")]; - } else if (request === "buffer/") { - return [path.join(projectDir, "/scripts/package-overrides/buffer")]; - } else { - return defaultIterator(); - } -} - -async function commonjsToESM(src, dst) { - // create js bundle - const bundle = await rollup({ - treeshake: {moduleSideEffects: false}, - input: src, - plugins: [commonjs(), json(), nodeResolve({ - browser: true, - preferBuiltins: false, - customResolveOptions: {packageIterator} - })] - }); - const {output} = await bundle.generate({ - format: 'es' - }); - const code = output[0].code; - await fs.writeFile(dst, code, "utf8"); -} - -async function populateLib() { - const libDir = path.join(projectDir, "lib/"); - await removeDirIfExists(libDir); - await fs.mkdir(libDir); - const olmSrcDir = path.dirname(require.resolve("@matrix-org/olm")); - const olmDstDir = path.join(libDir, "olm/"); - await fs.mkdir(olmDstDir); - for (const file of ["olm.js", "olm.wasm", "olm_legacy.js"]) { - await fs.copyFile(path.join(olmSrcDir, file), path.join(olmDstDir, file)); - } - // transpile node-html-parser to esm - await fs.mkdir(path.join(libDir, "node-html-parser/")); - await commonjsToESM( - require.resolve('node-html-parser/dist/index.js'), - path.join(libDir, "node-html-parser/index.js") - ); - // transpile another-json to esm - await fs.mkdir(path.join(libDir, "another-json/")); - await commonjsToESM( - require.resolve('another-json/another-json.js'), - path.join(libDir, "another-json/index.js") - ); - // transpile bs58 to esm - await fs.mkdir(path.join(libDir, "bs58/")); - await commonjsToESM( - require.resolve('bs58/index.js'), - path.join(libDir, "bs58/index.js") - ); - // transpile base64-arraybuffer to esm - await fs.mkdir(path.join(libDir, "base64-arraybuffer/")); - await commonjsToESM( - require.resolve('base64-arraybuffer/lib/base64-arraybuffer.js'), - path.join(libDir, "base64-arraybuffer/index.js") - ); - // this probably should no go in here, we can just import "aes-js" from legacy-extras.js - // as that file is never loaded from a browser - - // transpile aesjs to esm - await fs.mkdir(path.join(libDir, "aes-js/")); - await commonjsToESM( - require.resolve('aes-js/index.js'), - path.join(libDir, "aes-js/index.js") - ); - // es6-promise is already written as an es module, - // but it does need to be babelified, and current we don't babelify - // anything in node_modules in the build script, so make a bundle that - // is conveniently not placed in node_modules rather than symlinking. - await fs.mkdir(path.join(libDir, "es6-promise/")); - await commonjsToESM( - require.resolve('es6-promise/lib/es6-promise/promise.js'), - path.join(libDir, "es6-promise/index.js") - ); - // fake-indexeddb, used for tests (but unresolvable bare imports also makes the build complain) - // and might want to use it for in-memory storage too, although we probably do ts->es6 with esm - // directly rather than ts->es5->es6 as we do now. The bundle is 240K currently. - await fs.mkdir(path.join(libDir, "fake-indexeddb/")); - await commonjsToESM( - path.join(projectDir, "/scripts/package-overrides/fake-indexeddb.js"), - path.join(libDir, "fake-indexeddb/index.js") - ); -} - -populateLib(); diff --git a/src/domain/session/room/timeline/deserialize.js b/src/domain/session/room/timeline/deserialize.js index ce690732..ecddb5b7 100644 --- a/src/domain/session/room/timeline/deserialize.js +++ b/src/domain/session/room/timeline/deserialize.js @@ -352,7 +352,7 @@ export function parseHTMLBody(platform, mediaRepository, allowReplies, html) { return new MessageBody(html, parts); } -import parse from '../../../../../lib/node-html-parser/index.js'; +import parse from "node-html-parser"; export function tests() { class HTMLParseResult { diff --git a/src/matrix/e2ee/Account.js b/src/matrix/e2ee/Account.js index 13792ddc..ac651819 100644 --- a/src/matrix/e2ee/Account.js +++ b/src/matrix/e2ee/Account.js @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import anotherjson from "../../../lib/another-json/index.js"; +import anotherjson from "another-json"; import {SESSION_E2EE_KEY_PREFIX, OLM_ALGORITHM, MEGOLM_ALGORITHM} from "./common.js"; // use common prefix so it's easy to clear properties that are not e2ee related during session clear diff --git a/src/matrix/e2ee/common.js b/src/matrix/e2ee/common.js index fa970236..90252b15 100644 --- a/src/matrix/e2ee/common.js +++ b/src/matrix/e2ee/common.js @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import anotherjson from "../../../lib/another-json/index.js"; +import anotherjson from "another-json"; import {createEnum} from "../../utils/enum.js"; export const DecryptionSource = createEnum("Sync", "Timeline", "Retry"); diff --git a/src/mocks/Storage.ts b/src/mocks/Storage.ts index 5dba796a..0d8db7f0 100644 --- a/src/mocks/Storage.ts +++ b/src/mocks/Storage.ts @@ -14,7 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ -import {FDBFactory, FDBKeyRange} from "../../lib/fake-indexeddb/index.js"; +import {FDBFactory} from "fake-indexeddb/lib/FDBFactory.js"; +import {FDBKeyRange} from "fake-indexeddb/lib/FDBKeyRange.js"; import {StorageFactory} from "../matrix/storage/idb/StorageFactory"; import {IDOMStorage} from "../matrix/storage/idb/types"; import {Storage} from "../matrix/storage/idb/Storage"; diff --git a/src/platform/web/LegacyPlatform.js b/src/platform/web/LegacyPlatform.js index e6bf7774..624600ff 100644 --- a/src/platform/web/LegacyPlatform.js +++ b/src/platform/web/LegacyPlatform.js @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import aesjs from "../../../lib/aes-js/index.js"; +import aesjs from "aes-js"; import {hkdf} from "../../utils/crypto/hkdf.js"; import {Platform as ModernPlatform} from "./Platform.js"; diff --git a/src/platform/web/dom/Crypto.js b/src/platform/web/dom/Crypto.js index b28897fa..441daf31 100644 --- a/src/platform/web/dom/Crypto.js +++ b/src/platform/web/dom/Crypto.js @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import base64 from "../../../../lib/base64-arraybuffer/index.js"; +import base64 from "base64-arraybuffer"; // turn IE11 result into promise function subtleCryptoResult(promiseOrOp, method) { diff --git a/src/platform/web/legacy-polyfill.js b/src/platform/web/legacy-polyfill.js index 45628f2c..e3dd8fb0 100644 --- a/src/platform/web/legacy-polyfill.js +++ b/src/platform/web/legacy-polyfill.js @@ -15,7 +15,7 @@ limitations under the License. */ // polyfills needed for IE11 -import Promise from "../../../lib/es6-promise/index.js"; +import Promise from "es6-promise/lib/es6-promise/promise.js"; import {checkNeedsSyncPromise} from "../../matrix/storage/idb/utils"; if (typeof window.Promise === "undefined") { diff --git a/src/platform/web/utils/Base58.js b/src/platform/web/utils/Base58.js index ebe4a969..b3f0bca7 100644 --- a/src/platform/web/utils/Base58.js +++ b/src/platform/web/utils/Base58.js @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import bs58 from "../../../../lib/bs58/index.js"; +import bs58 from "bs58"; export class Base58 { encode(buffer) { diff --git a/src/platform/web/utils/Base64.js b/src/platform/web/utils/Base64.js index 6c114fe6..83b5ccc5 100644 --- a/src/platform/web/utils/Base64.js +++ b/src/platform/web/utils/Base64.js @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import base64 from "../../../../lib/base64-arraybuffer/index.js"; +import base64 from "base64-arraybuffer"; export class Base64 { encodeUnpadded(buffer) { diff --git a/src/platform/web/worker/polyfill.js b/src/platform/web/worker/polyfill.js index d7f4b0d2..3c1f60e5 100644 --- a/src/platform/web/worker/polyfill.js +++ b/src/platform/web/worker/polyfill.js @@ -19,7 +19,7 @@ limitations under the License. // just enough to run olm, have promises and async/await // load this first just in case anything else depends on it -import Promise from "../../../../lib/es6-promise/index.js"; +import Promise from "es6-promise/lib/es6-promise/promise.js"; // not calling checkNeedsSyncPromise from here as we don't do any idb in the worker, // mainly because IE doesn't handle multiple concurrent connections well self.Promise = Promise; diff --git a/vite.config.js b/vite.config.js index d27d8a3a..450b8d40 100644 --- a/vite.config.js +++ b/vite.config.js @@ -3,5 +3,11 @@ export default { root: "src/platform/web", server: { hmr: false + }, + resolve: { + alias: { + "safe-buffer": "./scripts/package-overrides/safe-buffer/index.js", + "buffer": "./scripts/package-overrides/buffer/index.js" + } } }; From 01712c3f237019b6b676d3421a80e46c33900a6c Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Tue, 5 Oct 2021 19:28:19 +0200 Subject: [PATCH 03/59] make tests run again --- package.json | 2 +- .../session/room/timeline/deserialize.js | 3 ++- src/mocks/Storage.ts | 4 +-- yarn.lock | 25 ++++++++----------- 4 files changed, 15 insertions(+), 19 deletions(-) diff --git a/package.json b/package.json index edf2e673..e9c9e991 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "lint-ci": "eslint src/", "test": "impunity --entry-point src/platform/web/main.js --force-esm-dirs src/", "start": "snowpack dev --port 3000", - "build": "node --experimental-modules scripts/build.mjs" + "test": "impunity --entry-point src/platform/web/main.js --force-esm-dirs src/ --root-dir src/", }, "repository": { "type": "git", diff --git a/src/domain/session/room/timeline/deserialize.js b/src/domain/session/room/timeline/deserialize.js index ecddb5b7..9421f8f1 100644 --- a/src/domain/session/room/timeline/deserialize.js +++ b/src/domain/session/room/timeline/deserialize.js @@ -352,7 +352,8 @@ export function parseHTMLBody(platform, mediaRepository, allowReplies, html) { return new MessageBody(html, parts); } -import parse from "node-html-parser"; +import nodeHtmlParser from "node-html-parser"; +const {parse} = nodeHtmlParser; export function tests() { class HTMLParseResult { diff --git a/src/mocks/Storage.ts b/src/mocks/Storage.ts index 0d8db7f0..2760c061 100644 --- a/src/mocks/Storage.ts +++ b/src/mocks/Storage.ts @@ -14,8 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ -import {FDBFactory} from "fake-indexeddb/lib/FDBFactory.js"; -import {FDBKeyRange} from "fake-indexeddb/lib/FDBKeyRange.js"; +import FDBFactory from "fake-indexeddb/lib/FDBFactory.js"; +import FDBKeyRange from "fake-indexeddb/lib/FDBKeyRange.js"; import {StorageFactory} from "../matrix/storage/idb/StorageFactory"; import {IDOMStorage} from "../matrix/storage/idb/types"; import {Storage} from "../matrix/storage/idb/Storage"; diff --git a/yarn.lock b/yarn.lock index 93747878..d2e3035d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1847,9 +1847,9 @@ commander@^6.0.0: integrity sha512-s7EA+hDtTYNhuXkTlhqew4txMZVdszBmKWSPEMxGr8ru8JXR7bLUFIAtPhcSuFdJQ0ILMxnJi8GkQL0yvDy/YA== commander@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-6.1.0.tgz#f8d722b78103141006b66f4c7ba1e97315ba75bc" - integrity sha512-wl7PNrYWd2y5mp1OK/LhTlv8Ff4kQJQRXXAvF+uU/TPNiVJUxZLRYGj/B0y/lPGAVcSbJqH2Za/cvHmrPMC8mA== + version "6.2.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" + integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== common-ancestor-path@^1.0.1: version "1.0.1" @@ -2349,11 +2349,11 @@ esbuild-linux-ppc64le@0.13.4: integrity sha512-E1+oJPP7A+j23GPo3CEpBhGwG1bni4B8IbTA3/3rvzjURwUMZdcN3Fhrz24rnjzdLSHmULtOE4VsbT42h1Om4Q== esbuild-node-loader@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/esbuild-node-loader/-/esbuild-node-loader-0.3.1.tgz#fa761e020eff316549ddc3c51a25ec9ffc159ff2" - integrity sha512-75xPOySulti9R5LwYOMmKiwHyXGr/f89I7UkHolLxRqeBiUNqcyCmNTjv+fO2WV9G3f7LDKVZJlbWoYh5LBpfQ== + version "0.3.2" + resolved "https://registry.yarnpkg.com/esbuild-node-loader/-/esbuild-node-loader-0.3.2.tgz#39918776ece52da31f771be9dbcedc459ccf814b" + integrity sha512-4Y6sTwvB5pH+A7gmpd/xzyPkOZC4nmEWRoGBi4BQoE0DhZvrrzHqSmT+jb4x7m1rwv4BCuNbajN13LN8D0PGoA== dependencies: - esbuild "^0.12.6" + esbuild "^0.13.2" esbuild-openbsd-64@0.13.4: version "0.13.4" @@ -2380,11 +2380,6 @@ esbuild-windows-arm64@0.13.4: resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.4.tgz#fb239532f07b764d158f4cc787178ef4c6fadb5c" integrity sha512-vA6GLvptgftRcDcWngD5cMlL4f4LbL8JjU2UMT9yJ0MT5ra6hdZNFWnOeOoEtY4GtJ6OjZ0i+81sTqhAB0fMkg== -esbuild@^0.12.6: - version "0.12.20" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.12.20.tgz#4d3c9d83c99a4031e027b42a4c398c23b6827cb0" - integrity sha512-u7+0qTo9Z64MD9PhooEngCmzyEYJ6ovFhPp8PLNh3UasR5Ihjv6HWVXqm8uHmasdQlpsAf0IsY4U0YVUfCpt4Q== - esbuild@^0.13.2: version "0.13.4" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.13.4.tgz#ce2deb56c4fb360938311cbfc67f8e467bb6841b" @@ -3124,9 +3119,9 @@ import-fresh@^3.0.0, import-fresh@^3.2.1: resolve-from "^4.0.0" impunity@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/impunity/-/impunity-1.0.1.tgz#e1d19c468bd7b8ae3dc7ad44ccbe81f17c626fde" - integrity sha512-MbQ6+UcLNdpMZPBYvr0OLY3pQCr8UMjMK45YCIrRFsZUO9hj/eMurLjpjiO3HBgCkZcw+5FlU6JCHjm5Q3u7mw== + version "1.0.2" + resolved "https://registry.yarnpkg.com/impunity/-/impunity-1.0.2.tgz#17819562cef60a4e74dd095438012131211687f4" + integrity sha512-tv61TSxBUd02Tap2IFajD8pQ+PCo4/lZG4DOd4nWmRYyH/KyxKEU6I0u4jn3mqWhCF6ECdRh5g98abWcvNPcHA== dependencies: colors "^1.3.3" commander "^6.1.0" From e2b20f466ddd09bdf7a08327e26b9a17653781a0 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Tue, 5 Oct 2021 19:28:38 +0200 Subject: [PATCH 04/59] remove unneeded package override --- scripts/package-overrides/fake-indexeddb.js | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 scripts/package-overrides/fake-indexeddb.js diff --git a/scripts/package-overrides/fake-indexeddb.js b/scripts/package-overrides/fake-indexeddb.js deleted file mode 100644 index 65159813..00000000 --- a/scripts/package-overrides/fake-indexeddb.js +++ /dev/null @@ -1,4 +0,0 @@ -// we have our own main file for this module as we need both these symbols to -// be exported, and we also don't want to auto behaviour that modifies global vars -exports.FDBFactory = require("fake-indexeddb/lib/FDBFactory.js"); -exports.FDBKeyRange = require("fake-indexeddb/lib/FDBKeyRange.js"); \ No newline at end of file From afadd258856e0b5d8e063c6058c49d0b6a26909e Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Tue, 5 Oct 2021 19:29:00 +0200 Subject: [PATCH 05/59] tweak build settings somewhat for now --- vite.config.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/vite.config.js b/vite.config.js index 450b8d40..9c119b41 100644 --- a/vite.config.js +++ b/vite.config.js @@ -9,5 +9,9 @@ export default { "safe-buffer": "./scripts/package-overrides/safe-buffer/index.js", "buffer": "./scripts/package-overrides/buffer/index.js" } + }, + build: { + outDir: "../../../target", + minify: false } }; From 3fe1c0cdc320a053690f5505a99571d51adc38be Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Tue, 5 Oct 2021 19:29:28 +0200 Subject: [PATCH 06/59] tweak build and start command to use vite --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index e9c9e991..7cced96b 100644 --- a/package.json +++ b/package.json @@ -10,9 +10,9 @@ "lint": "eslint --cache src/", "lint-ts": "eslint src/ -c .ts-eslintrc.js --ext .ts", "lint-ci": "eslint src/", - "test": "impunity --entry-point src/platform/web/main.js --force-esm-dirs src/", - "start": "snowpack dev --port 3000", "test": "impunity --entry-point src/platform/web/main.js --force-esm-dirs src/ --root-dir src/", + "start": "vite --port 3000", + "build": "vite build" }, "repository": { "type": "git", From 216afd45cc307588c5b239b16e9f0cca208abb25 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Wed, 6 Oct 2021 20:34:16 +0200 Subject: [PATCH 07/59] vite/rollup plugin to inject and transform manifest & service worker --- scripts/build-plugins/manifest.js | 46 ++++++++++ scripts/build-plugins/service-worker.js | 110 ++++++++++++++++++++++++ src/platform/web/assets/manifest.json | 4 +- src/platform/web/index.html | 1 + vite.config.js | 13 ++- 5 files changed, 170 insertions(+), 4 deletions(-) create mode 100644 scripts/build-plugins/manifest.js create mode 100644 scripts/build-plugins/service-worker.js diff --git a/scripts/build-plugins/manifest.js b/scripts/build-plugins/manifest.js new file mode 100644 index 00000000..bcd96fa4 --- /dev/null +++ b/scripts/build-plugins/manifest.js @@ -0,0 +1,46 @@ +const fs = require('fs/promises'); +const path = require('path'); + +module.exports = function injectWebManifest(manifestFile) { + let root; + let manifestHref; + return { + name: "injectWebManifest", + apply: "build", + configResolved: config => { + root = config.root; + }, + transformIndexHtml: { + transform(html) { + return [{ + tag: "link", + attrs: {rel: "manifest", href: manifestHref}, + injectTo: "head" + }]; + }, + }, + generateBundle: async function() { + const absoluteManifestFile = path.resolve(root, manifestFile); + const manifestDir = path.dirname(absoluteManifestFile); + const json = await fs.readFile(absoluteManifestFile, {encoding: "utf8"}); + const manifest = JSON.parse(json); + for (const icon of manifest.icons) { + const iconFileName = path.resolve(manifestDir, icon.src); + const imgData = await fs.readFile(iconFileName); + const ref = this.emitFile({ + type: "asset", + name: path.basename(iconFileName), + source: imgData + }); + icon.src = this.getFileName(ref); + } + const outputName = path.basename(absoluteManifestFile); + const manifestRef = this.emitFile({ + type: "asset", + name: outputName, + source: JSON.stringify(manifest) + }); + manifestHref = this.getFileName(manifestRef); + } + }; +} diff --git a/scripts/build-plugins/service-worker.js b/scripts/build-plugins/service-worker.js new file mode 100644 index 00000000..420618fb --- /dev/null +++ b/scripts/build-plugins/service-worker.js @@ -0,0 +1,110 @@ +const fs = require('fs/promises'); +const path = require('path'); +const xxhash = require('xxhashjs'); + +function contentHash(str) { + var hasher = new xxhash.h32(0); + hasher.update(str); + return hasher.digest(); +} + +module.exports = function injectServiceWorker(swFile) { + let root; + let manifestHref; + return { + name: "injectServiceWorker", + apply: "build", + enforce: "post", + configResolved: config => { + root = config.root; + }, + generateBundle: async function(_, bundle) { + const absoluteSwFile = path.resolve(root, swFile); + const packageManifest = path.resolve(path.join(__dirname, "../../package.json")); + const version = JSON.parse(await fs.readFile(packageManifest, "utf8")).version; + let swSource = await fs.readFile(absoluteSwFile, {encoding: "utf8"}); + const assets = Object.values(bundle).filter(a => a.type === "asset"); + const cachedFileNames = assets.map(o => o.fileName).filter(fileName => fileName !== "index.html"); + const uncachedFileContentMap = { + "index.html": assets.find(o => o.fileName === "index.html").source, + "sw.js": swSource + }; + const globalHash = getBuildHash(cachedFileNames, uncachedFileContentMap); + swSource = await buildServiceWorker(swSource, version, globalHash, assets); + const outputName = path.basename(absoluteSwFile); + this.emitFile({ + type: "asset", + fileName: outputName, + source: swSource + }); + } + }; +} + +function getBuildHash(cachedFileNames, uncachedFileContentMap) { + const unhashedHashes = Object.entries(uncachedFileContentMap).map(([fileName, content]) => { + return `${fileName}-${contentHash(Buffer.from(content))}`; + }); + const globalHashAssets = cachedFileNames.concat(unhashedHashes); + globalHashAssets.sort(); + return contentHash(globalHashAssets.join(",")).toString(); +} + +const NON_PRECACHED_JS = [ + "hydrogen-legacy.js", + "olm_legacy.js", + // most environments don't need the worker + "main.js" +]; + +function isPreCached(asset) { + const {name, fileName} = asset; + return name.endsWith(".svg") || + name.endsWith(".png") || + name.endsWith(".css") || + name.endsWith(".wasm") || + name.endsWith(".html") || + // the index and vendor chunks don't have an extension in `name`, so check extension on `fileName` + fileName.endsWith(".js") && !NON_PRECACHED_JS.includes(path.basename(name)); +} + +async function buildServiceWorker(swSource, version, globalHash, assets) { + const unhashedPreCachedAssets = []; + const hashedPreCachedAssets = []; + const hashedCachedOnRequestAssets = []; + + for (const asset of assets) { + const {name: unresolved, fileName: resolved} = asset; + if (!unresolved || resolved === unresolved) { + unhashedPreCachedAssets.push(resolved); + } else if (isPreCached(asset)) { + hashedPreCachedAssets.push(resolved); + } else { + hashedCachedOnRequestAssets.push(resolved); + } + } + + const replaceArrayInSource = (name, value) => { + const newSource = swSource.replace(`${name} = []`, `${name} = ${JSON.stringify(value)}`); + if (newSource === swSource) { + throw new Error(`${name} was not found in the service worker source`); + } + return newSource; + }; + const replaceStringInSource = (name, value) => { + const newSource = swSource.replace(new RegExp(`${name}\\s=\\s"[^"]*"`), `${name} = ${JSON.stringify(value)}`); + if (newSource === swSource) { + throw new Error(`${name} was not found in the service worker source`); + } + return newSource; + }; + + // write service worker + swSource = swSource.replace(`"%%VERSION%%"`, `"${version}"`); + swSource = swSource.replace(`"%%GLOBAL_HASH%%"`, `"${globalHash}"`); + swSource = replaceArrayInSource("UNHASHED_PRECACHED_ASSETS", unhashedPreCachedAssets); + swSource = replaceArrayInSource("HASHED_PRECACHED_ASSETS", hashedPreCachedAssets); + swSource = replaceArrayInSource("HASHED_CACHED_ON_REQUEST_ASSETS", hashedCachedOnRequestAssets); + swSource = replaceStringInSource("NOTIFICATION_BADGE_ICON", assets.find(a => a.name === "icon.png").fileName); + return swSource; +} diff --git a/src/platform/web/assets/manifest.json b/src/platform/web/assets/manifest.json index 01728ff9..92dde01a 100644 --- a/src/platform/web/assets/manifest.json +++ b/src/platform/web/assets/manifest.json @@ -5,8 +5,8 @@ "description": "Lightweight matrix client with legacy and mobile browser support", "start_url": "index.html", "icons": [ - {"src": "assets/icon.png", "sizes": "384x384", "type": "image/png"}, - {"src": "assets/icon-maskable.png", "sizes": "384x384", "type": "image/png", "purpose": "maskable"} + {"src": "icon.png", "sizes": "384x384", "type": "image/png"}, + {"src": "icon-maskable.png", "sizes": "384x384", "type": "image/png", "purpose": "maskable"} ], "theme_color": "#0DBD8B" } diff --git a/src/platform/web/index.html b/src/platform/web/index.html index 397aae66..5130cd39 100644 --- a/src/platform/web/index.html +++ b/src/platform/web/index.html @@ -30,6 +30,7 @@ downloadSandbox: downloadSandboxPath, defaultHomeServer: "matrix.org", // NOTE: uncomment this if you want the service worker for local development + // and adjust apply in the service-worker build plugin // serviceWorker: "sw.js", // NOTE: provide push config if you want push notifs for local development // see assets/config.json for what the config looks like diff --git a/vite.config.js b/vite.config.js index 9c119b41..4fd46691 100644 --- a/vite.config.js +++ b/vite.config.js @@ -1,3 +1,6 @@ +const injectWebManifest = require("./scripts/build-plugins/manifest"); +const injectServiceWorker = require("./scripts/build-plugins/service-worker"); + export default { public: false, root: "src/platform/web", @@ -12,6 +15,12 @@ export default { }, build: { outDir: "../../../target", - minify: false - } + emptyOutDir: true, + minify: true, + sourcemap: true + }, + plugins: [ + injectWebManifest("assets/manifest.json"), + injectServiceWorker("sw.js") + ] }; From 923a1a20572b07efcd9e774077e5b42ad0427a82 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Thu, 7 Oct 2021 15:09:16 +0200 Subject: [PATCH 08/59] use vite define option to inject version number everywhere --- scripts/build-plugins/service-worker.js | 3 ++- src/platform/web/Platform.js | 2 +- src/platform/web/dom/ServiceWorkerHandler.js | 2 +- src/platform/web/index.html | 4 ---- src/platform/web/ui/login/common.js | 6 +++--- vite.config.js | 9 ++++++++- 6 files changed, 15 insertions(+), 11 deletions(-) diff --git a/scripts/build-plugins/service-worker.js b/scripts/build-plugins/service-worker.js index 420618fb..d80f0bbf 100644 --- a/scripts/build-plugins/service-worker.js +++ b/scripts/build-plugins/service-worker.js @@ -10,6 +10,7 @@ function contentHash(str) { module.exports = function injectServiceWorker(swFile) { let root; + let version; let manifestHref; return { name: "injectServiceWorker", @@ -17,11 +18,11 @@ module.exports = function injectServiceWorker(swFile) { enforce: "post", configResolved: config => { root = config.root; + version = JSON.parse(config.define.HYDROGEN_VERSION); // unquote }, generateBundle: async function(_, bundle) { const absoluteSwFile = path.resolve(root, swFile); const packageManifest = path.resolve(path.join(__dirname, "../../package.json")); - const version = JSON.parse(await fs.readFile(packageManifest, "utf8")).version; let swSource = await fs.readFile(absoluteSwFile, {encoding: "utf8"}); const assets = Object.values(bundle).filter(a => a.type === "asset"); const cachedFileNames = assets.map(o => o.fileName).filter(fileName => fileName !== "index.html"); diff --git a/src/platform/web/Platform.js b/src/platform/web/Platform.js index 1530ed12..efb939d9 100644 --- a/src/platform/web/Platform.js +++ b/src/platform/web/Platform.js @@ -265,7 +265,7 @@ export class Platform { } get version() { - return window.HYDROGEN_VERSION; + return HYDROGEN_VERSION; } dispose() { diff --git a/src/platform/web/dom/ServiceWorkerHandler.js b/src/platform/web/dom/ServiceWorkerHandler.js index dd2c755f..08c687c9 100644 --- a/src/platform/web/dom/ServiceWorkerHandler.js +++ b/src/platform/web/dom/ServiceWorkerHandler.js @@ -181,7 +181,7 @@ export class ServiceWorkerHandler { } get version() { - return window.HYDROGEN_VERSION; + return HYDROGEN_VERSION; } get buildHash() { diff --git a/src/platform/web/index.html b/src/platform/web/index.html index 5130cd39..d0718098 100644 --- a/src/platform/web/index.html +++ b/src/platform/web/index.html @@ -16,10 +16,6 @@ - diff --git a/vite.config.js b/vite.config.js index e0dd0f99..45ab94c9 100644 --- a/vite.config.js +++ b/vite.config.js @@ -1,9 +1,15 @@ const injectWebManifest = require("./scripts/build-plugins/manifest"); const injectServiceWorker = require("./scripts/build-plugins/service-worker"); +const legacyBuild = require("./scripts/build-plugins/legacy-build"); const fs = require("fs"); const path = require("path"); - +// we could also just import {version} from "../../package.json" where needed, +// but this won't work in the service worker yet as it is not transformed yet +// TODO: we should emit a chunk early on and then transform the asset again once we know all the other assets to cache const version = JSON.parse(fs.readFileSync(path.join(__dirname, "package.json"), "utf8")).version; +const {defineConfig} = require("vite"); +let polyfillSrc; +let polyfillRef; export default { public: false, @@ -14,18 +20,25 @@ export default { resolve: { alias: { "safe-buffer": "./scripts/package-overrides/safe-buffer/index.js", - "buffer": "./scripts/package-overrides/buffer/index.js" + "buffer": "./scripts/package-overrides/buffer/index.js", } }, build: { outDir: "../../../target", emptyOutDir: true, - minify: true, - sourcemap: true + minify: false, + sourcemap: false, + assetsInlineLimit: 0, + polyfillModulePreload: false, }, plugins: [ + legacyBuild(path.join(__dirname, "src/platform/web/index.html?html-proxy&index=0.js"), { + "./Platform": "./LegacyPlatform" + }, "hydrogen-legacy", [ + './legacy-polyfill', + ]), injectWebManifest("assets/manifest.json"), - injectServiceWorker("sw.js") + injectServiceWorker("sw.js"), ], define: { "HYDROGEN_VERSION": JSON.stringify(version) diff --git a/yarn.lock b/yarn.lock index d2e3035d..30c71c52 100644 --- a/yarn.lock +++ b/yarn.lock @@ -825,6 +825,11 @@ dependencies: regenerator-runtime "^0.13.4" +"@babel/standalone@^7.15.7": + version "7.15.8" + resolved "https://registry.yarnpkg.com/@babel/standalone/-/standalone-7.15.8.tgz#3cb40b81892a702968a3e0bba2bdd1115f034876" + integrity sha512-EF2uQLeuwflnPRGetWH2Z400ITOSK7YbkXIKxY91EWSiOJ8xsbupT3sx3sFRwVyQgjsHSILFDzLcSo/rGspLhQ== + "@babel/template@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" @@ -1294,6 +1299,17 @@ "@typescript-eslint/types" "4.29.2" eslint-visitor-keys "^2.0.0" +"@vitejs/plugin-legacy@^1.6.1": + version "1.6.1" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-legacy/-/plugin-legacy-1.6.1.tgz#45f0e006de2d25758151b098b8dcb912c62a95dc" + integrity sha512-isBi2ti+AlCZUpfA1P6L8gseltBy/qi6Rsi92aDzeL2elpwXgN4Hv/xLS2UUSSj9F0mFmxXCYPWlBPaJnlYamQ== + dependencies: + "@babel/standalone" "^7.15.7" + core-js "^3.18.1" + magic-string "^0.25.7" + regenerator-runtime "^0.13.9" + systemjs "^6.10.3" + abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" @@ -1898,6 +1914,11 @@ core-js@^2.5.3: resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== +core-js@^3.18.1: + version "3.18.2" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.18.2.tgz#63a551e8a29f305cd4123754846e65896619ba5b" + integrity sha512-zNhPOUoSgoizoSQFdX1MeZO16ORRb9FFQLts8gSYbZU5FcgXhp24iMWMxnOQo5uIaIG7/6FA/IqJPwev1o9ZXQ== + core-js@^3.6.5: version "3.6.5" resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a" @@ -4554,6 +4575,11 @@ regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.7: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== +regenerator-runtime@^0.13.9: + version "0.13.9" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" + integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== + regenerator-transform@^0.14.2: version "0.14.5" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" @@ -5118,6 +5144,11 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" +systemjs@^6.10.3: + version "6.10.3" + resolved "https://registry.yarnpkg.com/systemjs/-/systemjs-6.10.3.tgz#7e783fccb58232f1d9eb05c7e1a661268945cade" + integrity sha512-mXwfLJdaADqWg1J5+Z0bGQEdcXSe+ePPTfzffMB29aVls5cXveRl0vneSV/19t3SfuUBsAraLP8W/g5u9cmYXA== + table@^6.0.9: version "6.7.1" resolved "https://registry.yarnpkg.com/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2" From 7dce579ac38e6e0bbfe4a0751a3ebbee4582d8ea Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Tue, 12 Oct 2021 16:33:30 +0200 Subject: [PATCH 12/59] make babel plugin run after commonjs one added by vite --- scripts/build-plugins/legacy-build.js | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/build-plugins/legacy-build.js b/scripts/build-plugins/legacy-build.js index 3d069d4d..e1a2e1df 100644 --- a/scripts/build-plugins/legacy-build.js +++ b/scripts/build-plugins/legacy-build.js @@ -92,6 +92,7 @@ async function buildLegacyChunk(root, chunkName, code) { ] ] }); + babelPlugin.enforce = "post"; const bundle = await build({ root, configFile: false, From 3b72157e64243b4a37ca86be6c69247023c2ce16 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Tue, 12 Oct 2021 16:33:48 +0200 Subject: [PATCH 13/59] apparently, package-overrides should use esm otherwise they don't get transpiled for some reason --- scripts/package-overrides/buffer/index.js | 2 +- scripts/package-overrides/safe-buffer/index.js | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/scripts/package-overrides/buffer/index.js b/scripts/package-overrides/buffer/index.js index 0ed6d01c..2ac44010 100644 --- a/scripts/package-overrides/buffer/index.js +++ b/scripts/package-overrides/buffer/index.js @@ -1,4 +1,4 @@ -module.exports = class Buffer { +export default class Buffer { static isBuffer(array) {return array instanceof Uint8Array;} static from(arrayBuffer) {return arrayBuffer;} static allocUnsafe(size) {return Buffer.alloc(size);} diff --git a/scripts/package-overrides/safe-buffer/index.js b/scripts/package-overrides/safe-buffer/index.js index 93a10446..a1c7d0bb 100644 --- a/scripts/package-overrides/safe-buffer/index.js +++ b/scripts/package-overrides/safe-buffer/index.js @@ -1 +1,2 @@ -module.exports.Buffer = require("buffer"); +import Buffer from "buffer"; +export {Buffer}; From fcde50718380ae6f66731a07c51e60b84acdaa15 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Wed, 13 Oct 2021 12:21:26 +0200 Subject: [PATCH 14/59] WIP --- package.json | 2 + scripts/build-plugins/legacy-build.js | 95 +++++++---- vite.config.js | 2 +- yarn.lock | 232 ++++++++++++++++++++++++-- 4 files changed, 281 insertions(+), 50 deletions(-) diff --git a/package.json b/package.json index 2c02fb1f..d89d3627 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,9 @@ "homepage": "https://github.com/vector-im/hydrogen-web/#readme", "devDependencies": { "@babel/core": "^7.11.1", + "@babel/plugin-transform-runtime": "^7.15.8", "@babel/preset-env": "^7.11.0", + "@babel/standalone": "^7.15.8", "@rollup/plugin-babel": "^5.1.0", "@rollup/plugin-multi-entry": "^4.0.0", "@typescript-eslint/eslint-plugin": "^4.29.2", diff --git a/scripts/build-plugins/legacy-build.js b/scripts/build-plugins/legacy-build.js index e1a2e1df..43f87fba 100644 --- a/scripts/build-plugins/legacy-build.js +++ b/scripts/build-plugins/legacy-build.js @@ -6,6 +6,7 @@ const VIRTUAL_ENTRY = "hydrogen:legacy-entry"; module.exports = function legacyBuild(entryModuleId, entryImportReplacements, chunkName, extraImports) { let parentRoot; let code; + let legacyBundleRef; let legacyBundleFileName; return { name: "hydrogen:legacyBuild", @@ -26,14 +27,18 @@ module.exports = function legacyBuild(entryModuleId, entryImportReplacements, ch code = replaceImport(this, code, importSource, newImportSource); } code = addExtraImports(code, extraImports); - const mainChunk = await buildLegacyChunk(parentRoot, chunkName, code); - this.emitFile({ + const bundleCode = await buildLegacyChunk(parentRoot, chunkName, code); + legacyBundleRef = this.emitFile({ type: "asset", - source: mainChunk.code, - fileName: mainChunk.fileName, - name: mainChunk.name + source: bundleCode, + name: `${chunkName}.js` }); - legacyBundleFileName = mainChunk.fileName; + }, + generateBundle() { + if (!legacyBundleRef) { + throw new Error("no bundle"); + } + legacyBundleFileName = this.getFileName(legacyBundleRef); }, transformIndexHtml: { transform(html) { @@ -70,37 +75,34 @@ function addExtraImports(code, extraImports) { } async function buildLegacyChunk(root, chunkName, code) { - if (!babel) { - babel = require('@rollup/plugin-babel'); - } - // compile down to whatever IE 11 needs - const babelPlugin = babel.babel({ - babelHelpers: 'bundled', - exclude: 'node_modules/**', - presets: [ - [ - "@babel/preset-env", - { - useBuiltIns: "entry", - corejs: "3.4", - targets: "IE 11", - // we provide our own promise polyfill (es6-promise) - // with support for synchronous flushing of - // the queue for idb where needed - exclude: ["es.promise", "es.promise.all-settled", "es.promise.finally"] - } - ] - ] - }); - babelPlugin.enforce = "post"; + // // compile down to whatever IE 11 needs + // const babelPlugin = babel.getBabelOutputPlugin({ + // // babelHelpers: 'bundled', + // exclude: 'node_modules/**', + // presets: [ + // [ + // "@babel/preset-env", + // { + // useBuiltIns: "entry", + // corejs: "3.4", + // targets: "IE 11", + // // we provide our own promise polyfill (es6-promise) + // // with support for synchronous flushing of + // // the queue for idb where needed + // exclude: ["es.promise", "es.promise.all-settled", "es.promise.finally"] + // } + // ] + // ] + // }); + // babelPlugin.enforce = "post"; const bundle = await build({ root, configFile: false, logLevel: 'error', build: { write: false, - target: false, - minify: true, + minify: false, + target: "esnext", assetsInlineLimit: 0, polyfillModulePreload: false, rollupOptions: { @@ -127,12 +129,35 @@ async function buildLegacyChunk(root, chunkName, code) { if (id === VIRTUAL_ENTRY) { return code; } - } - }, - babelPlugin + }, + } ] }); const assets = Array.isArray(bundle.output) ? bundle.output : [bundle.output]; const mainChunk = assets.find(a => a.name === chunkName); - return mainChunk; + + if (!babel) { + babel = require('@babel/standalone'); + } + const {code: babelCode} = babel.transform(mainChunk.code, { + babelrc: false, + configFile: false, + presets: [ + [ + "env", + { + useBuiltIns: "usage", + modules: false, + corejs: "3.4", + targets: "IE 11", + // we provide our own promise polyfill (es6-promise) + // with support for synchronous flushing of + // the queue for idb where needed + exclude: ["es.promise", "es.promise.all-settled", "es.promise.finally"] + } + ] + ] + }); + console.log("code", babelCode.length); + return babelCode; } diff --git a/vite.config.js b/vite.config.js index 45ab94c9..9cc7e4f3 100644 --- a/vite.config.js +++ b/vite.config.js @@ -26,7 +26,7 @@ export default { build: { outDir: "../../../target", emptyOutDir: true, - minify: false, + minify: true, sourcemap: false, assetsInlineLimit: 0, polyfillModulePreload: false, diff --git a/yarn.lock b/yarn.lock index 30c71c52..d3ff1771 100644 --- a/yarn.lock +++ b/yarn.lock @@ -23,6 +23,13 @@ dependencies: "@babel/highlight" "^7.10.4" +"@babel/code-frame@^7.14.5": + version "7.15.8" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.15.8.tgz#45990c47adadb00c03677baa89221f7cc23d2503" + integrity sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg== + dependencies: + "@babel/highlight" "^7.14.5" + "@babel/compat-data@^7.10.4", "@babel/compat-data@^7.11.0": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.11.0.tgz#e9f73efe09af1355b723a7f39b11bad637d7c99c" @@ -32,6 +39,11 @@ invariant "^2.2.4" semver "^5.5.0" +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.15.0.tgz#2dbaf8b85334796cafbb0f5793a90a2fc010b176" + integrity sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA== + "@babel/core@^7.11.1": version "7.11.1" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.11.1.tgz#2c55b604e73a40dc21b0e52650b11c65cf276643" @@ -63,6 +75,15 @@ jsesc "^2.5.1" source-map "^0.5.0" +"@babel/generator@^7.15.4": + version "7.15.8" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.15.8.tgz#fa56be6b596952ceb231048cf84ee499a19c0cd1" + integrity sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g== + dependencies: + "@babel/types" "^7.15.6" + jsesc "^2.5.1" + source-map "^0.5.0" + "@babel/helper-annotate-as-pure@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3" @@ -89,6 +110,16 @@ levenary "^1.1.1" semver "^5.5.0" +"@babel/helper-compilation-targets@^7.13.0": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz#cf6d94f30fbefc139123e27dd6b02f65aeedb7b9" + integrity sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ== + dependencies: + "@babel/compat-data" "^7.15.0" + "@babel/helper-validator-option" "^7.14.5" + browserslist "^4.16.6" + semver "^6.3.0" + "@babel/helper-create-class-features-plugin@^7.10.4": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz#9f61446ba80e8240b0a5c85c6fdac8459d6f259d" @@ -119,6 +150,20 @@ "@babel/types" "^7.10.5" lodash "^4.17.19" +"@babel/helper-define-polyfill-provider@^0.2.2": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz#0525edec5094653a282688d34d846e4c75e9c0b6" + integrity sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew== + dependencies: + "@babel/helper-compilation-targets" "^7.13.0" + "@babel/helper-module-imports" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/traverse" "^7.13.0" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + semver "^6.1.2" + "@babel/helper-explode-assignable-expression@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.4.tgz#40a1cd917bff1288f699a94a75b37a1a2dbd8c7c" @@ -136,6 +181,15 @@ "@babel/template" "^7.10.4" "@babel/types" "^7.10.4" +"@babel/helper-function-name@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz#845744dafc4381a4a5fb6afa6c3d36f98a787ebc" + integrity sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw== + dependencies: + "@babel/helper-get-function-arity" "^7.15.4" + "@babel/template" "^7.15.4" + "@babel/types" "^7.15.4" + "@babel/helper-get-function-arity@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" @@ -143,6 +197,13 @@ dependencies: "@babel/types" "^7.10.4" +"@babel/helper-get-function-arity@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz#098818934a137fce78b536a3e015864be1e2879b" + integrity sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA== + dependencies: + "@babel/types" "^7.15.4" + "@babel/helper-hoist-variables@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz#d49b001d1d5a68ca5e6604dda01a6297f7c9381e" @@ -150,6 +211,13 @@ dependencies: "@babel/types" "^7.10.4" +"@babel/helper-hoist-variables@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz#09993a3259c0e918f99d104261dfdfc033f178df" + integrity sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA== + dependencies: + "@babel/types" "^7.15.4" + "@babel/helper-member-expression-to-functions@^7.10.4", "@babel/helper-member-expression-to-functions@^7.10.5": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz#ae69c83d84ee82f4b42f96e2a09410935a8f26df" @@ -164,6 +232,13 @@ dependencies: "@babel/types" "^7.10.4" +"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz#e18007d230632dea19b47853b984476e7b4e103f" + integrity sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA== + dependencies: + "@babel/types" "^7.15.4" + "@babel/helper-module-transforms@^7.10.4", "@babel/helper-module-transforms@^7.10.5", "@babel/helper-module-transforms@^7.11.0": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz#b16f250229e47211abdd84b34b64737c2ab2d359" @@ -189,6 +264,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== +"@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5": + 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-regex@^7.10.4": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.5.tgz#32dfbb79899073c415557053a19bd055aae50ae0" @@ -239,6 +319,13 @@ dependencies: "@babel/types" "^7.11.0" +"@babel/helper-split-export-declaration@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz#aecab92dcdbef6a10aa3b62ab204b085f776e257" + integrity sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw== + dependencies: + "@babel/types" "^7.15.4" + "@babel/helper-validator-identifier@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" @@ -249,6 +336,16 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz#6654d171b2024f6d8ee151bf2509699919131d48" integrity sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g== +"@babel/helper-validator-identifier@^7.14.9": + 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-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-wrap-function@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz#8a6f701eab0ff39f765b5a1cfef409990e624b87" @@ -291,6 +388,11 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.3.tgz#9e1eae46738bcd08e23e867bab43e7b95299a8f9" integrity sha512-REo8xv7+sDxkKvoxEywIdsNFiZLybwdI7hcT5uEPyQrSMB4YQ973BfC9OOrD/81MaIjh6UxdulIQXkjmiH3PcA== +"@babel/parser@^7.15.4": + version "7.15.8" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.8.tgz#7bacdcbe71bdc3ff936d510c15dcea7cf0b99016" + integrity sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA== + "@babel/plugin-proposal-async-generator-functions@^7.10.4": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz#3491cabf2f7c179ab820606cec27fed15e0e8558" @@ -680,6 +782,18 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-runtime@^7.15.8": + version "7.15.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.15.8.tgz#9d15b1e94e1c7f6344f65a8d573597d93c6cd886" + integrity sha512-+6zsde91jMzzvkzuEA3k63zCw+tm/GvuuabkpisgbDMTPQsIMHllE3XczJFFtEHLjjhKQFZmGQVRdELetlWpVw== + dependencies: + "@babel/helper-module-imports" "^7.15.4" + "@babel/helper-plugin-utils" "^7.14.5" + babel-plugin-polyfill-corejs2 "^0.2.2" + babel-plugin-polyfill-corejs3 "^0.2.5" + babel-plugin-polyfill-regenerator "^0.2.2" + semver "^6.3.0" + "@babel/plugin-transform-shorthand-properties@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz#9fd25ec5cdd555bb7f473e5e6ee1c971eede4dd6" @@ -825,7 +939,7 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/standalone@^7.15.7": +"@babel/standalone@^7.15.7", "@babel/standalone@^7.15.8": version "7.15.8" resolved "https://registry.yarnpkg.com/@babel/standalone/-/standalone-7.15.8.tgz#3cb40b81892a702968a3e0bba2bdd1115f034876" integrity sha512-EF2uQLeuwflnPRGetWH2Z400ITOSK7YbkXIKxY91EWSiOJ8xsbupT3sx3sFRwVyQgjsHSILFDzLcSo/rGspLhQ== @@ -839,6 +953,15 @@ "@babel/parser" "^7.10.4" "@babel/types" "^7.10.4" +"@babel/template@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.15.4.tgz#51898d35dcf3faa670c4ee6afcfd517ee139f194" + integrity sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg== + dependencies: + "@babel/code-frame" "^7.14.5" + "@babel/parser" "^7.15.4" + "@babel/types" "^7.15.4" + "@babel/traverse@^7.10.4", "@babel/traverse@^7.11.0": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.11.0.tgz#9b996ce1b98f53f7c3e4175115605d56ed07dd24" @@ -854,6 +977,21 @@ globals "^11.1.0" lodash "^4.17.19" +"@babel/traverse@^7.13.0": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.15.4.tgz#ff8510367a144bfbff552d9e18e28f3e2889c22d" + integrity sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA== + dependencies: + "@babel/code-frame" "^7.14.5" + "@babel/generator" "^7.15.4" + "@babel/helper-function-name" "^7.15.4" + "@babel/helper-hoist-variables" "^7.15.4" + "@babel/helper-split-export-declaration" "^7.15.4" + "@babel/parser" "^7.15.4" + "@babel/types" "^7.15.4" + debug "^4.1.0" + globals "^11.1.0" + "@babel/types@^7.10.4": version "7.11.5" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.5.tgz#d9de577d01252d77c6800cee039ee64faf75662d" @@ -872,6 +1010,14 @@ lodash "^4.17.19" to-fast-properties "^2.0.0" +"@babel/types@^7.15.4", "@babel/types@^7.15.6": + version "7.15.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.15.6.tgz#99abdc48218b2881c058dd0a7ab05b99c9be758f" + integrity sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig== + dependencies: + "@babel/helper-validator-identifier" "^7.14.9" + to-fast-properties "^2.0.0" + "@eslint/eslintrc@^0.4.3": version "0.4.3" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" @@ -1515,6 +1661,30 @@ babel-plugin-dynamic-import-node@^2.3.3: dependencies: object.assign "^4.1.0" +babel-plugin-polyfill-corejs2@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz#e9124785e6fd94f94b618a7954e5693053bf5327" + integrity sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ== + dependencies: + "@babel/compat-data" "^7.13.11" + "@babel/helper-define-polyfill-provider" "^0.2.2" + semver "^6.1.1" + +babel-plugin-polyfill-corejs3@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.5.tgz#2779846a16a1652244ae268b1e906ada107faf92" + integrity sha512-ninF5MQNwAX9Z7c9ED+H2pGt1mXdP4TqzlHKyPIYmJIYz0N+++uwdM7RnJukklhzJ54Q84vA4ZJkgs7lu5vqcw== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.2.2" + core-js-compat "^3.16.2" + +babel-plugin-polyfill-regenerator@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz#b310c8d642acada348c1fa3b3e6ce0e851bee077" + integrity sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.2.2" + balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" @@ -1619,6 +1789,17 @@ browserslist@^4.16.6: escalade "^3.1.1" node-releases "^1.1.71" +browserslist@^4.17.3: + version "4.17.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.17.3.tgz#2844cd6eebe14d12384b0122d217550160d2d624" + integrity sha512-59IqHJV5VGdcJZ+GZ2hU5n4Kv3YiASzW6Xk5g9tf5a/MAzGeFwgGWU39fVzNIOVcgB3+Gp+kiQu0HEfTVU/3VQ== + dependencies: + caniuse-lite "^1.0.30001264" + electron-to-chromium "^1.3.857" + escalade "^3.1.1" + node-releases "^1.1.77" + picocolors "^0.2.1" + bs58@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" @@ -1699,10 +1880,10 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -caniuse-lite@^1.0.30001111, caniuse-lite@^1.0.30001219, caniuse-lite@^1.0.30001230: - version "1.0.30001278" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001278.tgz" - integrity sha512-mpF9KeH8u5cMoEmIic/cr7PNS+F5LWBk0t2ekGT60lFf0Wq+n9LspAj0g3P+o7DQhD3sUdlMln4YFAWhFYn9jg== +caniuse-lite@^1.0.30001111, caniuse-lite@^1.0.30001219, caniuse-lite@^1.0.30001230, caniuse-lite@^1.0.30001264: + version "1.0.30001265" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001265.tgz" + integrity sha512-YzBnspggWV5hep1m9Z6sZVLOt7vrju8xWooFAgN6BA5qvy98qPAPb7vNUzypFaoh2pb3vlfzbDO8tB57UPGbtw== caseless@~0.12.0: version "0.12.0" @@ -1901,6 +2082,14 @@ convert-source-map@^1.7.0: dependencies: safe-buffer "~5.1.1" +core-js-compat@^3.16.2: + version "3.18.2" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.18.2.tgz#e40c266fbd613948dd8d2d2156345da8ac03c142" + integrity sha512-25VJYCJtGjZwLguj7d66oiHfmnVw3TMOZ0zV8DyMJp/aeQ3OjR519iOOeck08HMyVVRAqXxafc2Hl+5QstJrsQ== + dependencies: + browserslist "^4.17.3" + semver "7.0.0" + core-js-compat@^3.6.2: version "3.6.5" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.5.tgz#2a51d9a4e25dfd6e690251aa81f99e3c05481f1c" @@ -2237,6 +2426,11 @@ electron-to-chromium@^1.3.723: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.742.tgz#7223215acbbd3a5284962ebcb6df85d88b95f200" integrity sha512-ihL14knI9FikJmH2XUIDdZFWJxvr14rPSdOhJ7PpS27xbz8qmaRwCwyg/bmFwjWKmWK9QyamiCZVCvXm5CH//Q== +electron-to-chromium@^1.3.857: + version "1.3.866" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.866.tgz#d446338f5ad6948b27a50739760e7b0b5cc5032f" + integrity sha512-iYze6TpDXWxk+sfcpUUdTs6Pv/3kG45Pnjer2DxEeFw0N08bZeNLuz97s2lMgy8yObon48o0WHY2Bkg3xuAPOA== + emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" @@ -3523,6 +3717,11 @@ lodash.clonedeep@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= + lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" @@ -3855,6 +4054,11 @@ node-releases@^1.1.71: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.72.tgz#14802ab6b1039a79a0c7d662b610a5bbd76eacbe" integrity sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw== +node-releases@^1.1.77: + version "1.1.77" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.77.tgz#50b0cfede855dd374e7585bf228ff34e57c1c32e" + integrity sha512-rB1DUFUNAN4Gn9keO2K1efO35IDK7yKHCdCaIMvFO7yUYmmZYeDjnGKle26G4rwj+LKRQpjyUUvMkPglwGCYNQ== + nopt@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" @@ -4669,14 +4873,7 @@ resolve@^1.1.7: dependencies: path-parse "^1.0.6" -resolve@^1.17.0, resolve@^1.3.2: - version "1.17.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" - integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== - dependencies: - path-parse "^1.0.6" - -resolve@^1.20.0: +resolve@^1.14.2, resolve@^1.20.0: version "1.20.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== @@ -4684,6 +4881,13 @@ resolve@^1.20.0: is-core-module "^2.2.0" path-parse "^1.0.6" +resolve@^1.17.0, resolve@^1.3.2: + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + responselike@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.0.tgz#26391bcc3174f750f9a79eacc40a12a5c42d7723" @@ -4795,7 +4999,7 @@ semver@^5.4.1, semver@^5.5.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^6.0.0: +semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== From ffef4936f93fc0bda12a9e3ae6ac4d1344e9d082 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Mon, 8 Nov 2021 11:14:00 +0100 Subject: [PATCH 15/59] update caniuse defs again after rebase --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index d3ff1771..6dea2a76 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1881,9 +1881,9 @@ callsites@^3.0.0: integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== caniuse-lite@^1.0.30001111, caniuse-lite@^1.0.30001219, caniuse-lite@^1.0.30001230, caniuse-lite@^1.0.30001264: - version "1.0.30001265" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001265.tgz" - integrity sha512-YzBnspggWV5hep1m9Z6sZVLOt7vrju8xWooFAgN6BA5qvy98qPAPb7vNUzypFaoh2pb3vlfzbDO8tB57UPGbtw== + version "1.0.30001278" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001278.tgz" + integrity sha512-mpF9KeH8u5cMoEmIic/cr7PNS+F5LWBk0t2ekGT60lFf0Wq+n9LspAj0g3P+o7DQhD3sUdlMln4YFAWhFYn9jg== caseless@~0.12.0: version "0.12.0" From da7f66a53161de0cb32975009a4b56fcb6cfa6a8 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Tue, 9 Nov 2021 14:52:03 +0100 Subject: [PATCH 16/59] setup babel for legacy build as input transform plugin --- package.json | 1 + scripts/build-plugins/legacy-build.js | 134 +++++++++++++------------- yarn.lock | 57 ++++++----- 3 files changed, 97 insertions(+), 95 deletions(-) diff --git a/package.json b/package.json index d89d3627..5d064316 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "@babel/standalone": "^7.15.8", "@rollup/plugin-babel": "^5.1.0", "@rollup/plugin-multi-entry": "^4.0.0", + "@rollup/pluginutils": "^4.1.1", "@typescript-eslint/eslint-plugin": "^4.29.2", "@typescript-eslint/parser": "^4.29.2", "@vitejs/plugin-legacy": "^1.6.1", diff --git a/scripts/build-plugins/legacy-build.js b/scripts/build-plugins/legacy-build.js index 43f87fba..b503d437 100644 --- a/scripts/build-plugins/legacy-build.js +++ b/scripts/build-plugins/legacy-build.js @@ -1,7 +1,10 @@ -const { build } = require("vite"); const path = require("path"); -let babel; // big import, only do so when used below +const {build} = require("vite"); +const {babel} = require('@rollup/plugin-babel'); +const {createFilter} = require("@rollup/pluginutils"); + const VIRTUAL_ENTRY = "hydrogen:legacy-entry"; +const NODE_MODULES_NEEDING_TRANSPILATION = ["es6-promise"]; module.exports = function legacyBuild(entryModuleId, entryImportReplacements, chunkName, extraImports) { let parentRoot; @@ -26,7 +29,7 @@ module.exports = function legacyBuild(entryModuleId, entryImportReplacements, ch for (const [importSource, newImportSource] of Object.entries(entryImportReplacements)) { code = replaceImport(this, code, importSource, newImportSource); } - code = addExtraImports(code, extraImports); + code = prependExtraImports(code, extraImports); const bundleCode = await buildLegacyChunk(parentRoot, chunkName, code); legacyBundleRef = this.emitFile({ type: "asset", @@ -55,7 +58,10 @@ module.exports = function legacyBuild(entryModuleId, entryImportReplacements, ch } } - +/** we replace the imports ourselves instead of relying on rollup-alias or similar, because + * we only want to replace imports in the entry module, not anywhere in the import tree. + * This allows to create sub classes for the legacy build that can still import + * the non-legacy class as a base class, like LegacyPlatform does with Platform.*/ function replaceImport(pluginCtx, code, importSource, newImportSource) { const ast = pluginCtx.parse(code); for (const node of ast.body) { @@ -70,31 +76,66 @@ function replaceImport(pluginCtx, code, importSource, newImportSource) { throw new Error(`Could not find import ${JSON.stringify(importSource)} to replace`); } -function addExtraImports(code, extraImports) { +function prependExtraImports(code, extraImports) { return extraImports.map(i => `import ${JSON.stringify(i)};`).join("\n") + code; } async function buildLegacyChunk(root, chunkName, code) { - // // compile down to whatever IE 11 needs - // const babelPlugin = babel.getBabelOutputPlugin({ - // // babelHelpers: 'bundled', - // exclude: 'node_modules/**', - // presets: [ - // [ - // "@babel/preset-env", - // { - // useBuiltIns: "entry", - // corejs: "3.4", - // targets: "IE 11", - // // we provide our own promise polyfill (es6-promise) - // // with support for synchronous flushing of - // // the queue for idb where needed - // exclude: ["es.promise", "es.promise.all-settled", "es.promise.finally"] - // } - // ] - // ] - // }); - // babelPlugin.enforce = "post"; + const projectRootDir = path.resolve(path.join(root, "../../..")); + const nodeModulesDir = path.join(projectRootDir, "node_modules"); + const defaultFilter = createFilter([], [], {resolve: projectRootDir}); + const transpiledModuleDirs = NODE_MODULES_NEEDING_TRANSPILATION.map(m => { + return path.join(nodeModulesDir, m); + }); + + const filterModule = id => { + if (!defaultFilter(id)) { + return false; + } + if (transpiledModuleDirs.some(d => id.startsWith(d))) { + return true; + } + if (id.startsWith(nodeModulesDir)) { + return false; + } + return true; + }; + // compile down to whatever IE 11 needs + const babelPlugin = babel({ + babelrc: false, + filter: filterModule, + //exclude: 'node_modules/**', + babelHelpers: 'bundled', + presets: [ + [ + "@babel/preset-env", + { + useBuiltIns: "entry", + corejs: "3.4", + targets: "IE 11", + // we provide our own promise polyfill (es6-promise) + // with support for synchronous flushing of + // the queue for idb where needed + exclude: ["es.promise", "es.promise.all-settled", "es.promise.finally"] + } + ] + ] + }); + const resolveEntryPlugin = { + name: "hydrogen:resolve-legacy-entry", + resolveId(id, importer) { + if (id === VIRTUAL_ENTRY) { + return id; + } else if (importer === VIRTUAL_ENTRY && id.startsWith("./")) { + return this.resolve(path.join(root, id)); + } + }, + load(id) { + if (id === VIRTUAL_ENTRY) { + return code; + } + }, + }; const bundle = await build({ root, configFile: false, @@ -116,48 +157,11 @@ async function buildLegacyChunk(root, chunkName, code) { }, }, plugins: [ - { - name: "hydrogen:resolve-legacy-entry", - resolveId(id, importer) { - if (id === VIRTUAL_ENTRY) { - return id; - } else if (importer === VIRTUAL_ENTRY && id.startsWith("./")) { - return this.resolve(path.join(root, id)); - } - }, - load(id) { - if (id === VIRTUAL_ENTRY) { - return code; - } - }, - } + resolveEntryPlugin, + babelPlugin ] }); const assets = Array.isArray(bundle.output) ? bundle.output : [bundle.output]; const mainChunk = assets.find(a => a.name === chunkName); - - if (!babel) { - babel = require('@babel/standalone'); - } - const {code: babelCode} = babel.transform(mainChunk.code, { - babelrc: false, - configFile: false, - presets: [ - [ - "env", - { - useBuiltIns: "usage", - modules: false, - corejs: "3.4", - targets: "IE 11", - // we provide our own promise polyfill (es6-promise) - // with support for synchronous flushing of - // the queue for idb where needed - exclude: ["es.promise", "es.promise.all-settled", "es.promise.finally"] - } - ] - ] - }); - console.log("code", babelCode.length); - return babelCode; + return mainChunk.code; } diff --git a/yarn.lock b/yarn.lock index 6dea2a76..10dac018 100644 --- a/yarn.lock +++ b/yarn.lock @@ -226,11 +226,11 @@ "@babel/types" "^7.11.0" "@babel/helper-module-imports@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz#4c5c54be04bd31670a7382797d75b9fa2e5b5620" - integrity sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw== + 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== dependencies: - "@babel/types" "^7.10.4" + "@babel/types" "^7.16.0" "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.15.4": version "7.15.4" @@ -326,21 +326,16 @@ dependencies: "@babel/types" "^7.15.4" -"@babel/helper-validator-identifier@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" - integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== +"@babel/helper-validator-identifier@^7.10.4", "@babel/helper-validator-identifier@^7.14.9", "@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.14.5": version "7.14.9" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz#6654d171b2024f6d8ee151bf2509699919131d48" integrity sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g== -"@babel/helper-validator-identifier@^7.14.9": - 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-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" @@ -992,13 +987,12 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.10.4": - version "7.11.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.5.tgz#d9de577d01252d77c6800cee039ee64faf75662d" - integrity sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q== +"@babel/types@^7.10.4", "@babel/types@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.0.tgz#db3b313804f96aadd0b776c4823e127ad67289ba" + integrity sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg== dependencies: - "@babel/helper-validator-identifier" "^7.10.4" - lodash "^4.17.19" + "@babel/helper-validator-identifier" "^7.15.7" to-fast-properties "^2.0.0" "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.4.4": @@ -1195,9 +1189,9 @@ read-package-json-fast "^2.0.1" "@rollup/plugin-babel@^5.1.0": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.2.1.tgz#20fc8f8864dc0eaa1c5578408459606808f72924" - integrity sha512-Jd7oqFR2dzZJ3NWANDyBjwTtX/lYbZpVcmkHrfQcpvawHs9E4c0nYk5U2mfZ6I/DZcIvy506KZJi54XK/jxH7A== + version "5.3.0" + resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.3.0.tgz#9cb1c5146ddd6a4968ad96f209c50c62f92f9879" + integrity sha512-9uIC8HZOnVLrLHxayq/PTzw+uS25E14KPUBh5ktF+18Mjo5yK0ToMMx6epY0uEgkjwJw0aBW4x2horYXh8juWw== dependencies: "@babel/helper-module-imports" "^7.10.4" "@rollup/pluginutils" "^3.1.0" @@ -1298,6 +1292,14 @@ estree-walker "^1.0.1" picomatch "^2.2.2" +"@rollup/pluginutils@^4.1.1": + version "4.1.1" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-4.1.1.tgz#1d4da86dd4eded15656a57d933fda2b9a08d47ec" + integrity sha512-clDjivHqWGXi7u+0d2r2sBi4Ie6VLEAzWMIkvJLnDmxoOhBYOTfzGbOQBA32THHm11/LiJbd01tJUpJsbshSWQ== + dependencies: + estree-walker "^2.0.1" + picomatch "^2.2.2" + "@sindresorhus/is@^4.0.0": version "4.0.1" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.0.1.tgz#d26729db850fa327b7cacc5522252194404226f5" @@ -3737,12 +3739,7 @@ lodash@^4.15.0: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== -lodash@^4.17.19: - version "4.17.20" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" - integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== - -lodash@^4.7.0: +lodash@^4.17.19, lodash@^4.7.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -4437,12 +4434,12 @@ picocolors@^0.2.1: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f" integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA== -picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.0: +picomatch@^2.0.4, picomatch@^2.2.2, picomatch@^2.2.3, picomatch@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== -picomatch@^2.2.1, picomatch@^2.2.2: +picomatch@^2.2.1: version "2.2.2" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== From 122528f9a9ee46a4cc351896040c9ebfb204d8bb Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Tue, 9 Nov 2021 17:59:58 +0100 Subject: [PATCH 17/59] also transpile typescript files note that these have already been converted to javascript by vite --- scripts/build-plugins/legacy-build.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/build-plugins/legacy-build.js b/scripts/build-plugins/legacy-build.js index b503d437..be5666e8 100644 --- a/scripts/build-plugins/legacy-build.js +++ b/scripts/build-plugins/legacy-build.js @@ -104,7 +104,7 @@ async function buildLegacyChunk(root, chunkName, code) { const babelPlugin = babel({ babelrc: false, filter: filterModule, - //exclude: 'node_modules/**', + extensions: [".js", ".ts"], babelHelpers: 'bundled', presets: [ [ From 36a982f7e2bf24582a82613bc49c9d79d69be406 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Tue, 9 Nov 2021 18:10:12 +0100 Subject: [PATCH 18/59] WIP to run rollup twice, first with vite and babel, then to inline deps --- scripts/build-plugins/legacy-build.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/scripts/build-plugins/legacy-build.js b/scripts/build-plugins/legacy-build.js index be5666e8..e33afd05 100644 --- a/scripts/build-plugins/legacy-build.js +++ b/scripts/build-plugins/legacy-build.js @@ -103,14 +103,14 @@ async function buildLegacyChunk(root, chunkName, code) { // compile down to whatever IE 11 needs const babelPlugin = babel({ babelrc: false, - filter: filterModule, extensions: [".js", ".ts"], babelHelpers: 'bundled', presets: [ [ "@babel/preset-env", { - useBuiltIns: "entry", + modules: false, + useBuiltIns: "usage", corejs: "3.4", targets: "IE 11", // we provide our own promise polyfill (es6-promise) @@ -147,11 +147,12 @@ async function buildLegacyChunk(root, chunkName, code) { assetsInlineLimit: 0, polyfillModulePreload: false, rollupOptions: { + external: id => !filterModule(id), input: { [chunkName]: VIRTUAL_ENTRY }, output: { - format: "iife", + format: "es", manualChunks: undefined } }, From e83781b26a1db34e9f9824ff4baac676f9ef6b73 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Wed, 10 Nov 2021 19:10:06 +0100 Subject: [PATCH 19/59] make ie11 compatible --- scripts/package-overrides/buffer/index.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/scripts/package-overrides/buffer/index.js b/scripts/package-overrides/buffer/index.js index 2ac44010..e76322c4 100644 --- a/scripts/package-overrides/buffer/index.js +++ b/scripts/package-overrides/buffer/index.js @@ -1,6 +1,7 @@ -export default class Buffer { - static isBuffer(array) {return array instanceof Uint8Array;} - static from(arrayBuffer) {return arrayBuffer;} - static allocUnsafe(size) {return Buffer.alloc(size);} - static alloc(size) {return new Uint8Array(size);} +var Buffer = { + isBuffer: function(array) {return array instanceof Uint8Array;}, + from: function(arrayBuffer) {return arrayBuffer;}, + allocUnsafe: function(size) {return Buffer.alloc(size);}, + alloc: function(size) {return new Uint8Array(size);} }; +export default Buffer; From 7148f6fd41ced2c2e9eb8265630476c22ee9171f Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Wed, 10 Nov 2021 19:10:23 +0100 Subject: [PATCH 20/59] wip to not babel deps --- scripts/build-plugins/legacy-build.js | 89 ++++++++++++++++++++------- 1 file changed, 67 insertions(+), 22 deletions(-) diff --git a/scripts/build-plugins/legacy-build.js b/scripts/build-plugins/legacy-build.js index e33afd05..f7f641a3 100644 --- a/scripts/build-plugins/legacy-build.js +++ b/scripts/build-plugins/legacy-build.js @@ -1,7 +1,10 @@ const path = require("path"); const {build} = require("vite"); -const {babel} = require('@rollup/plugin-babel'); +const {babel, getBabelOutputPlugin} = require('@rollup/plugin-babel'); const {createFilter} = require("@rollup/pluginutils"); +const { rollup } = require('rollup'); +const { nodeResolve } = require('@rollup/plugin-node-resolve'); +const commonjs = require('@rollup/plugin-commonjs'); const VIRTUAL_ENTRY = "hydrogen:legacy-entry"; const NODE_MODULES_NEEDING_TRANSPILATION = ["es6-promise"]; @@ -92,6 +95,10 @@ async function buildLegacyChunk(root, chunkName, code) { if (!defaultFilter(id)) { return false; } + if (id.endsWith("?url") || id.endsWith("?raw")) { + // TODO is this needed + return true; + } if (transpiledModuleDirs.some(d => id.startsWith(d))) { return true; } @@ -101,10 +108,11 @@ async function buildLegacyChunk(root, chunkName, code) { return true; }; // compile down to whatever IE 11 needs - const babelPlugin = babel({ + const babelPlugin = getBabelOutputPlugin({ babelrc: false, + compact: false, extensions: [".js", ".ts"], - babelHelpers: 'bundled', + // babelHelpers: 'bundled', presets: [ [ "@babel/preset-env", @@ -121,21 +129,6 @@ async function buildLegacyChunk(root, chunkName, code) { ] ] }); - const resolveEntryPlugin = { - name: "hydrogen:resolve-legacy-entry", - resolveId(id, importer) { - if (id === VIRTUAL_ENTRY) { - return id; - } else if (importer === VIRTUAL_ENTRY && id.startsWith("./")) { - return this.resolve(path.join(root, id)); - } - }, - load(id) { - if (id === VIRTUAL_ENTRY) { - return code; - } - }, - }; const bundle = await build({ root, configFile: false, @@ -152,17 +145,69 @@ async function buildLegacyChunk(root, chunkName, code) { [chunkName]: VIRTUAL_ENTRY }, output: { - format: "es", + format: "esm", manualChunks: undefined - } + }, + makeAbsoluteExternalsRelative: false, }, }, plugins: [ - resolveEntryPlugin, + memoryBabelInputPlugin(VIRTUAL_ENTRY, root, code), babelPlugin ] }); const assets = Array.isArray(bundle.output) ? bundle.output : [bundle.output]; const mainChunk = assets.find(a => a.name === chunkName); - return mainChunk.code; + const babelCode = mainChunk.code; + const bundle2 = await rollup({ + plugins: [ + memoryBabelInputPlugin(VIRTUAL_ENTRY, root, babelCode), + overridesAsRollupPlugin(new Map( + [["safe-buffer", "./scripts/package-overrides/safe-buffer/index.js"], + ["buffer", "./scripts/package-overrides/buffer/index.js"]]), projectRootDir), + commonjs(), + nodeResolve(), + ], + input: { + [chunkName]: VIRTUAL_ENTRY + } + }); + const {output} = await bundle2.generate({ + format: 'iife', + name: `hydrogen` + }); + const bundledCode = output[0].code; + return bundledCode; +} + +function memoryBabelInputPlugin(entryName, dir, code) { + return { + name: "hydrogen:resolve-legacy-entry", + resolveId(id, importer) { + if (id === entryName) { + return id; + } else if (importer === entryName && id.startsWith("./")) { + return this.resolve(path.join(dir, id)); + } + }, + load(id) { + if (id === entryName) { + return code; + } + }, + } +} + +function overridesAsRollupPlugin(mapping, basedir) { + return { + name: "rewrite-imports", + async resolveId (source, importer) { + const target = mapping.get(source); + if (target) { + const resolvedTarget = await this.resolve(path.join(basedir, target)); + console.log("resolving", source, resolvedTarget); + return resolvedTarget; + } + } + }; } From 2da450d69d5e5b2c2ec873b9c941ed4a3993e96c Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Mon, 15 Nov 2021 15:27:57 +0100 Subject: [PATCH 21/59] log signature verification failure in logger, not console --- src/logging/LogItem.js | 1 + src/matrix/e2ee/DeviceTracker.js | 6 +++--- src/matrix/e2ee/common.js | 8 ++++++-- src/matrix/e2ee/olm/Encryption.js | 6 +++--- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/logging/LogItem.js b/src/logging/LogItem.js index 90747964..7324b7d2 100644 --- a/src/logging/LogItem.js +++ b/src/logging/LogItem.js @@ -94,6 +94,7 @@ export class LogItem { log(labelOrValues, logLevel = null) { const item = this.child(labelOrValues, logLevel, null); item._end = item._start; + return item; } set(key, value) { diff --git a/src/matrix/e2ee/DeviceTracker.js b/src/matrix/e2ee/DeviceTracker.js index e230ea7d..0068a1f9 100644 --- a/src/matrix/e2ee/DeviceTracker.js +++ b/src/matrix/e2ee/DeviceTracker.js @@ -264,7 +264,7 @@ export class DeviceTracker { return false; } curve25519Keys.add(curve25519Key); - const isValid = this._hasValidSignature(deviceKeys); + const isValid = this._hasValidSignature(deviceKeys, parentLog); if (!isValid) { parentLog.log({ l: "ignore device with invalid signature", @@ -279,11 +279,11 @@ export class DeviceTracker { return verifiedKeys; } - _hasValidSignature(deviceSection) { + _hasValidSignature(deviceSection, parentLog) { const deviceId = deviceSection["device_id"]; const userId = deviceSection["user_id"]; const ed25519Key = deviceSection?.keys?.[`${SIGNATURE_ALGORITHM}:${deviceId}`]; - return verifyEd25519Signature(this._olmUtil, userId, deviceId, ed25519Key, deviceSection); + return verifyEd25519Signature(this._olmUtil, userId, deviceId, ed25519Key, deviceSection, parentLog); } /** diff --git a/src/matrix/e2ee/common.js b/src/matrix/e2ee/common.js index fa970236..27a541ec 100644 --- a/src/matrix/e2ee/common.js +++ b/src/matrix/e2ee/common.js @@ -35,7 +35,7 @@ export class DecryptionError extends Error { export const SIGNATURE_ALGORITHM = "ed25519"; -export function verifyEd25519Signature(olmUtil, userId, deviceOrKeyId, ed25519Key, value) { +export function verifyEd25519Signature(olmUtil, userId, deviceOrKeyId, ed25519Key, value, log = undefined) { const clone = Object.assign({}, value); delete clone.unsigned; delete clone.signatures; @@ -49,7 +49,11 @@ export function verifyEd25519Signature(olmUtil, userId, deviceOrKeyId, ed25519Ke olmUtil.ed25519_verify(ed25519Key, canonicalJson, signature); return true; } catch (err) { - console.warn("Invalid signature, ignoring.", ed25519Key, canonicalJson, signature, err); + if (log) { + const logItem = log.log({l: "Invalid signature, ignoring.", ed25519Key, canonicalJson, signature}); + logItem.error = err; + logItem.logLevel = log.level.Warn; + } return false; } } diff --git a/src/matrix/e2ee/olm/Encryption.js b/src/matrix/e2ee/olm/Encryption.js index 1b720ae7..652c657c 100644 --- a/src/matrix/e2ee/olm/Encryption.js +++ b/src/matrix/e2ee/olm/Encryption.js @@ -189,10 +189,10 @@ export class Encryption { log.log({l: "failures", servers: Object.keys(claimResponse.failures)}, log.level.Warn); } const userKeyMap = claimResponse?.["one_time_keys"]; - return this._verifyAndCreateOTKTargets(userKeyMap, devicesByUser); + return this._verifyAndCreateOTKTargets(userKeyMap, devicesByUser, log); } - _verifyAndCreateOTKTargets(userKeyMap, devicesByUser) { + _verifyAndCreateOTKTargets(userKeyMap, devicesByUser, log) { const verifiedEncryptionTargets = []; for (const [userId, userSection] of Object.entries(userKeyMap)) { for (const [deviceId, deviceSection] of Object.entries(userSection)) { @@ -202,7 +202,7 @@ export class Encryption { const device = devicesByUser.get(userId)?.get(deviceId); if (device) { const isValidSignature = verifyEd25519Signature( - this._olmUtil, userId, deviceId, device.ed25519Key, keySection); + this._olmUtil, userId, deviceId, device.ed25519Key, keySection, log); if (isValidSignature) { const target = EncryptionTarget.fromOTK(device, keySection.key); verifiedEncryptionTargets.push(target); From 75bf410320c88bebcb6cdfb68a2b35a7897de0be Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Wed, 1 Dec 2021 13:30:17 +0100 Subject: [PATCH 22/59] correct path of main.js for tests --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 37685f05..2728935c 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "lint": "eslint --cache src/", "lint-ts": "eslint src/ -c .ts-eslintrc.js --ext .ts", "lint-ci": "eslint src/", - "test": "impunity --entry-point src/main.js src/platform/web/Platform.js --force-esm-dirs lib/ src/ --root-dir src/", + "test": "impunity --entry-point src/platform/web/main.js src/platform/web/Platform.js --force-esm-dirs lib/ src/ --root-dir src/", "start": "vite --port 3000", "build": "vite build" }, From de24034b224303eaaefe29ec5b171f5019ca749a Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Wed, 1 Dec 2021 13:30:58 +0100 Subject: [PATCH 23/59] remove secondary theme as vite puts them in one bundle --- src/platform/web/index.html | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/platform/web/index.html b/src/platform/web/index.html index a99edde8..aa0a7c49 100644 --- a/src/platform/web/index.html +++ b/src/platform/web/index.html @@ -12,8 +12,7 @@ - - + diff --git a/src/platform/web/sdk/paths/vite.ts b/src/platform/web/sdk/paths/vite.ts index 6739f8d8..0a3ddedd 100644 --- a/src/platform/web/sdk/paths/vite.ts +++ b/src/platform/web/sdk/paths/vite.ts @@ -17,3 +17,6 @@ export const olmPaths = { export const downloadSandboxPath = _downloadSandboxPath; export const workerPath = _workerPath; +// the service worker is generated by the build as an unhashed asset, +// we don't use it at development time, so don't use import for the path +export const serviceWorkerPath = "sw.js"; From 155cd4c9bd0de51e551bc5d635e3d8eab8394edb Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Mon, 6 Dec 2021 13:49:14 +0100 Subject: [PATCH 38/59] make olmPath absolute if it isn't already --- src/platform/web/Platform.js | 12 ++++++++++-- vite.config.js | 1 + 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/platform/web/Platform.js b/src/platform/web/Platform.js index 96f76abc..1b08d83d 100644 --- a/src/platform/web/Platform.js +++ b/src/platform/web/Platform.js @@ -80,8 +80,16 @@ function relPath(path, basePath) { async function loadOlmWorker(config) { const workerPool = new WorkerPool(config.worker, 4); await workerPool.init(); - const path = relPath(config.olm.legacyBundle, config.worker); - await workerPool.sendAll({type: "load_olm", path}); + let olmPath = config.olm.legacyBundle; + // convert olm path to absolute path + if (!olmPath.startsWith("/")) { + olmPath = new URL(olmPath, document.location.href).pathname; + console.log("olmPath", config.olm.legacyBundle, olmPath); + } + await workerPool.sendAll({ + type: "load_olm", + path: olmPath + }); const olmWorker = new OlmWorker(workerPool); return olmWorker; } diff --git a/vite.config.js b/vite.config.js index 72c81bac..caae8f4b 100644 --- a/vite.config.js +++ b/vite.config.js @@ -20,6 +20,7 @@ let polyfillRef; export default { public: false, root: "src/platform/web", + base: "./", server: { hmr: false }, From 91e69a2bd0c193818228280b4b7d33d2fca0f49d Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Mon, 6 Dec 2021 15:25:44 +0100 Subject: [PATCH 39/59] fix icons in manifest not being found --- scripts/build-plugins/manifest.js | 5 ++++- vite.config.js | 2 ++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/scripts/build-plugins/manifest.js b/scripts/build-plugins/manifest.js index 560bce68..b79af2b2 100644 --- a/scripts/build-plugins/manifest.js +++ b/scripts/build-plugins/manifest.js @@ -32,7 +32,10 @@ module.exports = function injectWebManifest(manifestFile) { name: path.basename(iconFileName), source: imgData }); - icon.src = this.getFileName(ref); + // we take the basename as getFileName gives the filename + // relative to the output dir, but the manifest is an asset + // just like they icon, so we assume they end up in the same dir + icon.src = path.basename(this.getFileName(ref)); } const outputName = path.basename(absoluteManifestFile); const manifestRef = this.emitFile({ diff --git a/vite.config.js b/vite.config.js index caae8f4b..28f9f5a6 100644 --- a/vite.config.js +++ b/vite.config.js @@ -47,6 +47,8 @@ export default { // }, "hydrogen-legacy", [ // './legacy-polyfill', // ]), + // important this comes before service worker + // otherwise the manifest and the icons it refers to won't be cached injectWebManifest("assets/manifest.json"), injectServiceWorker("sw.js"), ], From 0e2a22f509248bfdced509f56e2c21014ac285a0 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Mon, 6 Dec 2021 15:34:39 +0100 Subject: [PATCH 40/59] also look in chunks for cacheable assets for service worker --- scripts/build-plugins/service-worker.js | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/scripts/build-plugins/service-worker.js b/scripts/build-plugins/service-worker.js index 155c798b..987debbe 100644 --- a/scripts/build-plugins/service-worker.js +++ b/scripts/build-plugins/service-worker.js @@ -22,19 +22,17 @@ module.exports = function injectServiceWorker(swFile) { }, generateBundle: async function(_, bundle) { const absoluteSwFile = path.resolve(root, swFile); - const packageManifest = path.resolve(path.join(__dirname, "../../package.json")); let swSource = await fs.readFile(absoluteSwFile, {encoding: "utf8"}); - const assets = Object.values(bundle).filter(a => a.type === "asset"); - const cachedFileNames = assets.map(o => o.fileName).filter(fileName => fileName !== "index.html"); - const r = Object.entries(bundle).find(([key, asset]) => key.includes("index.html")); - const index = assets.find(o => o.fileName === "index.html"); + const index = bundle["index.html"]; if (!index) { - console.log("index not found", index, r); + console.log("index not found", index); } const uncachedFileContentMap = { "index.html": index.source, "sw.js": swSource }; + const assets = Object.values(bundle); + const cachedFileNames = assets.map(o => o.fileName).filter(fileName => fileName !== "index.html"); const globalHash = getBuildHash(cachedFileNames, uncachedFileContentMap); swSource = await buildServiceWorker(swSource, version, globalHash, assets); const outputName = path.basename(absoluteSwFile); From 5bd28da4f3f1c4b81a7673534204ae3312042a9f Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Mon, 6 Dec 2021 15:35:08 +0100 Subject: [PATCH 41/59] loading olm from the worker was broken, reading the wrong global --- src/platform/web/worker/main.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/platform/web/worker/main.js b/src/platform/web/worker/main.js index db8d84e9..9b5560ca 100644 --- a/src/platform/web/worker/main.js +++ b/src/platform/web/worker/main.js @@ -108,7 +108,7 @@ class MessageHandler { self.window = self; self.document = {}; self.importScripts(path); - const olm = self.olm_exports; + const olm = self.Olm; await olm.init(); this._olm = olm; }); From c87628b614a3a8fbf336c6e1ac8df92d69bd86a9 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Mon, 6 Dec 2021 15:38:01 +0100 Subject: [PATCH 42/59] cleanup --- src/platform/web/Platform.js | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/src/platform/web/Platform.js b/src/platform/web/Platform.js index 1b08d83d..787c1c90 100644 --- a/src/platform/web/Platform.js +++ b/src/platform/web/Platform.js @@ -67,28 +67,21 @@ async function loadOlm(olmPaths) { } return null; } - -// make path relative to basePath, -// assuming it and basePath are relative to document -function relPath(path, basePath) { - const idx = basePath.lastIndexOf("/"); - const dir = idx === -1 ? "" : basePath.slice(0, idx); - const dirCount = dir.length ? dir.split("/").length : 0; - return "../".repeat(dirCount) + path; +// turn asset path to absolute path if it isn't already +// so it can be loaded independent of base +function assetAbsPath(assetPath) { + if (!assetPath.startsWith("/")) { + return new URL(assetPath, document.location.href).pathname; + } + return assetPath; } async function loadOlmWorker(config) { const workerPool = new WorkerPool(config.worker, 4); await workerPool.init(); - let olmPath = config.olm.legacyBundle; - // convert olm path to absolute path - if (!olmPath.startsWith("/")) { - olmPath = new URL(olmPath, document.location.href).pathname; - console.log("olmPath", config.olm.legacyBundle, olmPath); - } await workerPool.sendAll({ type: "load_olm", - path: olmPath + path: assetAbsPath(config.olm.legacyBundle) }); const olmWorker = new OlmWorker(workerPool); return olmWorker; From c8b0354d0774dd11dc0311a39ed079e5aac3aed2 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Wed, 8 Dec 2021 18:00:27 +0100 Subject: [PATCH 43/59] dont use lookbehind in regular expressions, safari & older firefoxes choke on them --- codestyle.md | 2 ++ src/platform/web/Platform.js | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/codestyle.md b/codestyle.md index c0e0e363..656a6845 100644 --- a/codestyle.md +++ b/codestyle.md @@ -8,3 +8,5 @@ otherwise it becomes hard to remember what was a default/named export - should we return promises from storage mutation calls? probably not, as we don't await them anywhere. only read calls should return promises? - we don't anymore + - don't use these features, as they are not widely enough supported. + - [lookbehind in regular expressions](https://caniuse.com/js-regexp-lookbehind) diff --git a/src/platform/web/Platform.js b/src/platform/web/Platform.js index 787c1c90..78332e59 100644 --- a/src/platform/web/Platform.js +++ b/src/platform/web/Platform.js @@ -163,7 +163,7 @@ export class Platform { // Make sure that loginToken does not end up in the logs const transformer = (item) => { if (item.e?.stack) { - item.e.stack = item.e.stack.replace(/(?<=\/\?loginToken=).+/, ""); + item.e.stack = item.e.stack.replace(/(?<=\/\?loginToken=).+/, "?loginToken="); } return item; }; From 4c2c99fc07547904050e51d6563f266d9700b047 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Wed, 8 Dec 2021 18:05:57 +0100 Subject: [PATCH 44/59] actually remove lookbehind --- src/platform/web/Platform.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/platform/web/Platform.js b/src/platform/web/Platform.js index 78332e59..b23faa6a 100644 --- a/src/platform/web/Platform.js +++ b/src/platform/web/Platform.js @@ -163,7 +163,7 @@ export class Platform { // Make sure that loginToken does not end up in the logs const transformer = (item) => { if (item.e?.stack) { - item.e.stack = item.e.stack.replace(/(?<=\/\?loginToken=).+/, "?loginToken="); + item.e.stack = item.e.stack.replace(/\/\?loginToken=(.+)/, "?loginToken="); } return item; }; From fb8149b6cf53f8a624c00756546065740a2f36f3 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Wed, 8 Dec 2021 18:29:07 +0100 Subject: [PATCH 45/59] add base to manifest path, just for completeness --- scripts/build-plugins/manifest.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts/build-plugins/manifest.js b/scripts/build-plugins/manifest.js index b79af2b2..e7c2c536 100644 --- a/scripts/build-plugins/manifest.js +++ b/scripts/build-plugins/manifest.js @@ -3,12 +3,14 @@ const path = require('path'); module.exports = function injectWebManifest(manifestFile) { let root; + let base; let manifestHref; return { name: "hydrogen:injectWebManifest", apply: "build", configResolved: config => { root = config.root; + base = config.base; }, transformIndexHtml: { transform(html) { @@ -43,7 +45,7 @@ module.exports = function injectWebManifest(manifestFile) { name: outputName, source: JSON.stringify(manifest) }); - manifestHref = this.getFileName(manifestRef); + manifestHref = base + this.getFileName(manifestRef); } }; } From 180681b602a70d2c2d821e462901ba14030faaa1 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Wed, 8 Dec 2021 18:29:32 +0100 Subject: [PATCH 46/59] manifest ends up in assets folder, index.html in parent folder --- src/platform/web/assets/manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/platform/web/assets/manifest.json b/src/platform/web/assets/manifest.json index 92dde01a..e8d897b2 100644 --- a/src/platform/web/assets/manifest.json +++ b/src/platform/web/assets/manifest.json @@ -3,7 +3,7 @@ "short_name": "Hydrogen", "display": "standalone", "description": "Lightweight matrix client with legacy and mobile browser support", - "start_url": "index.html", + "start_url": "../index.html", "icons": [ {"src": "icon.png", "sizes": "384x384", "type": "image/png"}, {"src": "icon-maskable.png", "sizes": "384x384", "type": "image/png", "purpose": "maskable"} From c344032c0a17cf679f3a847d131f95275c36d349 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Thu, 9 Dec 2021 11:39:28 +0100 Subject: [PATCH 47/59] transpile service worker and cleanup build plugin --- scripts/build-plugins/service-worker.js | 50 ++++++++++++------------- vite.config.js | 2 +- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/scripts/build-plugins/service-worker.js b/scripts/build-plugins/service-worker.js index 987debbe..e7a77048 100644 --- a/scripts/build-plugins/service-worker.js +++ b/scripts/build-plugins/service-worker.js @@ -8,42 +8,42 @@ function contentHash(str) { return hasher.digest(); } -module.exports = function injectServiceWorker(swFile) { +module.exports = function injectServiceWorker(swFile, otherUncachedFiles) { + const swName = path.basename(swFile); let root; let version; - let manifestHref; + return { name: "hydrogen:injectServiceWorker", apply: "build", enforce: "post", + buildStart() { + this.emitFile({ + type: "chunk", + fileName: swName, + id: swFile, + }); + }, configResolved: config => { root = config.root; version = JSON.parse(config.define.HYDROGEN_VERSION); // unquote }, - generateBundle: async function(_, bundle) { - const absoluteSwFile = path.resolve(root, swFile); - let swSource = await fs.readFile(absoluteSwFile, {encoding: "utf8"}); - const index = bundle["index.html"]; - if (!index) { - console.log("index not found", index); - } - const uncachedFileContentMap = { - "index.html": index.source, - "sw.js": swSource - }; + generateBundle: async function(options, bundle) { + const uncachedFileNames = [swName].concat(otherUncachedFiles); + const uncachedFileContentMap = uncachedFileNames.reduce((map, fileName) => { + const chunkOrAsset = bundle[fileName]; + if (!chunkOrAsset) { + throw new Error("could not get content for uncached asset or chunk " + fileName); + } + map[fileName] = chunkOrAsset.source || chunkOrAsset.code; + return map; + }, {}); const assets = Object.values(bundle); - const cachedFileNames = assets.map(o => o.fileName).filter(fileName => fileName !== "index.html"); + const cachedFileNames = assets.map(o => o.fileName).filter(fileName => !uncachedFileContentMap[fileName]); const globalHash = getBuildHash(cachedFileNames, uncachedFileContentMap); - swSource = await buildServiceWorker(swSource, version, globalHash, assets); - const outputName = path.basename(absoluteSwFile); - // TODO: do normal build transformations for service worker too, - // I think if we emit it as a chunk rather than an asset it would - // but we can't emit chunks anymore in generateBundle I think ... - this.emitFile({ - type: "asset", - fileName: outputName, - source: swSource - }); + const sw = bundle[swName]; + sw.code = replaceConstsInServiceWorker(sw.code, version, globalHash, assets); + console.log(`\nBuilt ${version} (${globalHash})`); } }; } @@ -75,7 +75,7 @@ function isPreCached(asset) { fileName.endsWith(".js") && !NON_PRECACHED_JS.includes(path.basename(name)); } -async function buildServiceWorker(swSource, version, globalHash, assets) { +function replaceConstsInServiceWorker(swSource, version, globalHash, assets) { const unhashedPreCachedAssets = []; const hashedPreCachedAssets = []; const hashedCachedOnRequestAssets = []; diff --git a/vite.config.js b/vite.config.js index 28f9f5a6..ef41babf 100644 --- a/vite.config.js +++ b/vite.config.js @@ -50,7 +50,7 @@ export default { // important this comes before service worker // otherwise the manifest and the icons it refers to won't be cached injectWebManifest("assets/manifest.json"), - injectServiceWorker("sw.js"), + injectServiceWorker("./src/platform/web/sw.js", ["index.html"]), ], define: { "HYDROGEN_VERSION": JSON.stringify(version) From 8e4da396ea39467bf28a1fe8ad979c1fde6415dc Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Thu, 9 Dec 2021 12:15:17 +0100 Subject: [PATCH 48/59] replace global hash in given chunks --- .eslintrc.js | 3 ++- scripts/build-plugins/service-worker.js | 14 +++++++++++++- src/platform/web/ui/login/common.js | 4 ++-- vite.config.js | 9 +++++++-- 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 3817d7b1..5341c4e0 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -15,6 +15,7 @@ module.exports = { "no-unused-vars": "warn" }, "globals": { - "HYDROGEN_VERSION": "readonly" + "HYDROGEN_VERSION": "readonly", + "HYDROGEN_GLOBAL_HASH": "readonly" } }; diff --git a/scripts/build-plugins/service-worker.js b/scripts/build-plugins/service-worker.js index e7a77048..541fdcad 100644 --- a/scripts/build-plugins/service-worker.js +++ b/scripts/build-plugins/service-worker.js @@ -8,7 +8,7 @@ function contentHash(str) { return hasher.digest(); } -module.exports = function injectServiceWorker(swFile, otherUncachedFiles) { +module.exports = function injectServiceWorker(swFile, otherUncachedFiles, globalHashChunkReplaceMap) { const swName = path.basename(swFile); let root; let version; @@ -43,6 +43,7 @@ module.exports = function injectServiceWorker(swFile, otherUncachedFiles) { const globalHash = getBuildHash(cachedFileNames, uncachedFileContentMap); const sw = bundle[swName]; sw.code = replaceConstsInServiceWorker(sw.code, version, globalHash, assets); + replaceGlobalHashPlaceholderInChunks(assets, globalHashChunkReplaceMap, globalHash); console.log(`\nBuilt ${version} (${globalHash})`); } }; @@ -115,3 +116,14 @@ function replaceConstsInServiceWorker(swSource, version, globalHash, assets) { swSource = replaceStringInSource("NOTIFICATION_BADGE_ICON", assets.find(a => a.name === "icon.png").fileName); return swSource; } + +function replaceGlobalHashPlaceholderInChunks(assets, globalHashChunkReplaceMap, globalHash) { + for (const [name, placeholder] of Object.entries(globalHashChunkReplaceMap)) { + const chunk = assets.find(a => a.type === "chunk" && a.name === name); + if (!chunk) { + throw new Error(`could not find chunk ${name} to replace global hash placeholder`); + } + console.log(placeholder, globalHash); + chunk.code = chunk.code.replaceAll(placeholder, `"${globalHash}"`); + } +} diff --git a/src/platform/web/ui/login/common.js b/src/platform/web/ui/login/common.js index 73da92c9..a247a2ba 100644 --- a/src/platform/web/ui/login/common.js +++ b/src/platform/web/ui/login/common.js @@ -15,10 +15,10 @@ limitations under the License. */ export function hydrogenGithubLink(t) { - if (HYDROGEN_VERSION) { + if (HYDROGEN_VERSION && HYDROGEN_GLOBAL_HASH) { return t.a({target: "_blank", href: `https://github.com/vector-im/hydrogen-web/releases/tag/v${HYDROGEN_VERSION}`}, - `Hydrogen v${HYDROGEN_VERSION} (${window.HYDROGEN_GLOBAL_HASH}) on Github`); + `Hydrogen v${HYDROGEN_VERSION} (${HYDROGEN_GLOBAL_HASH}) on Github`); } else { return t.a({target: "_blank", href: "https://github.com/vector-im/hydrogen-web"}, "Hydrogen on Github"); diff --git a/vite.config.js b/vite.config.js index ef41babf..9a4e66f9 100644 --- a/vite.config.js +++ b/vite.config.js @@ -4,6 +4,7 @@ const flexbugsFixes = require("postcss-flexbugs-fixes"); const fs = require("fs"); const path = require("path"); +const GLOBAL_HASH_PLACEHOLDER = "hydrogen-global-hash-placeholder-4cf32306-5d61-4262-9a57-c9983f472c3c"; const injectWebManifest = require("./scripts/build-plugins/manifest"); const injectServiceWorker = require("./scripts/build-plugins/service-worker"); @@ -50,10 +51,14 @@ export default { // important this comes before service worker // otherwise the manifest and the icons it refers to won't be cached injectWebManifest("assets/manifest.json"), - injectServiceWorker("./src/platform/web/sw.js", ["index.html"]), + injectServiceWorker("./src/platform/web/sw.js", ["index.html"], { + // replace global hash placeholder in index chunk + "index": JSON.stringify(GLOBAL_HASH_PLACEHOLDER) + }), ], define: { - "HYDROGEN_VERSION": JSON.stringify(version) + "HYDROGEN_VERSION": JSON.stringify(version), + "HYDROGEN_GLOBAL_HASH": JSON.stringify(GLOBAL_HASH_PLACEHOLDER) }, css: { postcss: { From 14dffa4ad492c61a588f49053d014b1d26577851 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Thu, 9 Dec 2021 12:21:34 +0100 Subject: [PATCH 49/59] remove leftover logging --- scripts/build-plugins/service-worker.js | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/build-plugins/service-worker.js b/scripts/build-plugins/service-worker.js index 541fdcad..e86bf27c 100644 --- a/scripts/build-plugins/service-worker.js +++ b/scripts/build-plugins/service-worker.js @@ -123,7 +123,6 @@ function replaceGlobalHashPlaceholderInChunks(assets, globalHashChunkReplaceMap, if (!chunk) { throw new Error(`could not find chunk ${name} to replace global hash placeholder`); } - console.log(placeholder, globalHash); chunk.code = chunk.code.replaceAll(placeholder, `"${globalHash}"`); } } From f934262e35e48efb23c2eff3ad1181a5d19803a5 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Thu, 9 Dec 2021 12:22:17 +0100 Subject: [PATCH 50/59] also use global hash var here --- src/platform/web/dom/ServiceWorkerHandler.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/platform/web/dom/ServiceWorkerHandler.js b/src/platform/web/dom/ServiceWorkerHandler.js index 08c687c9..c7ba663a 100644 --- a/src/platform/web/dom/ServiceWorkerHandler.js +++ b/src/platform/web/dom/ServiceWorkerHandler.js @@ -185,7 +185,7 @@ export class ServiceWorkerHandler { } get buildHash() { - return window.HYDROGEN_GLOBAL_HASH; + return HYDROGEN_GLOBAL_HASH; } async preventConcurrentSessionAccess(sessionId) { From a4fac68393e3a905b824b8ed1b6a7c7b427bbf30 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Thu, 9 Dec 2021 14:36:12 +0100 Subject: [PATCH 51/59] use same method for setting version and build hash placeholder in sw also better naming in service worker plugin --- scripts/build-plugins/service-worker.js | 46 +++++++++++++------------ src/platform/web/sw.js | 6 ++-- vite.config.js | 5 +-- 3 files changed, 27 insertions(+), 30 deletions(-) diff --git a/scripts/build-plugins/service-worker.js b/scripts/build-plugins/service-worker.js index e86bf27c..a6817278 100644 --- a/scripts/build-plugins/service-worker.js +++ b/scripts/build-plugins/service-worker.js @@ -8,7 +8,7 @@ function contentHash(str) { return hasher.digest(); } -module.exports = function injectServiceWorker(swFile, otherUncachedFiles, globalHashChunkReplaceMap) { +module.exports = function injectServiceWorker(swFile, otherUnhashedFiles, globalHashPlaceholderLiteral, chunkNamesWithGlobalHash) { const swName = path.basename(swFile); let root; let version; @@ -29,8 +29,8 @@ module.exports = function injectServiceWorker(swFile, otherUncachedFiles, global version = JSON.parse(config.define.HYDROGEN_VERSION); // unquote }, generateBundle: async function(options, bundle) { - const uncachedFileNames = [swName].concat(otherUncachedFiles); - const uncachedFileContentMap = uncachedFileNames.reduce((map, fileName) => { + const unhashedFilenames = [swName].concat(otherUnhashedFiles); + const unhashedFileContentMap = unhashedFilenames.reduce((map, fileName) => { const chunkOrAsset = bundle[fileName]; if (!chunkOrAsset) { throw new Error("could not get content for uncached asset or chunk " + fileName); @@ -39,21 +39,21 @@ module.exports = function injectServiceWorker(swFile, otherUncachedFiles, global return map; }, {}); const assets = Object.values(bundle); - const cachedFileNames = assets.map(o => o.fileName).filter(fileName => !uncachedFileContentMap[fileName]); - const globalHash = getBuildHash(cachedFileNames, uncachedFileContentMap); + const hashedFileNames = assets.map(o => o.fileName).filter(fileName => !unhashedFileContentMap[fileName]); + const globalHash = getBuildHash(hashedFileNames, unhashedFileContentMap); const sw = bundle[swName]; - sw.code = replaceConstsInServiceWorker(sw.code, version, globalHash, assets); - replaceGlobalHashPlaceholderInChunks(assets, globalHashChunkReplaceMap, globalHash); + sw.code = replaceCacheFilenamesInServiceWorker(sw, unhashedFilenames, assets); + replaceGlobalHashPlaceholderInChunks(assets, chunkNamesWithGlobalHash, globalHashPlaceholderLiteral, `"${globalHash}"`); console.log(`\nBuilt ${version} (${globalHash})`); } }; } -function getBuildHash(cachedFileNames, uncachedFileContentMap) { - const unhashedHashes = Object.entries(uncachedFileContentMap).map(([fileName, content]) => { +function getBuildHash(hashedFileNames, unhashedFileContentMap) { + const unhashedHashes = Object.entries(unhashedFileContentMap).map(([fileName, content]) => { return `${fileName}-${contentHash(Buffer.from(content))}`; }); - const globalHashAssets = cachedFileNames.concat(unhashedHashes); + const globalHashAssets = hashedFileNames.concat(unhashedHashes); globalHashAssets.sort(); return contentHash(globalHashAssets.join(",")).toString(); } @@ -76,19 +76,24 @@ function isPreCached(asset) { fileName.endsWith(".js") && !NON_PRECACHED_JS.includes(path.basename(name)); } -function replaceConstsInServiceWorker(swSource, version, globalHash, assets) { +function replaceCacheFilenamesInServiceWorker(swChunk, unhashedFilenames, assets) { + let swSource = swChunk.code; const unhashedPreCachedAssets = []; const hashedPreCachedAssets = []; const hashedCachedOnRequestAssets = []; for (const asset of assets) { - const {name: unresolved, fileName: resolved} = asset; - if (!unresolved || resolved === unresolved) { - unhashedPreCachedAssets.push(resolved); + const {name, fileName} = asset; + // the service worker should not be cached at all, + // it's how updates happen + if (fileName === swChunk.fileName) { + continue; + } else if (unhashedFilenames.includes(fileName)) { + unhashedPreCachedAssets.push(fileName); } else if (isPreCached(asset)) { - hashedPreCachedAssets.push(resolved); + hashedPreCachedAssets.push(fileName); } else { - hashedCachedOnRequestAssets.push(resolved); + hashedCachedOnRequestAssets.push(fileName); } } @@ -107,9 +112,6 @@ function replaceConstsInServiceWorker(swSource, version, globalHash, assets) { return newSource; }; - // write service worker - swSource = swSource.replace(`"%%VERSION%%"`, `"${version}"`); - swSource = swSource.replace(`"%%GLOBAL_HASH%%"`, `"${globalHash}"`); swSource = replaceArrayInSource("UNHASHED_PRECACHED_ASSETS", unhashedPreCachedAssets); swSource = replaceArrayInSource("HASHED_PRECACHED_ASSETS", hashedPreCachedAssets); swSource = replaceArrayInSource("HASHED_CACHED_ON_REQUEST_ASSETS", hashedCachedOnRequestAssets); @@ -117,12 +119,12 @@ function replaceConstsInServiceWorker(swSource, version, globalHash, assets) { return swSource; } -function replaceGlobalHashPlaceholderInChunks(assets, globalHashChunkReplaceMap, globalHash) { - for (const [name, placeholder] of Object.entries(globalHashChunkReplaceMap)) { +function replaceGlobalHashPlaceholderInChunks(assets, chunkNamesWithGlobalHash, globalHashPlaceholderLiteral, globalHashLiteral) { + for (const name of chunkNamesWithGlobalHash) { const chunk = assets.find(a => a.type === "chunk" && a.name === name); if (!chunk) { throw new Error(`could not find chunk ${name} to replace global hash placeholder`); } - chunk.code = chunk.code.replaceAll(placeholder, `"${globalHash}"`); + chunk.code = chunk.code.replaceAll(globalHashPlaceholderLiteral, globalHashLiteral); } } diff --git a/src/platform/web/sw.js b/src/platform/web/sw.js index 1dbe21f9..3404275d 100644 --- a/src/platform/web/sw.js +++ b/src/platform/web/sw.js @@ -15,13 +15,11 @@ See the License for the specific language governing permissions and limitations under the License. */ -const VERSION = "%%VERSION%%"; -const GLOBAL_HASH = "%%GLOBAL_HASH%%"; const UNHASHED_PRECACHED_ASSETS = []; const HASHED_PRECACHED_ASSETS = []; const HASHED_CACHED_ON_REQUEST_ASSETS = []; const NOTIFICATION_BADGE_ICON = "assets/icon.png"; -const unhashedCacheName = `hydrogen-assets-${GLOBAL_HASH}`; +const unhashedCacheName = `hydrogen-assets-${HYDROGEN_GLOBAL_HASH}`; const hashedCacheName = `hydrogen-assets`; const mediaThumbnailCacheName = `hydrogen-media-thumbnails-v2`; @@ -175,7 +173,7 @@ self.addEventListener('message', (event) => { } else { switch (event.data?.type) { case "version": - reply({version: VERSION, buildHash: GLOBAL_HASH}); + reply({version: HYDROGEN_VERSION, buildHash: HYDROGEN_GLOBAL_HASH}); break; case "skipWaiting": self.skipWaiting(); diff --git a/vite.config.js b/vite.config.js index 9a4e66f9..d9599cc4 100644 --- a/vite.config.js +++ b/vite.config.js @@ -51,10 +51,7 @@ export default { // important this comes before service worker // otherwise the manifest and the icons it refers to won't be cached injectWebManifest("assets/manifest.json"), - injectServiceWorker("./src/platform/web/sw.js", ["index.html"], { - // replace global hash placeholder in index chunk - "index": JSON.stringify(GLOBAL_HASH_PLACEHOLDER) - }), + injectServiceWorker("./src/platform/web/sw.js", ["index.html"], JSON.stringify(GLOBAL_HASH_PLACEHOLDER), ["index", "sw"]), ], define: { "HYDROGEN_VERSION": JSON.stringify(version), From 23e0d3f2ff4a15d8b804c28a915cec53ddaf16ab Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Thu, 9 Dec 2021 15:13:05 +0100 Subject: [PATCH 52/59] get notification badge icon url through import now we transpile the sw --- scripts/build-plugins/service-worker.js | 1 - src/platform/web/sw.js | 4 +++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/scripts/build-plugins/service-worker.js b/scripts/build-plugins/service-worker.js index a6817278..bd7d29d0 100644 --- a/scripts/build-plugins/service-worker.js +++ b/scripts/build-plugins/service-worker.js @@ -115,7 +115,6 @@ function replaceCacheFilenamesInServiceWorker(swChunk, unhashedFilenames, assets swSource = replaceArrayInSource("UNHASHED_PRECACHED_ASSETS", unhashedPreCachedAssets); swSource = replaceArrayInSource("HASHED_PRECACHED_ASSETS", hashedPreCachedAssets); swSource = replaceArrayInSource("HASHED_CACHED_ON_REQUEST_ASSETS", hashedCachedOnRequestAssets); - swSource = replaceStringInSource("NOTIFICATION_BADGE_ICON", assets.find(a => a.name === "icon.png").fileName); return swSource; } diff --git a/src/platform/web/sw.js b/src/platform/web/sw.js index 3404275d..6b864444 100644 --- a/src/platform/web/sw.js +++ b/src/platform/web/sw.js @@ -15,10 +15,12 @@ See the License for the specific language governing permissions and limitations under the License. */ +import NOTIFICATION_BADGE_ICON from "./assets/icon.png?url"; +// replaced by the service worker build plugin const UNHASHED_PRECACHED_ASSETS = []; const HASHED_PRECACHED_ASSETS = []; const HASHED_CACHED_ON_REQUEST_ASSETS = []; -const NOTIFICATION_BADGE_ICON = "assets/icon.png"; + const unhashedCacheName = `hydrogen-assets-${HYDROGEN_GLOBAL_HASH}`; const hashedCacheName = `hydrogen-assets`; const mediaThumbnailCacheName = `hydrogen-media-thumbnails-v2`; From 9a82f88e1f72acb68117efb6bd754c4553c5ef6e Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Thu, 9 Dec 2021 15:13:19 +0100 Subject: [PATCH 53/59] log swSource as build fails in CI --- scripts/build-plugins/service-worker.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/build-plugins/service-worker.js b/scripts/build-plugins/service-worker.js index bd7d29d0..78d34b7f 100644 --- a/scripts/build-plugins/service-worker.js +++ b/scripts/build-plugins/service-worker.js @@ -100,14 +100,14 @@ function replaceCacheFilenamesInServiceWorker(swChunk, unhashedFilenames, assets const replaceArrayInSource = (name, value) => { const newSource = swSource.replace(`${name} = []`, `${name} = ${JSON.stringify(value)}`); if (newSource === swSource) { - throw new Error(`${name} was not found in the service worker source`); + throw new Error(`${name} was not found in the service worker source: ` + swSource); } return newSource; }; const replaceStringInSource = (name, value) => { const newSource = swSource.replace(new RegExp(`${name}\\s=\\s"[^"]*"`), `${name} = ${JSON.stringify(value)}`); if (newSource === swSource) { - throw new Error(`${name} was not found in the service worker source`); + throw new Error(`${name} was not found in the service worker source: ` + swSource); } return newSource; }; From 62827b92b7a9c2d60ab082e0246fc579dd7ab7dd Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Thu, 9 Dec 2021 16:37:31 +0100 Subject: [PATCH 54/59] implement placeholder replacement so it still works with minification --- .eslintrc.js | 8 +- scripts/build-plugins/service-worker.js | 97 ++++++++------ src/platform/web/Platform.js | 2 +- src/platform/web/dom/ServiceWorkerHandler.js | 4 +- src/platform/web/sw.js | 10 +- src/platform/web/ui/login/common.js | 6 +- vite.config.js | 128 +++++++++---------- 7 files changed, 142 insertions(+), 113 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 5341c4e0..cb28f4c8 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -15,7 +15,11 @@ module.exports = { "no-unused-vars": "warn" }, "globals": { - "HYDROGEN_VERSION": "readonly", - "HYDROGEN_GLOBAL_HASH": "readonly" + "DEFINE_VERSION": "readonly", + "DEFINE_GLOBAL_HASH": "readonly", + // only available in sw.js + "DEFINE_UNHASHED_PRECACHED_ASSETS": "readonly", + "DEFINE_HASHED_PRECACHED_ASSETS": "readonly", + "DEFINE_HASHED_CACHED_ON_REQUEST_ASSETS": "readonly" } }; diff --git a/scripts/build-plugins/service-worker.js b/scripts/build-plugins/service-worker.js index 78d34b7f..19ae793f 100644 --- a/scripts/build-plugins/service-worker.js +++ b/scripts/build-plugins/service-worker.js @@ -8,7 +8,7 @@ function contentHash(str) { return hasher.digest(); } -module.exports = function injectServiceWorker(swFile, otherUnhashedFiles, globalHashPlaceholderLiteral, chunkNamesWithGlobalHash) { +function injectServiceWorker(swFile, otherUnhashedFiles, placeholdersPerChunk) { const swName = path.basename(swFile); let root; let version; @@ -26,7 +26,7 @@ module.exports = function injectServiceWorker(swFile, otherUnhashedFiles, global }, configResolved: config => { root = config.root; - version = JSON.parse(config.define.HYDROGEN_VERSION); // unquote + version = JSON.parse(config.define.DEFINE_VERSION); // unquote }, generateBundle: async function(options, bundle) { const unhashedFilenames = [swName].concat(otherUnhashedFiles); @@ -41,9 +41,11 @@ module.exports = function injectServiceWorker(swFile, otherUnhashedFiles, global const assets = Object.values(bundle); const hashedFileNames = assets.map(o => o.fileName).filter(fileName => !unhashedFileContentMap[fileName]); const globalHash = getBuildHash(hashedFileNames, unhashedFileContentMap); - const sw = bundle[swName]; - sw.code = replaceCacheFilenamesInServiceWorker(sw, unhashedFilenames, assets); - replaceGlobalHashPlaceholderInChunks(assets, chunkNamesWithGlobalHash, globalHashPlaceholderLiteral, `"${globalHash}"`); + const placeholderValues = { + DEFINE_GLOBAL_HASH: `"${globalHash}"`, + ...getCacheFileNamePlaceholderValues(swName, unhashedFilenames, assets, placeholdersPerChunk) + }; + replacePlaceholdersInChunks(assets, placeholdersPerChunk, placeholderValues); console.log(`\nBuilt ${version} (${globalHash})`); } }; @@ -76,8 +78,7 @@ function isPreCached(asset) { fileName.endsWith(".js") && !NON_PRECACHED_JS.includes(path.basename(name)); } -function replaceCacheFilenamesInServiceWorker(swChunk, unhashedFilenames, assets) { - let swSource = swChunk.code; +function getCacheFileNamePlaceholderValues(swName, unhashedFilenames, assets) { const unhashedPreCachedAssets = []; const hashedPreCachedAssets = []; const hashedCachedOnRequestAssets = []; @@ -86,7 +87,7 @@ function replaceCacheFilenamesInServiceWorker(swChunk, unhashedFilenames, assets const {name, fileName} = asset; // the service worker should not be cached at all, // it's how updates happen - if (fileName === swChunk.fileName) { + if (fileName === swName) { continue; } else if (unhashedFilenames.includes(fileName)) { unhashedPreCachedAssets.push(fileName); @@ -97,33 +98,57 @@ function replaceCacheFilenamesInServiceWorker(swChunk, unhashedFilenames, assets } } - const replaceArrayInSource = (name, value) => { - const newSource = swSource.replace(`${name} = []`, `${name} = ${JSON.stringify(value)}`); - if (newSource === swSource) { - throw new Error(`${name} was not found in the service worker source: ` + swSource); - } - return newSource; - }; - const replaceStringInSource = (name, value) => { - const newSource = swSource.replace(new RegExp(`${name}\\s=\\s"[^"]*"`), `${name} = ${JSON.stringify(value)}`); - if (newSource === swSource) { - throw new Error(`${name} was not found in the service worker source: ` + swSource); - } - return newSource; - }; - - swSource = replaceArrayInSource("UNHASHED_PRECACHED_ASSETS", unhashedPreCachedAssets); - swSource = replaceArrayInSource("HASHED_PRECACHED_ASSETS", hashedPreCachedAssets); - swSource = replaceArrayInSource("HASHED_CACHED_ON_REQUEST_ASSETS", hashedCachedOnRequestAssets); - return swSource; -} - -function replaceGlobalHashPlaceholderInChunks(assets, chunkNamesWithGlobalHash, globalHashPlaceholderLiteral, globalHashLiteral) { - for (const name of chunkNamesWithGlobalHash) { - const chunk = assets.find(a => a.type === "chunk" && a.name === name); - if (!chunk) { - throw new Error(`could not find chunk ${name} to replace global hash placeholder`); - } - chunk.code = chunk.code.replaceAll(globalHashPlaceholderLiteral, globalHashLiteral); + return { + DEFINE_UNHASHED_PRECACHED_ASSETS: JSON.stringify(unhashedPreCachedAssets), + DEFINE_HASHED_PRECACHED_ASSETS: JSON.stringify(hashedPreCachedAssets), + DEFINE_HASHED_CACHED_ON_REQUEST_ASSETS: JSON.stringify(hashedCachedOnRequestAssets) } } + +function replacePlaceholdersInChunks(assets, placeholdersPerChunk, placeholderValues) { + for (const [name, placeholderMap] of Object.entries(placeholdersPerChunk)) { + const chunk = assets.find(a => a.type === "chunk" && a.name === name); + if (!chunk) { + throw new Error(`could not find chunk ${name} to replace placeholders`); + } + for (const [placeholderName, placeholderLiteral] of Object.entries(placeholderMap)) { + const replacedValue = placeholderValues[placeholderName]; + const oldCode = chunk.code; + chunk.code = chunk.code.replaceAll(placeholderLiteral, replacedValue); + if (chunk.code === oldCode) { + throw new Error(`Could not replace ${placeholderName} in ${name}, looking for literal ${placeholderLiteral}:\n${chunk.code}`); + } + } + } +} + +/** creates a value to be include in the `define` build settings, + * but can be replace at the end of the build in certain chunks. + * We need this for injecting the global build hash and the final + * filenames in the service worker and index chunk. + * These values are only known in the generateBundle step, so we + * replace them by unique strings wrapped in a prompt call so no + * transformation will touch them (minifying, ...) and we can do a + * string replacement still at the end of the build. */ +function definePlaceholderValue(mode, name, devValue) { + if (mode === "production") { + // note that `prompt(...)` will never be in the final output, it's replaced by the final value + // once we know at the end of the build what it is and just used as a temporary value during the build + // as something that will not be transformed. + // I first considered Symbol but it's not inconceivable that babel would transform this. + return `prompt(${JSON.stringify(name)})`; + } else { + return JSON.stringify(devValue); + } +} + +function createPlaceholderValues(mode) { + return { + DEFINE_GLOBAL_HASH: definePlaceholderValue(mode, "DEFINE_GLOBAL_HASH", null), + DEFINE_UNHASHED_PRECACHED_ASSETS: definePlaceholderValue(mode, "UNHASHED_PRECACHED_ASSETS", []), + DEFINE_HASHED_PRECACHED_ASSETS: definePlaceholderValue(mode, "HASHED_PRECACHED_ASSETS", []), + DEFINE_HASHED_CACHED_ON_REQUEST_ASSETS: definePlaceholderValue(mode, "HASHED_CACHED_ON_REQUEST_ASSETS", []), + }; +} + +module.exports = {injectServiceWorker, createPlaceholderValues}; diff --git a/src/platform/web/Platform.js b/src/platform/web/Platform.js index b23faa6a..569daeb4 100644 --- a/src/platform/web/Platform.js +++ b/src/platform/web/Platform.js @@ -277,7 +277,7 @@ export class Platform { } get version() { - return HYDROGEN_VERSION; + return DEFINE_VERSION; } dispose() { diff --git a/src/platform/web/dom/ServiceWorkerHandler.js b/src/platform/web/dom/ServiceWorkerHandler.js index c7ba663a..0bb8c725 100644 --- a/src/platform/web/dom/ServiceWorkerHandler.js +++ b/src/platform/web/dom/ServiceWorkerHandler.js @@ -181,11 +181,11 @@ export class ServiceWorkerHandler { } get version() { - return HYDROGEN_VERSION; + return DEFINE_VERSION; } get buildHash() { - return HYDROGEN_GLOBAL_HASH; + return DEFINE_GLOBAL_HASH; } async preventConcurrentSessionAccess(sessionId) { diff --git a/src/platform/web/sw.js b/src/platform/web/sw.js index 6b864444..c5f69438 100644 --- a/src/platform/web/sw.js +++ b/src/platform/web/sw.js @@ -17,11 +17,11 @@ limitations under the License. import NOTIFICATION_BADGE_ICON from "./assets/icon.png?url"; // replaced by the service worker build plugin -const UNHASHED_PRECACHED_ASSETS = []; -const HASHED_PRECACHED_ASSETS = []; -const HASHED_CACHED_ON_REQUEST_ASSETS = []; +const UNHASHED_PRECACHED_ASSETS = DEFINE_UNHASHED_PRECACHED_ASSETS; +const HASHED_PRECACHED_ASSETS = DEFINE_HASHED_PRECACHED_ASSETS; +const HASHED_CACHED_ON_REQUEST_ASSETS = DEFINE_HASHED_CACHED_ON_REQUEST_ASSETS; -const unhashedCacheName = `hydrogen-assets-${HYDROGEN_GLOBAL_HASH}`; +const unhashedCacheName = `hydrogen-assets-${DEFINE_GLOBAL_HASH}`; const hashedCacheName = `hydrogen-assets`; const mediaThumbnailCacheName = `hydrogen-media-thumbnails-v2`; @@ -175,7 +175,7 @@ self.addEventListener('message', (event) => { } else { switch (event.data?.type) { case "version": - reply({version: HYDROGEN_VERSION, buildHash: HYDROGEN_GLOBAL_HASH}); + reply({version: DEFINE_VERSION, buildHash: DEFINE_GLOBAL_HASH}); break; case "skipWaiting": self.skipWaiting(); diff --git a/src/platform/web/ui/login/common.js b/src/platform/web/ui/login/common.js index a247a2ba..948eff34 100644 --- a/src/platform/web/ui/login/common.js +++ b/src/platform/web/ui/login/common.js @@ -15,10 +15,10 @@ limitations under the License. */ export function hydrogenGithubLink(t) { - if (HYDROGEN_VERSION && HYDROGEN_GLOBAL_HASH) { + if (DEFINE_VERSION && DEFINE_GLOBAL_HASH) { return t.a({target: "_blank", - href: `https://github.com/vector-im/hydrogen-web/releases/tag/v${HYDROGEN_VERSION}`}, - `Hydrogen v${HYDROGEN_VERSION} (${HYDROGEN_GLOBAL_HASH}) on Github`); + href: `https://github.com/vector-im/hydrogen-web/releases/tag/v${DEFINE_VERSION}`}, + `Hydrogen v${DEFINE_VERSION} (${DEFINE_GLOBAL_HASH}) on Github`); } else { return t.a({target: "_blank", href: "https://github.com/vector-im/hydrogen-web"}, "Hydrogen on Github"); diff --git a/vite.config.js b/vite.config.js index d9599cc4..6d092052 100644 --- a/vite.config.js +++ b/vite.config.js @@ -1,78 +1,78 @@ const cssvariables = require("postcss-css-variables"); -const autoprefixer = require("autoprefixer"); +//const autoprefixer = require("autoprefixer"); const flexbugsFixes = require("postcss-flexbugs-fixes"); const fs = require("fs"); const path = require("path"); -const GLOBAL_HASH_PLACEHOLDER = "hydrogen-global-hash-placeholder-4cf32306-5d61-4262-9a57-c9983f472c3c"; const injectWebManifest = require("./scripts/build-plugins/manifest"); -const injectServiceWorker = require("./scripts/build-plugins/service-worker"); +const {injectServiceWorker, createPlaceholderValues} = require("./scripts/build-plugins/service-worker"); // const legacyBuild = require("./scripts/build-plugins/legacy-build"); - -// we could also just import {version} from "../../package.json" where needed, -// but this won't work in the service worker yet as it is not transformed yet -// TODO: we should emit a chunk early on and then transform the asset again once we know all the other assets to cache +const {defineConfig} = require('vite'); const version = JSON.parse(fs.readFileSync(path.join(__dirname, "package.json"), "utf8")).version; -const {defineConfig} = require("vite"); -let polyfillSrc; -let polyfillRef; -export default { - public: false, - root: "src/platform/web", - base: "./", - server: { - hmr: false - }, - resolve: { - alias: { - // these should only be imported by the base-x package in any runtime code - // and works in the browser with a Uint8Array shim, - // rather than including a ton of polyfill code - "safe-buffer": "./scripts/package-overrides/safe-buffer/index.js", - "buffer": "./scripts/package-overrides/buffer/index.js", +export default defineConfig(({mode}) => { + const definePlaceholders = createPlaceholderValues(mode); + return { + public: false, + root: "src/platform/web", + base: "./", + server: { + hmr: false + }, + resolve: { + alias: { + // these should only be imported by the base-x package in any runtime code + // and works in the browser with a Uint8Array shim, + // rather than including a ton of polyfill code + "safe-buffer": "./scripts/package-overrides/safe-buffer/index.js", + "buffer": "./scripts/package-overrides/buffer/index.js", + } + }, + build: { + outDir: "../../../target", + emptyOutDir: true, + minify: false, + sourcemap: false, + assetsInlineLimit: 0, + polyfillModulePreload: false, + }, + plugins: [ + // legacyBuild(scriptTagPath(path.join(__dirname, "src/platform/web/index.html"), 0), { + // "./Platform": "./LegacyPlatform" + // }, "hydrogen-legacy", [ + // './legacy-polyfill', + // ]), + // important this comes before service worker + // otherwise the manifest and the icons it refers to won't be cached + injectWebManifest("assets/manifest.json"), + injectServiceWorker("./src/platform/web/sw.js", ["index.html"], { + // placeholders to replace at end of build by chunk name + "index": {DEFINE_GLOBAL_HASH: definePlaceholders.DEFINE_GLOBAL_HASH}, + "sw": definePlaceholders + }), + ], + define: { + DEFINE_VERSION: JSON.stringify(version), + ...definePlaceholders + }, + css: { + postcss: { + plugins: [ + cssvariables({ + preserve: (declaration) => { + return declaration.value.indexOf("var(--ios-") == 0; + } + }), + // the grid option creates some source fragment that causes the vite warning reporter to crash because + // it wants to log a warning on a line that does not exist in the source fragment. + // autoprefixer({overrideBrowserslist: ["IE 11"], grid: "no-autoplace"}), + flexbugsFixes() + ] + } } - }, - build: { - outDir: "../../../target", - emptyOutDir: true, - minify: true, - sourcemap: false, - assetsInlineLimit: 0, - polyfillModulePreload: false, - }, - plugins: [ - // legacyBuild(scriptTagPath(path.join(__dirname, "src/platform/web/index.html"), 0), { - // "./Platform": "./LegacyPlatform" - // }, "hydrogen-legacy", [ - // './legacy-polyfill', - // ]), - // important this comes before service worker - // otherwise the manifest and the icons it refers to won't be cached - injectWebManifest("assets/manifest.json"), - injectServiceWorker("./src/platform/web/sw.js", ["index.html"], JSON.stringify(GLOBAL_HASH_PLACEHOLDER), ["index", "sw"]), - ], - define: { - "HYDROGEN_VERSION": JSON.stringify(version), - "HYDROGEN_GLOBAL_HASH": JSON.stringify(GLOBAL_HASH_PLACEHOLDER) - }, - css: { - postcss: { - plugins: [ - cssvariables({ - preserve: (declaration) => { - return declaration.value.indexOf("var(--ios-") == 0; - } - }), - // the grid option creates some source fragment that causes the vite warning reporter to crash because - // it wants to log a warning on a line that does not exist in the source fragment. - // autoprefixer({overrideBrowserslist: ["IE 11"], grid: "no-autoplace"}), - flexbugsFixes() - ] - } - } -}; + }; +}); function scriptTagPath(htmlFile, index) { return `${htmlFile}?html-proxy&index=${index}.js`; From dea7e7b4f5aa97b42624df60b5d9a1c9147e6850 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Thu, 9 Dec 2021 16:42:35 +0100 Subject: [PATCH 55/59] enable minification and source maps --- vite.config.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vite.config.js b/vite.config.js index 6d092052..c7c91a68 100644 --- a/vite.config.js +++ b/vite.config.js @@ -32,8 +32,8 @@ export default defineConfig(({mode}) => { build: { outDir: "../../../target", emptyOutDir: true, - minify: false, - sourcemap: false, + minify: true, + sourcemap: true, assetsInlineLimit: 0, polyfillModulePreload: false, }, From d9ff4a8484ced141e003f1773fcf9ac8ff17b1cc Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Thu, 9 Dec 2021 17:12:08 +0100 Subject: [PATCH 56/59] sw.js is not part of the sdk yet, so just put the path in index.html --- src/platform/web/index.html | 4 ++-- src/platform/web/sdk/paths/vite.ts | 3 --- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/platform/web/index.html b/src/platform/web/index.html index 3b0e6e72..f7aeeed7 100644 --- a/src/platform/web/index.html +++ b/src/platform/web/index.html @@ -19,7 +19,7 @@ import {main} from "./main"; import {Platform} from "./Platform"; import configJSON from "./assets/config.json?raw"; - import {olmPaths, downloadSandboxPath, workerPath, serviceWorkerPath} from "./sdk/paths/vite"; + import {olmPaths, downloadSandboxPath, workerPath} from "./sdk/paths/vite"; const paths = { olm: olmPaths, downloadSandbox: downloadSandboxPath, @@ -27,7 +27,7 @@ ...JSON.parse(configJSON) }; if (import.meta.env.PROD) { - paths.serviceWorker = serviceWorkerPath; + paths.serviceWorker = "sw.js"; } const platform = new Platform( document.body, diff --git a/src/platform/web/sdk/paths/vite.ts b/src/platform/web/sdk/paths/vite.ts index 0a3ddedd..6739f8d8 100644 --- a/src/platform/web/sdk/paths/vite.ts +++ b/src/platform/web/sdk/paths/vite.ts @@ -17,6 +17,3 @@ export const olmPaths = { export const downloadSandboxPath = _downloadSandboxPath; export const workerPath = _workerPath; -// the service worker is generated by the build as an unhashed asset, -// we don't use it at development time, so don't use import for the path -export const serviceWorkerPath = "sw.js"; From 5c5193ef486f2fc8749aa51f4ffee62201b686f0 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Thu, 9 Dec 2021 18:04:11 +0100 Subject: [PATCH 57/59] remove old build system and unused dependencies some of these are for the ie11 legacy build, which has been postponed. They will be brougth back when we bring back the legacy build --- package.json | 18 - scripts/build-plugins/legacy-build.js | 213 --- scripts/build.mjs | 578 -------- scripts/common.mjs | 12 - scripts/deploy.sh | 6 - scripts/serve-local.js | 43 - snowpack.config.js | 37 - yarn.lock | 1928 +------------------------ 8 files changed, 12 insertions(+), 2823 deletions(-) delete mode 100644 scripts/build-plugins/legacy-build.js delete mode 100644 scripts/build.mjs delete mode 100644 scripts/common.mjs delete mode 100755 scripts/deploy.sh delete mode 100644 scripts/serve-local.js delete mode 100644 snowpack.config.js diff --git a/package.json b/package.json index adf2ae22..d90747ab 100644 --- a/package.json +++ b/package.json @@ -25,35 +25,17 @@ }, "homepage": "https://github.com/vector-im/hydrogen-web/#readme", "devDependencies": { - "@babel/core": "^7.11.1", - "@babel/plugin-transform-runtime": "^7.15.8", - "@babel/preset-env": "^7.11.0", - "@babel/standalone": "^7.15.8", - "@rollup/plugin-babel": "^5.1.0", - "@rollup/plugin-commonjs": "^15.0.0", - "@rollup/plugin-json": "^4.1.0", - "@rollup/plugin-multi-entry": "^4.0.0", - "@rollup/plugin-node-resolve": "^9.0.0", - "@rollup/pluginutils": "^4.1.1", "@typescript-eslint/eslint-plugin": "^4.29.2", "@typescript-eslint/parser": "^4.29.2", - "@vitejs/plugin-legacy": "^1.6.1", - "autoprefixer": "^10.4.0", - "cheerio": "^1.0.0-rc.3", - "commander": "^6.0.0", "core-js": "^3.6.5", "eslint": "^7.32.0", "fake-indexeddb": "^3.1.2", - "finalhandler": "^1.1.1", "impunity": "^1.0.9", "mdn-polyfills": "^5.20.0", "node-html-parser": "^4.0.0", "postcss-css-variables": "^0.18.0", "postcss-flexbugs-fixes": "^5.0.2", "regenerator-runtime": "^0.13.7", - "rollup": "^2.26.4", - "rollup-plugin-cleanup": "^3.1.1", - "serve-static": "^1.13.2", "typescript": "^4.3.5", "vite": "^2.6.14", "xxhashjs": "^0.2.2" diff --git a/scripts/build-plugins/legacy-build.js b/scripts/build-plugins/legacy-build.js deleted file mode 100644 index f7f641a3..00000000 --- a/scripts/build-plugins/legacy-build.js +++ /dev/null @@ -1,213 +0,0 @@ -const path = require("path"); -const {build} = require("vite"); -const {babel, getBabelOutputPlugin} = require('@rollup/plugin-babel'); -const {createFilter} = require("@rollup/pluginutils"); -const { rollup } = require('rollup'); -const { nodeResolve } = require('@rollup/plugin-node-resolve'); -const commonjs = require('@rollup/plugin-commonjs'); - -const VIRTUAL_ENTRY = "hydrogen:legacy-entry"; -const NODE_MODULES_NEEDING_TRANSPILATION = ["es6-promise"]; - -module.exports = function legacyBuild(entryModuleId, entryImportReplacements, chunkName, extraImports) { - let parentRoot; - let code; - let legacyBundleRef; - let legacyBundleFileName; - return { - name: "hydrogen:legacyBuild", - apply: "build", - configResolved: config => { - parentRoot = config.root; - }, - async moduleParsed(info) { - if (info.id === entryModuleId) { - code = info.code; - } - }, - async buildEnd() { - if (!code) { - throw new Error("couldnt find entry"); - } - for (const [importSource, newImportSource] of Object.entries(entryImportReplacements)) { - code = replaceImport(this, code, importSource, newImportSource); - } - code = prependExtraImports(code, extraImports); - const bundleCode = await buildLegacyChunk(parentRoot, chunkName, code); - legacyBundleRef = this.emitFile({ - type: "asset", - source: bundleCode, - name: `${chunkName}.js` - }); - }, - generateBundle() { - if (!legacyBundleRef) { - throw new Error("no bundle"); - } - legacyBundleFileName = this.getFileName(legacyBundleRef); - }, - transformIndexHtml: { - transform(html) { - if (!legacyBundleFileName) { - throw new Error("no bundle"); - } - return [{ - tag: "script", - attrs: {type: "text/javascript", nomodule: true, src: legacyBundleFileName}, - injectTo: "head" - }]; - }, - }, - } -} - -/** we replace the imports ourselves instead of relying on rollup-alias or similar, because - * we only want to replace imports in the entry module, not anywhere in the import tree. - * This allows to create sub classes for the legacy build that can still import - * the non-legacy class as a base class, like LegacyPlatform does with Platform.*/ -function replaceImport(pluginCtx, code, importSource, newImportSource) { - const ast = pluginCtx.parse(code); - for (const node of ast.body) { - if (node.type === "ImportDeclaration") { - const sourceNode = node.source; - if (sourceNode.value === importSource) { - code = code.substr(0, sourceNode.start) + JSON.stringify(newImportSource) + code.substr(sourceNode.end); - return code; - } - } - } - throw new Error(`Could not find import ${JSON.stringify(importSource)} to replace`); -} - -function prependExtraImports(code, extraImports) { - return extraImports.map(i => `import ${JSON.stringify(i)};`).join("\n") + code; -} - -async function buildLegacyChunk(root, chunkName, code) { - const projectRootDir = path.resolve(path.join(root, "../../..")); - const nodeModulesDir = path.join(projectRootDir, "node_modules"); - const defaultFilter = createFilter([], [], {resolve: projectRootDir}); - const transpiledModuleDirs = NODE_MODULES_NEEDING_TRANSPILATION.map(m => { - return path.join(nodeModulesDir, m); - }); - - const filterModule = id => { - if (!defaultFilter(id)) { - return false; - } - if (id.endsWith("?url") || id.endsWith("?raw")) { - // TODO is this needed - return true; - } - if (transpiledModuleDirs.some(d => id.startsWith(d))) { - return true; - } - if (id.startsWith(nodeModulesDir)) { - return false; - } - return true; - }; - // compile down to whatever IE 11 needs - const babelPlugin = getBabelOutputPlugin({ - babelrc: false, - compact: false, - extensions: [".js", ".ts"], - // babelHelpers: 'bundled', - presets: [ - [ - "@babel/preset-env", - { - modules: false, - useBuiltIns: "usage", - corejs: "3.4", - targets: "IE 11", - // we provide our own promise polyfill (es6-promise) - // with support for synchronous flushing of - // the queue for idb where needed - exclude: ["es.promise", "es.promise.all-settled", "es.promise.finally"] - } - ] - ] - }); - const bundle = await build({ - root, - configFile: false, - logLevel: 'error', - build: { - write: false, - minify: false, - target: "esnext", - assetsInlineLimit: 0, - polyfillModulePreload: false, - rollupOptions: { - external: id => !filterModule(id), - input: { - [chunkName]: VIRTUAL_ENTRY - }, - output: { - format: "esm", - manualChunks: undefined - }, - makeAbsoluteExternalsRelative: false, - }, - }, - plugins: [ - memoryBabelInputPlugin(VIRTUAL_ENTRY, root, code), - babelPlugin - ] - }); - const assets = Array.isArray(bundle.output) ? bundle.output : [bundle.output]; - const mainChunk = assets.find(a => a.name === chunkName); - const babelCode = mainChunk.code; - const bundle2 = await rollup({ - plugins: [ - memoryBabelInputPlugin(VIRTUAL_ENTRY, root, babelCode), - overridesAsRollupPlugin(new Map( - [["safe-buffer", "./scripts/package-overrides/safe-buffer/index.js"], - ["buffer", "./scripts/package-overrides/buffer/index.js"]]), projectRootDir), - commonjs(), - nodeResolve(), - ], - input: { - [chunkName]: VIRTUAL_ENTRY - } - }); - const {output} = await bundle2.generate({ - format: 'iife', - name: `hydrogen` - }); - const bundledCode = output[0].code; - return bundledCode; -} - -function memoryBabelInputPlugin(entryName, dir, code) { - return { - name: "hydrogen:resolve-legacy-entry", - resolveId(id, importer) { - if (id === entryName) { - return id; - } else if (importer === entryName && id.startsWith("./")) { - return this.resolve(path.join(dir, id)); - } - }, - load(id) { - if (id === entryName) { - return code; - } - }, - } -} - -function overridesAsRollupPlugin(mapping, basedir) { - return { - name: "rewrite-imports", - async resolveId (source, importer) { - const target = mapping.get(source); - if (target) { - const resolvedTarget = await this.resolve(path.join(basedir, target)); - console.log("resolving", source, resolvedTarget); - return resolvedTarget; - } - } - }; -} diff --git a/scripts/build.mjs b/scripts/build.mjs deleted file mode 100644 index 0674cb93..00000000 --- a/scripts/build.mjs +++ /dev/null @@ -1,578 +0,0 @@ -/* -Copyright 2020 Bruno Windels -Copyright 2020 The Matrix.org Foundation C.I.C. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -import {build as snowpackBuild, loadConfiguration} from "snowpack" -import cheerio from "cheerio"; -import fsRoot from "fs"; -const fs = fsRoot.promises; -import path from "path"; -import xxhash from 'xxhashjs'; -import { rollup } from 'rollup'; -import postcss from "postcss"; -import postcssImport from "postcss-import"; -import { fileURLToPath } from 'url'; -import { dirname } from 'path'; -import commander from "commander"; -// needed for legacy bundle -import babel from '@rollup/plugin-babel'; -// needed to find the polyfill modules in the main-legacy.js bundle -import { nodeResolve } from '@rollup/plugin-node-resolve'; -// needed because some of the polyfills are written as commonjs modules -import commonjs from '@rollup/plugin-commonjs'; -// multi-entry plugin so we can add polyfill file to main -import multi from '@rollup/plugin-multi-entry'; -import removeJsComments from 'rollup-plugin-cleanup'; -// replace urls of asset names with content hashed version -import postcssUrl from "postcss-url"; - -import cssvariables from "postcss-css-variables"; -import autoprefixer from "autoprefixer"; -import flexbugsFixes from "postcss-flexbugs-fixes"; - -const __filename = fileURLToPath(import.meta.url); -const __dirname = dirname(__filename); -const projectDir = path.join(__dirname, "../"); -const snowpackOutPath = path.join(projectDir, "snowpack-build-output"); -const cssSrcDir = path.join(projectDir, "src/platform/web/ui/css/"); -const snowpackConfig = await loadConfiguration({buildOptions: {out: snowpackOutPath}}, "snowpack.config.js"); -const snowpackOutDir = snowpackConfig.buildOptions.out.substring(projectDir.length); -const srcDir = path.join(projectDir, `${snowpackOutDir}/src/`); -const isPathInSrcDir = path => path.startsWith(srcDir); - -const parameters = new commander.Command(); -parameters - .option("--modern-only", "don't make a legacy build") - .option("--override-imports ", "pass in a file to override import paths, see doc/SKINNING.md") - .option("--override-css
", "pass in an alternative main css file") -parameters.parse(process.argv); - -/** - * We use Snowpack to handle the translation of TypeScript - * into JavaScript. We thus can't bundle files straight from - * the src directory, since some of them are TypeScript, and since - * they may import Node modules. We thus bundle files after they - * have been processed by Snowpack. This function returns paths - * to the files that have already been pre-processed in this manner. - */ -function srcPath(src) { - return path.join(snowpackOutDir, 'src', src); -} - -async function build({modernOnly, overrideImports, overrideCss}) { - await snowpackBuild({config: snowpackConfig}); - // get version number - const version = JSON.parse(await fs.readFile(path.join(projectDir, "package.json"), "utf8")).version; - let importOverridesMap; - if (overrideImports) { - importOverridesMap = await readImportOverrides(overrideImports); - } - const devHtml = await fs.readFile(path.join(snowpackOutPath, "index.html"), "utf8"); - const doc = cheerio.load(devHtml); - const themes = []; - findThemes(doc, themeName => { - themes.push(themeName); - }); - // clear target dir - const targetDir = path.join(projectDir, "target/"); - await removeDirIfExists(targetDir); - await createDirs(targetDir, themes); - const assets = new AssetMap(targetDir); - // copy olm assets - const olmAssets = await copyFolder(path.join(projectDir, "lib/olm/"), assets.directory); - assets.addSubMap(olmAssets); - await assets.write(`hydrogen.js`, await buildJs(srcPath("main.js"), [srcPath("platform/web/Platform.js")], importOverridesMap)); - if (!modernOnly) { - await assets.write(`hydrogen-legacy.js`, await buildJsLegacy(srcPath("main.js"), [ - srcPath('platform/web/legacy-polyfill.js'), - srcPath('platform/web/LegacyPlatform.js') - ], importOverridesMap)); - await assets.write(`worker.js`, await buildJsLegacy(srcPath("platform/web/worker/main.js"), [srcPath('platform/web/worker/polyfill.js')])); - } - // copy over non-theme assets - const baseConfig = JSON.parse(await fs.readFile(path.join(projectDir, "assets/config.json"), {encoding: "utf8"})); - const downloadSandbox = "download-sandbox.html"; - let downloadSandboxHtml = await fs.readFile(path.join(projectDir, `assets/${downloadSandbox}`)); - await assets.write(downloadSandbox, downloadSandboxHtml); - // creates the directories where the theme css bundles are placed in, - // and writes to assets, so the build bundles can translate them, so do it first - await copyThemeAssets(themes, assets); - await buildCssBundles(buildCssLegacy, themes, assets, overrideCss); - await buildManifest(assets); - // all assets have been added, create a hash from all assets name to cache unhashed files like index.html - assets.addToHashForAll("index.html", devHtml); - let swSource = await fs.readFile(path.join(snowpackOutPath, "sw.js"), "utf8"); - assets.addToHashForAll("sw.js", swSource); - - const globalHash = assets.hashForAll(); - - await buildServiceWorker(swSource, version, globalHash, assets); - await buildHtml(doc, version, baseConfig, globalHash, modernOnly, assets); - await removeDirIfExists(snowpackOutPath); - console.log(`built hydrogen ${version} (${globalHash}) successfully with ${assets.size} files`); -} - -async function findThemes(doc, callback) { - doc("link[rel~=stylesheet][title]").each((i, el) => { - const theme = doc(el); - const href = theme.attr("href"); - const themesPrefix = "/themes/"; - const prefixIdx = href.indexOf(themesPrefix); - if (prefixIdx !== -1) { - const themeNameStart = prefixIdx + themesPrefix.length; - const themeNameEnd = href.indexOf("/", themeNameStart); - const themeName = href.substr(themeNameStart, themeNameEnd - themeNameStart); - callback(themeName, theme); - } - }); -} - -async function createDirs(targetDir, themes) { - await fs.mkdir(targetDir); - const themeDir = path.join(targetDir, "themes"); - await fs.mkdir(themeDir); - for (const theme of themes) { - await fs.mkdir(path.join(themeDir, theme)); - } -} - -async function copyThemeAssets(themes, assets) { - for (const theme of themes) { - const themeDstFolder = path.join(assets.directory, `themes/${theme}`); - const themeSrcFolder = path.join(cssSrcDir, `themes/${theme}`); - const themeAssets = await copyFolder(themeSrcFolder, themeDstFolder, file => { - return !file.endsWith(".css"); - }); - assets.addSubMap(themeAssets); - } - return assets; -} - -async function buildHtml(doc, version, baseConfig, globalHash, modernOnly, assets) { - // transform html file - // change path to main.css to css bundle - doc("link[rel=stylesheet]:not([title])").attr("href", assets.resolve(`hydrogen.css`)); - // adjust file name of icon on iOS - doc("link[rel=apple-touch-icon]").attr("href", assets.resolve(`icon-maskable.png`)); - // change paths to all theme stylesheets - findThemes(doc, (themeName, theme) => { - theme.attr("href", assets.resolve(`themes/${themeName}/bundle.css`)); - }); - const configJSON = JSON.stringify(Object.assign({}, baseConfig, { - worker: assets.has("worker.js") ? assets.resolve(`worker.js`) : null, - downloadSandbox: assets.resolve("download-sandbox.html"), - serviceWorker: "sw.js", - olm: { - wasm: assets.resolve("olm.wasm"), - legacyBundle: assets.resolve("olm_legacy.js"), - wasmBundle: assets.resolve("olm.js"), - } - })); - const modernScript = `import {main, Platform} from "./${assets.resolve(`hydrogen.js`)}"; main(new Platform(document.body, ${configJSON}));`; - const mainScripts = [ - `` - ]; - if (!modernOnly) { - const legacyScript = `hydrogen.main(new hydrogen.Platform(document.body, ${configJSON}));`; - mainScripts.push( - ``, - `` - ); - } - doc("script#main").replaceWith(mainScripts.join("")); - - const versionScript = doc("script#version"); - versionScript.attr("type", "text/javascript"); - let vSource = versionScript.contents().text(); - vSource = vSource.replace(`"%%VERSION%%"`, `"${version}"`); - vSource = vSource.replace(`"%%GLOBAL_HASH%%"`, `"${globalHash}"`); - versionScript.text(wrapWithLicenseComments(vSource)); - doc("head").append(``); - await assets.writeUnhashed("index.html", doc.html()); -} - -async function buildJs(mainFile, extraFiles, importOverrides) { - // create js bundle - const plugins = [multi(), removeJsComments({comments: "none"})]; - if (importOverrides) { - plugins.push(overridesAsRollupPlugin(importOverrides)); - } - const bundle = await rollup({ - // for fake-indexeddb, so usage for tests only doesn't put it in bundle - treeshake: {moduleSideEffects: isPathInSrcDir}, - input: extraFiles.concat(mainFile), - plugins - }); - const {output} = await bundle.generate({ - format: 'es', - // TODO: can remove this? - name: `hydrogen` - }); - const code = output[0].code; - return wrapWithLicenseComments(code); -} - -async function buildJsLegacy(mainFile, extraFiles, importOverrides) { - // compile down to whatever IE 11 needs - const babelPlugin = babel.babel({ - babelHelpers: 'bundled', - exclude: 'node_modules/**', - presets: [ - [ - "@babel/preset-env", - { - useBuiltIns: "entry", - corejs: "3.4", - targets: "IE 11", - // we provide our own promise polyfill (es6-promise) - // with support for synchronous flushing of - // the queue for idb where needed - exclude: ["es.promise", "es.promise.all-settled", "es.promise.finally"] - } - ] - ] - }); - const plugins = [multi(), commonjs()]; - if (importOverrides) { - plugins.push(overridesAsRollupPlugin(importOverrides)); - } - plugins.push(nodeResolve(), babelPlugin); - // create js bundle - const rollupConfig = { - // for fake-indexeddb, so usage for tests only doesn't put it in bundle - treeshake: {moduleSideEffects: isPathInSrcDir}, - // important the extraFiles come first, - // so polyfills are available in the global scope - // if needed for the mainfile - input: extraFiles.concat(mainFile), - plugins - }; - const bundle = await rollup(rollupConfig); - const {output} = await bundle.generate({ - format: 'iife', - name: `hydrogen` - }); - const code = output[0].code; - return wrapWithLicenseComments(code); -} - -function wrapWithLicenseComments(code) { - // Add proper license comments to make GNU LibreJS accept the file - const start = '// @license magnet:?xt=urn:btih:8e4f440f4c65981c5bf93c76d35135ba5064d8b7&dn=apache-2.0.txt Apache-2.0'; - const end = '// @license-end'; - return `${start}\n${code}\n${end}`; -} - -const NON_PRECACHED_JS = [ - "hydrogen-legacy.js", - "olm_legacy.js", - "worker.js" -]; - -function isPreCached(asset) { - return asset.endsWith(".svg") || - asset.endsWith(".png") || - asset.endsWith(".css") || - asset.endsWith(".wasm") || - asset.endsWith(".html") || - // most environments don't need the worker - asset.endsWith(".js") && !NON_PRECACHED_JS.includes(asset); -} - -async function buildManifest(assets) { - const webManifest = JSON.parse(await fs.readFile(path.join(projectDir, "assets/manifest.json"), "utf8")); - // copy manifest icons - for (const icon of webManifest.icons) { - let iconData = await fs.readFile(path.join(projectDir, icon.src)); - const iconTargetPath = path.basename(icon.src); - icon.src = await assets.write(iconTargetPath, iconData); - } - await assets.write("manifest.json", JSON.stringify(webManifest)); -} - -async function buildServiceWorker(swSource, version, globalHash, assets) { - const unhashedPreCachedAssets = ["index.html"]; - const hashedPreCachedAssets = []; - const hashedCachedOnRequestAssets = []; - - for (const [unresolved, resolved] of assets) { - if (unresolved === resolved) { - unhashedPreCachedAssets.push(resolved); - } else if (isPreCached(unresolved)) { - hashedPreCachedAssets.push(resolved); - } else { - hashedCachedOnRequestAssets.push(resolved); - } - } - - const replaceArrayInSource = (name, value) => { - const newSource = swSource.replace(`${name} = []`, `${name} = ${JSON.stringify(value)}`); - if (newSource === swSource) { - throw new Error(`${name} was not found in the service worker source`); - } - return newSource; - }; - const replaceStringInSource = (name, value) => { - const newSource = swSource.replace(new RegExp(`${name}\\s=\\s"[^"]*"`), `${name} = ${JSON.stringify(value)}`); - if (newSource === swSource) { - throw new Error(`${name} was not found in the service worker source`); - } - return newSource; - }; - - // write service worker - swSource = swSource.replace(`"%%VERSION%%"`, `"${version}"`); - swSource = swSource.replace(`"%%GLOBAL_HASH%%"`, `"${globalHash}"`); - swSource = replaceArrayInSource("UNHASHED_PRECACHED_ASSETS", unhashedPreCachedAssets); - swSource = replaceArrayInSource("HASHED_PRECACHED_ASSETS", hashedPreCachedAssets); - swSource = replaceArrayInSource("HASHED_CACHED_ON_REQUEST_ASSETS", hashedCachedOnRequestAssets); - swSource = replaceStringInSource("NOTIFICATION_BADGE_ICON", assets.resolve("icon.png")); - - // service worker should not have a hashed name as it is polled by the browser for updates - await assets.writeUnhashed("sw.js", swSource); -} - -async function buildCssBundles(buildFn, themes, assets, mainCssFile = null) { - if (!mainCssFile) { - mainCssFile = path.join(cssSrcDir, "main.css"); - } - const bundleCss = await buildFn(mainCssFile); - await assets.write(`hydrogen.css`, bundleCss); - for (const theme of themes) { - const themeRelPath = `themes/${theme}/`; - const themeRoot = path.join(cssSrcDir, themeRelPath); - const assetUrlMapper = ({absolutePath}) => { - if (!absolutePath.startsWith(themeRoot)) { - throw new Error("resource is out of theme directory: " + absolutePath); - } - const relPath = absolutePath.substr(themeRoot.length); - const hashedDstPath = assets.resolve(path.join(themeRelPath, relPath)); - if (hashedDstPath) { - return hashedDstPath.substr(themeRelPath.length); - } - }; - const themeCss = await buildFn(path.join(themeRoot, `theme.css`), assetUrlMapper); - await assets.write(path.join(themeRelPath, `bundle.css`), themeCss); - } -} - -// async function buildCss(entryPath, urlMapper = null) { -// const preCss = await fs.readFile(entryPath, "utf8"); -// const options = [postcssImport]; -// if (urlMapper) { -// options.push(postcssUrl({url: urlMapper})); -// } -// const cssBundler = postcss(options); -// const result = await cssBundler.process(preCss, {from: entryPath}); -// return result.css; -// } - -async function buildCssLegacy(entryPath, urlMapper = null) { - const preCss = await fs.readFile(entryPath, "utf8"); - const options = [ - postcssImport, - cssvariables({ - preserve: (declaration) => { - return declaration.value.indexOf("var(--ios-") == 0; - } - }), - autoprefixer({overrideBrowserslist: ["IE 11"], grid: "no-autoplace"}), - flexbugsFixes() - ]; - if (urlMapper) { - options.push(postcssUrl({url: urlMapper})); - } - const cssBundler = postcss(options); - const result = await cssBundler.process(preCss, {from: entryPath}); - return result.css; -} - -async function removeDirIfExists(targetDir) { - try { - await fs.rmdir(targetDir, {recursive: true}); - } catch (err) { - if (err.code !== "ENOENT") { - throw err; - } - } -} - -async function copyFolder(srcRoot, dstRoot, filter, assets = null) { - assets = assets || new AssetMap(dstRoot); - const dirEnts = await fs.readdir(srcRoot, {withFileTypes: true}); - for (const dirEnt of dirEnts) { - const dstPath = path.join(dstRoot, dirEnt.name); - const srcPath = path.join(srcRoot, dirEnt.name); - if (dirEnt.isDirectory()) { - await fs.mkdir(dstPath); - await copyFolder(srcPath, dstPath, filter, assets); - } else if ((dirEnt.isFile() || dirEnt.isSymbolicLink()) && (!filter || filter(srcPath))) { - const content = await fs.readFile(srcPath); - await assets.write(dstPath, content); - } - } - return assets; -} - -function contentHash(str) { - var hasher = new xxhash.h32(0); - hasher.update(str); - return hasher.digest(); -} - -class AssetMap { - constructor(targetDir) { - // remove last / if any, so substr in create works well - this._targetDir = path.resolve(targetDir); - this._assets = new Map(); - // hashes for unhashed resources so changes in these resources also contribute to the hashForAll - this._unhashedHashes = []; - } - - _toRelPath(resourcePath) { - let relPath = resourcePath; - if (path.isAbsolute(resourcePath)) { - if (!resourcePath.startsWith(this._targetDir)) { - throw new Error(`absolute path ${resourcePath} that is not within target dir ${this._targetDir}`); - } - relPath = resourcePath.substr(this._targetDir.length + 1); // + 1 for the / - } - return relPath; - } - - _create(resourcePath, content) { - const relPath = this._toRelPath(resourcePath); - const hash = contentHash(Buffer.from(content)); - const dir = path.dirname(relPath); - const extname = path.extname(relPath); - const basename = path.basename(relPath, extname); - const dstRelPath = path.join(dir, `${basename}-${hash}${extname}`); - this._assets.set(relPath, dstRelPath); - return dstRelPath; - } - - async write(resourcePath, content) { - const relPath = this._create(resourcePath, content); - const fullPath = path.join(this.directory, relPath); - if (typeof content === "string") { - await fs.writeFile(fullPath, content, "utf8"); - } else { - await fs.writeFile(fullPath, content); - } - return relPath; - } - - async writeUnhashed(resourcePath, content) { - const relPath = this._toRelPath(resourcePath); - this._assets.set(relPath, relPath); - const fullPath = path.join(this.directory, relPath); - if (typeof content === "string") { - await fs.writeFile(fullPath, content, "utf8"); - } else { - await fs.writeFile(fullPath, content); - } - return relPath; - } - - get directory() { - return this._targetDir; - } - - resolve(resourcePath) { - const relPath = this._toRelPath(resourcePath); - const result = this._assets.get(relPath); - if (!result) { - throw new Error(`unknown path: ${relPath}, only know ${Array.from(this._assets.keys()).join(", ")}`); - } - return result; - } - - addSubMap(assetMap) { - if (!assetMap.directory.startsWith(this.directory)) { - throw new Error(`map directory doesn't start with this directory: ${assetMap.directory} ${this.directory}`); - } - const relSubRoot = assetMap.directory.substr(this.directory.length + 1); - for (const [key, value] of assetMap._assets.entries()) { - this._assets.set(path.join(relSubRoot, key), path.join(relSubRoot, value)); - } - } - - [Symbol.iterator]() { - return this._assets.entries(); - } - - isUnhashed(relPath) { - const resolvedPath = this._assets.get(relPath); - if (!resolvedPath) { - throw new Error("Unknown asset: " + relPath); - } - return relPath === resolvedPath; - } - - get size() { - return this._assets.size; - } - - has(relPath) { - return this._assets.has(relPath); - } - - hashForAll() { - const globalHashAssets = Array.from(this).map(([, resolved]) => resolved); - globalHashAssets.push(...this._unhashedHashes); - globalHashAssets.sort(); - return contentHash(globalHashAssets.join(",")); - } - - addToHashForAll(resourcePath, content) { - this._unhashedHashes.push(`${resourcePath}-${contentHash(Buffer.from(content))}`); - } -} - -async function readImportOverrides(filename) { - const json = await fs.readFile(filename, "utf8"); - const mapping = new Map(Object.entries(JSON.parse(json))); - return { - basedir: path.dirname(path.resolve(filename))+path.sep, - mapping - }; -} - -function overridesAsRollupPlugin(importOverrides) { - const {mapping, basedir} = importOverrides; - return { - name: "rewrite-imports", - resolveId (source, importer) { - let file; - if (source.startsWith(path.sep)) { - file = source; - } else { - file = path.join(path.dirname(importer), source); - } - if (file.startsWith(basedir)) { - const searchPath = file.substr(basedir.length); - const replacingPath = mapping.get(searchPath); - if (replacingPath) { - console.info(`replacing ${searchPath} with ${replacingPath}`); - return path.join(basedir, replacingPath); - } - } - return null; - } - }; -} - -build(parameters).catch(err => console.error(err)); diff --git a/scripts/common.mjs b/scripts/common.mjs deleted file mode 100644 index e135022a..00000000 --- a/scripts/common.mjs +++ /dev/null @@ -1,12 +0,0 @@ -import fsRoot from "fs"; -const fs = fsRoot.promises; - -export async function removeDirIfExists(targetDir) { - try { - await fs.rmdir(targetDir, {recursive: true}); - } catch (err) { - if (err.code !== "ENOENT") { - throw err; - } - } -} diff --git a/scripts/deploy.sh b/scripts/deploy.sh deleted file mode 100755 index 8027b1d8..00000000 --- a/scripts/deploy.sh +++ /dev/null @@ -1,6 +0,0 @@ -git checkout gh-pages -cp -R target/* . -git add $(find . -maxdepth 1 -type f) -git add themes -git commit -m "update hydrogen" -git checkout master diff --git a/scripts/serve-local.js b/scripts/serve-local.js deleted file mode 100644 index ae07d180..00000000 --- a/scripts/serve-local.js +++ /dev/null @@ -1,43 +0,0 @@ -/* -Copyright 2020 Bruno Windels - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -const finalhandler = require('finalhandler') -const http = require('http') -const serveStatic = require('serve-static') -const path = require('path'); - -// Serve up parent directory with cache disabled -const serve = serveStatic( - path.resolve(__dirname, "../"), - { - etag: false, - setHeaders: res => { - res.setHeader("Pragma", "no-cache"); - res.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); - res.setHeader("Expires", "Wed, 21 Oct 2015 07:28:00 GMT"); - }, - index: ['index.html', 'index.htm'] - } -); - -// Create server -const server = http.createServer(function onRequest (req, res) { - console.log(req.method, req.url); - serve(req, res, finalhandler(req, res)) -}); - -// Listen -server.listen(3000); diff --git a/snowpack.config.js b/snowpack.config.js deleted file mode 100644 index 68f33242..00000000 --- a/snowpack.config.js +++ /dev/null @@ -1,37 +0,0 @@ -// Snowpack Configuration File -// See all supported options: https://www.snowpack.dev/reference/configuration - -/** @type {import("snowpack").SnowpackUserConfig } */ -module.exports = { - mount: { - // More specific paths before less specific paths (if they overlap) - "src/platform/web/docroot": "/", - "src": "/src", - "lib": {url: "/lib", static: true }, - "assets": "/assets", - /* ... */ - }, - exclude: [ - /* Avoid scanning scripts which use dev-dependencies and pull in babel, rollup, etc. */ - '**/node_modules/**/*', - '**/scripts/**', - '**/target/**', - '**/prototypes/**', - '**/src/platform/web/legacy-polyfill.js', - '**/src/platform/web/worker/polyfill.js' - ], - plugins: [ - /* ... */ - ], - packageOptions: { - /* ... */ - }, - devOptions: { - open: "none", - hmr: false, - /* ... */ - }, - buildOptions: { - /* ... */ - }, -}; diff --git a/yarn.lock b/yarn.lock index 10a18ec8..87d39fac 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9,350 +9,11 @@ dependencies: "@babel/highlight" "^7.10.4" -"@babel/code-frame@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" - integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== - dependencies: - "@babel/highlight" "^7.10.4" - -"@babel/code-frame@^7.14.5": - version "7.15.8" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.15.8.tgz#45990c47adadb00c03677baa89221f7cc23d2503" - integrity sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg== - dependencies: - "@babel/highlight" "^7.14.5" - -"@babel/compat-data@^7.10.4", "@babel/compat-data@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.11.0.tgz#e9f73efe09af1355b723a7f39b11bad637d7c99c" - integrity sha512-TPSvJfv73ng0pfnEOh17bYMPQbI95+nGWc71Ss4vZdRBHTDqmM9Z8ZV4rYz8Ks7sfzc95n30k6ODIq5UGnXcYQ== - dependencies: - browserslist "^4.12.0" - invariant "^2.2.4" - semver "^5.5.0" - -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.15.0": - version "7.15.0" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.15.0.tgz#2dbaf8b85334796cafbb0f5793a90a2fc010b176" - integrity sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA== - -"@babel/core@^7.11.1": - version "7.11.1" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.11.1.tgz#2c55b604e73a40dc21b0e52650b11c65cf276643" - integrity sha512-XqF7F6FWQdKGGWAzGELL+aCO1p+lRY5Tj5/tbT3St1G8NaH70jhhDIKknIZaDans0OQBG5wRAldROLHSt44BgQ== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.11.0" - "@babel/helper-module-transforms" "^7.11.0" - "@babel/helpers" "^7.10.4" - "@babel/parser" "^7.11.1" - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.11.0" - "@babel/types" "^7.11.0" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.1" - json5 "^2.1.2" - lodash "^4.17.19" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/generator@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.0.tgz#4b90c78d8c12825024568cbe83ee6c9af193585c" - integrity sha512-fEm3Uzw7Mc9Xi//qU20cBKatTfs2aOtKqmvy/Vm7RkJEGFQ4xc9myCfbXxqK//ZS8MR/ciOHw6meGASJuKmDfQ== - dependencies: - "@babel/types" "^7.11.0" - jsesc "^2.5.1" - source-map "^0.5.0" - -"@babel/generator@^7.15.4": - version "7.15.8" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.15.8.tgz#fa56be6b596952ceb231048cf84ee499a19c0cd1" - integrity sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g== - dependencies: - "@babel/types" "^7.15.6" - jsesc "^2.5.1" - source-map "^0.5.0" - -"@babel/helper-annotate-as-pure@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3" - integrity sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA== - dependencies: - "@babel/types" "^7.10.4" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz#bb0b75f31bf98cbf9ff143c1ae578b87274ae1a3" - integrity sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg== - dependencies: - "@babel/helper-explode-assignable-expression" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/helper-compilation-targets@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz#804ae8e3f04376607cc791b9d47d540276332bd2" - integrity sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ== - dependencies: - "@babel/compat-data" "^7.10.4" - browserslist "^4.12.0" - invariant "^2.2.4" - levenary "^1.1.1" - semver "^5.5.0" - -"@babel/helper-compilation-targets@^7.13.0": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz#cf6d94f30fbefc139123e27dd6b02f65aeedb7b9" - integrity sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ== - dependencies: - "@babel/compat-data" "^7.15.0" - "@babel/helper-validator-option" "^7.14.5" - browserslist "^4.16.6" - semver "^6.3.0" - -"@babel/helper-create-class-features-plugin@^7.10.4": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz#9f61446ba80e8240b0a5c85c6fdac8459d6f259d" - integrity sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A== - dependencies: - "@babel/helper-function-name" "^7.10.4" - "@babel/helper-member-expression-to-functions" "^7.10.5" - "@babel/helper-optimise-call-expression" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-replace-supers" "^7.10.4" - "@babel/helper-split-export-declaration" "^7.10.4" - -"@babel/helper-create-regexp-features-plugin@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz#fdd60d88524659a0b6959c0579925e425714f3b8" - integrity sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g== - dependencies: - "@babel/helper-annotate-as-pure" "^7.10.4" - "@babel/helper-regex" "^7.10.4" - regexpu-core "^4.7.0" - -"@babel/helper-define-map@^7.10.4": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz#b53c10db78a640800152692b13393147acb9bb30" - integrity sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ== - dependencies: - "@babel/helper-function-name" "^7.10.4" - "@babel/types" "^7.10.5" - lodash "^4.17.19" - -"@babel/helper-define-polyfill-provider@^0.2.2": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz#0525edec5094653a282688d34d846e4c75e9c0b6" - integrity sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew== - dependencies: - "@babel/helper-compilation-targets" "^7.13.0" - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/traverse" "^7.13.0" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - semver "^6.1.2" - -"@babel/helper-explode-assignable-expression@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.4.tgz#40a1cd917bff1288f699a94a75b37a1a2dbd8c7c" - integrity sha512-4K71RyRQNPRrR85sr5QY4X3VwG4wtVoXZB9+L3r1Gp38DhELyHCtovqydRi7c1Ovb17eRGiQ/FD5s8JdU0Uy5A== - dependencies: - "@babel/traverse" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/helper-function-name@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" - integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== - dependencies: - "@babel/helper-get-function-arity" "^7.10.4" - "@babel/template" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/helper-function-name@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz#845744dafc4381a4a5fb6afa6c3d36f98a787ebc" - integrity sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw== - dependencies: - "@babel/helper-get-function-arity" "^7.15.4" - "@babel/template" "^7.15.4" - "@babel/types" "^7.15.4" - -"@babel/helper-get-function-arity@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" - integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A== - dependencies: - "@babel/types" "^7.10.4" - -"@babel/helper-get-function-arity@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz#098818934a137fce78b536a3e015864be1e2879b" - integrity sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA== - dependencies: - "@babel/types" "^7.15.4" - -"@babel/helper-hoist-variables@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz#d49b001d1d5a68ca5e6604dda01a6297f7c9381e" - integrity sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA== - dependencies: - "@babel/types" "^7.10.4" - -"@babel/helper-hoist-variables@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz#09993a3259c0e918f99d104261dfdfc033f178df" - integrity sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA== - dependencies: - "@babel/types" "^7.15.4" - -"@babel/helper-member-expression-to-functions@^7.10.4", "@babel/helper-member-expression-to-functions@^7.10.5": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz#ae69c83d84ee82f4b42f96e2a09410935a8f26df" - integrity sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q== - dependencies: - "@babel/types" "^7.11.0" - -"@babel/helper-module-imports@^7.10.4": - 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== - dependencies: - "@babel/types" "^7.16.0" - -"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz#e18007d230632dea19b47853b984476e7b4e103f" - integrity sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA== - dependencies: - "@babel/types" "^7.15.4" - -"@babel/helper-module-transforms@^7.10.4", "@babel/helper-module-transforms@^7.10.5", "@babel/helper-module-transforms@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz#b16f250229e47211abdd84b34b64737c2ab2d359" - integrity sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg== - dependencies: - "@babel/helper-module-imports" "^7.10.4" - "@babel/helper-replace-supers" "^7.10.4" - "@babel/helper-simple-access" "^7.10.4" - "@babel/helper-split-export-declaration" "^7.11.0" - "@babel/template" "^7.10.4" - "@babel/types" "^7.11.0" - lodash "^4.17.19" - -"@babel/helper-optimise-call-expression@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673" - integrity sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg== - dependencies: - "@babel/types" "^7.10.4" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" - integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== - -"@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5": - 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-regex@^7.10.4": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.5.tgz#32dfbb79899073c415557053a19bd055aae50ae0" - integrity sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg== - dependencies: - lodash "^4.17.19" - -"@babel/helper-remap-async-to-generator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.4.tgz#fce8bea4e9690bbe923056ded21e54b4e8b68ed5" - integrity sha512-86Lsr6NNw3qTNl+TBcF1oRZMaVzJtbWTyTko+CQL/tvNvcGYEFKbLXDPxtW0HKk3McNOk4KzY55itGWCAGK5tg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.10.4" - "@babel/helper-wrap-function" "^7.10.4" - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/helper-replace-supers@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz#d585cd9388ea06e6031e4cd44b6713cbead9e6cf" - integrity sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.10.4" - "@babel/helper-optimise-call-expression" "^7.10.4" - "@babel/traverse" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/helper-simple-access@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz#0f5ccda2945277a2a7a2d3a821e15395edcf3461" - integrity sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw== - dependencies: - "@babel/template" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/helper-skip-transparent-expression-wrappers@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.11.0.tgz#eec162f112c2f58d3af0af125e3bb57665146729" - integrity sha512-0XIdiQln4Elglgjbwo9wuJpL/K7AGCY26kmEt0+pRP0TAj4jjyNq1MjoRvikrTVqKcx4Gysxt4cXvVFXP/JO2Q== - dependencies: - "@babel/types" "^7.11.0" - -"@babel/helper-split-export-declaration@^7.10.4", "@babel/helper-split-export-declaration@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f" - integrity sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg== - dependencies: - "@babel/types" "^7.11.0" - -"@babel/helper-split-export-declaration@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz#aecab92dcdbef6a10aa3b62ab204b085f776e257" - integrity sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw== - dependencies: - "@babel/types" "^7.15.4" - -"@babel/helper-validator-identifier@^7.10.4", "@babel/helper-validator-identifier@^7.14.9", "@babel/helper-validator-identifier@^7.15.7": +"@babel/helper-validator-identifier@^7.10.4": 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.14.5": - version "7.14.9" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz#6654d171b2024f6d8ee151bf2509699919131d48" - integrity sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g== - -"@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-wrap-function@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz#8a6f701eab0ff39f765b5a1cfef409990e624b87" - integrity sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug== - dependencies: - "@babel/helper-function-name" "^7.10.4" - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/helpers@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.4.tgz#2abeb0d721aff7c0a97376b9e1f6f65d7a475044" - integrity sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA== - dependencies: - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.10.4" - "@babel/types" "^7.10.4" - "@babel/highlight@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" @@ -362,649 +23,6 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/highlight@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" - integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== - dependencies: - "@babel/helper-validator-identifier" "^7.14.5" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/parser@^7.10.4", "@babel/parser@^7.11.0", "@babel/parser@^7.11.1": - version "7.11.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.3.tgz#9e1eae46738bcd08e23e867bab43e7b95299a8f9" - integrity sha512-REo8xv7+sDxkKvoxEywIdsNFiZLybwdI7hcT5uEPyQrSMB4YQ973BfC9OOrD/81MaIjh6UxdulIQXkjmiH3PcA== - -"@babel/parser@^7.15.4": - version "7.15.8" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.8.tgz#7bacdcbe71bdc3ff936d510c15dcea7cf0b99016" - integrity sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA== - -"@babel/plugin-proposal-async-generator-functions@^7.10.4": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz#3491cabf2f7c179ab820606cec27fed15e0e8558" - integrity sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-remap-async-to-generator" "^7.10.4" - "@babel/plugin-syntax-async-generators" "^7.8.0" - -"@babel/plugin-proposal-class-properties@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz#a33bf632da390a59c7a8c570045d1115cd778807" - integrity sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-proposal-dynamic-import@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz#ba57a26cb98b37741e9d5bca1b8b0ddf8291f17e" - integrity sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-dynamic-import" "^7.8.0" - -"@babel/plugin-proposal-export-namespace-from@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.10.4.tgz#570d883b91031637b3e2958eea3c438e62c05f54" - integrity sha512-aNdf0LY6/3WXkhh0Fdb6Zk9j1NMD8ovj3F6r0+3j837Pn1S1PdNtcwJ5EG9WkVPNHPxyJDaxMaAOVq4eki0qbg== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-proposal-json-strings@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz#593e59c63528160233bd321b1aebe0820c2341db" - integrity sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-json-strings" "^7.8.0" - -"@babel/plugin-proposal-logical-assignment-operators@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.11.0.tgz#9f80e482c03083c87125dee10026b58527ea20c8" - integrity sha512-/f8p4z+Auz0Uaf+i8Ekf1iM7wUNLcViFUGiPxKeXvxTSl63B875YPiVdUDdem7hREcI0E0kSpEhS8tF5RphK7Q== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - -"@babel/plugin-proposal-nullish-coalescing-operator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz#02a7e961fc32e6d5b2db0649e01bf80ddee7e04a" - integrity sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" - -"@babel/plugin-proposal-numeric-separator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz#ce1590ff0a65ad12970a609d78855e9a4c1aef06" - integrity sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - -"@babel/plugin-proposal-object-rest-spread@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz#bd81f95a1f746760ea43b6c2d3d62b11790ad0af" - integrity sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.0" - "@babel/plugin-transform-parameters" "^7.10.4" - -"@babel/plugin-proposal-optional-catch-binding@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz#31c938309d24a78a49d68fdabffaa863758554dd" - integrity sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" - -"@babel/plugin-proposal-optional-chaining@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.11.0.tgz#de5866d0646f6afdaab8a566382fe3a221755076" - integrity sha512-v9fZIu3Y8562RRwhm1BbMRxtqZNFmFA2EG+pT2diuU8PT3H6T/KXoZ54KgYisfOFZHV6PfvAiBIZ9Rcz+/JCxA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-skip-transparent-expression-wrappers" "^7.11.0" - "@babel/plugin-syntax-optional-chaining" "^7.8.0" - -"@babel/plugin-proposal-private-methods@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz#b160d972b8fdba5c7d111a145fc8c421fc2a6909" - integrity sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-proposal-unicode-property-regex@^7.10.4", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz#4483cda53041ce3413b7fe2f00022665ddfaa75d" - integrity sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-async-generators@^7.8.0": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz#6644e6a0baa55a61f9e3231f6c9eeb6ee46c124c" - integrity sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-dynamic-import@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-json-strings@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-top-level-await@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz#4bbeb8917b54fcf768364e0a81f560e33a3ef57d" - integrity sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-arrow-functions@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz#e22960d77e697c74f41c501d44d73dbf8a6a64cd" - integrity sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-async-to-generator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz#41a5017e49eb6f3cda9392a51eef29405b245a37" - integrity sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ== - dependencies: - "@babel/helper-module-imports" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-remap-async-to-generator" "^7.10.4" - -"@babel/plugin-transform-block-scoped-functions@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz#1afa595744f75e43a91af73b0d998ecfe4ebc2e8" - integrity sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-block-scoping@^7.10.4": - version "7.11.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.11.1.tgz#5b7efe98852bef8d652c0b28144cd93a9e4b5215" - integrity sha512-00dYeDE0EVEHuuM+26+0w/SCL0BH2Qy7LwHuI4Hi4MH5gkC8/AqMN5uWFJIsoXZrAphiMm1iXzBw6L2T+eA0ew== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-classes@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz#405136af2b3e218bc4a1926228bc917ab1a0adc7" - integrity sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.10.4" - "@babel/helper-define-map" "^7.10.4" - "@babel/helper-function-name" "^7.10.4" - "@babel/helper-optimise-call-expression" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-replace-supers" "^7.10.4" - "@babel/helper-split-export-declaration" "^7.10.4" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz#9ded83a816e82ded28d52d4b4ecbdd810cdfc0eb" - integrity sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-destructuring@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz#70ddd2b3d1bea83d01509e9bb25ddb3a74fc85e5" - integrity sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-dotall-regex@^7.10.4", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz#469c2062105c1eb6a040eaf4fac4b488078395ee" - integrity sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-duplicate-keys@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz#697e50c9fee14380fe843d1f306b295617431e47" - integrity sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-exponentiation-operator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz#5ae338c57f8cf4001bdb35607ae66b92d665af2e" - integrity sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-for-of@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz#c08892e8819d3a5db29031b115af511dbbfebae9" - integrity sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-function-name@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz#6a467880e0fc9638514ba369111811ddbe2644b7" - integrity sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg== - dependencies: - "@babel/helper-function-name" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-literals@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz#9f42ba0841100a135f22712d0e391c462f571f3c" - integrity sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-member-expression-literals@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz#b1ec44fcf195afcb8db2c62cd8e551c881baf8b7" - integrity sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-modules-amd@^7.10.4": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz#1b9cddaf05d9e88b3aad339cb3e445c4f020a9b1" - integrity sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw== - dependencies: - "@babel/helper-module-transforms" "^7.10.5" - "@babel/helper-plugin-utils" "^7.10.4" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-commonjs@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz#66667c3eeda1ebf7896d41f1f16b17105a2fbca0" - integrity sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w== - dependencies: - "@babel/helper-module-transforms" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-simple-access" "^7.10.4" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-systemjs@^7.10.4": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz#6270099c854066681bae9e05f87e1b9cadbe8c85" - integrity sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw== - dependencies: - "@babel/helper-hoist-variables" "^7.10.4" - "@babel/helper-module-transforms" "^7.10.5" - "@babel/helper-plugin-utils" "^7.10.4" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-umd@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz#9a8481fe81b824654b3a0b65da3df89f3d21839e" - integrity sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA== - dependencies: - "@babel/helper-module-transforms" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz#78b4d978810b6f3bcf03f9e318f2fc0ed41aecb6" - integrity sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.10.4" - -"@babel/plugin-transform-new-target@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz#9097d753cb7b024cb7381a3b2e52e9513a9c6888" - integrity sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-object-super@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz#d7146c4d139433e7a6526f888c667e314a093894" - integrity sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-replace-supers" "^7.10.4" - -"@babel/plugin-transform-parameters@^7.10.4": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz#59d339d58d0b1950435f4043e74e2510005e2c4a" - integrity sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw== - dependencies: - "@babel/helper-get-function-arity" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-property-literals@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz#f6fe54b6590352298785b83edd815d214c42e3c0" - integrity sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-regenerator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz#2015e59d839074e76838de2159db421966fd8b63" - integrity sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw== - dependencies: - regenerator-transform "^0.14.2" - -"@babel/plugin-transform-reserved-words@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz#8f2682bcdcef9ed327e1b0861585d7013f8a54dd" - integrity sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-runtime@^7.15.8": - version "7.15.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.15.8.tgz#9d15b1e94e1c7f6344f65a8d573597d93c6cd886" - integrity sha512-+6zsde91jMzzvkzuEA3k63zCw+tm/GvuuabkpisgbDMTPQsIMHllE3XczJFFtEHLjjhKQFZmGQVRdELetlWpVw== - dependencies: - "@babel/helper-module-imports" "^7.15.4" - "@babel/helper-plugin-utils" "^7.14.5" - babel-plugin-polyfill-corejs2 "^0.2.2" - babel-plugin-polyfill-corejs3 "^0.2.5" - babel-plugin-polyfill-regenerator "^0.2.2" - semver "^6.3.0" - -"@babel/plugin-transform-shorthand-properties@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz#9fd25ec5cdd555bb7f473e5e6ee1c971eede4dd6" - integrity sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-spread@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.11.0.tgz#fa84d300f5e4f57752fe41a6d1b3c554f13f17cc" - integrity sha512-UwQYGOqIdQJe4aWNyS7noqAnN2VbaczPLiEtln+zPowRNlD+79w3oi2TWfYe0eZgd+gjZCbsydN7lzWysDt+gw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-skip-transparent-expression-wrappers" "^7.11.0" - -"@babel/plugin-transform-sticky-regex@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz#8f3889ee8657581130a29d9cc91d7c73b7c4a28d" - integrity sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-regex" "^7.10.4" - -"@babel/plugin-transform-template-literals@^7.10.4": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz#78bc5d626a6642db3312d9d0f001f5e7639fde8c" - integrity sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-typeof-symbol@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz#9509f1a7eec31c4edbffe137c16cc33ff0bc5bfc" - integrity sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-unicode-escapes@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz#feae523391c7651ddac115dae0a9d06857892007" - integrity sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-unicode-regex@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz#e56d71f9282fac6db09c82742055576d5e6d80a8" - integrity sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/preset-env@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.11.0.tgz#860ee38f2ce17ad60480c2021ba9689393efb796" - integrity sha512-2u1/k7rG/gTh02dylX2kL3S0IJNF+J6bfDSp4DI2Ma8QN6Y9x9pmAax59fsCk6QUQG0yqH47yJWA+u1I1LccAg== - dependencies: - "@babel/compat-data" "^7.11.0" - "@babel/helper-compilation-targets" "^7.10.4" - "@babel/helper-module-imports" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-proposal-async-generator-functions" "^7.10.4" - "@babel/plugin-proposal-class-properties" "^7.10.4" - "@babel/plugin-proposal-dynamic-import" "^7.10.4" - "@babel/plugin-proposal-export-namespace-from" "^7.10.4" - "@babel/plugin-proposal-json-strings" "^7.10.4" - "@babel/plugin-proposal-logical-assignment-operators" "^7.11.0" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.4" - "@babel/plugin-proposal-numeric-separator" "^7.10.4" - "@babel/plugin-proposal-object-rest-spread" "^7.11.0" - "@babel/plugin-proposal-optional-catch-binding" "^7.10.4" - "@babel/plugin-proposal-optional-chaining" "^7.11.0" - "@babel/plugin-proposal-private-methods" "^7.10.4" - "@babel/plugin-proposal-unicode-property-regex" "^7.10.4" - "@babel/plugin-syntax-async-generators" "^7.8.0" - "@babel/plugin-syntax-class-properties" "^7.10.4" - "@babel/plugin-syntax-dynamic-import" "^7.8.0" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.0" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" - "@babel/plugin-syntax-optional-chaining" "^7.8.0" - "@babel/plugin-syntax-top-level-await" "^7.10.4" - "@babel/plugin-transform-arrow-functions" "^7.10.4" - "@babel/plugin-transform-async-to-generator" "^7.10.4" - "@babel/plugin-transform-block-scoped-functions" "^7.10.4" - "@babel/plugin-transform-block-scoping" "^7.10.4" - "@babel/plugin-transform-classes" "^7.10.4" - "@babel/plugin-transform-computed-properties" "^7.10.4" - "@babel/plugin-transform-destructuring" "^7.10.4" - "@babel/plugin-transform-dotall-regex" "^7.10.4" - "@babel/plugin-transform-duplicate-keys" "^7.10.4" - "@babel/plugin-transform-exponentiation-operator" "^7.10.4" - "@babel/plugin-transform-for-of" "^7.10.4" - "@babel/plugin-transform-function-name" "^7.10.4" - "@babel/plugin-transform-literals" "^7.10.4" - "@babel/plugin-transform-member-expression-literals" "^7.10.4" - "@babel/plugin-transform-modules-amd" "^7.10.4" - "@babel/plugin-transform-modules-commonjs" "^7.10.4" - "@babel/plugin-transform-modules-systemjs" "^7.10.4" - "@babel/plugin-transform-modules-umd" "^7.10.4" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.10.4" - "@babel/plugin-transform-new-target" "^7.10.4" - "@babel/plugin-transform-object-super" "^7.10.4" - "@babel/plugin-transform-parameters" "^7.10.4" - "@babel/plugin-transform-property-literals" "^7.10.4" - "@babel/plugin-transform-regenerator" "^7.10.4" - "@babel/plugin-transform-reserved-words" "^7.10.4" - "@babel/plugin-transform-shorthand-properties" "^7.10.4" - "@babel/plugin-transform-spread" "^7.11.0" - "@babel/plugin-transform-sticky-regex" "^7.10.4" - "@babel/plugin-transform-template-literals" "^7.10.4" - "@babel/plugin-transform-typeof-symbol" "^7.10.4" - "@babel/plugin-transform-unicode-escapes" "^7.10.4" - "@babel/plugin-transform-unicode-regex" "^7.10.4" - "@babel/preset-modules" "^0.1.3" - "@babel/types" "^7.11.0" - browserslist "^4.12.0" - core-js-compat "^3.6.2" - invariant "^2.2.2" - levenary "^1.1.1" - semver "^5.5.0" - -"@babel/preset-modules@^0.1.3": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.3.tgz#13242b53b5ef8c883c3cf7dddd55b36ce80fbc72" - integrity sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" - "@babel/plugin-transform-dotall-regex" "^7.4.4" - "@babel/types" "^7.4.4" - esutils "^2.0.2" - -"@babel/runtime@^7.8.4": - version "7.11.2" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736" - integrity sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/standalone@^7.15.7", "@babel/standalone@^7.15.8": - version "7.15.8" - resolved "https://registry.yarnpkg.com/@babel/standalone/-/standalone-7.15.8.tgz#3cb40b81892a702968a3e0bba2bdd1115f034876" - integrity sha512-EF2uQLeuwflnPRGetWH2Z400ITOSK7YbkXIKxY91EWSiOJ8xsbupT3sx3sFRwVyQgjsHSILFDzLcSo/rGspLhQ== - -"@babel/template@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" - integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/parser" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/template@^7.15.4": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.15.4.tgz#51898d35dcf3faa670c4ee6afcfd517ee139f194" - integrity sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg== - dependencies: - "@babel/code-frame" "^7.14.5" - "@babel/parser" "^7.15.4" - "@babel/types" "^7.15.4" - -"@babel/traverse@^7.10.4", "@babel/traverse@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.11.0.tgz#9b996ce1b98f53f7c3e4175115605d56ed07dd24" - integrity sha512-ZB2V+LskoWKNpMq6E5UUCrjtDUh5IOTAyIl0dTjIEoXum/iKWkoIEKIRDnUucO6f+2FzNkE0oD4RLKoPIufDtg== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.11.0" - "@babel/helper-function-name" "^7.10.4" - "@babel/helper-split-export-declaration" "^7.11.0" - "@babel/parser" "^7.11.0" - "@babel/types" "^7.11.0" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.19" - -"@babel/traverse@^7.13.0": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.15.4.tgz#ff8510367a144bfbff552d9e18e28f3e2889c22d" - integrity sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA== - dependencies: - "@babel/code-frame" "^7.14.5" - "@babel/generator" "^7.15.4" - "@babel/helper-function-name" "^7.15.4" - "@babel/helper-hoist-variables" "^7.15.4" - "@babel/helper-split-export-declaration" "^7.15.4" - "@babel/parser" "^7.15.4" - "@babel/types" "^7.15.4" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/types@^7.10.4", "@babel/types@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.0.tgz#db3b313804f96aadd0b776c4823e127ad67289ba" - integrity sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg== - dependencies: - "@babel/helper-validator-identifier" "^7.15.7" - to-fast-properties "^2.0.0" - -"@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.4.4": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.0.tgz#2ae6bf1ba9ae8c3c43824e5861269871b206e90d" - integrity sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA== - dependencies: - "@babel/helper-validator-identifier" "^7.10.4" - lodash "^4.17.19" - to-fast-properties "^2.0.0" - -"@babel/types@^7.15.4", "@babel/types@^7.15.6": - version "7.15.6" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.15.6.tgz#99abdc48218b2881c058dd0a7ab05b99c9be758f" - integrity sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig== - dependencies: - "@babel/helper-validator-identifier" "^7.14.9" - to-fast-properties "^2.0.0" - "@eslint/eslintrc@^0.4.3": version "0.4.3" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" @@ -1059,103 +77,11 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@rollup/plugin-babel@^5.1.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.3.0.tgz#9cb1c5146ddd6a4968ad96f209c50c62f92f9879" - integrity sha512-9uIC8HZOnVLrLHxayq/PTzw+uS25E14KPUBh5ktF+18Mjo5yK0ToMMx6epY0uEgkjwJw0aBW4x2horYXh8juWw== - dependencies: - "@babel/helper-module-imports" "^7.10.4" - "@rollup/pluginutils" "^3.1.0" - -"@rollup/plugin-commonjs@^15.0.0": - version "15.0.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-15.0.0.tgz#690d15a9d54ba829db93555bff9b98ff34e08574" - integrity sha512-8uAdikHqVyrT32w1zB9VhW6uGwGjhKgnDNP4pQJsjdnyF4FgCj6/bmv24c7v2CuKhq32CcyCwRzMPEElaKkn0w== - dependencies: - "@rollup/pluginutils" "^3.1.0" - commondir "^1.0.1" - estree-walker "^2.0.1" - glob "^7.1.6" - is-reference "^1.2.1" - magic-string "^0.25.7" - resolve "^1.17.0" - -"@rollup/plugin-json@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-json/-/plugin-json-4.1.0.tgz#54e09867ae6963c593844d8bd7a9c718294496f3" - integrity sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw== - dependencies: - "@rollup/pluginutils" "^3.0.8" - -"@rollup/plugin-multi-entry@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-multi-entry/-/plugin-multi-entry-4.0.0.tgz#8e105f16ec1bb26639eb3302c8db5665f44b9939" - integrity sha512-1Sw86rwFxrNS7ECY3iSZ7T940xKnruNGpmQDgSDVTp+VTa1g5cPXNzBgp+IoOer41CiVeGFLwYwvicVoJLHEDQ== - dependencies: - "@rollup/plugin-virtual" "^2.0.3" - matched "^5.0.0" - -"@rollup/plugin-node-resolve@^9.0.0": - version "9.0.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-9.0.0.tgz#39bd0034ce9126b39c1699695f440b4b7d2b62e6" - integrity sha512-gPz+utFHLRrd41WMP13Jq5mqqzHL3OXrfj3/MkSyB6UBIcuNt9j60GCbarzMzdf1VHFpOxfQh/ez7wyadLMqkg== - dependencies: - "@rollup/pluginutils" "^3.1.0" - "@types/resolve" "1.17.1" - builtin-modules "^3.1.0" - deepmerge "^4.2.2" - is-module "^1.0.0" - resolve "^1.17.0" - -"@rollup/plugin-virtual@^2.0.3": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@rollup/plugin-virtual/-/plugin-virtual-2.0.3.tgz#0afc88d75c1e1378ab290b8e9898d4edb5be0d74" - integrity sha512-pw6ziJcyjZtntQ//bkad9qXaBx665SgEL8C8KI5wO8G5iU5MPxvdWrQyVaAvjojGm9tJoS8M9Z/EEepbqieYmw== - -"@rollup/pluginutils@^3.0.8", "@rollup/pluginutils@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" - integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== - dependencies: - "@types/estree" "0.0.39" - estree-walker "^1.0.1" - picomatch "^2.2.2" - -"@rollup/pluginutils@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-4.1.1.tgz#1d4da86dd4eded15656a57d933fda2b9a08d47ec" - integrity sha512-clDjivHqWGXi7u+0d2r2sBi4Ie6VLEAzWMIkvJLnDmxoOhBYOTfzGbOQBA32THHm11/LiJbd01tJUpJsbshSWQ== - dependencies: - estree-walker "^2.0.1" - picomatch "^2.2.2" - -"@types/estree@*": - version "0.0.45" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.45.tgz#e9387572998e5ecdac221950dab3e8c3b16af884" - integrity sha512-jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g== - -"@types/estree@0.0.39": - version "0.0.39" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" - integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== - "@types/json-schema@^7.0.7": version "7.0.9" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== -"@types/node@*": - version "14.10.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.10.3.tgz#5ae1f119c96643fc9b19b2d1a83bfa2ec3dbb7ea" - integrity sha512-zdN0hor7TLkjAdKTnYW+Y22oIhUUpil5ZD1V1OFq0CR0CLKw+NdR6dkziTfkWRLo6sKzisayoj/GNpNbe4LY9Q== - -"@types/resolve@1.17.1": - version "1.17.1" - resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" - integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== - dependencies: - "@types/node" "*" - "@typescript-eslint/eslint-plugin@^4.29.2": version "4.29.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.29.2.tgz#f54dc0a32b8f61c6024ab8755da05363b733838d" @@ -1225,17 +151,6 @@ "@typescript-eslint/types" "4.29.2" eslint-visitor-keys "^2.0.0" -"@vitejs/plugin-legacy@^1.6.1": - version "1.6.1" - resolved "https://registry.yarnpkg.com/@vitejs/plugin-legacy/-/plugin-legacy-1.6.1.tgz#45f0e006de2d25758151b098b8dcb912c62a95dc" - integrity sha512-isBi2ti+AlCZUpfA1P6L8gseltBy/qi6Rsi92aDzeL2elpwXgN4Hv/xLS2UUSSj9F0mFmxXCYPWlBPaJnlYamQ== - dependencies: - "@babel/standalone" "^7.15.7" - core-js "^3.18.1" - magic-string "^0.25.7" - regenerator-runtime "^0.13.9" - systemjs "^6.10.3" - acorn-jsx@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" @@ -1317,49 +232,6 @@ astral-regex@^2.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== -autoprefixer@^10.4.0: - version "10.4.0" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.0.tgz#c3577eb32a1079a440ec253e404eaf1eb21388c8" - integrity sha512-7FdJ1ONtwzV1G43GDD0kpVMn/qbiNqyOPMFTX5nRffI+7vgWoFEc6DcXOxHJxrWNDXrZh18eDsZjvZGUljSRGA== - dependencies: - browserslist "^4.17.5" - caniuse-lite "^1.0.30001272" - fraction.js "^4.1.1" - normalize-range "^0.1.2" - picocolors "^1.0.0" - postcss-value-parser "^4.1.0" - -babel-plugin-dynamic-import-node@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" - integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== - dependencies: - object.assign "^4.1.0" - -babel-plugin-polyfill-corejs2@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz#e9124785e6fd94f94b618a7954e5693053bf5327" - integrity sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ== - dependencies: - "@babel/compat-data" "^7.13.11" - "@babel/helper-define-polyfill-provider" "^0.2.2" - semver "^6.1.1" - -babel-plugin-polyfill-corejs3@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.5.tgz#2779846a16a1652244ae268b1e906ada107faf92" - integrity sha512-ninF5MQNwAX9Z7c9ED+H2pGt1mXdP4TqzlHKyPIYmJIYz0N+++uwdM7RnJukklhzJ54Q84vA4ZJkgs7lu5vqcw== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.2.2" - core-js-compat "^3.16.2" - -babel-plugin-polyfill-regenerator@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz#b310c8d642acada348c1fa3b3e6ce0e851bee077" - integrity sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.2.2" - balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" @@ -1382,7 +254,7 @@ base64-arraybuffer@^0.2.0: resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.2.0.tgz#4b944fac0191aa5907afe2d8c999ccc57ce80f45" integrity sha512-7emyCsu1/xiBXgQZrscw/8KPRT44I4Yq9Pe6EGs3aPRTsWuggML1/1DTuZUuIaJPIm1FTDUVXl4x/yW8s0kQDQ== -boolbase@^1.0.0, boolbase@~1.0.0: +boolbase@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= @@ -1402,49 +274,6 @@ braces@^3.0.1: dependencies: fill-range "^7.0.1" -browserslist@^4.12.0, browserslist@^4.8.5: - version "4.14.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.0.tgz#2908951abfe4ec98737b72f34c3bcedc8d43b000" - integrity sha512-pUsXKAF2lVwhmtpeA3LJrZ76jXuusrNyhduuQs7CDFf9foT4Y38aQOserd2lMe5DSSrjf3fx34oHwryuvxAUgQ== - dependencies: - caniuse-lite "^1.0.30001111" - electron-to-chromium "^1.3.523" - escalade "^3.0.2" - node-releases "^1.1.60" - -browserslist@^4.16.6: - version "4.16.6" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2" - integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ== - dependencies: - caniuse-lite "^1.0.30001219" - colorette "^1.2.2" - electron-to-chromium "^1.3.723" - escalade "^3.1.1" - node-releases "^1.1.71" - -browserslist@^4.17.3: - version "4.17.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.17.3.tgz#2844cd6eebe14d12384b0122d217550160d2d624" - integrity sha512-59IqHJV5VGdcJZ+GZ2hU5n4Kv3YiASzW6Xk5g9tf5a/MAzGeFwgGWU39fVzNIOVcgB3+Gp+kiQu0HEfTVU/3VQ== - dependencies: - caniuse-lite "^1.0.30001264" - electron-to-chromium "^1.3.857" - escalade "^3.1.1" - node-releases "^1.1.77" - picocolors "^0.2.1" - -browserslist@^4.17.5: - version "4.18.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.18.1.tgz#60d3920f25b6860eb917c6c7b185576f4d8b017f" - integrity sha512-8ScCzdpPwR2wQh8IT82CA2VgDwjHyqMovPBZSNH54+tm4Jk2pCuv90gmAdH6J84OCRWi0b4gMe6O6XPXuJnjgQ== - dependencies: - caniuse-lite "^1.0.30001280" - electron-to-chromium "^1.3.896" - escalade "^3.1.1" - node-releases "^2.0.1" - picocolors "^1.0.0" - bs58@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" @@ -1452,26 +281,11 @@ bs58@^4.0.1: dependencies: base-x "^3.0.2" -builtin-modules@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.1.0.tgz#aad97c15131eb76b65b50ef208e7584cd76a7484" - integrity sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw== - callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -caniuse-lite@^1.0.30001111, caniuse-lite@^1.0.30001219, caniuse-lite@^1.0.30001264: - version "1.0.30001278" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001278.tgz" - integrity sha512-mpF9KeH8u5cMoEmIic/cr7PNS+F5LWBk0t2ekGT60lFf0Wq+n9LspAj0g3P+o7DQhD3sUdlMln4YFAWhFYn9jg== - -caniuse-lite@^1.0.30001272, caniuse-lite@^1.0.30001280: - version "1.0.30001283" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001283.tgz#8573685bdae4d733ef18f78d44ba0ca5fe9e896b" - integrity sha512-9RoKo841j1GQFSJz/nCXOj0sD7tHBtlowjYlrqIUS812x9/emfBLBt6IyMz1zIaYc/eRL8Cs6HPUVi2Hzq4sIg== - chalk@^2.0.0: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -1489,18 +303,6 @@ chalk@^4.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -cheerio@^1.0.0-rc.3: - version "1.0.0-rc.3" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.3.tgz#094636d425b2e9c0f4eb91a46c05630c9a1a8bf6" - integrity sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA== - dependencies: - css-select "~1.2.0" - dom-serializer "~0.1.1" - entities "~1.1.1" - htmlparser2 "^3.9.1" - lodash "^4.15.0" - parse5 "^3.0.1" - color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -1525,73 +327,30 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -colorette@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" - integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== - colors@^1.3.3: version "1.4.0" resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== -commander@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-6.0.0.tgz#2b270da94f8fb9014455312f829a1129dbf8887e" - integrity sha512-s7EA+hDtTYNhuXkTlhqew4txMZVdszBmKWSPEMxGr8ru8JXR7bLUFIAtPhcSuFdJQ0ILMxnJi8GkQL0yvDy/YA== - commander@^6.1.0: version "6.2.1" resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= - concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -convert-source-map@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" - integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== - dependencies: - safe-buffer "~5.1.1" - -core-js-compat@^3.16.2: - version "3.18.2" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.18.2.tgz#e40c266fbd613948dd8d2d2156345da8ac03c142" - integrity sha512-25VJYCJtGjZwLguj7d66oiHfmnVw3TMOZ0zV8DyMJp/aeQ3OjR519iOOeck08HMyVVRAqXxafc2Hl+5QstJrsQ== - dependencies: - browserslist "^4.17.3" - semver "7.0.0" - -core-js-compat@^3.6.2: - version "3.6.5" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.5.tgz#2a51d9a4e25dfd6e690251aa81f99e3c05481f1c" - integrity sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng== - dependencies: - browserslist "^4.8.5" - semver "7.0.0" - core-js@^2.5.3: version "2.6.12" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== -core-js@^3.18.1: - version "3.18.2" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.18.2.tgz#63a551e8a29f305cd4123754846e65896619ba5b" - integrity sha512-zNhPOUoSgoizoSQFdX1MeZO16ORRb9FFQLts8gSYbZU5FcgXhp24iMWMxnOQo5uIaIG7/6FA/IqJPwev1o9ZXQ== - core-js@^3.6.5: - version "3.6.5" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a" - integrity sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA== + version "3.19.3" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.19.3.tgz#6df8142a996337503019ff3235a7022d7cdf4559" + integrity sha512-LeLBMgEGSsG7giquSzvgBrTS7V5UL6ks3eQlUSbN8dJStlLFiRzUm5iqsRyzUB8carhfKjkJ2vzKqE6z1Vga9g== cross-spawn@^7.0.2: version "7.0.3" @@ -1613,21 +372,6 @@ css-select@^4.1.3: domutils "^2.6.0" nth-check "^2.0.0" -css-select@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" - integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= - dependencies: - boolbase "~1.0.0" - css-what "2.1" - domutils "1.5.1" - nth-check "~1.0.1" - -css-what@2.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" - integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== - css-what@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/css-what/-/css-what-5.0.1.tgz#3efa820131f4669a8ac2408f9c32e7c7de9f4cad" @@ -1638,13 +382,6 @@ cuint@^0.2.2: resolved "https://registry.yarnpkg.com/cuint/-/cuint-0.2.2.tgz#408086d409550c2631155619e9fa7bcadc3b991b" integrity sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs= -debug@2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - debug@^4.0.1, debug@^4.1.1: version "4.3.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" @@ -1652,13 +389,6 @@ debug@^4.0.1, debug@^4.1.1: dependencies: ms "2.1.2" -debug@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" - integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== - dependencies: - ms "^2.1.1" - debug@^4.3.1: version "4.3.2" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" @@ -1671,28 +401,6 @@ deep-is@^0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= -deepmerge@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" - integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== - -define-properties@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== - dependencies: - object-keys "^1.0.12" - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= - -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= - dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -1707,14 +415,6 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -dom-serializer@0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" - integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== - dependencies: - domelementtype "^2.0.1" - entities "^2.0.0" - dom-serializer@^1.0.1: version "1.3.2" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.3.2.tgz#6206437d32ceefaec7161803230c7a20bc1b4d91" @@ -1724,19 +424,6 @@ dom-serializer@^1.0.1: domhandler "^4.2.0" entities "^2.0.0" -dom-serializer@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" - integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== - dependencies: - domelementtype "^1.3.0" - entities "^1.1.1" - -domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== - domelementtype@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d" @@ -1754,13 +441,6 @@ domexception@^1.0.1: dependencies: webidl-conversions "^4.0.2" -domhandler@^2.3.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" - integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== - dependencies: - domelementtype "1" - domhandler@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.2.0.tgz#f9768a5f034be60a89a27c2e4d0f74eba0d8b059" @@ -1773,22 +453,6 @@ dompurify@^2.3.0: resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.3.0.tgz#07bb39515e491588e5756b1d3e8375b5964814e2" integrity sha512-VV5C6Kr53YVHGOBKO/F86OYX6/iLTw2yVSI721gKetxpHCK/V5TaLEf9ODjRgl1KLSWRMY6cUhAbv/c+IUnwQw== -domutils@1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" - integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= - dependencies: - dom-serializer "0" - domelementtype "1" - -domutils@^1.5.1: - version "1.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== - dependencies: - dom-serializer "0" - domelementtype "1" - domutils@^2.6.0: version "2.7.0" resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.7.0.tgz#8ebaf0c41ebafcf55b0b72ec31c56323712c5442" @@ -1798,41 +462,11 @@ domutils@^2.6.0: domelementtype "^2.2.0" domhandler "^4.2.0" -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= - -electron-to-chromium@^1.3.523: - version "1.3.534" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.534.tgz#fc7af8518dd00a5b22a24aed3f116b5d097e2330" - integrity sha512-7x2S3yUrspNHQOoPk+Eo+iHViSiJiEGPI6BpmLy1eT2KRNGCkBt/NUYqjfXLd1DpDCQp7n3+LfA1RkbG+LqTZQ== - -electron-to-chromium@^1.3.723: - version "1.3.742" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.742.tgz#7223215acbbd3a5284962ebcb6df85d88b95f200" - integrity sha512-ihL14knI9FikJmH2XUIDdZFWJxvr14rPSdOhJ7PpS27xbz8qmaRwCwyg/bmFwjWKmWK9QyamiCZVCvXm5CH//Q== - -electron-to-chromium@^1.3.857: - version "1.3.866" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.866.tgz#d446338f5ad6948b27a50739760e7b0b5cc5032f" - integrity sha512-iYze6TpDXWxk+sfcpUUdTs6Pv/3kG45Pnjer2DxEeFw0N08bZeNLuz97s2lMgy8yObon48o0WHY2Bkg3xuAPOA== - -electron-to-chromium@^1.3.896: - version "1.4.7" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.7.tgz#58e0b4ec9096ee1422e4d9e83ceeb05b0cf076eb" - integrity sha512-UPy2MsQw1OdcbxR7fvwWZH/rXcv+V26+uvQVHx0fGa1kqRfydtfOw+NMGAvZJ63hyaH4aEBxbhSEtqbpliSNWA== - emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= - enquirer@^2.3.5: version "2.3.6" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" @@ -1840,11 +474,6 @@ enquirer@^2.3.5: dependencies: ansi-colors "^4.1.1" -entities@^1.1.1, entities@~1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" - integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== - entities@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.0.tgz#68d6084cab1b079767540d80e56a39b423e4abf4" @@ -1969,21 +598,6 @@ esbuild@^0.13.12, esbuild@^0.13.2: esbuild-windows-64 "0.13.15" esbuild-windows-arm64 "0.13.15" -escalade@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.0.2.tgz#6a580d70edb87880f22b4c91d0d56078df6962c4" - integrity sha512-gPYAU37hYCUhW5euPeR+Y74F7BL+IBsV93j5cvGriSaD1aG6MGsqsV1yamRdrWrb2j3aiZvb0X+UBOWpx3JWtQ== - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= - escape-string-regexp@^1.0.3, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -2110,31 +724,11 @@ estraverse@^5.1.0, estraverse@^5.2.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== -estree-walker@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" - integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== - -estree-walker@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" - integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== - -estree-walker@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.1.tgz#f8e030fb21cefa183b44b7ad516b747434e7a3e0" - integrity sha512-tF0hv+Yi2Ot1cwj9eYHtxC0jB9bmjacjQs6ZBTj82H8JwUywFuc+7E83NWfNMwHXZc11mjfFcVXPe9gEP4B8dg== - esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= - extend@^3.0.1: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" @@ -2195,19 +789,6 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" -finalhandler@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" - integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.3" - statuses "~1.5.0" - unpipe "~1.0.0" - flat-cache@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" @@ -2221,26 +802,11 @@ flatted@^3.1.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469" integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== -fraction.js@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.1.1.tgz#ac4e520473dae67012d618aab91eda09bcb400ff" - integrity sha512-MHOhvvxHTfRFpF1geTK9czMIZ6xclsEor2wkIGYYq+PxcQqT7vStJqjhe6S1TenZrMZzo+wlqOufBDVepUEgPg== - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= - fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@~2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" - integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== - fsevents@~2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" @@ -2256,11 +822,6 @@ functional-red-black-tree@^1.0.1: resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= -gensync@^1.0.0-beta.1: - version "1.0.0-beta.1" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" - integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== - glob-parent@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" @@ -2280,23 +841,6 @@ glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.1.6: - version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - globals@^13.6.0: version "13.8.0" resolved "https://registry.yarnpkg.com/globals/-/globals-13.8.0.tgz#3e20f504810ce87a8d72e55aecf8435b50f4c1b3" @@ -2333,11 +877,6 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-symbols@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" - integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== - has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" @@ -2350,29 +889,6 @@ he@1.2.0: resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== -htmlparser2@^3.9.1: - version "3.10.1" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" - integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== - dependencies: - domelementtype "^1.3.1" - domhandler "^2.3.0" - domutils "^1.5.1" - entities "^1.1.1" - inherits "^2.0.1" - readable-stream "^3.1.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" - ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" @@ -2413,18 +929,11 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3: +inherits@2: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -invariant@^2.2.2, invariant@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" - integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== - dependencies: - loose-envify "^1.0.0" - is-core-module@^2.2.0: version "2.5.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.5.0.tgz#f754843617c70bfd29b7bd87327400cda5c18491" @@ -2449,38 +958,17 @@ is-glob@^4.0.0, is-glob@^4.0.1: dependencies: is-extglob "^2.1.1" -is-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" - integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= - is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-reference@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" - integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== - dependencies: - "@types/estree" "*" - isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= -js-cleanup@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/js-cleanup/-/js-cleanup-1.0.1.tgz#1d38080c7ee92e1d2d2b94054d0a33c48951e0df" - integrity sha512-wyHeWKqbcQV78/tiMJ6pgJrkG7p2u3b2xX9IJFvvurpJL9/++89dHfkUebhWvSMS84LG0uQ7BnG5GGyAzY21Ag== - dependencies: - magic-string "^0.25.1" - perf-regexes "^1.0.1" - skip-regex "^1.0.2" - -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: +js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== @@ -2493,16 +981,6 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= - json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -2518,25 +996,6 @@ 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.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" - integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== - dependencies: - minimist "^1.2.5" - -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== - -levenary@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/levenary/-/levenary-1.1.1.tgz#842a9ee98d2075aa7faeedbe32679e9205f46f77" - integrity sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ== - dependencies: - leven "^3.1.0" - levn@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" @@ -2550,11 +1009,6 @@ lodash.clonedeep@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= - lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" @@ -2565,23 +1019,11 @@ lodash.truncate@^4.4.2: resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= -lodash@^4.15.0: - version "4.17.15" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" - integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== - -lodash@^4.17.19, lodash@^4.7.0: +lodash@^4.7.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -loose-envify@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -2589,21 +1031,6 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -magic-string@^0.25.1, magic-string@^0.25.7: - version "0.25.7" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" - integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== - dependencies: - sourcemap-codec "^1.4.4" - -matched@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/matched/-/matched-5.0.0.tgz#4b10735a89f87b6f9bf457136472631e19df05d7" - integrity sha512-O0LCuxYYBNBjP2dmAg0i6PME0Mb0dvjulpMC0tTIeMRh6kXYsugOT5GOWpFkSzqjQjgOUs/eiyvpVhXdN2La4g== - dependencies: - glob "^7.1.6" - picomatch "^2.2.1" - mdn-polyfills@^5.20.0: version "5.20.0" resolved "https://registry.yarnpkg.com/mdn-polyfills/-/mdn-polyfills-5.20.0.tgz#ca8247edf20a4f60dec6804372229812b348260b" @@ -2622,11 +1049,6 @@ micromatch@^4.0.4: braces "^3.0.1" picomatch "^2.2.3" -mime@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -2634,22 +1056,7 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -ms@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== - -ms@2.1.2, ms@^2.1.1: +ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== @@ -2672,31 +1079,6 @@ node-html-parser@^4.0.0: css-select "^4.1.3" he "1.2.0" -node-releases@^1.1.60: - version "1.1.60" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.60.tgz#6948bdfce8286f0b5d0e5a88e8384e954dfe7084" - integrity sha512-gsO4vjEdQaTusZAEebUWp2a5d7dF5DYoIpDG7WySnk7BuZDW+GPpHXoXXuYawRBr/9t5q54tirPz79kFIWg4dA== - -node-releases@^1.1.71: - version "1.1.72" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.72.tgz#14802ab6b1039a79a0c7d662b610a5bbd76eacbe" - integrity sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw== - -node-releases@^1.1.77: - version "1.1.77" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.77.tgz#50b0cfede855dd374e7585bf228ff34e57c1c32e" - integrity sha512-rB1DUFUNAN4Gn9keO2K1efO35IDK7yKHCdCaIMvFO7yUYmmZYeDjnGKle26G4rwj+LKRQpjyUUvMkPglwGCYNQ== - -node-releases@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5" - integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA== - -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= - nth-check@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.0.tgz#1bb4f6dac70072fc313e8c9cd1417b5074c0a125" @@ -2704,35 +1086,6 @@ nth-check@^2.0.0: dependencies: boolbase "^1.0.0" -nth-check@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" - integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== - dependencies: - boolbase "~1.0.0" - -object-keys@^1.0.11, object-keys@^1.0.12: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object.assign@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" - integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" - -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= - dependencies: - ee-first "1.1.1" - once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -2759,18 +1112,6 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse5@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c" - integrity sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA== - dependencies: - "@types/node" "*" - -parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" @@ -2791,27 +1132,12 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -perf-regexes@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/perf-regexes/-/perf-regexes-1.0.1.tgz#6da1d62f5a94bf9353a0451bccacf69068b75d0b" - integrity sha512-L7MXxUDtqr4PUaLFCDCXBfGV/6KLIuSEccizDI7JxT+c9x1G1v04BQ4+4oag84SHaCdrBgQAIs/Cqn+flwFPng== - picocolors@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f" integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA== -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picomatch@^2.2.1: - version "2.2.2" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" - integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== - -picomatch@^2.2.2, picomatch@^2.2.3: +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== @@ -2830,11 +1156,6 @@ postcss-flexbugs-fixes@^5.0.2: resolved "https://registry.yarnpkg.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz#2028e145313074fc9abe276cb7ca14e5401eb49d" integrity sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ== -postcss-value-parser@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" - integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== - postcss@^8.3.8: version "8.3.9" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.3.9.tgz#98754caa06c4ee9eb59cc48bd073bb6bd3437c31" @@ -2864,20 +1185,6 @@ queue-microtask@^1.2.2: resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -readable-stream@^3.1.1: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - realistic-structured-clone@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/realistic-structured-clone/-/realistic-structured-clone-2.0.2.tgz#2f8ec225b1f9af20efc79ac96a09043704414959" @@ -2888,64 +1195,16 @@ realistic-structured-clone@^2.0.1: typeson "^5.8.2" typeson-registry "^1.0.0-alpha.20" -regenerate-unicode-properties@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" - integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== - dependencies: - regenerate "^1.4.0" - -regenerate@^1.4.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.1.tgz#cad92ad8e6b591773485fbe05a485caf4f457e6f" - integrity sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A== - -regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.7: - version "0.13.7" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" - integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== - -regenerator-runtime@^0.13.9: +regenerator-runtime@^0.13.7: version "0.13.9" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== -regenerator-transform@^0.14.2: - version "0.14.5" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" - integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== - dependencies: - "@babel/runtime" "^7.8.4" - regexpp@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== -regexpu-core@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938" - integrity sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ== - dependencies: - regenerate "^1.4.0" - regenerate-unicode-properties "^8.2.0" - regjsgen "^0.5.1" - regjsparser "^0.6.4" - unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.2.0" - -regjsgen@^0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" - integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== - -regjsparser@^0.6.4: - version "0.6.4" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" - integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== - dependencies: - jsesc "~0.5.0" - require-from-string@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" @@ -2956,7 +1215,7 @@ resolve-from@^4.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -resolve@^1.14.2, resolve@^1.20.0: +resolve@^1.20.0: version "1.20.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== @@ -2964,13 +1223,6 @@ resolve@^1.14.2, resolve@^1.20.0: is-core-module "^2.2.0" path-parse "^1.0.6" -resolve@^1.17.0, resolve@^1.3.2: - version "1.17.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" - integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== - dependencies: - path-parse "^1.0.6" - reusify@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" @@ -2983,28 +1235,6 @@ rimraf@^3.0.2: dependencies: glob "^7.1.3" -rollup-plugin-cleanup@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/rollup-plugin-cleanup/-/rollup-plugin-cleanup-3.1.1.tgz#d012faab5e212b1c4bfa8144ace70fc6ac7b3315" - integrity sha512-wMS9JQm4ShvlMqno1pOfqvh0yYgNLO2ZgmzDsVvKuDt4XCn+9DcMoUwRQ5t9p9b113dR5FhPFFUHnvvQ/yuEtA== - dependencies: - js-cleanup "^1.0.1" - rollup-pluginutils "^2.3.3" - -rollup-pluginutils@^2.3.3: - version "2.8.2" - resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" - integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== - dependencies: - estree-walker "^0.6.1" - -rollup@^2.26.4: - version "2.27.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.27.1.tgz#372744e1d36eba0fd942d997600c2fc2ca266305" - integrity sha512-GiWHQvnmMgBktSpY/1+nrGpwPsTw4b9P28og2uedfeq4JZ16rzAmnQ5Pm/E0/BEmDNia1ZbY7+qu3nBgNa19Hg== - optionalDependencies: - fsevents "~2.1.2" - rollup@^2.57.0: version "2.58.0" resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.58.0.tgz#a643983365e7bf7f5b7c62a8331b983b7c4c67fb" @@ -3024,31 +1254,6 @@ safe-buffer@^5.0.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.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.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" - integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== - -semver@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== - -semver@^5.4.1, semver@^5.5.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - semver@^7.2.1, semver@^7.3.5: version "7.3.5" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" @@ -3056,45 +1261,11 @@ semver@^7.2.1, semver@^7.3.5: 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== - dependencies: - debug "2.6.9" - depd "~1.1.2" - destroy "~1.0.4" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "~1.7.2" - mime "1.6.0" - ms "2.1.1" - on-finished "~2.3.0" - range-parser "~1.2.1" - statuses "~1.5.0" - -serve-static@^1.13.2: - 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== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.17.1" - setimmediate@^1.0.5: version "1.0.5" 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== - shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -3107,11 +1278,6 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -skip-regex@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/skip-regex/-/skip-regex-1.0.2.tgz#ac655d77e7c771ac2b9f37585fea37bff56ad65b" - integrity sha512-pEjMUbwJ5Pl/6Vn6FsamXHXItJXSRftcibixDmNCWbWhic0hzHrwkMZo0IZ7fMRH9KxcWDFSkzhccB4285PutA== - slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" @@ -3131,26 +1297,11 @@ source-map-js@^0.6.2: resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-0.6.2.tgz#0bb5de631b41cfbda6cfba8bd05a80efdfd2385e" integrity sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug== -source-map@^0.5.0: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - -sourcemap-codec@^1.4.4: - version "1.4.8" - resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" - integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== - sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= -"statuses@>= 1.5.0 < 2", statuses@~1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= - string-width@^4.2.0: version "4.2.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" @@ -3160,13 +1311,6 @@ string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - strip-ansi@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" @@ -3193,11 +1337,6 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -systemjs@^6.10.3: - version "6.10.3" - resolved "https://registry.yarnpkg.com/systemjs/-/systemjs-6.10.3.tgz#7e783fccb58232f1d9eb05c7e1a661268945cade" - integrity sha512-mXwfLJdaADqWg1J5+Z0bGQEdcXSe+ePPTfzffMB29aVls5cXveRl0vneSV/19t3SfuUBsAraLP8W/g5u9cmYXA== - table@^6.0.9: version "6.7.1" resolved "https://registry.yarnpkg.com/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2" @@ -3220,11 +1359,6 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -3232,11 +1366,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== - tr46@^2.0.2: version "2.1.0" resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" @@ -3292,34 +1421,6 @@ typeson@^6.0.0: resolved "https://registry.yarnpkg.com/typeson/-/typeson-6.1.0.tgz#5b2a53705a5f58ff4d6f82f965917cabd0d7448b" integrity sha512-6FTtyGr8ldU0pfbvW/eOZrEtEkczHRUtduBnA90Jh9kMPCiFNnXIon3vF41N0S4tV1HHQt4Hk1j4srpESziCaA== -unicode-canonical-property-names-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" - integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== - -unicode-match-property-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" - integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== - dependencies: - unicode-canonical-property-names-ecmascript "^1.0.4" - unicode-property-aliases-ecmascript "^1.0.4" - -unicode-match-property-value-ecmascript@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" - integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== - -unicode-property-aliases-ecmascript@^1.0.4: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" - integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== - -unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= - uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -3327,11 +1428,6 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -util-deprecate@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - v8-compile-cache@^2.0.3: version "2.3.0" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" From ba84387722e7648ad181336eff98be5eca12ffcd Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Thu, 9 Dec 2021 18:15:22 +0100 Subject: [PATCH 58/59] remove commented out code --- vite.config.js | 7 ------- 1 file changed, 7 deletions(-) diff --git a/vite.config.js b/vite.config.js index c7c91a68..1562269e 100644 --- a/vite.config.js +++ b/vite.config.js @@ -1,5 +1,4 @@ const cssvariables = require("postcss-css-variables"); -//const autoprefixer = require("autoprefixer"); const flexbugsFixes = require("postcss-flexbugs-fixes"); const fs = require("fs"); @@ -7,7 +6,6 @@ const path = require("path"); const injectWebManifest = require("./scripts/build-plugins/manifest"); const {injectServiceWorker, createPlaceholderValues} = require("./scripts/build-plugins/service-worker"); -// const legacyBuild = require("./scripts/build-plugins/legacy-build"); const {defineConfig} = require('vite'); const version = JSON.parse(fs.readFileSync(path.join(__dirname, "package.json"), "utf8")).version; @@ -38,11 +36,6 @@ export default defineConfig(({mode}) => { polyfillModulePreload: false, }, plugins: [ - // legacyBuild(scriptTagPath(path.join(__dirname, "src/platform/web/index.html"), 0), { - // "./Platform": "./LegacyPlatform" - // }, "hydrogen-legacy", [ - // './legacy-polyfill', - // ]), // important this comes before service worker // otherwise the manifest and the icons it refers to won't be cached injectWebManifest("assets/manifest.json"), From 5ea29297cce38362b7d6979eb673545aa0bd9cdb Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Thu, 9 Dec 2021 18:44:44 +0100 Subject: [PATCH 59/59] fix typescript errors --- src/logging/NullLogger.ts | 4 +++- src/logging/types.ts | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/logging/NullLogger.ts b/src/logging/NullLogger.ts index 5ec38aa9..076bb313 100644 --- a/src/logging/NullLogger.ts +++ b/src/logging/NullLogger.ts @@ -64,7 +64,9 @@ export class NullLogItem implements ILogItem { return callback(this); } - log(): void {} + log(): ILogItem { + return this; + } set(): void {} runDetached(_: LabelOrValues, callback: LogCallback): ILogItem { diff --git a/src/logging/types.ts b/src/logging/types.ts index 01755960..ae001889 100644 --- a/src/logging/types.ts +++ b/src/logging/types.ts @@ -42,7 +42,7 @@ export interface ILogItem { readonly start?: number; readonly values: LogItemValues; wrap(labelOrValues: LabelOrValues, callback: LogCallback, logLevel?: LogLevel, filterCreator?: FilterCreator): T; - log(labelOrValues: LabelOrValues, logLevel?: LogLevel): void; + log(labelOrValues: LabelOrValues, logLevel?: LogLevel): ILogItem; set(key: string | object, value: unknown): void; runDetached(labelOrValues: LabelOrValues, callback: LogCallback, logLevel?: LogLevel, filterCreator?: FilterCreator): ILogItem; wrapDetached(labelOrValues: LabelOrValues, callback: LogCallback, logLevel?: LogLevel, filterCreator?: FilterCreator): void;