From 5241b70d35fea40be98094fb342f69e7153c64c4 Mon Sep 17 00:00:00 2001 From: Kawika Bader <76699310+kbader-godaddy@users.noreply.github.com> Date: Tue, 14 May 2024 09:52:39 -0700 Subject: [PATCH] Add Additional JSDoc Typechecking (#740) --- package-lock.json | 1557 +++++++++++------ packages/gasket-cli/src/index.d.ts | 3 +- .../gasket-cli/test/unit/hooks/init.test.js | 2 +- packages/gasket-data/lib/index.d.ts | 2 +- packages/gasket-engine/lib/engine.d.ts | 45 +- packages/gasket-fetch/test/utils.js | 4 - packages/gasket-helper-intl/lib/index.d.ts | 244 +-- packages/gasket-helper-intl/lib/index.js | 203 +-- packages/gasket-helper-intl/lib/server.js | 7 +- packages/gasket-helper-intl/package.json | 4 +- packages/gasket-helper-intl/tsconfig.json | 3 +- packages/gasket-nextjs/package.json | 4 +- .../gasket-nextjs/src/gasket-data-provider.js | 5 +- packages/gasket-nextjs/src/index.d.ts | 71 +- packages/gasket-nextjs/src/index.js | 78 +- .../src/with-gasket-data-provider.js | 23 +- .../gasket-plugin-command/lib/plugin.d.ts | 29 +- .../gasket-plugin-cypress/test/index.test.js | 8 + .../gasket-plugin-docs-graphs/lib/plugin.js | 31 +- .../gasket-plugin-docs-graphs/package.json | 4 +- .../gasket-plugin-docs-graphs/tsconfig.json | 3 +- packages/gasket-plugin-docs/lib/configure.js | 23 +- packages/gasket-plugin-docs/lib/create.js | 10 +- packages/gasket-plugin-docs/lib/docs-setup.js | 3 +- .../gasket-plugin-docs/lib/get-commands.js | 12 +- packages/gasket-plugin-docs/lib/index.d.ts | 91 +- packages/gasket-plugin-docs/lib/index.js | 8 +- packages/gasket-plugin-docs/lib/internal.d.ts | 288 +++ packages/gasket-plugin-docs/lib/metadata.js | 104 +- packages/gasket-plugin-docs/lib/types.js | 91 - .../lib/utils/build-config-set.js | 62 +- .../lib/utils/collate-files.js | 81 +- .../lib/utils/config-set-builder.js | 260 +-- .../gasket-plugin-docs/lib/utils/constants.js | 5 + .../lib/utils/generate-index.js | 78 +- .../gasket-plugin-docs/lib/utils/sorts.js | 59 +- .../lib/utils/transforms.js | 68 +- packages/gasket-plugin-docs/package.json | 4 +- .../gasket-plugin-docs/test/metadata.test.js | 12 +- .../test/utils/generate-index.test.js | 8 + packages/gasket-plugin-docs/tsconfig.json | 3 + .../gasket-plugin-elastic-apm/lib/index.d.ts | 4 +- .../lib/middleware.js | 2 +- .../lib/create-servers.js | 1 + packages/gasket-plugin-fastify/lib/index.d.ts | 12 +- .../gasket-plugin-fastify/test/plugin.test.js | 11 + packages/gasket-plugin-git/lib/create.js | 10 +- packages/gasket-plugin-git/lib/gitignore.js | 24 +- packages/gasket-plugin-git/lib/index.d.ts | 7 + packages/gasket-plugin-git/lib/index.js | 14 +- packages/gasket-plugin-git/lib/internal.d.ts | 22 + packages/gasket-plugin-git/lib/post-create.js | 17 +- packages/gasket-plugin-git/lib/prompt.js | 26 +- packages/gasket-plugin-git/package.json | 4 +- packages/gasket-plugin-git/tsconfig.json | 6 +- .../gasket-plugin-happyfeet/lib/index.d.ts | 13 +- packages/gasket-plugin-https/lib/index.js | 155 +- packages/gasket-plugin-https/lib/start.js | 131 ++ packages/gasket-plugin-https/lib/utils.js | 28 + .../gasket-plugin-https/test/index.test.js | 4 + .../gasket-plugin-intl/lib/apm-transaction.js | 6 +- .../gasket-plugin-intl/lib/build-manifest.js | 29 +- .../gasket-plugin-intl/lib/build-modules.js | 53 +- packages/gasket-plugin-intl/lib/build.js | 21 + packages/gasket-plugin-intl/lib/configure.js | 73 +- packages/gasket-plugin-intl/lib/create.js | 22 + packages/gasket-plugin-intl/lib/index.d.ts | 78 +- packages/gasket-plugin-intl/lib/index.js | 242 ++- packages/gasket-plugin-intl/lib/init.js | 9 +- packages/gasket-plugin-intl/lib/internal.d.ts | 29 + packages/gasket-plugin-intl/lib/middleware.js | 121 +- packages/gasket-plugin-intl/lib/serve.js | 7 +- .../lib/service-worker-cache-key.js | 15 +- .../lib/{ => utils}/fs-utils.js | 17 +- .../gasket-plugin-intl/lib/webpack-config.js | 15 + packages/gasket-plugin-intl/lib/workbox.js | 43 +- packages/gasket-plugin-intl/package.json | 4 +- .../test/build-modules.test.js | 4 +- .../gasket-plugin-intl/test/fs-utils.test.js | 2 +- .../test/middleware.test.js | 2 +- .../gasket-plugin-jest/test/index.test.js | 8 + .../gasket-plugin-lint/lib/code-styles.js | 12 +- packages/gasket-plugin-lint/lib/index.d.ts | 15 - packages/gasket-plugin-lint/lib/internal.d.ts | 16 + packages/gasket-plugin-manifest/README.md | 1 + .../gasket-plugin-manifest/lib/base-config.js | 4 +- packages/gasket-plugin-manifest/lib/build.js | 43 +- .../gasket-plugin-manifest/lib/configure.js | 10 +- .../gasket-plugin-manifest/lib/index.d.ts | 37 +- packages/gasket-plugin-manifest/lib/index.js | 41 +- .../gasket-plugin-manifest/lib/internal.d.ts | 11 + .../gasket-plugin-manifest/lib/middleware.js | 33 +- packages/gasket-plugin-manifest/lib/serve.js | 4 +- packages/gasket-plugin-manifest/lib/utils.js | 10 +- packages/gasket-plugin-manifest/package.json | 4 +- .../test/configure.test.js | 1 - packages/gasket-plugin-manifest/tsconfig.json | 3 +- .../gasket-plugin-metadata/lib/index.d.ts | 68 +- .../gasket-plugin-metrics/test/init.test.js | 5 + packages/gasket-plugin-mocha/lib/index.js | 6 - .../gasket-plugin-mocha/test/index.test.js | 8 + packages/gasket-plugin-morgan/lib/index.d.ts | 8 - packages/gasket-plugin-morgan/lib/index.js | 56 +- .../gasket-plugin-morgan/lib/middleware.js | 17 + .../gasket-plugin-morgan/test/plugin.test.js | 70 +- .../lib/apm-transaction.js | 7 +- packages/gasket-plugin-nextjs/lib/build.js | 17 + .../gasket-plugin-nextjs/lib/configure.js | 34 + packages/gasket-plugin-nextjs/lib/create.js | 65 + packages/gasket-plugin-nextjs/lib/express.js | 43 + packages/gasket-plugin-nextjs/lib/fastify.js | 37 + packages/gasket-plugin-nextjs/lib/index.d.ts | 70 +- packages/gasket-plugin-nextjs/lib/index.js | 253 +-- .../gasket-plugin-nextjs/lib/internal.d.ts | 18 + packages/gasket-plugin-nextjs/lib/metadata.js | 29 +- .../gasket-plugin-nextjs/lib/middleware.js | 16 + packages/gasket-plugin-nextjs/lib/prompt.js | 17 + .../lib/{ => utils}/config.js | 28 +- .../lib/{ => utils}/next-route.js | 77 +- .../lib/{ => utils}/setup-next-app.js | 36 +- packages/gasket-plugin-nextjs/lib/workbox.js | 36 + packages/gasket-plugin-nextjs/package.json | 4 +- .../gasket-plugin-nextjs/test/config.test.js | 9 +- .../gasket-plugin-nextjs/test/index.test.js | 144 +- .../test/next-route.test.js | 2 +- .../test/setup-next-app.test.js | 6 +- packages/gasket-plugin-nextjs/tsconfig.json | 6 +- packages/gasket-plugin-redux/lib/configure.js | 11 +- packages/gasket-plugin-redux/lib/create.js | 19 + packages/gasket-plugin-redux/lib/index.d.ts | 64 +- packages/gasket-plugin-redux/lib/index.js | 126 +- .../gasket-plugin-redux/lib/middleware.js | 26 +- packages/gasket-plugin-redux/lib/prompt.js | 40 +- .../gasket-plugin-redux/lib/webpack-config.js | 20 + packages/gasket-plugin-redux/package.json | 4 +- packages/gasket-plugin-redux/tsconfig.json | 8 +- .../gasket-plugin-service-worker/lib/build.js | 38 +- .../lib/configure.js | 14 +- .../lib/express.js | 10 +- .../lib/fastify.js | 11 +- .../lib/index.d.ts | 136 +- .../gasket-plugin-service-worker/lib/index.js | 153 +- .../lib/middleware.js | 21 +- .../lib/sw-register.template.js | 10 - .../lib/{ => utils}/configure-endpoint.js | 5 +- .../lib/utils/sw-register.template.js | 12 + .../lib/{ => utils}/utils.js | 38 +- .../lib/webpack-config.js | 27 +- .../gasket-plugin-service-worker/package.json | 4 +- .../test/configure.spec.js | 4 +- .../test/express.spec.js | 4 + .../test/fastify.spec.js | 4 + .../test/middleware.spec.js | 4 +- .../test/utils.spec.js | 4 +- .../tsconfig.json | 3 +- .../lib/deprecated-merges.js | 28 +- packages/gasket-plugin-webpack/lib/index.d.ts | 35 +- packages/gasket-plugin-webpack/lib/index.js | 85 +- .../gasket-plugin-webpack/lib/init-webpack.js | 23 +- .../gasket-plugin-webpack/lib/internal.d.ts | 30 + .../lib/webpack-metrics-plugin.js | 101 +- packages/gasket-plugin-webpack/package.json | 4 +- packages/gasket-plugin-webpack/tsconfig.json | 3 +- packages/gasket-plugin-workbox/lib/build.js | 1 - .../lib/compose-service-worker.js | 5 +- .../gasket-plugin-workbox/lib/configure.js | 5 +- packages/gasket-plugin-workbox/lib/express.js | 3 +- packages/gasket-plugin-workbox/lib/fastify.js | 3 +- packages/gasket-plugin-workbox/lib/index.d.ts | 13 +- packages/gasket-plugin-workbox/lib/utils.js | 8 +- packages/gasket-plugin-workbox/package.json | 4 +- packages/gasket-react-intl/package.json | 4 +- packages/gasket-react-intl/src/config.js | 19 +- packages/gasket-react-intl/src/context.js | 10 +- packages/gasket-react-intl/src/index.d.ts | 163 +- .../gasket-react-intl/src/locale-required.js | 16 +- packages/gasket-react-intl/src/next.js | 51 +- .../src/use-locale-required.js | 16 +- packages/gasket-react-intl/src/utils.js | 10 +- .../src/with-intl-provider.js | 97 +- .../src/with-locale-required.js | 106 +- .../test/with-intl-provider.test.js | 3 +- .../test/with-locale-required.test.js | 63 +- packages/gasket-react-intl/tsconfig.json | 9 +- packages/gasket-redux/jest.config.js | 3 +- packages/gasket-redux/package.json | 4 +- .../gasket-redux/src/configure-make-store.js | 77 +- .../gasket-redux/src/get-or-create-store.js | 4 +- packages/gasket-redux/src/index.d.ts | 111 +- .../gasket-redux/src/placeholder-reducers.js | 15 +- .../test/configure-make-store.spec.js | 4 - packages/gasket-redux/tsconfig.json | 3 +- .../test/helper-intl.spec.ts | 30 - .../test/nextjs.spec.tsx | 77 - .../test/plugin-manifest.spec.ts | 49 - .../test/plugin-redux.spec.ts | 57 - .../test/redux.spec.ts | 38 - .../gasket-utils/test/package-manager.test.js | 5 + scripts/align-packages.js | 3 +- 199 files changed, 4951 insertions(+), 3595 deletions(-) create mode 100644 packages/gasket-plugin-docs/lib/internal.d.ts delete mode 100644 packages/gasket-plugin-docs/lib/types.js create mode 100644 packages/gasket-plugin-docs/lib/utils/constants.js create mode 100644 packages/gasket-plugin-git/lib/index.d.ts create mode 100644 packages/gasket-plugin-git/lib/internal.d.ts create mode 100644 packages/gasket-plugin-https/lib/start.js create mode 100644 packages/gasket-plugin-https/lib/utils.js create mode 100644 packages/gasket-plugin-intl/lib/build.js create mode 100644 packages/gasket-plugin-intl/lib/create.js create mode 100644 packages/gasket-plugin-intl/lib/internal.d.ts rename packages/gasket-plugin-intl/lib/{ => utils}/fs-utils.js (76%) create mode 100644 packages/gasket-plugin-intl/lib/webpack-config.js create mode 100644 packages/gasket-plugin-lint/lib/internal.d.ts create mode 100644 packages/gasket-plugin-manifest/lib/internal.d.ts create mode 100644 packages/gasket-plugin-morgan/lib/middleware.js create mode 100644 packages/gasket-plugin-nextjs/lib/build.js create mode 100644 packages/gasket-plugin-nextjs/lib/configure.js create mode 100644 packages/gasket-plugin-nextjs/lib/create.js create mode 100644 packages/gasket-plugin-nextjs/lib/express.js create mode 100644 packages/gasket-plugin-nextjs/lib/fastify.js create mode 100644 packages/gasket-plugin-nextjs/lib/internal.d.ts create mode 100644 packages/gasket-plugin-nextjs/lib/middleware.js create mode 100644 packages/gasket-plugin-nextjs/lib/prompt.js rename packages/gasket-plugin-nextjs/lib/{ => utils}/config.js (69%) rename packages/gasket-plugin-nextjs/lib/{ => utils}/next-route.js (74%) rename packages/gasket-plugin-nextjs/lib/{ => utils}/setup-next-app.js (66%) create mode 100644 packages/gasket-plugin-nextjs/lib/workbox.js create mode 100644 packages/gasket-plugin-redux/lib/create.js create mode 100644 packages/gasket-plugin-redux/lib/webpack-config.js delete mode 100644 packages/gasket-plugin-service-worker/lib/sw-register.template.js rename packages/gasket-plugin-service-worker/lib/{ => utils}/configure-endpoint.js (91%) create mode 100644 packages/gasket-plugin-service-worker/lib/utils/sw-register.template.js rename packages/gasket-plugin-service-worker/lib/{ => utils}/utils.js (68%) create mode 100644 packages/gasket-plugin-webpack/lib/internal.d.ts delete mode 100644 packages/gasket-typescript-tests/test/helper-intl.spec.ts delete mode 100644 packages/gasket-typescript-tests/test/nextjs.spec.tsx delete mode 100644 packages/gasket-typescript-tests/test/plugin-manifest.spec.ts delete mode 100644 packages/gasket-typescript-tests/test/plugin-redux.spec.ts delete mode 100644 packages/gasket-typescript-tests/test/redux.spec.ts diff --git a/package-lock.json b/package-lock.json index bf1797e96..789c425c1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -226,7 +226,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -354,7 +353,6 @@ "version": "7.23.5", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", - "dev": true, "dependencies": { "@babel/highlight": "^7.23.4", "chalk": "^2.4.2" @@ -367,7 +365,6 @@ "version": "7.23.5", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -376,7 +373,6 @@ "version": "7.23.7", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.7.tgz", "integrity": "sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==", - "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.23.5", @@ -405,14 +401,12 @@ "node_modules/@babel/core/node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, "bin": { "semver": "bin/semver.js" } @@ -457,7 +451,6 @@ "version": "7.23.6", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", - "dev": true, "dependencies": { "@babel/types": "^7.23.6", "@jridgewell/gen-mapping": "^0.3.2", @@ -472,7 +465,6 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dev": true, "dependencies": { "@babel/types": "^7.22.5" }, @@ -484,7 +476,6 @@ "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", - "dev": true, "dependencies": { "@babel/types": "^7.22.15" }, @@ -496,7 +487,6 @@ "version": "7.23.6", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", - "dev": true, "dependencies": { "@babel/compat-data": "^7.23.5", "@babel/helper-validator-option": "^7.23.5", @@ -512,7 +502,6 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, "bin": { "semver": "bin/semver.js" } @@ -521,7 +510,6 @@ "version": "7.23.7", "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.7.tgz", "integrity": "sha512-xCoqR/8+BoNnXOY7RVSgv6X+o7pmT5q1d+gGcRlXYkI+9B31glE4jeejhKVpA04O1AtzOt7OSQ6VYKP5FcRl9g==", - "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-environment-visitor": "^7.22.20", @@ -544,7 +532,6 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, "bin": { "semver": "bin/semver.js" } @@ -553,7 +540,6 @@ "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", - "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "regexpu-core": "^5.3.1", @@ -570,7 +556,6 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, "bin": { "semver": "bin/semver.js" } @@ -579,7 +564,6 @@ "version": "0.4.4", "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.4.tgz", "integrity": "sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA==", - "dev": true, "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", "@babel/helper-plugin-utils": "^7.22.5", @@ -595,7 +579,6 @@ "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -604,7 +587,6 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dev": true, "dependencies": { "@babel/template": "^7.22.15", "@babel/types": "^7.23.0" @@ -617,7 +599,6 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, "dependencies": { "@babel/types": "^7.22.5" }, @@ -629,7 +610,6 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", - "dev": true, "dependencies": { "@babel/types": "^7.23.0" }, @@ -641,7 +621,6 @@ "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", - "dev": true, "dependencies": { "@babel/types": "^7.22.15" }, @@ -653,7 +632,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", - "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-module-imports": "^7.22.15", @@ -672,7 +650,6 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", - "dev": true, "dependencies": { "@babel/types": "^7.22.5" }, @@ -684,7 +661,6 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -693,7 +669,6 @@ "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", - "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-environment-visitor": "^7.22.20", @@ -710,7 +685,6 @@ "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", - "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-member-expression-to-functions": "^7.22.15", @@ -727,7 +701,6 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, "dependencies": { "@babel/types": "^7.22.5" }, @@ -739,7 +712,6 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", - "dev": true, "dependencies": { "@babel/types": "^7.22.5" }, @@ -751,7 +723,6 @@ "version": "7.22.6", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, "dependencies": { "@babel/types": "^7.22.5" }, @@ -763,7 +734,6 @@ "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -772,7 +742,6 @@ "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -781,7 +750,6 @@ "version": "7.23.5", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -790,7 +758,6 @@ "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", - "dev": true, "dependencies": { "@babel/helper-function-name": "^7.22.5", "@babel/template": "^7.22.15", @@ -804,7 +771,6 @@ "version": "7.23.8", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.8.tgz", "integrity": "sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ==", - "dev": true, "dependencies": { "@babel/template": "^7.22.15", "@babel/traverse": "^7.23.7", @@ -818,7 +784,6 @@ "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", - "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", @@ -855,7 +820,6 @@ "version": "7.23.6", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", - "dev": true, "bin": { "parser": "bin/babel-parser.js" }, @@ -867,7 +831,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz", "integrity": "sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -882,7 +845,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz", "integrity": "sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", @@ -899,7 +861,6 @@ "version": "7.23.7", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz", "integrity": "sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw==", - "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-plugin-utils": "^7.22.5" @@ -951,7 +912,6 @@ "version": "7.21.0-placeholder-for-preset-env.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true, "engines": { "node": ">=6.9.0" }, @@ -963,7 +923,6 @@ "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -987,7 +946,6 @@ "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, @@ -999,7 +957,6 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1014,7 +971,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1026,7 +982,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.3" }, @@ -1038,7 +993,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz", "integrity": "sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1053,7 +1007,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz", "integrity": "sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1068,7 +1021,6 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -1080,7 +1032,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1107,7 +1058,6 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -1119,7 +1069,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1131,7 +1080,6 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -1143,7 +1091,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1155,7 +1102,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1167,7 +1113,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1179,7 +1124,6 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1194,7 +1138,6 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1224,7 +1167,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "dev": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1240,7 +1182,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz", "integrity": "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1255,7 +1196,6 @@ "version": "7.23.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.7.tgz", "integrity": "sha512-PdxEpL71bJp1byMG0va5gwQcXHxuEYC/BgI/e88mGTtohbZN28O5Yit0Plkkm/dBzCF/BxmbNcses1RH1T+urA==", - "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-plugin-utils": "^7.22.5", @@ -1273,7 +1213,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz", "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==", - "dev": true, "dependencies": { "@babel/helper-module-imports": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", @@ -1290,7 +1229,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz", "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1305,7 +1243,6 @@ "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz", "integrity": "sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1320,7 +1257,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz", "integrity": "sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==", - "dev": true, "dependencies": { "@babel/helper-create-class-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" @@ -1336,7 +1272,6 @@ "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz", "integrity": "sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==", - "dev": true, "dependencies": { "@babel/helper-create-class-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", @@ -1353,7 +1288,6 @@ "version": "7.23.8", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz", "integrity": "sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==", - "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-compilation-targets": "^7.23.6", @@ -1375,7 +1309,6 @@ "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, "engines": { "node": ">=4" } @@ -1384,7 +1317,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz", "integrity": "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/template": "^7.22.15" @@ -1400,7 +1332,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz", "integrity": "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1415,7 +1346,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz", "integrity": "sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==", - "dev": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" @@ -1431,7 +1361,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz", "integrity": "sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1446,7 +1375,6 @@ "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz", "integrity": "sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3" @@ -1462,7 +1390,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz", "integrity": "sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==", - "dev": true, "dependencies": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" @@ -1478,7 +1405,6 @@ "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz", "integrity": "sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" @@ -1494,7 +1420,6 @@ "version": "7.23.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz", "integrity": "sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" @@ -1510,7 +1435,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz", "integrity": "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==", - "dev": true, "dependencies": { "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-function-name": "^7.23.0", @@ -1527,7 +1451,6 @@ "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz", "integrity": "sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-json-strings": "^7.8.3" @@ -1543,7 +1466,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz", "integrity": "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1558,7 +1480,6 @@ "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz", "integrity": "sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" @@ -1574,7 +1495,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz", "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1589,7 +1509,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz", "integrity": "sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==", - "dev": true, "dependencies": { "@babel/helper-module-transforms": "^7.23.3", "@babel/helper-plugin-utils": "^7.22.5" @@ -1605,7 +1524,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", - "dev": true, "dependencies": { "@babel/helper-module-transforms": "^7.23.3", "@babel/helper-plugin-utils": "^7.22.5", @@ -1622,7 +1540,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz", "integrity": "sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==", - "dev": true, "dependencies": { "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-module-transforms": "^7.23.3", @@ -1640,7 +1557,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz", "integrity": "sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==", - "dev": true, "dependencies": { "@babel/helper-module-transforms": "^7.23.3", "@babel/helper-plugin-utils": "^7.22.5" @@ -1656,7 +1572,6 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", - "dev": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" @@ -1672,7 +1587,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz", "integrity": "sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1687,7 +1601,6 @@ "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz", "integrity": "sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" @@ -1703,7 +1616,6 @@ "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz", "integrity": "sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-numeric-separator": "^7.10.4" @@ -1719,7 +1631,6 @@ "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz", "integrity": "sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==", - "dev": true, "dependencies": { "@babel/compat-data": "^7.23.3", "@babel/helper-compilation-targets": "^7.22.15", @@ -1738,7 +1649,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz", "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-replace-supers": "^7.22.20" @@ -1754,7 +1664,6 @@ "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz", "integrity": "sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" @@ -1770,7 +1679,6 @@ "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz", "integrity": "sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", @@ -1787,7 +1695,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz", "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1802,7 +1709,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz", "integrity": "sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==", - "dev": true, "dependencies": { "@babel/helper-create-class-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" @@ -1818,7 +1724,6 @@ "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz", "integrity": "sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==", - "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-create-class-features-plugin": "^7.22.15", @@ -1836,7 +1741,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz", "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1931,7 +1835,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz", "integrity": "sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "regenerator-transform": "^0.15.2" @@ -1947,7 +1850,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz", "integrity": "sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1991,7 +1893,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz", "integrity": "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -2006,7 +1907,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz", "integrity": "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" @@ -2022,7 +1922,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz", "integrity": "sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -2037,7 +1936,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz", "integrity": "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -2052,7 +1950,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz", "integrity": "sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -2085,7 +1982,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz", "integrity": "sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -2100,7 +1996,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz", "integrity": "sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==", - "dev": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" @@ -2116,7 +2011,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz", "integrity": "sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==", - "dev": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" @@ -2132,7 +2026,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz", "integrity": "sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==", - "dev": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" @@ -2148,7 +2041,6 @@ "version": "7.23.8", "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.8.tgz", "integrity": "sha512-lFlpmkApLkEP6woIKprO6DO60RImpatTQKtz4sUcDjVcK8M8mQ4sZsuxaTMNOZf0sqAq/ReYW1ZBHnOQwKpLWA==", - "dev": true, "dependencies": { "@babel/compat-data": "^7.23.5", "@babel/helper-compilation-targets": "^7.23.6", @@ -2242,7 +2134,6 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, "bin": { "semver": "bin/semver.js" } @@ -2251,7 +2142,6 @@ "version": "0.1.6-no-external-plugins", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", - "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/types": "^7.4.4", @@ -2353,8 +2243,7 @@ "node_modules/@babel/regjsgen": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "dev": true + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" }, "node_modules/@babel/runtime": { "version": "7.23.8", @@ -2384,7 +2273,6 @@ "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", - "dev": true, "dependencies": { "@babel/code-frame": "^7.22.13", "@babel/parser": "^7.22.15", @@ -2398,7 +2286,6 @@ "version": "7.23.7", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz", "integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==", - "dev": true, "dependencies": { "@babel/code-frame": "^7.23.5", "@babel/generator": "^7.23.6", @@ -2419,7 +2306,6 @@ "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, "engines": { "node": ">=4" } @@ -2428,7 +2314,6 @@ "version": "7.23.6", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", - "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.23.4", "@babel/helper-validator-identifier": "^7.22.20", @@ -10029,6 +9914,62 @@ "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.24.tgz", "integrity": "sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==" }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.3.tgz", + "integrity": "sha512-RxtSL3XmdTAE2byxekYLnx+98kEUOrPHF/KRVjLH+DEIHy6kjIw7YINQzn+NXiH/NTrQLAwYs0GWB+csWygA9Q==", + "dependencies": { + "@rollup/pluginutils": "^3.0.8", + "@types/resolve": "0.0.8", + "builtin-modules": "^3.1.0", + "is-module": "^1.0.0", + "resolve": "^1.14.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/pluginutils/node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" + }, + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==" + }, "node_modules/@rushstack/eslint-patch": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.5.1.tgz", @@ -10118,6 +10059,24 @@ "node": ">=14" } }, + "node_modules/@surma/rollup-plugin-off-main-thread": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-1.4.2.tgz", + "integrity": "sha512-yBMPqmd1yEJo/280PAMkychuaALyQ9Lkb5q1ck3mjJrFuEobIfhnQ4J3mbvBoISmR3SWMWV+cGB/I0lCQee79A==", + "dependencies": { + "ejs": "^2.6.1", + "magic-string": "^0.25.0" + } + }, + "node_modules/@surma/rollup-plugin-off-main-thread/node_modules/ejs": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz", + "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==", + "hasInstallScript": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@svgr/babel-plugin-add-jsx-attribute": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz", @@ -11223,6 +11182,14 @@ "@types/react-router": "*" } }, + "node_modules/@types/resolve": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", + "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", @@ -11368,18 +11335,14 @@ } }, "node_modules/@types/workbox-build": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@types/workbox-build/-/workbox-build-5.0.1.tgz", - "integrity": "sha512-lJrGzEHX/QT3E4F5ABBNvCb8ObOr2LfHNAqAGfRuBPncWlU/d3iIUorECKNXmnZnLbLsgpgvhJWPMgByzR+L+A==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/workbox-build/-/workbox-build-5.1.0.tgz", + "integrity": "sha512-kAu7EuhMG/h10bH9zxaUYLtfOQ7AczNvpzGzfW9ZPhlP6pcrx3gVhhxhTlU6AvIb5Q2udvSzwhRyvLcHHg+HiA==", + "deprecated": "This is a stub types definition. workbox-build provides its own type definitions, so you do not need this installed.", "dependencies": { - "@types/workbox-routing": "*" + "workbox-build": "*" } }, - "node_modules/@types/workbox-routing": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@types/workbox-routing/-/workbox-routing-4.3.1.tgz", - "integrity": "sha512-2TYTiMcF6lMdMU36zUZPyQurpM8xso3Ad6XnFDdlSZowukoFy6pwZV+oT27z/jU1eaa+QgtPkdYFrS5KsJDMOQ==" - }, "node_modules/@types/ws": { "version": "8.5.10", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", @@ -13129,7 +13092,6 @@ "version": "0.4.7", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.7.tgz", "integrity": "sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ==", - "dev": true, "dependencies": { "@babel/compat-data": "^7.22.6", "@babel/helper-define-polyfill-provider": "^0.4.4", @@ -13143,7 +13105,6 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, "bin": { "semver": "bin/semver.js" } @@ -13152,7 +13113,6 @@ "version": "0.8.7", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.7.tgz", "integrity": "sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA==", - "dev": true, "dependencies": { "@babel/helper-define-polyfill-provider": "^0.4.4", "core-js-compat": "^3.33.1" @@ -13165,7 +13125,6 @@ "version": "0.5.4", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.4.tgz", "integrity": "sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg==", - "dev": true, "dependencies": { "@babel/helper-define-polyfill-provider": "^0.4.4" }, @@ -13768,7 +13727,6 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "dev": true, "engines": { "node": ">=6" }, @@ -15665,7 +15623,6 @@ "version": "3.35.0", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.35.0.tgz", "integrity": "sha512-5blwFAddknKeNgsjBzilkdQ0+YK8L1PfqPYq40NOYMYFSS38qj+hpTcLLWwpIwA2A5bje/x5jmVn2tzUMg9IVw==", - "dev": true, "dependencies": { "browserslist": "^4.22.2" }, @@ -20915,7 +20872,6 @@ "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -23173,6 +23129,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==" + }, "node_modules/is-native": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-native/-/is-native-1.0.1.tgz", @@ -25868,8 +25829,7 @@ "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "node_modules/js-yaml": { "version": "4.1.0", @@ -26075,7 +26035,6 @@ "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, "bin": { "jsesc": "bin/jsesc" }, @@ -27567,8 +27526,7 @@ "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" }, "node_modules/lodash.defaultsdeep": { "version": "4.6.1", @@ -27923,6 +27881,14 @@ "lz-string": "bin/bin.js" } }, + "node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, "node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -36556,14 +36522,12 @@ "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" }, "node_modules/regenerate-unicode-properties": { "version": "10.1.1", "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", - "dev": true, "dependencies": { "regenerate": "^1.4.2" }, @@ -36580,7 +36544,6 @@ "version": "0.15.2", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "dev": true, "dependencies": { "@babel/runtime": "^7.8.4" } @@ -36614,7 +36577,6 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", - "dev": true, "dependencies": { "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", @@ -36655,7 +36617,6 @@ "version": "0.9.1", "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": true, "dependencies": { "jsesc": "~0.5.0" }, @@ -36667,7 +36628,6 @@ "version": "0.5.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true, "bin": { "jsesc": "bin/jsesc" } @@ -37175,6 +37135,125 @@ "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==", "dev": true }, + "node_modules/rollup": { + "version": "1.32.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.32.1.tgz", + "integrity": "sha512-/2HA0Ec70TvQnXdzynFffkjA6XN+1e2pEv/uKS5Ulca40g2L7KuOE3riasHoNVHOsFD5KKZgDsMk1CP3Tw9s+A==", + "dependencies": { + "@types/estree": "*", + "@types/node": "*", + "acorn": "^7.1.0" + }, + "bin": { + "rollup": "dist/bin/rollup" + } + }, + "node_modules/rollup-plugin-babel": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-4.4.0.tgz", + "integrity": "sha512-Lek/TYp1+7g7I+uMfJnnSJ7YWoD58ajo6Oarhlex7lvUce+RCKRuGRSgztDO3/MF/PuGKmUL5iTHKf208UNszw==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-babel.", + "dependencies": { + "@babel/helper-module-imports": "^7.0.0", + "rollup-pluginutils": "^2.8.1" + }, + "peerDependencies": { + "@babel/core": "7 || ^7.0.0-rc.2", + "rollup": ">=0.60.0 <3" + } + }, + "node_modules/rollup-plugin-terser": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-5.3.1.tgz", + "integrity": "sha512-1pkwkervMJQGFYvM9nscrUoncPwiKR/K+bHdjv6PFgRo3cgPHoRT83y2Aa3GvINj4539S15t/tpFPb775TDs6w==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", + "dependencies": { + "@babel/code-frame": "^7.5.5", + "jest-worker": "^24.9.0", + "rollup-pluginutils": "^2.8.2", + "serialize-javascript": "^4.0.0", + "terser": "^4.6.2" + }, + "peerDependencies": { + "rollup": ">=0.66.0 <3" + } + }, + "node_modules/rollup-plugin-terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/rollup-plugin-terser/node_modules/jest-worker": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", + "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", + "dependencies": { + "merge-stream": "^2.0.0", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/rollup-plugin-terser/node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/rollup-plugin-terser/node_modules/terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dependencies": { + "estree-walker": "^0.6.1" + } + }, + "node_modules/rollup-pluginutils/node_modules/estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==" + }, + "node_modules/rollup/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/rtl-detect": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.0.4.tgz", @@ -38199,6 +38278,18 @@ "source-map": "^0.6.0" } }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated" + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead" + }, "node_modules/space-separated-tokens": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", @@ -39244,7 +39335,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", - "dev": true, "engines": { "node": ">=4" } @@ -39514,7 +39604,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true, "engines": { "node": ">=4" } @@ -40001,7 +40090,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true, "engines": { "node": ">=4" } @@ -40019,7 +40107,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" @@ -40032,7 +40119,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "dev": true, "engines": { "node": ">=4" } @@ -40041,7 +40127,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true, "engines": { "node": ">=4" } @@ -41672,155 +41757,231 @@ } }, "node_modules/workbox-background-sync": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-4.3.1.tgz", - "integrity": "sha512-1uFkvU8JXi7L7fCHVBEEnc3asPpiAL33kO495UMcD5+arew9IbKW2rV5lpzhoWcm/qhGB89YfO4PmB/0hQwPRg==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-5.1.4.tgz", + "integrity": "sha512-AH6x5pYq4vwQvfRDWH+vfOePfPIYQ00nCEB7dJRU1e0n9+9HMRyvI63FlDvtFT2AvXVRsXvUt7DNMEToyJLpSA==", "dependencies": { - "workbox-core": "^4.3.1" + "workbox-core": "^5.1.4" } }, "node_modules/workbox-broadcast-update": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-4.3.1.tgz", - "integrity": "sha512-MTSfgzIljpKLTBPROo4IpKjESD86pPFlZwlvVG32Kb70hW+aob4Jxpblud8EhNb1/L5m43DUM4q7C+W6eQMMbA==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-5.1.4.tgz", + "integrity": "sha512-HTyTWkqXvHRuqY73XrwvXPud/FN6x3ROzkfFPsRjtw/kGZuZkPzfeH531qdUGfhtwjmtO/ZzXcWErqVzJNdXaA==", "dependencies": { - "workbox-core": "^4.3.1" + "workbox-core": "^5.1.4" } }, "node_modules/workbox-build": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-4.3.1.tgz", - "integrity": "sha512-UHdwrN3FrDvicM3AqJS/J07X0KXj67R8Cg0waq1MKEOqzo89ap6zh6LmaLnRAjpB+bDIz+7OlPye9iii9KBnxw==", - "dependencies": { - "@babel/runtime": "^7.3.4", - "@hapi/joi": "^15.0.0", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-5.1.4.tgz", + "integrity": "sha512-xUcZn6SYU8usjOlfLb9Y2/f86Gdo+fy1fXgH8tJHjxgpo53VVsqRX0lUDw8/JuyzNmXuo8vXX14pXX2oIm9Bow==", + "dependencies": { + "@babel/core": "^7.8.4", + "@babel/preset-env": "^7.8.4", + "@babel/runtime": "^7.8.4", + "@hapi/joi": "^15.1.0", + "@rollup/plugin-node-resolve": "^7.1.1", + "@rollup/plugin-replace": "^2.3.1", + "@surma/rollup-plugin-off-main-thread": "^1.1.1", "common-tags": "^1.8.0", - "fs-extra": "^4.0.2", - "glob": "^7.1.3", - "lodash.template": "^4.4.0", - "pretty-bytes": "^5.1.0", + "fast-json-stable-stringify": "^2.1.0", + "fs-extra": "^8.1.0", + "glob": "^7.1.6", + "lodash.template": "^4.5.0", + "pretty-bytes": "^5.3.0", + "rollup": "^1.31.1", + "rollup-plugin-babel": "^4.3.3", + "rollup-plugin-terser": "^5.3.1", + "source-map": "^0.7.3", + "source-map-url": "^0.4.0", "stringify-object": "^3.3.0", "strip-comments": "^1.0.2", - "workbox-background-sync": "^4.3.1", - "workbox-broadcast-update": "^4.3.1", - "workbox-cacheable-response": "^4.3.1", - "workbox-core": "^4.3.1", - "workbox-expiration": "^4.3.1", - "workbox-google-analytics": "^4.3.1", - "workbox-navigation-preload": "^4.3.1", - "workbox-precaching": "^4.3.1", - "workbox-range-requests": "^4.3.1", - "workbox-routing": "^4.3.1", - "workbox-strategies": "^4.3.1", - "workbox-streams": "^4.3.1", - "workbox-sw": "^4.3.1", - "workbox-window": "^4.3.1" + "tempy": "^0.3.0", + "upath": "^1.2.0", + "workbox-background-sync": "^5.1.4", + "workbox-broadcast-update": "^5.1.4", + "workbox-cacheable-response": "^5.1.4", + "workbox-core": "^5.1.4", + "workbox-expiration": "^5.1.4", + "workbox-google-analytics": "^5.1.4", + "workbox-navigation-preload": "^5.1.4", + "workbox-precaching": "^5.1.4", + "workbox-range-requests": "^5.1.4", + "workbox-routing": "^5.1.4", + "workbox-strategies": "^5.1.4", + "workbox-streams": "^5.1.4", + "workbox-sw": "^5.1.4", + "workbox-window": "^5.1.4" }, "engines": { - "node": ">=4.0.0" + "node": ">=8.0.0" + } + }, + "node_modules/workbox-build/node_modules/crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha512-GsVpkFPlycH7/fRR7Dhcmnoii54gV1nz7y4CWyeFS14N+JVBBhY+r8amRHE4BwSYal7BPTDp8isvAlCxyFt3Hg==", + "engines": { + "node": ">=4" } }, "node_modules/workbox-build/node_modules/fs-extra": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dependencies": { - "graceful-fs": "^4.1.2", + "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/workbox-build/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/workbox-build/node_modules/tempy": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.3.0.tgz", + "integrity": "sha512-WrH/pui8YCwmeiAoxV+lpRH9HpRtgBhSR2ViBPgpGb/wnYDzp21R4MN45fsCGvLROvY67o3byhJRYRONJyImVQ==", + "dependencies": { + "temp-dir": "^1.0.0", + "type-fest": "^0.3.1", + "unique-string": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/workbox-build/node_modules/type-fest": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", + "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/workbox-build/node_modules/unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha512-ODgiYu03y5g76A1I9Gt0/chLCzQjvzDy7DsZGsLOE/1MrF6wriEskSncj1+/C58Xk/kPZDppSctDybCwOSaGAg==", + "dependencies": { + "crypto-random-string": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/workbox-build/node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "engines": { + "node": ">=4", + "yarn": "*" } }, "node_modules/workbox-cacheable-response": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-4.3.1.tgz", - "integrity": "sha512-Rp5qlzm6z8IOvnQNkCdO9qrDgDpoPNguovs0H8C+wswLuPgSzSp9p2afb5maUt9R1uTIwOXrVQMmPfPypv+npw==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-5.1.4.tgz", + "integrity": "sha512-0bfvMZs0Of1S5cdswfQK0BXt6ulU5kVD4lwer2CeI+03czHprXR3V4Y8lPTooamn7eHP8Iywi5QjyAMjw0qauA==", "dependencies": { - "workbox-core": "^4.3.1" + "workbox-core": "^5.1.4" } }, "node_modules/workbox-core": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-4.3.1.tgz", - "integrity": "sha512-I3C9jlLmMKPxAC1t0ExCq+QoAMd0vAAHULEgRZ7kieCdUd919n53WC0AfvokHNwqRhGn+tIIj7vcb5duCjs2Kg==" + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-5.1.4.tgz", + "integrity": "sha512-+4iRQan/1D8I81nR2L5vcbaaFskZC2CL17TLbvWVzQ4qiF/ytOGF6XeV54pVxAvKUtkLANhk8TyIUMtiMw2oDg==" }, "node_modules/workbox-expiration": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-4.3.1.tgz", - "integrity": "sha512-vsJLhgQsQouv9m0rpbXubT5jw0jMQdjpkum0uT+d9tTwhXcEZks7qLfQ9dGSaufTD2eimxbUOJfWLbNQpIDMPw==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-5.1.4.tgz", + "integrity": "sha512-oDO/5iC65h2Eq7jctAv858W2+CeRW5e0jZBMNRXpzp0ZPvuT6GblUiHnAsC5W5lANs1QS9atVOm4ifrBiYY7AQ==", "dependencies": { - "workbox-core": "^4.3.1" + "workbox-core": "^5.1.4" } }, "node_modules/workbox-google-analytics": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-4.3.1.tgz", - "integrity": "sha512-xzCjAoKuOb55CBSwQrbyWBKqp35yg1vw9ohIlU2wTy06ZrYfJ8rKochb1MSGlnoBfXGWss3UPzxR5QL5guIFdg==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-5.1.4.tgz", + "integrity": "sha512-0IFhKoEVrreHpKgcOoddV+oIaVXBFKXUzJVBI+nb0bxmcwYuZMdteBTp8AEDJacENtc9xbR0wa9RDCnYsCDLjA==", + "deprecated": "It is not compatible with newer versions of GA starting with v4, as long as you are using GAv3 it should be ok, but the package is not longer being maintained", "dependencies": { - "workbox-background-sync": "^4.3.1", - "workbox-core": "^4.3.1", - "workbox-routing": "^4.3.1", - "workbox-strategies": "^4.3.1" + "workbox-background-sync": "^5.1.4", + "workbox-core": "^5.1.4", + "workbox-routing": "^5.1.4", + "workbox-strategies": "^5.1.4" } }, "node_modules/workbox-navigation-preload": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-4.3.1.tgz", - "integrity": "sha512-K076n3oFHYp16/C+F8CwrRqD25GitA6Rkd6+qAmLmMv1QHPI2jfDwYqrytOfKfYq42bYtW8Pr21ejZX7GvALOw==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-5.1.4.tgz", + "integrity": "sha512-Wf03osvK0wTflAfKXba//QmWC5BIaIZARU03JIhAEO2wSB2BDROWI8Q/zmianf54kdV7e1eLaIEZhth4K4MyfQ==", "dependencies": { - "workbox-core": "^4.3.1" + "workbox-core": "^5.1.4" } }, "node_modules/workbox-precaching": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-4.3.1.tgz", - "integrity": "sha512-piSg/2csPoIi/vPpp48t1q5JLYjMkmg5gsXBQkh/QYapCdVwwmKlU9mHdmy52KsDGIjVaqEUMFvEzn2LRaigqQ==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-5.1.4.tgz", + "integrity": "sha512-gCIFrBXmVQLFwvAzuGLCmkUYGVhBb7D1k/IL7pUJUO5xacjLcFUaLnnsoVepBGAiKw34HU1y/YuqvTKim9qAZA==", "dependencies": { - "workbox-core": "^4.3.1" + "workbox-core": "^5.1.4" } }, "node_modules/workbox-range-requests": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-4.3.1.tgz", - "integrity": "sha512-S+HhL9+iTFypJZ/yQSl/x2Bf5pWnbXdd3j57xnb0V60FW1LVn9LRZkPtneODklzYuFZv7qK6riZ5BNyc0R0jZA==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-5.1.4.tgz", + "integrity": "sha512-1HSujLjgTeoxHrMR2muDW2dKdxqCGMc1KbeyGcmjZZAizJTFwu7CWLDmLv6O1ceWYrhfuLFJO+umYMddk2XMhw==", "dependencies": { - "workbox-core": "^4.3.1" + "workbox-core": "^5.1.4" } }, "node_modules/workbox-routing": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-4.3.1.tgz", - "integrity": "sha512-FkbtrODA4Imsi0p7TW9u9MXuQ5P4pVs1sWHK4dJMMChVROsbEltuE79fBoIk/BCztvOJ7yUpErMKa4z3uQLX+g==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-5.1.4.tgz", + "integrity": "sha512-8ljknRfqE1vEQtnMtzfksL+UXO822jJlHTIR7+BtJuxQ17+WPZfsHqvk1ynR/v0EHik4x2+826Hkwpgh4GKDCw==", "dependencies": { - "workbox-core": "^4.3.1" + "workbox-core": "^5.1.4" } }, "node_modules/workbox-strategies": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-4.3.1.tgz", - "integrity": "sha512-F/+E57BmVG8dX6dCCopBlkDvvhg/zj6VDs0PigYwSN23L8hseSRwljrceU2WzTvk/+BSYICsWmRq5qHS2UYzhw==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-5.1.4.tgz", + "integrity": "sha512-VVS57LpaJTdjW3RgZvPwX0NlhNmscR7OQ9bP+N/34cYMDzXLyA6kqWffP6QKXSkca1OFo/v6v7hW7zrrguo6EA==", "dependencies": { - "workbox-core": "^4.3.1" + "workbox-core": "^5.1.4", + "workbox-routing": "^5.1.4" } }, "node_modules/workbox-streams": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-4.3.1.tgz", - "integrity": "sha512-4Kisis1f/y0ihf4l3u/+ndMkJkIT4/6UOacU3A4BwZSAC9pQ9vSvJpIi/WFGQRH/uPXvuVjF5c2RfIPQFSS2uA==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-5.1.4.tgz", + "integrity": "sha512-xU8yuF1hI/XcVhJUAfbQLa1guQUhdLMPQJkdT0kn6HP5CwiPOGiXnSFq80rAG4b1kJUChQQIGPrq439FQUNVrw==", "dependencies": { - "workbox-core": "^4.3.1" + "workbox-core": "^5.1.4", + "workbox-routing": "^5.1.4" } }, "node_modules/workbox-sw": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-4.3.1.tgz", - "integrity": "sha512-0jXdusCL2uC5gM3yYFT6QMBzKfBr2XTk0g5TPAV4y8IZDyVNDyj1a8uSXy3/XrvkVTmQvLN4O5k3JawGReXr9w==" + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-5.1.4.tgz", + "integrity": "sha512-9xKnKw95aXwSNc8kk8gki4HU0g0W6KXu+xks7wFuC7h0sembFnTrKtckqZxbSod41TDaGh+gWUA5IRXrL0ECRA==" }, "node_modules/workbox-window": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-4.3.1.tgz", - "integrity": "sha512-C5gWKh6I58w3GeSc0wp2Ne+rqVw8qwcmZnQGpjiek8A2wpbxSJb1FdCoQVO+jDJs35bFgo/WETgl1fqgsxN0Hg==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-5.1.4.tgz", + "integrity": "sha512-vXQtgTeMCUq/4pBWMfQX8Ee7N2wVC4Q7XYFqLnfbXJ2hqew/cU1uMTD2KqGEgEpE4/30luxIxgE+LkIa8glBYw==", "dependencies": { - "workbox-core": "^4.3.1" + "workbox-core": "^5.1.4" } }, "node_modules/wrap-ansi": { @@ -43637,6 +43798,159 @@ "typescript": "^5.4.5" } }, + "packages/gasket-plugin-workbox/node_modules/fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "packages/gasket-plugin-workbox/node_modules/workbox-background-sync": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-4.3.1.tgz", + "integrity": "sha512-1uFkvU8JXi7L7fCHVBEEnc3asPpiAL33kO495UMcD5+arew9IbKW2rV5lpzhoWcm/qhGB89YfO4PmB/0hQwPRg==", + "dependencies": { + "workbox-core": "^4.3.1" + } + }, + "packages/gasket-plugin-workbox/node_modules/workbox-broadcast-update": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-4.3.1.tgz", + "integrity": "sha512-MTSfgzIljpKLTBPROo4IpKjESD86pPFlZwlvVG32Kb70hW+aob4Jxpblud8EhNb1/L5m43DUM4q7C+W6eQMMbA==", + "dependencies": { + "workbox-core": "^4.3.1" + } + }, + "packages/gasket-plugin-workbox/node_modules/workbox-build": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-4.3.1.tgz", + "integrity": "sha512-UHdwrN3FrDvicM3AqJS/J07X0KXj67R8Cg0waq1MKEOqzo89ap6zh6LmaLnRAjpB+bDIz+7OlPye9iii9KBnxw==", + "dependencies": { + "@babel/runtime": "^7.3.4", + "@hapi/joi": "^15.0.0", + "common-tags": "^1.8.0", + "fs-extra": "^4.0.2", + "glob": "^7.1.3", + "lodash.template": "^4.4.0", + "pretty-bytes": "^5.1.0", + "stringify-object": "^3.3.0", + "strip-comments": "^1.0.2", + "workbox-background-sync": "^4.3.1", + "workbox-broadcast-update": "^4.3.1", + "workbox-cacheable-response": "^4.3.1", + "workbox-core": "^4.3.1", + "workbox-expiration": "^4.3.1", + "workbox-google-analytics": "^4.3.1", + "workbox-navigation-preload": "^4.3.1", + "workbox-precaching": "^4.3.1", + "workbox-range-requests": "^4.3.1", + "workbox-routing": "^4.3.1", + "workbox-strategies": "^4.3.1", + "workbox-streams": "^4.3.1", + "workbox-sw": "^4.3.1", + "workbox-window": "^4.3.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "packages/gasket-plugin-workbox/node_modules/workbox-cacheable-response": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-4.3.1.tgz", + "integrity": "sha512-Rp5qlzm6z8IOvnQNkCdO9qrDgDpoPNguovs0H8C+wswLuPgSzSp9p2afb5maUt9R1uTIwOXrVQMmPfPypv+npw==", + "dependencies": { + "workbox-core": "^4.3.1" + } + }, + "packages/gasket-plugin-workbox/node_modules/workbox-core": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-4.3.1.tgz", + "integrity": "sha512-I3C9jlLmMKPxAC1t0ExCq+QoAMd0vAAHULEgRZ7kieCdUd919n53WC0AfvokHNwqRhGn+tIIj7vcb5duCjs2Kg==" + }, + "packages/gasket-plugin-workbox/node_modules/workbox-expiration": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-4.3.1.tgz", + "integrity": "sha512-vsJLhgQsQouv9m0rpbXubT5jw0jMQdjpkum0uT+d9tTwhXcEZks7qLfQ9dGSaufTD2eimxbUOJfWLbNQpIDMPw==", + "dependencies": { + "workbox-core": "^4.3.1" + } + }, + "packages/gasket-plugin-workbox/node_modules/workbox-google-analytics": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-4.3.1.tgz", + "integrity": "sha512-xzCjAoKuOb55CBSwQrbyWBKqp35yg1vw9ohIlU2wTy06ZrYfJ8rKochb1MSGlnoBfXGWss3UPzxR5QL5guIFdg==", + "deprecated": "It is not compatible with newer versions of GA starting with v4, as long as you are using GAv3 it should be ok, but the package is not longer being maintained", + "dependencies": { + "workbox-background-sync": "^4.3.1", + "workbox-core": "^4.3.1", + "workbox-routing": "^4.3.1", + "workbox-strategies": "^4.3.1" + } + }, + "packages/gasket-plugin-workbox/node_modules/workbox-navigation-preload": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-4.3.1.tgz", + "integrity": "sha512-K076n3oFHYp16/C+F8CwrRqD25GitA6Rkd6+qAmLmMv1QHPI2jfDwYqrytOfKfYq42bYtW8Pr21ejZX7GvALOw==", + "dependencies": { + "workbox-core": "^4.3.1" + } + }, + "packages/gasket-plugin-workbox/node_modules/workbox-precaching": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-4.3.1.tgz", + "integrity": "sha512-piSg/2csPoIi/vPpp48t1q5JLYjMkmg5gsXBQkh/QYapCdVwwmKlU9mHdmy52KsDGIjVaqEUMFvEzn2LRaigqQ==", + "dependencies": { + "workbox-core": "^4.3.1" + } + }, + "packages/gasket-plugin-workbox/node_modules/workbox-range-requests": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-4.3.1.tgz", + "integrity": "sha512-S+HhL9+iTFypJZ/yQSl/x2Bf5pWnbXdd3j57xnb0V60FW1LVn9LRZkPtneODklzYuFZv7qK6riZ5BNyc0R0jZA==", + "dependencies": { + "workbox-core": "^4.3.1" + } + }, + "packages/gasket-plugin-workbox/node_modules/workbox-routing": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-4.3.1.tgz", + "integrity": "sha512-FkbtrODA4Imsi0p7TW9u9MXuQ5P4pVs1sWHK4dJMMChVROsbEltuE79fBoIk/BCztvOJ7yUpErMKa4z3uQLX+g==", + "dependencies": { + "workbox-core": "^4.3.1" + } + }, + "packages/gasket-plugin-workbox/node_modules/workbox-strategies": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-4.3.1.tgz", + "integrity": "sha512-F/+E57BmVG8dX6dCCopBlkDvvhg/zj6VDs0PigYwSN23L8hseSRwljrceU2WzTvk/+BSYICsWmRq5qHS2UYzhw==", + "dependencies": { + "workbox-core": "^4.3.1" + } + }, + "packages/gasket-plugin-workbox/node_modules/workbox-streams": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-4.3.1.tgz", + "integrity": "sha512-4Kisis1f/y0ihf4l3u/+ndMkJkIT4/6UOacU3A4BwZSAC9pQ9vSvJpIi/WFGQRH/uPXvuVjF5c2RfIPQFSS2uA==", + "dependencies": { + "workbox-core": "^4.3.1" + } + }, + "packages/gasket-plugin-workbox/node_modules/workbox-sw": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-4.3.1.tgz", + "integrity": "sha512-0jXdusCL2uC5gM3yYFT6QMBzKfBr2XTk0g5TPAV4y8IZDyVNDyj1a8uSXy3/XrvkVTmQvLN4O5k3JawGReXr9w==" + }, + "packages/gasket-plugin-workbox/node_modules/workbox-window": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-4.3.1.tgz", + "integrity": "sha512-C5gWKh6I58w3GeSc0wp2Ne+rqVw8qwcmZnQGpjiek8A2wpbxSJb1FdCoQVO+jDJs35bFgo/WETgl1fqgsxN0Hg==", + "dependencies": { + "workbox-core": "^4.3.1" + } + }, "packages/gasket-preset-api": { "name": "@gasket/preset-api", "version": "6.47.0", @@ -44056,7 +44370,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, "requires": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -44153,7 +44466,6 @@ "version": "7.23.5", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", - "dev": true, "requires": { "@babel/highlight": "^7.23.4", "chalk": "^2.4.2" @@ -44162,14 +44474,12 @@ "@babel/compat-data": { "version": "7.23.5", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", - "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", - "dev": true + "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==" }, "@babel/core": { "version": "7.23.7", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.7.tgz", "integrity": "sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==", - "dev": true, "requires": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.23.5", @@ -44191,14 +44501,12 @@ "convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" }, "semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" } } }, @@ -44231,7 +44539,6 @@ "version": "7.23.6", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", - "dev": true, "requires": { "@babel/types": "^7.23.6", "@jridgewell/gen-mapping": "^0.3.2", @@ -44243,7 +44550,6 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dev": true, "requires": { "@babel/types": "^7.22.5" } @@ -44252,7 +44558,6 @@ "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", - "dev": true, "requires": { "@babel/types": "^7.22.15" } @@ -44261,7 +44566,6 @@ "version": "7.23.6", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", - "dev": true, "requires": { "@babel/compat-data": "^7.23.5", "@babel/helper-validator-option": "^7.23.5", @@ -44273,8 +44577,7 @@ "semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" } } }, @@ -44282,7 +44585,6 @@ "version": "7.23.7", "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.7.tgz", "integrity": "sha512-xCoqR/8+BoNnXOY7RVSgv6X+o7pmT5q1d+gGcRlXYkI+9B31glE4jeejhKVpA04O1AtzOt7OSQ6VYKP5FcRl9g==", - "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-environment-visitor": "^7.22.20", @@ -44298,8 +44600,7 @@ "semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" } } }, @@ -44307,7 +44608,6 @@ "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", - "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.22.5", "regexpu-core": "^5.3.1", @@ -44317,8 +44617,7 @@ "semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" } } }, @@ -44326,7 +44625,6 @@ "version": "0.4.4", "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.4.tgz", "integrity": "sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA==", - "dev": true, "requires": { "@babel/helper-compilation-targets": "^7.22.6", "@babel/helper-plugin-utils": "^7.22.5", @@ -44338,14 +44636,12 @@ "@babel/helper-environment-visitor": { "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "dev": true + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==" }, "@babel/helper-function-name": { "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dev": true, "requires": { "@babel/template": "^7.22.15", "@babel/types": "^7.23.0" @@ -44355,7 +44651,6 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, "requires": { "@babel/types": "^7.22.5" } @@ -44364,7 +44659,6 @@ "version": "7.23.0", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", - "dev": true, "requires": { "@babel/types": "^7.23.0" } @@ -44373,7 +44667,6 @@ "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", - "dev": true, "requires": { "@babel/types": "^7.22.15" } @@ -44382,7 +44675,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", - "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-module-imports": "^7.22.15", @@ -44395,7 +44687,6 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", - "dev": true, "requires": { "@babel/types": "^7.22.5" } @@ -44403,14 +44694,12 @@ "@babel/helper-plugin-utils": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==" }, "@babel/helper-remap-async-to-generator": { "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", - "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-environment-visitor": "^7.22.20", @@ -44421,7 +44710,6 @@ "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", - "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-member-expression-to-functions": "^7.22.15", @@ -44432,7 +44720,6 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, "requires": { "@babel/types": "^7.22.5" } @@ -44441,7 +44728,6 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", - "dev": true, "requires": { "@babel/types": "^7.22.5" } @@ -44450,7 +44736,6 @@ "version": "7.22.6", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, "requires": { "@babel/types": "^7.22.5" } @@ -44458,26 +44743,22 @@ "@babel/helper-string-parser": { "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", - "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", - "dev": true + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==" }, "@babel/helper-validator-identifier": { "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", - "dev": true + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==" }, "@babel/helper-validator-option": { "version": "7.23.5", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", - "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", - "dev": true + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==" }, "@babel/helper-wrap-function": { "version": "7.22.20", "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", - "dev": true, "requires": { "@babel/helper-function-name": "^7.22.5", "@babel/template": "^7.22.15", @@ -44488,7 +44769,6 @@ "version": "7.23.8", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.8.tgz", "integrity": "sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ==", - "dev": true, "requires": { "@babel/template": "^7.22.15", "@babel/traverse": "^7.23.7", @@ -44499,7 +44779,6 @@ "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", - "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", @@ -44523,14 +44802,12 @@ "@babel/parser": { "version": "7.23.6", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", - "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", - "dev": true + "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==" }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz", "integrity": "sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" } @@ -44539,7 +44816,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz", "integrity": "sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", @@ -44550,7 +44826,6 @@ "version": "7.23.7", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz", "integrity": "sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw==", - "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-plugin-utils": "^7.22.5" @@ -44582,14 +44857,12 @@ "@babel/plugin-proposal-private-property-in-object": { "version": "7.21.0-placeholder-for-preset-env.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==" }, "@babel/plugin-syntax-async-generators": { "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -44607,7 +44880,6 @@ "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.12.13" } @@ -44616,7 +44888,6 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } @@ -44625,7 +44896,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -44634,7 +44904,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.3" } @@ -44643,7 +44912,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz", "integrity": "sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" } @@ -44652,7 +44920,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz", "integrity": "sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" } @@ -44661,7 +44928,6 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } @@ -44670,7 +44936,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -44688,7 +44953,6 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } @@ -44697,7 +44961,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -44706,7 +44969,6 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } @@ -44715,7 +44977,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -44724,7 +44985,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -44733,7 +44993,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" } @@ -44742,7 +45001,6 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } @@ -44751,7 +45009,6 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } @@ -44769,7 +45026,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "dev": true, "requires": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -44779,7 +45035,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz", "integrity": "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" } @@ -44788,7 +45043,6 @@ "version": "7.23.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.7.tgz", "integrity": "sha512-PdxEpL71bJp1byMG0va5gwQcXHxuEYC/BgI/e88mGTtohbZN28O5Yit0Plkkm/dBzCF/BxmbNcses1RH1T+urA==", - "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-plugin-utils": "^7.22.5", @@ -44800,7 +45054,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz", "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==", - "dev": true, "requires": { "@babel/helper-module-imports": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", @@ -44811,7 +45064,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz", "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" } @@ -44820,7 +45072,6 @@ "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz", "integrity": "sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" } @@ -44829,7 +45080,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz", "integrity": "sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==", - "dev": true, "requires": { "@babel/helper-create-class-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" @@ -44839,7 +45089,6 @@ "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz", "integrity": "sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==", - "dev": true, "requires": { "@babel/helper-create-class-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", @@ -44850,7 +45099,6 @@ "version": "7.23.8", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz", "integrity": "sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==", - "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-compilation-targets": "^7.23.6", @@ -44865,8 +45113,7 @@ "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" } } }, @@ -44874,7 +45121,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz", "integrity": "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/template": "^7.22.15" @@ -44884,7 +45130,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz", "integrity": "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" } @@ -44893,7 +45138,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz", "integrity": "sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==", - "dev": true, "requires": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" @@ -44903,7 +45147,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz", "integrity": "sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" } @@ -44912,7 +45155,6 @@ "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz", "integrity": "sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3" @@ -44922,7 +45164,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz", "integrity": "sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==", - "dev": true, "requires": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" @@ -44932,7 +45173,6 @@ "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz", "integrity": "sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" @@ -44942,7 +45182,6 @@ "version": "7.23.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz", "integrity": "sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" @@ -44952,7 +45191,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz", "integrity": "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==", - "dev": true, "requires": { "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-function-name": "^7.23.0", @@ -44963,7 +45201,6 @@ "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz", "integrity": "sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-json-strings": "^7.8.3" @@ -44973,7 +45210,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz", "integrity": "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" } @@ -44982,7 +45218,6 @@ "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz", "integrity": "sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" @@ -44992,7 +45227,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz", "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" } @@ -45001,7 +45235,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz", "integrity": "sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==", - "dev": true, "requires": { "@babel/helper-module-transforms": "^7.23.3", "@babel/helper-plugin-utils": "^7.22.5" @@ -45011,7 +45244,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", - "dev": true, "requires": { "@babel/helper-module-transforms": "^7.23.3", "@babel/helper-plugin-utils": "^7.22.5", @@ -45022,7 +45254,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz", "integrity": "sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==", - "dev": true, "requires": { "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-module-transforms": "^7.23.3", @@ -45034,7 +45265,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz", "integrity": "sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==", - "dev": true, "requires": { "@babel/helper-module-transforms": "^7.23.3", "@babel/helper-plugin-utils": "^7.22.5" @@ -45044,7 +45274,6 @@ "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", - "dev": true, "requires": { "@babel/helper-create-regexp-features-plugin": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5" @@ -45054,7 +45283,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz", "integrity": "sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" } @@ -45063,7 +45291,6 @@ "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz", "integrity": "sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" @@ -45073,7 +45300,6 @@ "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz", "integrity": "sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-numeric-separator": "^7.10.4" @@ -45083,7 +45309,6 @@ "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz", "integrity": "sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==", - "dev": true, "requires": { "@babel/compat-data": "^7.23.3", "@babel/helper-compilation-targets": "^7.22.15", @@ -45096,7 +45321,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz", "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-replace-supers": "^7.22.20" @@ -45106,7 +45330,6 @@ "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz", "integrity": "sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" @@ -45116,7 +45339,6 @@ "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz", "integrity": "sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", @@ -45127,7 +45349,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz", "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" } @@ -45136,7 +45357,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz", "integrity": "sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==", - "dev": true, "requires": { "@babel/helper-create-class-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" @@ -45146,7 +45366,6 @@ "version": "7.23.4", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz", "integrity": "sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==", - "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-create-class-features-plugin": "^7.22.15", @@ -45158,7 +45377,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz", "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" } @@ -45217,7 +45435,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz", "integrity": "sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", "regenerator-transform": "^0.15.2" @@ -45227,7 +45444,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz", "integrity": "sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" } @@ -45258,7 +45474,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz", "integrity": "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" } @@ -45267,7 +45482,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz", "integrity": "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" @@ -45277,7 +45491,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz", "integrity": "sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" } @@ -45286,7 +45499,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz", "integrity": "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" } @@ -45295,7 +45507,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz", "integrity": "sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" } @@ -45316,7 +45527,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz", "integrity": "sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" } @@ -45325,7 +45535,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz", "integrity": "sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==", - "dev": true, "requires": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" @@ -45335,7 +45544,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz", "integrity": "sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==", - "dev": true, "requires": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" @@ -45345,7 +45553,6 @@ "version": "7.23.3", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz", "integrity": "sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==", - "dev": true, "requires": { "@babel/helper-create-regexp-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" @@ -45355,7 +45562,6 @@ "version": "7.23.8", "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.8.tgz", "integrity": "sha512-lFlpmkApLkEP6woIKprO6DO60RImpatTQKtz4sUcDjVcK8M8mQ4sZsuxaTMNOZf0sqAq/ReYW1ZBHnOQwKpLWA==", - "dev": true, "requires": { "@babel/compat-data": "^7.23.5", "@babel/helper-compilation-targets": "^7.23.6", @@ -45442,8 +45648,7 @@ "semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" } } }, @@ -45451,7 +45656,6 @@ "version": "0.1.6-no-external-plugins", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", - "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/types": "^7.4.4", @@ -45525,8 +45729,7 @@ "@babel/regjsgen": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "dev": true + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" }, "@babel/runtime": { "version": "7.23.8", @@ -45550,7 +45753,6 @@ "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", - "dev": true, "requires": { "@babel/code-frame": "^7.22.13", "@babel/parser": "^7.22.15", @@ -45561,7 +45763,6 @@ "version": "7.23.7", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz", "integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==", - "dev": true, "requires": { "@babel/code-frame": "^7.23.5", "@babel/generator": "^7.23.6", @@ -45578,8 +45779,7 @@ "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" } } }, @@ -45587,7 +45787,6 @@ "version": "7.23.6", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", - "dev": true, "requires": { "@babel/helper-string-parser": "^7.23.4", "@babel/helper-validator-identifier": "^7.22.20", @@ -48697,6 +48896,157 @@ "serve-static": "^1.15.0", "typescript": "^5.4.5", "workbox-build": "^4.1.0" + }, + "dependencies": { + "fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "workbox-background-sync": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-4.3.1.tgz", + "integrity": "sha512-1uFkvU8JXi7L7fCHVBEEnc3asPpiAL33kO495UMcD5+arew9IbKW2rV5lpzhoWcm/qhGB89YfO4PmB/0hQwPRg==", + "requires": { + "workbox-core": "^4.3.1" + } + }, + "workbox-broadcast-update": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-4.3.1.tgz", + "integrity": "sha512-MTSfgzIljpKLTBPROo4IpKjESD86pPFlZwlvVG32Kb70hW+aob4Jxpblud8EhNb1/L5m43DUM4q7C+W6eQMMbA==", + "requires": { + "workbox-core": "^4.3.1" + } + }, + "workbox-build": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-4.3.1.tgz", + "integrity": "sha512-UHdwrN3FrDvicM3AqJS/J07X0KXj67R8Cg0waq1MKEOqzo89ap6zh6LmaLnRAjpB+bDIz+7OlPye9iii9KBnxw==", + "requires": { + "@babel/runtime": "^7.3.4", + "@hapi/joi": "^15.0.0", + "common-tags": "^1.8.0", + "fs-extra": "^4.0.2", + "glob": "^7.1.3", + "lodash.template": "^4.4.0", + "pretty-bytes": "^5.1.0", + "stringify-object": "^3.3.0", + "strip-comments": "^1.0.2", + "workbox-background-sync": "^4.3.1", + "workbox-broadcast-update": "^4.3.1", + "workbox-cacheable-response": "^4.3.1", + "workbox-core": "^4.3.1", + "workbox-expiration": "^4.3.1", + "workbox-google-analytics": "^4.3.1", + "workbox-navigation-preload": "^4.3.1", + "workbox-precaching": "^4.3.1", + "workbox-range-requests": "^4.3.1", + "workbox-routing": "^4.3.1", + "workbox-strategies": "^4.3.1", + "workbox-streams": "^4.3.1", + "workbox-sw": "^4.3.1", + "workbox-window": "^4.3.1" + } + }, + "workbox-cacheable-response": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-4.3.1.tgz", + "integrity": "sha512-Rp5qlzm6z8IOvnQNkCdO9qrDgDpoPNguovs0H8C+wswLuPgSzSp9p2afb5maUt9R1uTIwOXrVQMmPfPypv+npw==", + "requires": { + "workbox-core": "^4.3.1" + } + }, + "workbox-core": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-4.3.1.tgz", + "integrity": "sha512-I3C9jlLmMKPxAC1t0ExCq+QoAMd0vAAHULEgRZ7kieCdUd919n53WC0AfvokHNwqRhGn+tIIj7vcb5duCjs2Kg==" + }, + "workbox-expiration": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-4.3.1.tgz", + "integrity": "sha512-vsJLhgQsQouv9m0rpbXubT5jw0jMQdjpkum0uT+d9tTwhXcEZks7qLfQ9dGSaufTD2eimxbUOJfWLbNQpIDMPw==", + "requires": { + "workbox-core": "^4.3.1" + } + }, + "workbox-google-analytics": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-4.3.1.tgz", + "integrity": "sha512-xzCjAoKuOb55CBSwQrbyWBKqp35yg1vw9ohIlU2wTy06ZrYfJ8rKochb1MSGlnoBfXGWss3UPzxR5QL5guIFdg==", + "requires": { + "workbox-background-sync": "^4.3.1", + "workbox-core": "^4.3.1", + "workbox-routing": "^4.3.1", + "workbox-strategies": "^4.3.1" + } + }, + "workbox-navigation-preload": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-4.3.1.tgz", + "integrity": "sha512-K076n3oFHYp16/C+F8CwrRqD25GitA6Rkd6+qAmLmMv1QHPI2jfDwYqrytOfKfYq42bYtW8Pr21ejZX7GvALOw==", + "requires": { + "workbox-core": "^4.3.1" + } + }, + "workbox-precaching": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-4.3.1.tgz", + "integrity": "sha512-piSg/2csPoIi/vPpp48t1q5JLYjMkmg5gsXBQkh/QYapCdVwwmKlU9mHdmy52KsDGIjVaqEUMFvEzn2LRaigqQ==", + "requires": { + "workbox-core": "^4.3.1" + } + }, + "workbox-range-requests": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-4.3.1.tgz", + "integrity": "sha512-S+HhL9+iTFypJZ/yQSl/x2Bf5pWnbXdd3j57xnb0V60FW1LVn9LRZkPtneODklzYuFZv7qK6riZ5BNyc0R0jZA==", + "requires": { + "workbox-core": "^4.3.1" + } + }, + "workbox-routing": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-4.3.1.tgz", + "integrity": "sha512-FkbtrODA4Imsi0p7TW9u9MXuQ5P4pVs1sWHK4dJMMChVROsbEltuE79fBoIk/BCztvOJ7yUpErMKa4z3uQLX+g==", + "requires": { + "workbox-core": "^4.3.1" + } + }, + "workbox-strategies": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-4.3.1.tgz", + "integrity": "sha512-F/+E57BmVG8dX6dCCopBlkDvvhg/zj6VDs0PigYwSN23L8hseSRwljrceU2WzTvk/+BSYICsWmRq5qHS2UYzhw==", + "requires": { + "workbox-core": "^4.3.1" + } + }, + "workbox-streams": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-4.3.1.tgz", + "integrity": "sha512-4Kisis1f/y0ihf4l3u/+ndMkJkIT4/6UOacU3A4BwZSAC9pQ9vSvJpIi/WFGQRH/uPXvuVjF5c2RfIPQFSS2uA==", + "requires": { + "workbox-core": "^4.3.1" + } + }, + "workbox-sw": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-4.3.1.tgz", + "integrity": "sha512-0jXdusCL2uC5gM3yYFT6QMBzKfBr2XTk0g5TPAV4y8IZDyVNDyj1a8uSXy3/XrvkVTmQvLN4O5k3JawGReXr9w==" + }, + "workbox-window": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-4.3.1.tgz", + "integrity": "sha512-C5gWKh6I58w3GeSc0wp2Ne+rqVw8qwcmZnQGpjiek8A2wpbxSJb1FdCoQVO+jDJs35bFgo/WETgl1fqgsxN0Hg==", + "requires": { + "workbox-core": "^4.3.1" + } + } } }, "@gasket/preset-api": { @@ -52356,6 +52706,49 @@ "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.24.tgz", "integrity": "sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==" }, + "@rollup/plugin-node-resolve": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.3.tgz", + "integrity": "sha512-RxtSL3XmdTAE2byxekYLnx+98kEUOrPHF/KRVjLH+DEIHy6kjIw7YINQzn+NXiH/NTrQLAwYs0GWB+csWygA9Q==", + "requires": { + "@rollup/pluginutils": "^3.0.8", + "@types/resolve": "0.0.8", + "builtin-modules": "^3.1.0", + "is-module": "^1.0.0", + "resolve": "^1.14.2" + } + }, + "@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "requires": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + } + }, + "@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "requires": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "dependencies": { + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" + }, + "estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==" + } + } + }, "@rushstack/eslint-patch": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.5.1.tgz", @@ -52433,6 +52826,22 @@ "webpack-sources": "^3.2.2" } }, + "@surma/rollup-plugin-off-main-thread": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-1.4.2.tgz", + "integrity": "sha512-yBMPqmd1yEJo/280PAMkychuaALyQ9Lkb5q1ck3mjJrFuEobIfhnQ4J3mbvBoISmR3SWMWV+cGB/I0lCQee79A==", + "requires": { + "ejs": "^2.6.1", + "magic-string": "^0.25.0" + }, + "dependencies": { + "ejs": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz", + "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==" + } + } + }, "@svgr/babel-plugin-add-jsx-attribute": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz", @@ -53329,6 +53738,14 @@ "@types/react-router": "*" } }, + "@types/resolve": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", + "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", + "requires": { + "@types/node": "*" + } + }, "@types/retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", @@ -53474,18 +53891,13 @@ } }, "@types/workbox-build": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@types/workbox-build/-/workbox-build-5.0.1.tgz", - "integrity": "sha512-lJrGzEHX/QT3E4F5ABBNvCb8ObOr2LfHNAqAGfRuBPncWlU/d3iIUorECKNXmnZnLbLsgpgvhJWPMgByzR+L+A==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/workbox-build/-/workbox-build-5.1.0.tgz", + "integrity": "sha512-kAu7EuhMG/h10bH9zxaUYLtfOQ7AczNvpzGzfW9ZPhlP6pcrx3gVhhxhTlU6AvIb5Q2udvSzwhRyvLcHHg+HiA==", "requires": { - "@types/workbox-routing": "*" + "workbox-build": "*" } }, - "@types/workbox-routing": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@types/workbox-routing/-/workbox-routing-4.3.1.tgz", - "integrity": "sha512-2TYTiMcF6lMdMU36zUZPyQurpM8xso3Ad6XnFDdlSZowukoFy6pwZV+oT27z/jU1eaa+QgtPkdYFrS5KsJDMOQ==" - }, "@types/ws": { "version": "8.5.10", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", @@ -54782,7 +55194,6 @@ "version": "0.4.7", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.7.tgz", "integrity": "sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ==", - "dev": true, "requires": { "@babel/compat-data": "^7.22.6", "@babel/helper-define-polyfill-provider": "^0.4.4", @@ -54792,8 +55203,7 @@ "semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" } } }, @@ -54801,7 +55211,6 @@ "version": "0.8.7", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.7.tgz", "integrity": "sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA==", - "dev": true, "requires": { "@babel/helper-define-polyfill-provider": "^0.4.4", "core-js-compat": "^3.33.1" @@ -54811,7 +55220,6 @@ "version": "0.5.4", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.4.tgz", "integrity": "sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg==", - "dev": true, "requires": { "@babel/helper-define-polyfill-provider": "^0.4.4" } @@ -55268,8 +55676,7 @@ "builtin-modules": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "dev": true + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==" }, "builtins": { "version": "5.0.1", @@ -56710,7 +57117,6 @@ "version": "3.35.0", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.35.0.tgz", "integrity": "sha512-5blwFAddknKeNgsjBzilkdQ0+YK8L1PfqPYq40NOYMYFSS38qj+hpTcLLWwpIwA2A5bje/x5jmVn2tzUMg9IVw==", - "dev": true, "requires": { "browserslist": "^4.22.2" } @@ -60707,8 +61113,7 @@ "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" }, "get-caller-file": { "version": "2.0.5", @@ -62426,6 +62831,11 @@ "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", "dev": true }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==" + }, "is-native": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-native/-/is-native-1.0.1.tgz", @@ -64424,8 +64834,7 @@ "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "js-yaml": { "version": "4.1.0", @@ -64587,8 +64996,7 @@ "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" }, "json-buffer": { "version": "3.0.0", @@ -65763,8 +66171,7 @@ "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" }, "lodash.defaultsdeep": { "version": "4.6.1", @@ -66060,6 +66467,14 @@ "integrity": "sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY=", "dev": true }, + "magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "requires": { + "sourcemap-codec": "^1.4.8" + } + }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -72097,14 +72512,12 @@ "regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" }, "regenerate-unicode-properties": { "version": "10.1.1", "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", - "dev": true, "requires": { "regenerate": "^1.4.2" } @@ -72118,7 +72531,6 @@ "version": "0.15.2", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "dev": true, "requires": { "@babel/runtime": "^7.8.4" } @@ -72143,7 +72555,6 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", - "dev": true, "requires": { "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", @@ -72175,7 +72586,6 @@ "version": "0.9.1", "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": true, "requires": { "jsesc": "~0.5.0" }, @@ -72183,8 +72593,7 @@ "jsesc": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==" } } }, @@ -72576,6 +72985,101 @@ "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==", "dev": true }, + "rollup": { + "version": "1.32.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.32.1.tgz", + "integrity": "sha512-/2HA0Ec70TvQnXdzynFffkjA6XN+1e2pEv/uKS5Ulca40g2L7KuOE3riasHoNVHOsFD5KKZgDsMk1CP3Tw9s+A==", + "requires": { + "@types/estree": "*", + "@types/node": "*", + "acorn": "^7.1.0" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + } + } + }, + "rollup-plugin-babel": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-4.4.0.tgz", + "integrity": "sha512-Lek/TYp1+7g7I+uMfJnnSJ7YWoD58ajo6Oarhlex7lvUce+RCKRuGRSgztDO3/MF/PuGKmUL5iTHKf208UNszw==", + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "rollup-pluginutils": "^2.8.1" + } + }, + "rollup-plugin-terser": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-5.3.1.tgz", + "integrity": "sha512-1pkwkervMJQGFYvM9nscrUoncPwiKR/K+bHdjv6PFgRo3cgPHoRT83y2Aa3GvINj4539S15t/tpFPb775TDs6w==", + "requires": { + "@babel/code-frame": "^7.5.5", + "jest-worker": "^24.9.0", + "rollup-pluginutils": "^2.8.2", + "serialize-javascript": "^4.0.0", + "terser": "^4.6.2" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "jest-worker": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", + "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", + "requires": { + "merge-stream": "^2.0.0", + "supports-color": "^6.1.0" + } + }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "requires": { + "randombytes": "^2.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + } + } + } + }, + "rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "requires": { + "estree-walker": "^0.6.1" + }, + "dependencies": { + "estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==" + } + } + }, "rtl-detect": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.0.4.tgz", @@ -73388,6 +73892,16 @@ "source-map": "^0.6.0" } }, + "source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + }, "space-separated-tokens": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", @@ -74198,8 +74712,7 @@ "temp-dir": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", - "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", - "dev": true + "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==" }, "temp-path": { "version": "1.0.0", @@ -74404,8 +74917,7 @@ "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" }, "to-readable-stream": { "version": "1.0.0", @@ -74753,8 +75265,7 @@ "unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==" }, "unicode-emoji-modifier-base": { "version": "1.0.0", @@ -74766,7 +75277,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, "requires": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" @@ -74775,14 +75285,12 @@ "unicode-match-property-value-ecmascript": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "dev": true + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==" }, "unicode-property-aliases-ecmascript": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==" }, "unicode-substring": { "version": "0.1.0", @@ -76005,154 +76513,207 @@ } }, "workbox-background-sync": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-4.3.1.tgz", - "integrity": "sha512-1uFkvU8JXi7L7fCHVBEEnc3asPpiAL33kO495UMcD5+arew9IbKW2rV5lpzhoWcm/qhGB89YfO4PmB/0hQwPRg==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-5.1.4.tgz", + "integrity": "sha512-AH6x5pYq4vwQvfRDWH+vfOePfPIYQ00nCEB7dJRU1e0n9+9HMRyvI63FlDvtFT2AvXVRsXvUt7DNMEToyJLpSA==", "requires": { - "workbox-core": "^4.3.1" + "workbox-core": "^5.1.4" } }, "workbox-broadcast-update": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-4.3.1.tgz", - "integrity": "sha512-MTSfgzIljpKLTBPROo4IpKjESD86pPFlZwlvVG32Kb70hW+aob4Jxpblud8EhNb1/L5m43DUM4q7C+W6eQMMbA==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-5.1.4.tgz", + "integrity": "sha512-HTyTWkqXvHRuqY73XrwvXPud/FN6x3ROzkfFPsRjtw/kGZuZkPzfeH531qdUGfhtwjmtO/ZzXcWErqVzJNdXaA==", "requires": { - "workbox-core": "^4.3.1" + "workbox-core": "^5.1.4" } }, "workbox-build": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-4.3.1.tgz", - "integrity": "sha512-UHdwrN3FrDvicM3AqJS/J07X0KXj67R8Cg0waq1MKEOqzo89ap6zh6LmaLnRAjpB+bDIz+7OlPye9iii9KBnxw==", - "requires": { - "@babel/runtime": "^7.3.4", - "@hapi/joi": "^15.0.0", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-5.1.4.tgz", + "integrity": "sha512-xUcZn6SYU8usjOlfLb9Y2/f86Gdo+fy1fXgH8tJHjxgpo53VVsqRX0lUDw8/JuyzNmXuo8vXX14pXX2oIm9Bow==", + "requires": { + "@babel/core": "^7.8.4", + "@babel/preset-env": "^7.8.4", + "@babel/runtime": "^7.8.4", + "@hapi/joi": "^15.1.0", + "@rollup/plugin-node-resolve": "^7.1.1", + "@rollup/plugin-replace": "^2.3.1", + "@surma/rollup-plugin-off-main-thread": "^1.1.1", "common-tags": "^1.8.0", - "fs-extra": "^4.0.2", - "glob": "^7.1.3", - "lodash.template": "^4.4.0", - "pretty-bytes": "^5.1.0", + "fast-json-stable-stringify": "^2.1.0", + "fs-extra": "^8.1.0", + "glob": "^7.1.6", + "lodash.template": "^4.5.0", + "pretty-bytes": "^5.3.0", + "rollup": "^1.31.1", + "rollup-plugin-babel": "^4.3.3", + "rollup-plugin-terser": "^5.3.1", + "source-map": "^0.7.3", + "source-map-url": "^0.4.0", "stringify-object": "^3.3.0", "strip-comments": "^1.0.2", - "workbox-background-sync": "^4.3.1", - "workbox-broadcast-update": "^4.3.1", - "workbox-cacheable-response": "^4.3.1", - "workbox-core": "^4.3.1", - "workbox-expiration": "^4.3.1", - "workbox-google-analytics": "^4.3.1", - "workbox-navigation-preload": "^4.3.1", - "workbox-precaching": "^4.3.1", - "workbox-range-requests": "^4.3.1", - "workbox-routing": "^4.3.1", - "workbox-strategies": "^4.3.1", - "workbox-streams": "^4.3.1", - "workbox-sw": "^4.3.1", - "workbox-window": "^4.3.1" + "tempy": "^0.3.0", + "upath": "^1.2.0", + "workbox-background-sync": "^5.1.4", + "workbox-broadcast-update": "^5.1.4", + "workbox-cacheable-response": "^5.1.4", + "workbox-core": "^5.1.4", + "workbox-expiration": "^5.1.4", + "workbox-google-analytics": "^5.1.4", + "workbox-navigation-preload": "^5.1.4", + "workbox-precaching": "^5.1.4", + "workbox-range-requests": "^5.1.4", + "workbox-routing": "^5.1.4", + "workbox-strategies": "^5.1.4", + "workbox-streams": "^5.1.4", + "workbox-sw": "^5.1.4", + "workbox-window": "^5.1.4" }, "dependencies": { + "crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha512-GsVpkFPlycH7/fRR7Dhcmnoii54gV1nz7y4CWyeFS14N+JVBBhY+r8amRHE4BwSYal7BPTDp8isvAlCxyFt3Hg==" + }, "fs-extra": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "requires": { - "graceful-fs": "^4.1.2", + "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", "universalify": "^0.1.0" } + }, + "source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==" + }, + "tempy": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.3.0.tgz", + "integrity": "sha512-WrH/pui8YCwmeiAoxV+lpRH9HpRtgBhSR2ViBPgpGb/wnYDzp21R4MN45fsCGvLROvY67o3byhJRYRONJyImVQ==", + "requires": { + "temp-dir": "^1.0.0", + "type-fest": "^0.3.1", + "unique-string": "^1.0.0" + } + }, + "type-fest": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", + "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==" + }, + "unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha512-ODgiYu03y5g76A1I9Gt0/chLCzQjvzDy7DsZGsLOE/1MrF6wriEskSncj1+/C58Xk/kPZDppSctDybCwOSaGAg==", + "requires": { + "crypto-random-string": "^1.0.0" + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" } } }, "workbox-cacheable-response": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-4.3.1.tgz", - "integrity": "sha512-Rp5qlzm6z8IOvnQNkCdO9qrDgDpoPNguovs0H8C+wswLuPgSzSp9p2afb5maUt9R1uTIwOXrVQMmPfPypv+npw==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-5.1.4.tgz", + "integrity": "sha512-0bfvMZs0Of1S5cdswfQK0BXt6ulU5kVD4lwer2CeI+03czHprXR3V4Y8lPTooamn7eHP8Iywi5QjyAMjw0qauA==", "requires": { - "workbox-core": "^4.3.1" + "workbox-core": "^5.1.4" } }, "workbox-core": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-4.3.1.tgz", - "integrity": "sha512-I3C9jlLmMKPxAC1t0ExCq+QoAMd0vAAHULEgRZ7kieCdUd919n53WC0AfvokHNwqRhGn+tIIj7vcb5duCjs2Kg==" + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-5.1.4.tgz", + "integrity": "sha512-+4iRQan/1D8I81nR2L5vcbaaFskZC2CL17TLbvWVzQ4qiF/ytOGF6XeV54pVxAvKUtkLANhk8TyIUMtiMw2oDg==" }, "workbox-expiration": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-4.3.1.tgz", - "integrity": "sha512-vsJLhgQsQouv9m0rpbXubT5jw0jMQdjpkum0uT+d9tTwhXcEZks7qLfQ9dGSaufTD2eimxbUOJfWLbNQpIDMPw==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-5.1.4.tgz", + "integrity": "sha512-oDO/5iC65h2Eq7jctAv858W2+CeRW5e0jZBMNRXpzp0ZPvuT6GblUiHnAsC5W5lANs1QS9atVOm4ifrBiYY7AQ==", "requires": { - "workbox-core": "^4.3.1" + "workbox-core": "^5.1.4" } }, "workbox-google-analytics": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-4.3.1.tgz", - "integrity": "sha512-xzCjAoKuOb55CBSwQrbyWBKqp35yg1vw9ohIlU2wTy06ZrYfJ8rKochb1MSGlnoBfXGWss3UPzxR5QL5guIFdg==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-5.1.4.tgz", + "integrity": "sha512-0IFhKoEVrreHpKgcOoddV+oIaVXBFKXUzJVBI+nb0bxmcwYuZMdteBTp8AEDJacENtc9xbR0wa9RDCnYsCDLjA==", "requires": { - "workbox-background-sync": "^4.3.1", - "workbox-core": "^4.3.1", - "workbox-routing": "^4.3.1", - "workbox-strategies": "^4.3.1" + "workbox-background-sync": "^5.1.4", + "workbox-core": "^5.1.4", + "workbox-routing": "^5.1.4", + "workbox-strategies": "^5.1.4" } }, "workbox-navigation-preload": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-4.3.1.tgz", - "integrity": "sha512-K076n3oFHYp16/C+F8CwrRqD25GitA6Rkd6+qAmLmMv1QHPI2jfDwYqrytOfKfYq42bYtW8Pr21ejZX7GvALOw==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-5.1.4.tgz", + "integrity": "sha512-Wf03osvK0wTflAfKXba//QmWC5BIaIZARU03JIhAEO2wSB2BDROWI8Q/zmianf54kdV7e1eLaIEZhth4K4MyfQ==", "requires": { - "workbox-core": "^4.3.1" + "workbox-core": "^5.1.4" } }, "workbox-precaching": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-4.3.1.tgz", - "integrity": "sha512-piSg/2csPoIi/vPpp48t1q5JLYjMkmg5gsXBQkh/QYapCdVwwmKlU9mHdmy52KsDGIjVaqEUMFvEzn2LRaigqQ==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-5.1.4.tgz", + "integrity": "sha512-gCIFrBXmVQLFwvAzuGLCmkUYGVhBb7D1k/IL7pUJUO5xacjLcFUaLnnsoVepBGAiKw34HU1y/YuqvTKim9qAZA==", "requires": { - "workbox-core": "^4.3.1" + "workbox-core": "^5.1.4" } }, "workbox-range-requests": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-4.3.1.tgz", - "integrity": "sha512-S+HhL9+iTFypJZ/yQSl/x2Bf5pWnbXdd3j57xnb0V60FW1LVn9LRZkPtneODklzYuFZv7qK6riZ5BNyc0R0jZA==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-5.1.4.tgz", + "integrity": "sha512-1HSujLjgTeoxHrMR2muDW2dKdxqCGMc1KbeyGcmjZZAizJTFwu7CWLDmLv6O1ceWYrhfuLFJO+umYMddk2XMhw==", "requires": { - "workbox-core": "^4.3.1" + "workbox-core": "^5.1.4" } }, "workbox-routing": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-4.3.1.tgz", - "integrity": "sha512-FkbtrODA4Imsi0p7TW9u9MXuQ5P4pVs1sWHK4dJMMChVROsbEltuE79fBoIk/BCztvOJ7yUpErMKa4z3uQLX+g==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-5.1.4.tgz", + "integrity": "sha512-8ljknRfqE1vEQtnMtzfksL+UXO822jJlHTIR7+BtJuxQ17+WPZfsHqvk1ynR/v0EHik4x2+826Hkwpgh4GKDCw==", "requires": { - "workbox-core": "^4.3.1" + "workbox-core": "^5.1.4" } }, "workbox-strategies": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-4.3.1.tgz", - "integrity": "sha512-F/+E57BmVG8dX6dCCopBlkDvvhg/zj6VDs0PigYwSN23L8hseSRwljrceU2WzTvk/+BSYICsWmRq5qHS2UYzhw==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-5.1.4.tgz", + "integrity": "sha512-VVS57LpaJTdjW3RgZvPwX0NlhNmscR7OQ9bP+N/34cYMDzXLyA6kqWffP6QKXSkca1OFo/v6v7hW7zrrguo6EA==", "requires": { - "workbox-core": "^4.3.1" + "workbox-core": "^5.1.4", + "workbox-routing": "^5.1.4" } }, "workbox-streams": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-4.3.1.tgz", - "integrity": "sha512-4Kisis1f/y0ihf4l3u/+ndMkJkIT4/6UOacU3A4BwZSAC9pQ9vSvJpIi/WFGQRH/uPXvuVjF5c2RfIPQFSS2uA==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-5.1.4.tgz", + "integrity": "sha512-xU8yuF1hI/XcVhJUAfbQLa1guQUhdLMPQJkdT0kn6HP5CwiPOGiXnSFq80rAG4b1kJUChQQIGPrq439FQUNVrw==", "requires": { - "workbox-core": "^4.3.1" + "workbox-core": "^5.1.4", + "workbox-routing": "^5.1.4" } }, "workbox-sw": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-4.3.1.tgz", - "integrity": "sha512-0jXdusCL2uC5gM3yYFT6QMBzKfBr2XTk0g5TPAV4y8IZDyVNDyj1a8uSXy3/XrvkVTmQvLN4O5k3JawGReXr9w==" + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-5.1.4.tgz", + "integrity": "sha512-9xKnKw95aXwSNc8kk8gki4HU0g0W6KXu+xks7wFuC7h0sembFnTrKtckqZxbSod41TDaGh+gWUA5IRXrL0ECRA==" }, "workbox-window": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-4.3.1.tgz", - "integrity": "sha512-C5gWKh6I58w3GeSc0wp2Ne+rqVw8qwcmZnQGpjiek8A2wpbxSJb1FdCoQVO+jDJs35bFgo/WETgl1fqgsxN0Hg==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-5.1.4.tgz", + "integrity": "sha512-vXQtgTeMCUq/4pBWMfQX8Ee7N2wVC4Q7XYFqLnfbXJ2hqew/cU1uMTD2KqGEgEpE4/30luxIxgE+LkIa8glBYw==", "requires": { - "workbox-core": "^4.3.1" + "workbox-core": "^5.1.4" } }, "wrap-ansi": { diff --git a/packages/gasket-cli/src/index.d.ts b/packages/gasket-cli/src/index.d.ts index 384abce65..6fecc4b0a 100644 --- a/packages/gasket-cli/src/index.d.ts +++ b/packages/gasket-cli/src/index.d.ts @@ -10,7 +10,7 @@ export interface Dependencies { export interface PackageJson extends Dependencies { name: string; - version: string; + version?: string; description?: string; license?: string; repository?: @@ -21,6 +21,7 @@ export interface PackageJson extends Dependencies { }; scripts?: Record; optionalDependencies?: Record; + homepage?: string; } export interface ModuleInfo { diff --git a/packages/gasket-cli/test/unit/hooks/init.test.js b/packages/gasket-cli/test/unit/hooks/init.test.js index f70732269..ce05a457b 100644 --- a/packages/gasket-cli/test/unit/hooks/init.test.js +++ b/packages/gasket-cli/test/unit/hooks/init.test.js @@ -7,7 +7,7 @@ const mockError = new Error('Bad things man.'); const mockConfig = { mocked: true }; const PluginEngine = require('@gasket/engine'); -class MockCommand { }; +class MockCommand { } MockCommand.flags = {}; jest.mock('@gasket/engine'); diff --git a/packages/gasket-data/lib/index.d.ts b/packages/gasket-data/lib/index.d.ts index d7998ea97..b5d3a64ce 100644 --- a/packages/gasket-data/lib/index.d.ts +++ b/packages/gasket-data/lib/index.d.ts @@ -2,7 +2,7 @@ import type { GasketDataIntl } from '@gasket/plugin-intl'; declare module '@gasket/data' { export interface GasketData { - config: { [key: string | number]: string | undefined }; + config?: { [key: string | number]: string | undefined }; intl?: GasketDataIntl; } diff --git a/packages/gasket-engine/lib/engine.d.ts b/packages/gasket-engine/lib/engine.d.ts index 29cf64ba2..6cb9052f9 100644 --- a/packages/gasket-engine/lib/engine.d.ts +++ b/packages/gasket-engine/lib/engine.d.ts @@ -1,3 +1,4 @@ +import type { Configuration } from 'webpack'; declare module '@gasket/engine' { export type MaybeMultiple = T | Array; export type MaybeAsync = T | Promise; @@ -6,7 +7,7 @@ declare module '@gasket/engine' { // To be extended by plugins export interface HookExecTypes {} - export type HookId = keyof HookExecTypes + export type HookId = keyof HookExecTypes; export type HookTimings = { before?: Array; @@ -41,8 +42,8 @@ declare module '@gasket/engine' { // This is the config export interface GasketConfig { - root: string, - env: string + root: string; + env: string; } export default class GasketEngine { @@ -67,7 +68,10 @@ declare module '@gasket/engine' { ): ReturnType; execApply( hook: Id, - callback: (plugin: Plugin, handler: ApplyHookHandler) => Promise + callback: ( + plugin: Plugin, + handler: ApplyHookHandler + ) => Promise ): Promise; execApplySync( hook: Id, @@ -75,23 +79,22 @@ declare module '@gasket/engine' { ): Return[]; hook(opts: { - event: Id, - pluginName?: string, - timing?: HookTimings, - handler: HookHandler + event: Id; + pluginName?: string; + timing?: HookTimings; + handler: HookHandler; }): void; } export interface Gasket extends GasketEngine { command: { - id: string - } + id: string; + }; } - type PartialRecursive = - T extends Object - ? { [K in keyof T]?: PartialRecursive } | undefined - : T | undefined + type PartialRecursive = T extends Object + ? { [K in keyof T]?: PartialRecursive } | undefined + : T | undefined; type Plugins = { plugins?: { @@ -101,10 +104,14 @@ declare module '@gasket/engine' { }; }; - export type GasketConfigFile = Omit & Plugins & { - root?: string, - env?: string, + export type GasketConfigFile = Omit< + GasketConfig, + 'root' | 'env' | 'command' + > & + Plugins & { + root?: string; + env?: string; - environments?: Record> - } + environments?: Record>; + }; } diff --git a/packages/gasket-fetch/test/utils.js b/packages/gasket-fetch/test/utils.js index 2ec378694..5bda25e8e 100644 --- a/packages/gasket-fetch/test/utils.js +++ b/packages/gasket-fetch/test/utils.js @@ -9,7 +9,6 @@ const API = { /** * Assert fetch API compliant classes. - * * @param {Function} Request constructor for Request class. * @param {Function} Headers constructor for Headers class. * @param {Function} Response constructor for Response class. @@ -34,7 +33,6 @@ function assertExports(Request, Headers, Response) { /** * Assert fetch API executing GET request. - * * @async * @param {Function} fetch implementation of fetch. * @returns {Function} runnable test descriptor. @@ -55,7 +53,6 @@ function assertGet(fetch) { /** * Assert fetch API executing POST request. - * * @async * @param {Function} fetch implementation of fetch. * @returns {Function} runnable test descriptor. @@ -91,7 +88,6 @@ function assertPost(fetch) { /** * Assert AbortController aborting fetch requests. - * * @async * @param {Function} fetch implementation of fetch. * @param {Function} AbortController constructor for aborting fetch request. diff --git a/packages/gasket-helper-intl/lib/index.d.ts b/packages/gasket-helper-intl/lib/index.d.ts index 8bf516fee..4919e0b65 100644 --- a/packages/gasket-helper-intl/lib/index.d.ts +++ b/packages/gasket-helper-intl/lib/index.d.ts @@ -4,31 +4,33 @@ import { IncomingMessage, OutgoingMessage } from 'http'; * Locale settings and known locale file paths */ export interface LocaleManifest { - /** - * Base URL where locale files are served - */ - basePath?: string - /** - * Path to endpoint with JSON files - */ - localesPath: LocalePathPart - /** - * Locale to fallback to when loading files - */ - defaultLocale: Locale - /** - * Mapping of locales to share files - */ - localesMap?: Record - /** - * Available locale files to content hashes - */ - paths: Record + /** Base URL where locale files are served */ + basePath?: string; + /** Path to endpoint with JSON files */ + localesPath: LocalePathPart; + /** Locale to fallback to when loading files */ + defaultLocale: Locale; + /** Mapping of locales to share files */ + localesMap?: Record; + /** Available locale files to content hashes */ + paths: Record; + locales: Locale[]; + /** Default lookup path to locale files */ + defaultPath: string; } /** * Partial URL representing a directory containing locale .json files * or a URL template with a `:locale` path param to a .json file. + * @example + * "/locales" + * @example + * // as a template + * "/locales/:locale/component.json" + * @example + * // other param formats + * "/locales/$locale/component.json" + * "/locales/{locale}/component.json" */ export type LocalePathPart = string; @@ -36,124 +38,160 @@ export type LocalePathPart = string; * Callback which receives a context object for resolving a LocalePathPath */ export type LocalePathThunk = (context: { - // Any server render - req?: IncomingMessage, - res?: OutgoingMessage - - // Possible Next.js contexts - // @see: https://nextjs.org/docs/api-reference/data-fetching/get-static-props#context-parameter - // @see: https://nextjs.org/docs/api-reference/data-fetching/get-initial-props#context-object - // @see: https://nextjs.org/docs/api-reference/data-fetching/get-server-side-props#context-parameter - [key: string]: any + // Any server render + req?: IncomingMessage; + res?: OutgoingMessage; + + // Possible Next.js contexts + // @see: https://nextjs.org/docs/api-reference/data-fetching/get-static-props#context-parameter + // @see: https://nextjs.org/docs/api-reference/data-fetching/get-initial-props#context-object + // @see: https://nextjs.org/docs/api-reference/data-fetching/get-server-side-props#context-parameter + [key: string]: any; }) => LocalePathPart; /** * Callback which receives a context object for resolving a LocalePathPath */ -export type LocalePathPartOrThunk = LocalePathPart|LocalePathThunk; +export type LocalePathPartOrThunk = LocalePathPart | LocalePathThunk; /** * URL path to a locale .json file + * @example + * "/locales/en-US.json" + * @example + * // from a template + * "/locales/en-US/component.json" */ export type LocalePath = string; /** * Language code only + * @example + * "en" */ export type Lang = string; /** * Language code with region + * @example + * "en-US" */ export type Locale = Lang; /** * State of loaded locale files */ export interface LocalesState { - messages: Record - status: Record + messages?: Record>; + status?: Record; } /** * Enum for local status values */ export enum LocaleStatus { - LOADING = 'loading', - LOADED = 'loaded', - ERROR = 'error' + LOADING = 'loading', + LOADED = 'loaded', + ERROR = 'error' } /** * Props for a Next.js page containing locale and initial state */ export interface LocalesProps extends LocalesState { + locale: Locale; +} + +export interface LocaleUtilsConfig { + manifest: LocaleManifest; + /** Locale file base path. Defaults to `manifest.basePath` */ + basePath?: string; + debug?: Function; +} + +/** + * Utility class for loading locale files + */ +export function LocaleUtils(config: LocaleUtilsConfig) { + /** + * Fallback to the lang part of a locale or to defaultLocale. + * Strategy is: + * + * + * + * + * null + * + * Here's an example using da-DK/da with en-US as defaultLocale + * da-DK ==> da ==> en-US ==> en ==> null + */ + this.getFallbackLocale = ( + /** Current locale */ + locale?: Locale + ) => Locale | Lang | null; + + /** + * Format a localePath with provided locale. Ensures path starts with slash + * and ends with .json file. + */ + this.formatLocalePath = ( + /** Path containing locale files */ + localePathPart: LocalePathPart, + locale: Locale + ) => LocalePath; + + /** + * Get a localePathPart from provided string or thunk callback results + */ + this.resolveLocalePathPart = ( + /** Path containing locale files */ + localePathPart: LocalePathPartOrThunk, + context?: string + ) => LocalePath; + + /** + * Get a formatted localePath considering language mappings and fallbacks + */ + this.getLocalePath = ( + /** Path containing locale files */ + localePathPart: LocalePathPartOrThunk, locale: Locale + ) => LocalePath; + + /** + * Add base path from window.gasket.intl or manifest if set to the locale path + */ + this.pathToUrl = ( + /** URL path to a locale file */ + localePath: LocalePath + ) => string; + + /** + * Load locale file(s) and return localesProps. Throws error if attempted to + * use in browser. + */ + this.serverLoadData = ( + /** Path(s) containing locale files */ + localePathPart: LocalePathPartOrThunk | LocalePathPartOrThunk[], + /** Locale to load */ + locale: Locale, + /** Disk path to locale files dir */ + localesDir: string, + /** Context for resolving localePathThunk */ + context?: string + ) => LocalesProps; } -export class LocaleUtils { - /** - * @classdesc Utility class for loading locale files - * - * @param {Object} config - Configuration - * @param {LocaleManifest} config.manifest - Locale file manifest - * @param {string} [config.basePath] - Locale file base path. Defaults to `manifest.basePath` - * @constructor - */ - constructor(config: { - manifest: LocaleManifest; - basePath?: string; - }); - /** - * Fallback to the lang part of a locale or to defaultLocale. - * Strategy is: - * - * - * - * - * null - * - * Here's an example using da-DK/da with en-US as defaultLocale - * da-DK ==> da ==> en-US ==> en ==> null - * - * @param {Locale} locale - Current locale - * @returns {Locale|Lang|null} language - fallback language to use. - * @method - */ - getFallbackLocale: (locale?: Locale) => Locale | Lang | null; - /** - * Format a localePath with provided locale. Ensures path starts with slash - * and ends with .json file. - * - * @param {LocalePathPart} localePathPart - Path containing locale files - * @param {Locale} locale - Locale - * @returns {LocalePath} localePath - * @method - */ - formatLocalePath: (localePathPart: LocalePathPart, locale: Locale) => LocalePath; - /** - * Get a formatted localePath considering language mappings and fallbacks - * - * @param {LocalePathPart} localePathPart - Path containing locale files - * @param {Locale} locale - Locale - * @returns {LocalePath} localePath - * @method - */ - getLocalePath: (localePathPart: LocalePathPart, locale: Locale) => LocalePath; - /** - * Add base path from window.gasket.intl or manifest if set to the locale path - * - * @param {LocalePath} localePath - URL path to a locale file - * @returns {string} url - * @method - */ - pathToUrl: (localePath: LocalePath) => string; - /** - * Load locale file(s) and return localesProps. - * Throws error if attempted to use in browser. - * - * @param {LocalePathPartOrThunk|LocalePathPartOrThunk[]} localePathPart - Path(s) containing locale files - * @param {Locale} locale - Locale to load - * @param {string} localesDir - Disk path to locale files dir - * @param {string} [context] - Context for resolving localePathThunk - * @returns {LocalesProps} localesProps - */ - serverLoadData: (localePathPart: any, locale: any, localesDir: any, context?: {}) => any; +export function LocaleServerUtils(config: LocaleUtilsConfig) { + /** + * Load locale file(s) and return localesProps. Throws error if attempted to + * use in browser. + */ + this.serverLoadData = ( + /** Path(s) containing locale files */ + localePathPart: LocalePathPartOrThunk | LocalePathPartOrThunk[], + /** Locale to load */ + locale: Locale, + /** Disk path to locale files dir */ + localesDir: string, + /** Context for resolving localePathThunk */ + context?: string + ) => LocalesProps; } diff --git a/packages/gasket-helper-intl/lib/index.js b/packages/gasket-helper-intl/lib/index.js index 1168ce4c1..a6479e24d 100644 --- a/packages/gasket-helper-intl/lib/index.js +++ b/packages/gasket-helper-intl/lib/index.js @@ -4,101 +4,7 @@ */ /** - * Locale settings and known locale file paths - * @typedef {object} LocaleManifest - * - * @property {string} [basePath] - Base URL where locale files are served - * @property {LocalePathPart} localesPath - Path to endpoint with JSON files - * @property {Locale} defaultLocale - Locale to fallback to when loading files - * @property {{Locale: Locale}} [localesMap] - Mapping of locales to share files - * @property {{LocalePath: string}} paths - Available locale files to content hashes - */ - -/** - * Partial URL representing a directory containing locale .json files - * or a URL template with a `:locale` path param to a .json file. - * @typedef {string} LocalePathPart - * - * @example - * "/locales" - * - * @example - * // as a template - * "/locales/:locale/component.json" - * - * @example - * // other param formats - * "/locales/$locale/component.json" - * "/locales/{locale}/component.json" - */ - -/** - * Callback which receives a context object for resolving a LocalePathPath - * - * @typedef {function} LocalePathThunk - * - * @param {object} context - * @returns {string} localePathPart - */ - -/** - * A localePathPart string or callback which returns one - * - * @typedef {LocalePathPart|LocalePathThunk} LocalePathPartOrThunk - */ - -/** - * URL path to a locale .json file - * @typedef {string} LocalePath - * - * @example - * "/locales/en-US.json" - * - * @example - * // from a template - * "/locales/en-US/component.json" - */ - -/** - * Language code only - * @typedef {string} Lang - * - * @example - * "en" - */ - -/** - * Language code with region - * @typedef {Lang} Locale - * - * @example - * "en-US" - */ - -/** - * State of loaded locale files - * - * @typedef {object} LocalesState - * @property {{string: string}} messages - * @property {{LocalePath: LocaleStatus}} status - */ - -/** - * Props for a Next.js page containing locale and initial state - * - * @typedef {LocalesState} LocalesProps - * @property {Locale} locale - */ - -/** - * Fetch status of a locale file - * @typedef {string} LocaleStatus - * @readonly - */ - -/** - *Enum for local status values - * @enum {LocaleStatus} + * Enum for local status values */ const LocaleStatus = { LOADING: 'loading', @@ -108,15 +14,11 @@ const LocaleStatus = { const reLocalePathParam = /(\/[$:{]locale}?\/)/; const reLeadingSlash = /^\//; -const trim = localePath => localePath.replace(reLeadingSlash, ''); +const trim = (localePath) => localePath.replace(reLeadingSlash, ''); /** - * @classdesc Utility class for loading locale files - * - * @param {Object} config - Configuration - * @param {LocaleManifest} config.manifest - Locale file manifest - * @param {string} [config.basePath] - Locale file base path. Defaults to `manifest.basePath` - * @constructor + * Utility class for loading locale files + * @type {import('./index').LocaleUtils} */ function LocaleUtils(config) { const { manifest, debug = () => {} } = config; @@ -124,28 +26,18 @@ function LocaleUtils(config) { const { defaultLocale = 'en', localesMap, paths = {}, locales } = manifest; const defaultLang = defaultLocale.split('-')[0]; - /** - * Fallback to the lang part of a locale or to defaultLocale. - * Strategy is: - * `` - * `` - * `` - * `` - * `null` - * - * Here's an example using da-DK/da with en-US as defaultLocale - * da-DK ==> da ==> en-US ==> en ==> null - * - * @param {Locale} locale - Current locale - * @returns {Locale|Lang|null} language - fallback language to use. - * @method - */ this.getFallbackLocale = (locale = '') => { if (locale.indexOf('-') > 0) { const language = locale.split('-')[0]; - if (defaultLocale.indexOf('-') > 0 && locale !== defaultLocale && language === defaultLang) { - debug(`Fallback for locale ${locale} is default locale ${defaultLocale}`); + if ( + defaultLocale.indexOf('-') > 0 && + locale !== defaultLocale && + language === defaultLang + ) { + debug( + `Fallback for locale ${locale} is default locale ${defaultLocale}` + ); return defaultLocale; } @@ -154,7 +46,9 @@ function LocaleUtils(config) { } if (locale !== defaultLang) { - debug(`Fallback for language ${locale} is default locale ${defaultLocale}`); + debug( + `Fallback for language ${locale} is default locale ${defaultLocale}` + ); return defaultLocale; } @@ -162,46 +56,22 @@ function LocaleUtils(config) { return null; }; - /** - * Format a localePath with provided locale. Ensures path starts with slash - * and ends with .json file. - * - * @param {LocalePathPart} localePathPart - Path containing locale files - * @param {Locale} locale - Locale - * @returns {LocalePath} localePath - * @method - */ this.formatLocalePath = (localePathPart, locale) => { const cleanPart = '/' + localePathPart.replace(/^\/|\/$/g, ''); if (reLocalePathParam.test(cleanPart)) { - return cleanPart.replace(reLocalePathParam, `/${ locale }/`); + return cleanPart.replace(reLocalePathParam, `/${locale}/`); } - return `${ cleanPart }/${ locale }.json`; + return `${cleanPart}/${locale}.json`; }; - /** - * Get a localePathPart from provided string or thunk callback results - * - * @param {LocalePathPartOrThunk} localePathPart - Path containing locale files - * @param {object} [context] - Context - * @returns {LocalePath} localePath - * @method - */ this.resolveLocalePathPart = (localePathPart, context = {}) => { - return typeof localePathPart === 'function' ? localePathPart(context) : localePathPart; + return typeof localePathPart === 'function' + ? localePathPart(context) + : localePathPart; }; - /** - * Get a formatted localePath considering language mappings and fallbacks - * - * @param {LocalePathPartOrThunk} localePathPart - Path containing locale files - * @param {Locale} locale - Locale - * @param {object} [context] - Context - * @returns {LocalePath} localePath - * @method - */ this.getLocalePath = (localePathPart, locale, context = {}) => { - const mappedLocale = localesMap && localesMap[locale] || locale; + const mappedLocale = (localesMap && localesMap[locale]) || locale; debug(`Mapped locale for ${locale} is ${mappedLocale}`); let fallbackLocale = mappedLocale; @@ -210,10 +80,16 @@ function LocaleUtils(config) { fallbackLocale = defaultLocale; } - const resolvedLocalePathPart = this.resolveLocalePathPart(localePathPart, context); + const resolvedLocalePathPart = this.resolveLocalePathPart( + localePathPart, + context + ); while (fallbackLocale != null) { - const localePath = this.formatLocalePath(resolvedLocalePathPart, fallbackLocale); + const localePath = this.formatLocalePath( + resolvedLocalePathPart, + fallbackLocale + ); if (trim(localePath) in paths) { debug(`Locale file for ${locale} is ${localePath}`); return localePath; @@ -227,35 +103,18 @@ function LocaleUtils(config) { return result; }; - /** - * Add base path from window.gasket.intl or manifest if set to the locale path - * - * @param {LocalePath} localePath - URL path to a locale file - * @returns {string} url - * @method - */ this.pathToUrl = (localePath) => { let url = basePath ? basePath.replace(/\/$/, '') + localePath : localePath; const hash = paths[trim(localePath)]; - if (hash) url += `?v=${ hash }`; + if (hash) url += `?v=${hash}`; debug(`URL for ${localePath} is ${url}`); return url; }; - /* eslint-disable no-unused-vars, valid-jsdoc */ - /** - * Load locale file(s) and return localesProps. - * Throws error if attempted to use in browser. - * - * @param {LocalePathPart|LocalePathPart[]} localePathPart - Path(s) containing locale files - * @param {Locale} locale - Locale to load - * @param {string} localesDir - Disk path to locale files dir - * @returns {LocalesProps} localesProps - */ + // eslint-disable-next-line no-unused-vars this.serverLoadData = (localePathPart, locale, localesDir) => { throw new Error('Not available in browser'); }; - /* eslint-enable */ } module.exports = { diff --git a/packages/gasket-helper-intl/lib/server.js b/packages/gasket-helper-intl/lib/server.js index 6523ff1d8..c0722cda5 100644 --- a/packages/gasket-helper-intl/lib/server.js +++ b/packages/gasket-helper-intl/lib/server.js @@ -4,18 +4,19 @@ const { LocaleUtils, LocaleStatus } = require('./index'); /** * Server variant to load locale files from disk path - * @extends { LocaleUtils } - * @constructor */ function LocaleServerUtils() { LocaleUtils.apply(this, arguments); this.serverLoadData = (localePathPart, locale, localesDir, context = {}) => { if (Array.isArray(localePathPart)) { - const localesProps = localePathPart.map(p => this.serverLoadData(p, locale, localesDir, context)); + const localesProps = localePathPart.map((p) => + this.serverLoadData(p, locale, localesDir, context) + ); return merge(...localesProps); } + // @ts-ignore - getLocalePath is a method on LocaleUtils const localeFile = this.getLocalePath(localePathPart, locale, context); const diskPath = path.join(localesDir, localeFile); let messages; diff --git a/packages/gasket-helper-intl/package.json b/packages/gasket-helper-intl/package.json index 25afea7e0..cf9d2276a 100644 --- a/packages/gasket-helper-intl/package.json +++ b/packages/gasket-helper-intl/package.json @@ -15,10 +15,10 @@ "test": "cross-env NODE_OPTIONS='--unhandled-rejections=strict' jest", "test:watch": "jest --watch", "test:coverage": "jest --coverage", - "posttest": "npm run lint", + "posttest": "npm run lint && npm run typecheck", "prepack": "npm run docs", "docs": "jsdoc2md --plugin @godaddy/dmd --files lib/index.js > docs/api.md", - "typecheck:skip": "tsc", + "typecheck": "tsc", "typecheck:watch": "tsc --watch" }, "repository": { diff --git a/packages/gasket-helper-intl/tsconfig.json b/packages/gasket-helper-intl/tsconfig.json index fa0fa18ba..b1005f224 100644 --- a/packages/gasket-helper-intl/tsconfig.json +++ b/packages/gasket-helper-intl/tsconfig.json @@ -11,7 +11,8 @@ "dom" ], "types": [ - "@types/jest" + "@types/jest", + "@types/node" ] }, "exclude": [ diff --git a/packages/gasket-nextjs/package.json b/packages/gasket-nextjs/package.json index 6e4c6fbbf..80fbc60a8 100644 --- a/packages/gasket-nextjs/package.json +++ b/packages/gasket-nextjs/package.json @@ -16,10 +16,10 @@ "test": "cross-env NODE_OPTIONS='--unhandled-rejections=strict' jest", "test:watch": "jest --watchAll", "test:coverage": "jest --coverage", - "posttest": "npm run lint", + "posttest": "npm run lint && npm run typecheck", "build": "babel src -d lib --delete-dir-on-start", "prepublishOnly": "npm run build", - "typecheck:skip": "tsc", + "typecheck": "tsc", "typecheck:watch": "tsc --watch" }, "repository": { diff --git a/packages/gasket-nextjs/src/gasket-data-provider.js b/packages/gasket-nextjs/src/gasket-data-provider.js index 52838dbe6..95fa26508 100644 --- a/packages/gasket-nextjs/src/gasket-data-provider.js +++ b/packages/gasket-nextjs/src/gasket-data-provider.js @@ -6,14 +6,15 @@ export const GasketDataContext = React.createContext({}); /** * Provider for the GasketData, adds context to child elements. * @param {object} props - Props - * @param {GasketData} props.gasketData - Object of GasketData + * @param {import('@gasket/data').GasketData} props.gasketData - Object of + * GasketData * @param {JSX.Element} props.children - Element to add GasketData context too * @returns {JSX.Element} element */ export const GasketDataProvider = ({ gasketData, children }) => { return ( - { children } + {children} ); }; diff --git a/packages/gasket-nextjs/src/index.d.ts b/packages/gasket-nextjs/src/index.d.ts index 09f3f8ecf..44687d0e2 100644 --- a/packages/gasket-nextjs/src/index.d.ts +++ b/packages/gasket-nextjs/src/index.d.ts @@ -1,48 +1,59 @@ import type { GasketData } from '@gasket/data'; import type { ComponentType, PropsWithChildren } from 'react'; +import type Document, { + DocumentContext, + DocumentInitialProps +} from 'next/document'; +import type { IncomingMessage, ServerResponse } from 'http'; -type SubstitutableHOC = >(component: C) => C; +type SubstitutableHOC = >(component: C) => C; -/** - * Renders a script tag with JSON gasketData - * - * @param {object} props - Props - * @param {GasketData} props.data - Gasket data from response - * @returns {JSX.Element} script - */ -export const GasketDataScript: ComponentType<{ data: GasketData }>; +/** Renders a script tag with JSON gasketData */ +export const GasketDataScript: ComponentType<{ + /** Gasket data from response */ + data: GasketData; +}>; /** * Make a wrapper to extend the Next.js Document, injecting a script with the * `gasketData` from the response object. - * - * @param {object} [options] - Configuration for wrapper - * @param {number} [options.index] - Force script injection at particular index - * @returns {function(NextDocument)} wrapper */ -export function withGasketData(options?: { index?: number }): SubstitutableHOC; +export function withGasketData(options?: { + /** Force script injection at particular index */ + index?: number; +}): (DocumentClass: typeof Document) => typeof DocumentClass & { + getInitialProps: typeof GasketDocumentGetInitialProps; +}; -/** - * React hook that fetches GasketData in elements context and returns it - * - * @returns { GasketData } GasketData - */ +/** React hook that fetches GasketData in elements context and returns it */ export function useGasketData(): GasketData; /** * Provider for the GasketData, adds context to child elements. - * - * @param {object} props - Props - * @param {GasketData} props.gasketData - Object of GasketData - * @param {JSX.Element} props.children - Element to add GasketData context too - * @returns {JSX.Element} element */ -export const GasketDataProvider: ComponentType>; +export const GasketDataProvider: ComponentType< + PropsWithChildren<{ gasketData: GasketData }> +>; + +export declare type GasketDocumentContext = DocumentContext & { + res: ServerResponse & { + locals: { + gasketData: GasketData; + }; + }; +}; + +export function GasketDocumentGetInitialProps( + ctx: GasketDocumentContext +): Promise< + DocumentInitialProps & { + gasketData: GasketData; + } +>; /** - * Make an HOC that adds a provider for the GasketData. - * This can be used to wrap a top level React, Next.js custom App component or Next.js custom NextDocument component. - * - * @returns {function} wrapper + * Make an HOC that adds a provider for the GasketData. This can be used to wrap + * a top level React, Next.js custom App component or Next.js custom + * NextDocument component. */ -export function withGasketDataProvider(): SubstitutableHOC; \ No newline at end of file +export function withGasketDataProvider(): SubstitutableHOC<{}>; diff --git a/packages/gasket-nextjs/src/index.js b/packages/gasket-nextjs/src/index.js index cf08a9d6d..6eae9fde1 100644 --- a/packages/gasket-nextjs/src/index.js +++ b/packages/gasket-nextjs/src/index.js @@ -5,20 +5,19 @@ import htmlescape from 'htmlescape'; /** * Renders a script tag with JSON gasketData - * @param {object} props - Props - * @param {GasketData} props.data - Gasket data from response - * @returns {JSX.Element} script + * @type {import('./index').GasketDataScript} */ -export function GasketDataScript(props) { - const { data } = props; - return `; } next(); - } - - return layer; + }; }; diff --git a/packages/gasket-plugin-service-worker/lib/sw-register.template.js b/packages/gasket-plugin-service-worker/lib/sw-register.template.js deleted file mode 100644 index 8ed380f43..000000000 --- a/packages/gasket-plugin-service-worker/lib/sw-register.template.js +++ /dev/null @@ -1,10 +0,0 @@ -if ('serviceWorker' in navigator) { - window.addEventListener('load', function () { - navigator.serviceWorker.register('{URL}', - { scope: '{SCOPE}' }).then(function (registration) { - console.log('SW registered: ', registration); - }).catch(function (registrationError) { - console.warn('SW registration failed: ', registrationError); - }); - }); -} diff --git a/packages/gasket-plugin-service-worker/lib/configure-endpoint.js b/packages/gasket-plugin-service-worker/lib/utils/configure-endpoint.js similarity index 91% rename from packages/gasket-plugin-service-worker/lib/configure-endpoint.js rename to packages/gasket-plugin-service-worker/lib/utils/configure-endpoint.js index 2263f0c9b..48f4ce308 100644 --- a/packages/gasket-plugin-service-worker/lib/configure-endpoint.js +++ b/packages/gasket-plugin-service-worker/lib/utils/configure-endpoint.js @@ -3,9 +3,7 @@ const { getCacheKeys, getComposedContent, getSWConfig } = require('./utils'); /** * Configures the endpoint with the gasket config - * - * @param {Gasket} gasket - Gasket - * @returns {Function} endpoint + * @type {import('../index').configureEndpoint} */ module.exports = async function configureEndpoint(gasket) { const { logger } = gasket; @@ -14,6 +12,7 @@ module.exports = async function configureEndpoint(gasket) { const cache = new LRU(cacheConfig); const cacheKeys = await getCacheKeys(gasket); + /** @type {import('../index').sw} */ return async function sw(req, res) { const cacheKey = cacheKeys.reduce((acc, fn) => acc + fn(req, res), '_'); diff --git a/packages/gasket-plugin-service-worker/lib/utils/sw-register.template.js b/packages/gasket-plugin-service-worker/lib/utils/sw-register.template.js new file mode 100644 index 000000000..7f6573df5 --- /dev/null +++ b/packages/gasket-plugin-service-worker/lib/utils/sw-register.template.js @@ -0,0 +1,12 @@ +if ('serviceWorker' in navigator) { + window.addEventListener('load', function () { + navigator.serviceWorker + .register('{URL}', { scope: '{SCOPE}' }) + .then(function (registration) { + console.log('SW registered: ', registration); + }) + .catch(function (registrationError) { + console.warn('SW registration failed: ', registrationError); + }); + }); +} diff --git a/packages/gasket-plugin-service-worker/lib/utils.js b/packages/gasket-plugin-service-worker/lib/utils/utils.js similarity index 68% rename from packages/gasket-plugin-service-worker/lib/utils.js rename to packages/gasket-plugin-service-worker/lib/utils/utils.js index 4bf8fb315..7bf238940 100644 --- a/packages/gasket-plugin-service-worker/lib/utils.js +++ b/packages/gasket-plugin-service-worker/lib/utils/utils.js @@ -6,18 +6,19 @@ const swHeader = `'use strict'; `; -function getSWConfig(gasket) { - const { config = {} } = gasket; +/** + * Get the service worker configuration from the gasket config + * @type {import('../index').getSWConfig} + */ +function getSWConfig(gasketPartial) { + const { config = {} } = gasketPartial; const { serviceWorker = {} } = config; return serviceWorker; } /** * Gathers thunks to key caches of composed sw scripts, based on req - * - * @param {Gasket} gasket - Gasket - * @returns {function[]} cacheKeys - * @async + * @type {import('../index').getCacheKeys} */ async function getCacheKeys(gasket) { const { exec } = gasket; @@ -25,9 +26,15 @@ async function getCacheKeys(gasket) { const pluginCacheKeys = await exec('serviceWorkerCacheKey'); - return [...userCacheKeys, ...pluginCacheKeys].filter((k) => typeof k === 'function'); + return [...userCacheKeys, ...pluginCacheKeys].filter( + (k) => typeof k === 'function' + ); } +/** + * Composes the service worker content from the configured content + * @type {import('../index').getComposedContent} + */ async function getComposedContent(gasket, context) { const { execWaterfall, @@ -35,13 +42,22 @@ async function getComposedContent(gasket, context) { } = gasket; const swConfig = getSWConfig(gasket); const { content, minify = {} } = swConfig; - const composed = await execWaterfall('composeServiceWorker', content, context); + + /** @type {string} */ + const composed = await execWaterfall( + 'composeServiceWorker', + content, + context + ); const minifyConfig = minify === true ? {} : minify; let composedContent = swHeader + composed; // if the consuming application has specified minification or // is in a production in environment, minify the service worker script. - if ('minify' in swConfig || /prod/i.test(env)) { + if ( + ('minify' in swConfig || /prod/i.test(env)) && + typeof minifyConfig === 'object' + ) { composedContent = uglify.minify(composedContent, minifyConfig).code; } @@ -52,9 +68,7 @@ let __script; /** * Loads template file once with substitutions from config - * - * @param {Object} config - ServiceWorker config from gasket.config - * @returns {Promise} template + * @type {import('../index').loadRegisterScript} */ async function loadRegisterScript(config) { if (!__script) { diff --git a/packages/gasket-plugin-service-worker/lib/webpack-config.js b/packages/gasket-plugin-service-worker/lib/webpack-config.js index 02edcfb25..a9b89a625 100644 --- a/packages/gasket-plugin-service-worker/lib/webpack-config.js +++ b/packages/gasket-plugin-service-worker/lib/webpack-config.js @@ -1,13 +1,10 @@ -const { getSWConfig } = require('./utils'); +/// + +const { getSWConfig } = require('./utils/utils'); /** * Add the analyzer webpack plugin if analyze flag has been set - * - * @param {Object} gasket - Gasket API - * @param {Object} gasket.command - Invoked command details - * @param {Object} webpackConfig - Webpack config - * @param {Object} data - Next.js data - * @returns {Object} webpackConfig + * @type {import('@gasket/engine').HookHandler<'webpackConfig'>} */ module.exports = function webpackConfigHook(gasket, webpackConfig, data) { const { command } = gasket; @@ -15,30 +12,30 @@ module.exports = function webpackConfigHook(gasket, webpackConfig, data) { const { webpackRegister } = swConfig; const { isServer } = data; - // + // Do not register the service worker for local development or if webpackRegister is false - // if (webpackRegister !== false && !isServer && command.id !== 'local') { const WebpackInjectPlugin = require('webpack-inject-plugin').default; - const { loadRegisterScript } = require('./utils'); + const { loadRegisterScript } = require('./utils/utils'); let entryName; if (webpackRegister instanceof Function) { entryName = webpackRegister; } else if (webpackRegister instanceof Array) { - entryName = key => webpackRegister.includes(key); + entryName = (key) => webpackRegister.includes(key); } else if (typeof webpackRegister === 'string') { - entryName = key => key === webpackRegister; + entryName = (key) => key === webpackRegister; } - // // return webpack config partial - // return { ...webpackConfig, plugins: [ ...(webpackConfig.plugins || []), - new WebpackInjectPlugin(() => loadRegisterScript(swConfig), entryName && { entryName }) + new WebpackInjectPlugin( + () => loadRegisterScript(swConfig), + entryName && { entryName } + ) ] }; } diff --git a/packages/gasket-plugin-service-worker/package.json b/packages/gasket-plugin-service-worker/package.json index abd3094a9..534d1f43b 100644 --- a/packages/gasket-plugin-service-worker/package.json +++ b/packages/gasket-plugin-service-worker/package.json @@ -13,8 +13,8 @@ "test": "cross-env NODE_OPTIONS='--unhandled-rejections=strict' jest", "test:watch": "jest --watchAll", "test:coverage": "jest --coverage", - "posttest": "npm run lint", - "typecheck:skip": "tsc", + "posttest": "npm run lint && npm run typecheck", + "typecheck": "tsc", "typecheck:watch": "tsc --watch" }, "repository": { diff --git a/packages/gasket-plugin-service-worker/test/configure.spec.js b/packages/gasket-plugin-service-worker/test/configure.spec.js index 9f02e8a3c..189ca14a1 100644 --- a/packages/gasket-plugin-service-worker/test/configure.spec.js +++ b/packages/gasket-plugin-service-worker/test/configure.spec.js @@ -14,7 +14,7 @@ describe('configure', () => { }); it('returns config with serviceWorker settings', async () => { - results = await configure(mockGasket); + results = await configure(mockGasket, {}); expect(results).toHaveProperty('serviceWorker'); }); @@ -24,7 +24,7 @@ describe('configure', () => { }); it('sets defaults', async () => { - results = await configure(mockGasket); + results = await configure(mockGasket, {}); expect(results.serviceWorker).toEqual({ url: '/sw.js', scope: '/', diff --git a/packages/gasket-plugin-service-worker/test/express.spec.js b/packages/gasket-plugin-service-worker/test/express.spec.js index e018e1c10..6d4c15e61 100644 --- a/packages/gasket-plugin-service-worker/test/express.spec.js +++ b/packages/gasket-plugin-service-worker/test/express.spec.js @@ -41,6 +41,10 @@ describe('express', () => { cacheKeyB = jest.fn(() => 'B'); }); + /** + * Get the endpoint handler + * @returns {Promise} handler + */ async function getEndpoint() { await express(mockGasket, mockApp); return mockApp.get.mock.calls[0][1]; diff --git a/packages/gasket-plugin-service-worker/test/fastify.spec.js b/packages/gasket-plugin-service-worker/test/fastify.spec.js index 87361a1bb..3fe568b6c 100644 --- a/packages/gasket-plugin-service-worker/test/fastify.spec.js +++ b/packages/gasket-plugin-service-worker/test/fastify.spec.js @@ -41,6 +41,10 @@ describe('fastify', () => { cacheKeyB = jest.fn(() => 'B'); }); + /** + * Get the endpoint handler + * @returns {Promise} handler + */ async function getEndpoint() { await fastify(mockGasket, mockApp); return mockApp.get.mock.calls[0][1]; diff --git a/packages/gasket-plugin-service-worker/test/middleware.spec.js b/packages/gasket-plugin-service-worker/test/middleware.spec.js index 87fc7bfd9..d3bcdcd8d 100644 --- a/packages/gasket-plugin-service-worker/test/middleware.spec.js +++ b/packages/gasket-plugin-service-worker/test/middleware.spec.js @@ -1,5 +1,5 @@ -const utils = require('../lib/utils'); -jest.mock('../lib/utils'); +const utils = require('../lib/utils/utils'); +jest.mock('../lib/utils/utils'); const middleware = require('../lib/middleware'); const mockRegisterScript = 'mock script'; diff --git a/packages/gasket-plugin-service-worker/test/utils.spec.js b/packages/gasket-plugin-service-worker/test/utils.spec.js index e39b9d114..30ffc529f 100644 --- a/packages/gasket-plugin-service-worker/test/utils.spec.js +++ b/packages/gasket-plugin-service-worker/test/utils.spec.js @@ -1,6 +1,6 @@ const mockMinify = require('uglify-js'); -const { getComposedContent } = require('../lib/utils'); -const { getCacheKeys, getSWConfig, loadRegisterScript } = require('../lib/utils'); +const { getComposedContent } = require('../lib/utils/utils'); +const { getCacheKeys, getSWConfig, loadRegisterScript } = require('../lib/utils/utils'); describe('utils', () => { describe('getCacheKeys', () => { diff --git a/packages/gasket-plugin-service-worker/tsconfig.json b/packages/gasket-plugin-service-worker/tsconfig.json index fa0fa18ba..b1005f224 100644 --- a/packages/gasket-plugin-service-worker/tsconfig.json +++ b/packages/gasket-plugin-service-worker/tsconfig.json @@ -11,7 +11,8 @@ "dom" ], "types": [ - "@types/jest" + "@types/jest", + "@types/node" ] }, "exclude": [ diff --git a/packages/gasket-plugin-webpack/lib/deprecated-merges.js b/packages/gasket-plugin-webpack/lib/deprecated-merges.js index 9a4b3393a..89d19342f 100644 --- a/packages/gasket-plugin-webpack/lib/deprecated-merges.js +++ b/packages/gasket-plugin-webpack/lib/deprecated-merges.js @@ -1,11 +1,7 @@ /** * Deprecated merging behavior * TODO: Remove in next major release - * - * @param {Gasket} gasket - The Gasket API - * @param {object} initConfig - Initial webpack config - * @param {object} context - Additional context-specific information - * @returns {object} mergedConfig + * @type {import('./internal').deprecatedMerges} */ module.exports = function deprecatedMerges(gasket, initConfig, context) { const { logger, execApplySync, config } = gasket; @@ -13,30 +9,34 @@ module.exports = function deprecatedMerges(gasket, initConfig, context) { const { smart: deprecatedSmartMerge } = require('webpack-merge'); if ('webpack' in config) { - logger.warning(`DEPRECATED \`webpack\` in Gasket config - Prefer \`webpackConfig\` lifecycle. See http://x.co/2wbpckCnfg`); + logger.warning( + `DEPRECATED \`webpack\` in Gasket config - Prefer \`webpackConfig\` lifecycle. See http://x.co/2wbpckCnfg` + ); } const chain = new WebpackChain(); + execApplySync('webpackChain', (plugin, handler) => { const name = plugin ? plugin.name || 'unnamed plugin' : 'app lifecycles'; - logger.warning(`DEPRECATED \`webpackChain\` lifecycle in ${ name } - Use \`webpackConfig\`. See http://x.co/2wbpckCnfg`); + logger.warning( + `DEPRECATED \`webpackChain\` lifecycle in ${name} - Use \`webpackConfig\`. See http://x.co/2wbpckCnfg` + ); return handler(chain, context); }); const baseConfig = deprecatedSmartMerge( initConfig, - chain.toConfig(), // From webpackChain (partial) - config.webpack || {} // From gasket config file (partial) + chain.toConfig(), // From webpackChain (partial) + config.webpack || {} // From gasket config file (partial) ); const configPartials = execApplySync('webpack', (plugin, handler) => { const name = plugin ? plugin.name || 'unnamed plugin' : 'app lifecycles'; - logger.warning(`DEPRECATED \`webpack\` lifecycle in ${ name } - Use \`webpackConfig\`. See http://x.co/2wbpckCnfg`); + logger.warning( + `DEPRECATED \`webpack\` lifecycle in ${name} - Use \`webpackConfig\`. See http://x.co/2wbpckCnfg` + ); return handler(baseConfig, context); }); - return deprecatedSmartMerge( - baseConfig, - ...configPartials - ); + return deprecatedSmartMerge(baseConfig, ...configPartials); }; diff --git a/packages/gasket-plugin-webpack/lib/index.d.ts b/packages/gasket-plugin-webpack/lib/index.d.ts index db25bbf61..8c4a2e7bb 100644 --- a/packages/gasket-plugin-webpack/lib/index.d.ts +++ b/packages/gasket-plugin-webpack/lib/index.d.ts @@ -1,21 +1,46 @@ import type { GasketConfig, HookExecTypes } from '@gasket/engine'; +import { Gasket } from '@gasket/engine'; import type WebpackApi from 'webpack'; +import type { Configuration } from 'webpack'; +import type WebpackChain from 'webpack-chain'; export interface WebpackContext { - webpack: typeof WebpackApi, + webpack: typeof WebpackApi; /** @deprecated use require('webpack-merge') */ - webpackMerge: any + webpackMerge: any; + isServer?: boolean; +} + +export interface WebpackMetrics { + name: string; + event: string; + data: object; + time: number; } declare module '@gasket/engine' { export interface GasketConfig { - webpack?: any + webpack?: any; } export interface HookExecTypes { webpackConfig( - config: WebpackApi.Configuration, + config: Configuration, context: WebpackContext - ): WebpackApi.Configuration; + ): Configuration; + webpackChain(chain: WebpackChain, context: object): void; + webpack(baseConfig: object, context: object): void; + metrics(metrics: WebpackMetrics): Promise; } } + +declare module '@gasket/plugin-webpack' { + /** Creates the webpack config */ + export function initWebpack( + gasket: Gasket, + /** Initial webpack config */ + initConfig: Configuration, + /** Additional context-specific information */ + context: any + ): Configuration; +} diff --git a/packages/gasket-plugin-webpack/lib/index.js b/packages/gasket-plugin-webpack/lib/index.js index 4c22f9647..e62027a2c 100644 --- a/packages/gasket-plugin-webpack/lib/index.js +++ b/packages/gasket-plugin-webpack/lib/index.js @@ -1,7 +1,11 @@ -const { name, devDependencies } = require('../package'); +/// +/// + +const { name, devDependencies } = require('../package.json'); const initWebpack = require('./init-webpack'); -module.exports = { +/** @type {import('@gasket/engine').Plugin} */ +const plugin = { name, hooks: { create(gasket, context) { @@ -13,41 +17,52 @@ module.exports = { metadata(gasket, meta) { return { ...meta, - guides: [{ - name: 'Webpack Configuration Guide', - description: 'Configuring Webpack in Gasket apps', - link: 'docs/webpack.md' - }], - lifecycles: [{ - name: 'webpackChain', - deprecated: true, - method: 'execSync', - description: 'Setup webpack config by chaining', - link: 'README.md#webpackChain', - parent: 'initWebpack' - }, { - name: 'webpack', - deprecated: true, - method: 'execSync', - description: 'Modify webpack config with partials or by mutating', - link: 'README.md#webpack', - parent: 'initWebpack', - after: 'webpackChain' - }, { - name: 'webpackConfig', - method: 'execWaterfallSync', - description: 'Transform the webpack config, with the help of webpack-merge', - link: 'README.md#webpackConfig', - parent: 'initWebpack', - after: 'webpack' - }, { - name: 'initWebpack', - description: 'Create a webpack config', - command: 'build', - link: 'README.md#initwebpack' - }] + guides: [ + { + name: 'Webpack Configuration Guide', + description: 'Configuring Webpack in Gasket apps', + link: 'docs/webpack.md' + } + ], + lifecycles: [ + { + name: 'webpackChain', + deprecated: true, + method: 'execApplySync', + description: 'Setup webpack config by chaining', + link: 'README.md#webpackChain', + parent: 'initWebpack' + }, + { + name: 'webpack', + deprecated: true, + method: 'execApplySync', + description: 'Modify webpack config with partials or by mutating', + link: 'README.md#webpack', + parent: 'initWebpack', + after: 'webpackChain' + }, + { + name: 'webpackConfig', + method: 'execApplySync', + description: + 'Transform the webpack config, with the help of webpack-merge', + link: 'README.md#webpackConfig', + parent: 'initWebpack', + after: 'webpack' + }, + { + name: 'initWebpack', + description: 'Create a webpack config', + command: 'build', + link: 'README.md#initwebpack' + } + ] }; } }, + // @ts-ignore - initWebpack is an added property by the webpack plugin initWebpack }; + +module.exports = plugin; diff --git a/packages/gasket-plugin-webpack/lib/init-webpack.js b/packages/gasket-plugin-webpack/lib/init-webpack.js index b5cf10f3d..c780f1cdb 100644 --- a/packages/gasket-plugin-webpack/lib/init-webpack.js +++ b/packages/gasket-plugin-webpack/lib/init-webpack.js @@ -1,17 +1,17 @@ +/// + /** * Sets up a context object with special getters - * - * @param {Gasket} gasket - The Gasket API - * @param {object} context - Additional context-specific information - * @param {string} name - Plugin name - * @returns {object} context + * @type {import('./internal').setupContext} */ function setupContext(gasket, context, name) { return { ...context, // TODO: Remove in next major version get webpackMerge() { - gasket.logger.warning(`DEPRECATED \`context.webpackMerge\` of webpackConfig hook in ${ name } - Use \`require('webpack-merge')\``); + gasket.logger.warning( + `DEPRECATED \`context.webpackMerge\` of webpackConfig hook in ${name} - Use \`require('webpack-merge')\`` + ); return require('webpack-merge'); }, get webpack() { @@ -22,10 +22,7 @@ function setupContext(gasket, context, name) { /** * Creates the webpack config - * @param {Gasket} gasket - The Gasket API - * @param {object} initConfig - Initial webpack config - * @param {object} context - Additional context-specific information - * @returns {object} Final webpack config + * @type {import('@gasket/plugin-webpack').initWebpack} */ module.exports = function initWebpack(gasket, initConfig, context) { const WebpackMetricsPlugin = require('./webpack-metrics-plugin'); @@ -39,7 +36,11 @@ module.exports = function initWebpack(gasket, initConfig, context) { }; // TODO: Remove in next major version - let mergedConfig = require('./deprecated-merges')(gasket, baseConfig, context); + let mergedConfig = require('./deprecated-merges')( + gasket, + baseConfig, + context + ); // eslint-disable-next-line no-sync gasket.execApplySync('webpackConfig', (plugin, handler) => { diff --git a/packages/gasket-plugin-webpack/lib/internal.d.ts b/packages/gasket-plugin-webpack/lib/internal.d.ts new file mode 100644 index 000000000..eefb4dcd5 --- /dev/null +++ b/packages/gasket-plugin-webpack/lib/internal.d.ts @@ -0,0 +1,30 @@ +import type { Compiler, Configuration } from 'webpack'; +import { Gasket } from '@gasket/engine'; +import type { WebpackMetrics } from '@gasket/plugin-webpack'; + +export async function handleMetrics( + /** Metrics data gathered from plugin */ + metrics: WebpackMetrics +): Promise; + +/** + * This plugin will calculate the sizes of the directories from the webpack + * bundle sent to the browser and call the metrics lifecycle with the data. + */ +export function apply(compiler: Compiler): void; + +/** Sets up a context object with special getters */ +export function setupContext( + gasket: Gasket, + /** Additional context-specific information */ + context: any, + name: string +): any; + +export function deprecatedMerges( + gasket: Gasket, + /** Initial webpack config */ + initConfig: Configuration, + /** Additional context-specific information */ + context: object +): Configuration; diff --git a/packages/gasket-plugin-webpack/lib/webpack-metrics-plugin.js b/packages/gasket-plugin-webpack/lib/webpack-metrics-plugin.js index f141bd28a..9aadb8533 100644 --- a/packages/gasket-plugin-webpack/lib/webpack-metrics-plugin.js +++ b/packages/gasket-plugin-webpack/lib/webpack-metrics-plugin.js @@ -2,34 +2,26 @@ const path = require('path'); /** * This is a webpack plugin for gathering bundle size data - * - * @param {Object} opts Options object - * @param {Gasket} opts.gasket gasket API - * @public */ class WebpackMetricsPlugin { constructor(opts) { + /** @type {import('@gasket/engine').Gasket} */ this.gasket = opts.gasket; } /** * Helper function to call the metrics lifecycle - * - * @param {Object} metrics metrics data gathered from plugin - * @private + * @type {import('./internal').handleMetrics} */ async handleMetrics(metrics) { - // - // TODO (crobbins): better expose gasket logging utilities - // to plugins to logging these errors more obvious to future - // plugin authors. - // + // TODO (crobbins): better expose gasket logging utilities to plugins to + // logging these errors more obvious to future plugin authors. this.gasket.exec('metrics', metrics); } /** - * This plugin will calculate the sizes of the directories from the webpack bundle - * sent to the browser and call the metrics lifecycle with the data. + * This plugin will calculate the sizes of the directories from the webpack + * bundle sent to the browser and call the metrics lifecycle with the data. * * Example format of data to emit: * @@ -43,61 +35,58 @@ class WebpackMetricsPlugin { * pages: { totalSize: 782744, js: 782744 }, * 'bundle.svgs': { totalSize: 10188, svgs: 10188 } }, * time: 1559323660583 } - * - * @param {Object} compiler - webpack compiler object + * @type {import('./internal').apply} */ apply(compiler) { const { target, context } = compiler.options; if (target !== 'web') return; - compiler.hooks.emit.tap( - 'WebpackMetricsPlugin', - ({ assets }) => { - const map = {}; - let name; + // eslint-disable-next-line max-statements + compiler.hooks.emit.tap('WebpackMetricsPlugin', ({ assets }) => { + const map = {}; + let name; - try { - const packagePath = path.join(context, '/package.json'); - const packageJSON = require(packagePath); // eslint-disable-line - name = packageJSON.name; - } catch (e) { - name = 'Gasket App'; - } + try { + const packagePath = path.join(context, '/package.json'); + const packageJSON = require(packagePath); + + name = packageJSON.name; + } catch (e) { + name = 'Gasket App'; + } - for (const fullpath of Object.keys(assets)) { - const asset = assets[fullpath]; - const fileSize = asset.size(); + for (const fullpath of Object.keys(assets)) { + const asset = assets[fullpath]; + const fileSize = asset.size(); - const parsed = path.parse(fullpath); - const extension = parsed.ext.slice(1); + const parsed = path.parse(fullpath); + const extension = parsed.ext.slice(1); - let dirname = path.basename(parsed.dir); - const parent = path.basename(path.dirname(parsed.dir)); - if (parent === 'pages') { - dirname = parent; - } + let dirname = path.basename(parsed.dir); + const parent = path.basename(path.dirname(parsed.dir)); - map[dirname] = map[dirname] || { totalSize: 0 }; - map[dirname].totalSize += fileSize; - map[dirname][extension] = map[dirname][extension] || 0; - map[dirname][extension] += fileSize; + if (parent === 'pages') { + dirname = parent; } - const metrics = { - name, - event: 'webpack', - data: map, - time: Date.now() - }; - - // - // TODO (crobbins): better expose gasket logging utilities - // to plugins to logging these errors more obvious to future - // plugin authors. - // - this.handleMetrics(metrics).catch(() => {}); + map[dirname] = map[dirname] || { totalSize: 0 }; + map[dirname].totalSize += fileSize; + map[dirname][extension] = map[dirname][extension] || 0; + map[dirname][extension] += fileSize; } - ); + + /** @type {import('./index').WebpackMetrics} */ + const metrics = { + name, + event: 'webpack', + data: map, + time: Date.now() + }; + + // TODO (crobbins): better expose gasket logging utilities to plugins to + // logging these errors more obvious to future plugin authors. + this.handleMetrics(metrics).catch(() => {}); + }); } } diff --git a/packages/gasket-plugin-webpack/package.json b/packages/gasket-plugin-webpack/package.json index 1214b8d42..e67755b70 100644 --- a/packages/gasket-plugin-webpack/package.json +++ b/packages/gasket-plugin-webpack/package.json @@ -14,8 +14,8 @@ "test": "cross-env NODE_OPTIONS='--unhandled-rejections=strict' jest", "test:watch": "jest --watch", "test:coverage": "jest --coverage", - "posttest": "npm run lint", - "typecheck:skip": "tsc", + "posttest": "npm run lint && npm run typecheck", + "typecheck": "tsc", "typecheck:watch": "tsc --watch" }, "repository": { diff --git a/packages/gasket-plugin-webpack/tsconfig.json b/packages/gasket-plugin-webpack/tsconfig.json index fa0fa18ba..b1005f224 100644 --- a/packages/gasket-plugin-webpack/tsconfig.json +++ b/packages/gasket-plugin-webpack/tsconfig.json @@ -11,7 +11,8 @@ "dom" ], "types": [ - "@types/jest" + "@types/jest", + "@types/node" ] }, "exclude": [ diff --git a/packages/gasket-plugin-workbox/lib/build.js b/packages/gasket-plugin-workbox/lib/build.js index 440cc0fac..7933f4417 100644 --- a/packages/gasket-plugin-workbox/lib/build.js +++ b/packages/gasket-plugin-workbox/lib/build.js @@ -3,7 +3,6 @@ const { getOutputDir } = require('./utils'); /** * Build lifecycle to copy workbox libraries for serving - * * @param {Gasket} gasket - Gasket * @returns {Promise} promise */ diff --git a/packages/gasket-plugin-workbox/lib/compose-service-worker.js b/packages/gasket-plugin-workbox/lib/compose-service-worker.js index b0d579654..5c48b2367 100644 --- a/packages/gasket-plugin-workbox/lib/compose-service-worker.js +++ b/packages/gasket-plugin-workbox/lib/compose-service-worker.js @@ -6,10 +6,9 @@ const reComments = /\/\*.*(\n.+)*\*\//g; /** * Gathers Workbox config by executing the `workbox` lifecycle. * Generates service worker strings and appends to the service worker content. - * * @param {Gasket} gasket - Gasket - * @param {String} content - Service worker content - * @param {Object} context - Service worker context + * @param {string} content - Service worker content + * @param {object} context - Service worker context * @returns {Promise} content */ module.exports = async function composeServiceWorker(gasket, content, context) { diff --git a/packages/gasket-plugin-workbox/lib/configure.js b/packages/gasket-plugin-workbox/lib/configure.js index ac41cafe6..53d4b538d 100644 --- a/packages/gasket-plugin-workbox/lib/configure.js +++ b/packages/gasket-plugin-workbox/lib/configure.js @@ -5,10 +5,9 @@ const { /** * Configure lifecycle to set up SW config with defaults - * * @param {Gasket} gasket - Gasket - * @param {Object} config - Base gasket config - * @returns {Promise} config + * @param {object} config - Base gasket config + * @returns {Promise} config */ module.exports = async function configure(gasket, config) { const { logger } = gasket; diff --git a/packages/gasket-plugin-workbox/lib/express.js b/packages/gasket-plugin-workbox/lib/express.js index e41e84b23..fed327ee5 100644 --- a/packages/gasket-plugin-workbox/lib/express.js +++ b/packages/gasket-plugin-workbox/lib/express.js @@ -3,9 +3,8 @@ const { getOutputDir } = require('./utils'); /** * Express lifecycle to set up route for serving workbox libraries - * * @param {Gasket} gasket - Gasket - * @param {Object} app - Express app + * @param {object} app - Express app */ module.exports = function express(gasket, app) { const outputDir = getOutputDir(gasket); diff --git a/packages/gasket-plugin-workbox/lib/fastify.js b/packages/gasket-plugin-workbox/lib/fastify.js index 306e2e3a5..68a71d860 100644 --- a/packages/gasket-plugin-workbox/lib/fastify.js +++ b/packages/gasket-plugin-workbox/lib/fastify.js @@ -3,9 +3,8 @@ const { getOutputDir } = require('./utils'); /** * Express lifecycle to set up route for serving workbox libraries - * * @param {Gasket} gasket - Gasket - * @param {Object} app - Fastify app + * @param {object} app - Fastify app */ module.exports = function fastify(gasket, app) { const outputDir = getOutputDir(gasket); diff --git a/packages/gasket-plugin-workbox/lib/index.d.ts b/packages/gasket-plugin-workbox/lib/index.d.ts index ff49e52a5..3eb0ad27c 100644 --- a/packages/gasket-plugin-workbox/lib/index.d.ts +++ b/packages/gasket-plugin-workbox/lib/index.d.ts @@ -1,29 +1,30 @@ import type { IncomingMessage, OutgoingMessage } from 'http'; import type { PartialRecursive, MaybeAsync } from '@gasket/engine'; import type { GenerateSWConfig } from 'workbox-build'; +import type { Request, Response } from 'express'; declare module '@gasket/engine' { export interface GasketConfig { workbox?: { /** path of directory to copy Workbox libraries to (default: * ./build/workbox) */ - outputDir?: string, + outputDir?: string; /** change the default path to /_workbox endpoint by adding a path prefix * here. (default: ''). Used for setting up CDN support for Workbox * files. */ - basePath?: string, + basePath?: string; /** Any initial workbox config options which will be merged with those * from any workbox lifecycle hooks. */ - config?: PartialRecursive - } + config?: PartialRecursive; + }; } export interface HookExecTypes { workbox( config: GenerateSWConfig, - context: { req?: IncomingMessage, res?: OutgoingMessage } - ): MaybeAsync> + context: { req?: Request; res?: Response } + ): MaybeAsync>; } } diff --git a/packages/gasket-plugin-workbox/lib/utils.js b/packages/gasket-plugin-workbox/lib/utils.js index e20c09192..a5e2f0895 100644 --- a/packages/gasket-plugin-workbox/lib/utils.js +++ b/packages/gasket-plugin-workbox/lib/utils.js @@ -5,8 +5,7 @@ const isDefined = o => typeof o !== 'undefined'; /** * Workbox defaults - * - * @type {Object} + * @type {object} */ const defaultConfig = { outputDir: './build/workbox', @@ -18,9 +17,8 @@ const defaultConfig = { /** * Get the workbox config from gasket.config with defaults - * * @param {Gasket} gasket - Gasket - * @returns {Object} config + * @returns {object} config */ function getWorkboxConfig(gasket) { const { workbox: workboxConfig = {} } = gasket.config; @@ -29,7 +27,6 @@ function getWorkboxConfig(gasket) { /** * Get the build output dir from project root and configured outputDir - * * @param {Gasket} gasket - Gasket * @returns {string} path */ @@ -42,7 +39,6 @@ function getOutputDir(gasket) { /** * Get the base path from workbox, or root basePath config. * If found in both, the workbox config will be used. - * * @param {Gasket} gasket - Gasket * @returns {string} prefix */ diff --git a/packages/gasket-plugin-workbox/package.json b/packages/gasket-plugin-workbox/package.json index a1b877f29..0ce212f20 100644 --- a/packages/gasket-plugin-workbox/package.json +++ b/packages/gasket-plugin-workbox/package.json @@ -13,9 +13,7 @@ "test": "cross-env NODE_OPTIONS='--unhandled-rejections=strict' jest", "test:watch": "jest --watchAll", "test:coverage": "jest --coverage", - "posttest": "npm run lint", - "typecheck:skip": "tsc", - "typecheck:watch": "tsc --watch" + "posttest": "npm run lint" }, "repository": { "type": "git", diff --git a/packages/gasket-react-intl/package.json b/packages/gasket-react-intl/package.json index f1c1007e4..dc4287a64 100644 --- a/packages/gasket-react-intl/package.json +++ b/packages/gasket-react-intl/package.json @@ -18,10 +18,10 @@ "test": "cross-env NODE_OPTIONS='--unhandled-rejections=strict' jest", "test:watch": "jest --watchAll", "test:coverage": "jest --coverage", - "posttest": "npm run lint", + "posttest": "npm run lint && npm run typecheck", "build": "babel src -d lib --delete-dir-on-start", "prepublishOnly": "npm run build", - "typecheck:skip": "tsc", + "typecheck": "tsc", "typecheck:watch": "tsc --watch" }, "repository": { diff --git a/packages/gasket-react-intl/src/config.js b/packages/gasket-react-intl/src/config.js index 7f966ec5e..ad6a6b1cc 100644 --- a/packages/gasket-react-intl/src/config.js +++ b/packages/gasket-react-intl/src/config.js @@ -1,22 +1,17 @@ /* eslint-disable no-process-env */ /** - * @type {LocaleManifest} + * @type {import('@gasket/helper-intl').LocaleManifest} */ -const manifest = process.env.GASKET_INTL_MANIFEST_FILE ? - require(process.env.GASKET_INTL_MANIFEST_FILE) : - {}; +const manifest = process.env.GASKET_INTL_MANIFEST_FILE + ? require(process.env.GASKET_INTL_MANIFEST_FILE) + : {}; const isBrowser = typeof window !== 'undefined'; -const clientData = isBrowser && require('@gasket/data')?.intl || {}; +// @ts-ignore - data is injected by plugin +const clientData = (isBrowser && require('@gasket/data')?.intl) || {}; const { // these properties set in manifest, could also be configured on render basePath = manifest.basePath } = clientData; - -export { - isBrowser, - basePath, - manifest, - clientData -}; +export { isBrowser, basePath, manifest, clientData }; diff --git a/packages/gasket-react-intl/src/context.js b/packages/gasket-react-intl/src/context.js index 004e31cf2..2f0e211e4 100644 --- a/packages/gasket-react-intl/src/context.js +++ b/packages/gasket-react-intl/src/context.js @@ -1,7 +1,9 @@ import React from 'react'; import { manifest } from './config'; -export const GasketIntlContext = React.createContext({ - locale: manifest.defaultLocale, - status: {} -}); +/** @type {import('./index').GasketIntlContext} */ +const defaultContext = { + locale: manifest.defaultLocale +}; + +export const GasketIntlContext = React.createContext(defaultContext); diff --git a/packages/gasket-react-intl/src/index.d.ts b/packages/gasket-react-intl/src/index.d.ts index 5231af5e2..8fff6835b 100644 --- a/packages/gasket-react-intl/src/index.d.ts +++ b/packages/gasket-react-intl/src/index.d.ts @@ -1,52 +1,159 @@ -import { PropsWithChildren } from 'react'; -import { LocalePathPartOrThunk, LocaleStatus } from '@gasket/helper-intl'; +import React, { PropsWithChildren } from 'react'; +import { + LocalePathPartOrThunk, + LocaleStatus, + LocalesProps, + LocalesState +} from '@gasket/helper-intl'; +import type { GasketData } from '@gasket/data'; +import type { IncomingMessage, ServerResponse } from 'http'; export { LocaleStatus }; +/** Wrapper component which sets up providers and reducer hook */ +export type IntlProviderWrapper = (props: { + /** Component props from a Next.js page */ + pageProps?: { + /** Initial state from a Next.js page */ + localesProps?: LocalesProps; + }; +}) => React.ReactNode; + /** - * Make an HOC that adds a provider to managing locale files as well as the react-intl Provider. - * This can be used to wrap a top level React or a Next.js custom App component. - * - * @returns wrapper + * Make an HOC that adds a provider to managing locale files as well as the + * react-intl Provider. This can be used to wrap a top level React or a Next.js + * custom App component. */ -export function withIntlProvider(): (Component: React.ComponentType) => React.ComponentType; +export function withIntlProvider(): ( + Component: React.ComponentType +) => IntlProviderWrapper; + +export type LocaleRequiredWrapper = (props: { + forwardedRef?: React.Ref; + localePathPart?: LocalePathPartOrThunk; +}) => React.ReactNode; /** * Make an HOC that loads a locale file before rendering wrapped component - * - * @param [localePathPart] - Path containing locale files - * @param [options.loading=null] - Custom component to show while loading - * @param [options.forwardRef=false] - Forward refs - * @param [options] - Options - * @param [options.initialProps=false] - Preload locales during SSR with Next.js pages - * @returns wrapper */ export function withLocaleRequired( + /** Path containing locale files */ localePathPart?: LocalePathPartOrThunk, options?: { + /** Custom component to show while loading */ loading?: React.ReactNode; + /** Preload locales during SSR with Next.js pages */ initialProps?: boolean; forwardRef?: boolean; } -): (Component: React.ComponentType) => React.ComponentType; +): (Component: React.ComponentType) => LocaleRequiredWrapper; + +export interface LocaleRequiredProps { + /** Path containing locale files */ + localesPath: LocalePathPartOrThunk; + /** Custom component to show while loading */ + loading?: React.ReactNode; +} /** * Component that loads a locale file before rendering children - * - * @param props - Props - * @param props.localesPath - Path containing locale files - * @param [props.loading] - Custom component to show while loading - * @returns element */ -export const LocaleRequired: React.ComponentType>; +export function LocaleRequired( + props: PropsWithChildren +): React.ReactNode; /** * React that fetches a locale file and returns loading status - * - * @param localePathPart - Path containing locale files - * @returns status */ -export function useLocaleRequired(localePathPart: LocalePathPartOrThunk): LocaleStatus; +export function useLocaleRequired( + /** Path containing locale files */ + localePathPart: LocalePathPartOrThunk +): LocaleStatus; + +interface NextStaticContext extends Record { + locale?: string; + params: Record; +} + +interface NextServerContext extends NextStaticContext { + res: ServerResponse & { + locals: { + gasketData: GasketData; + }; + }; +} + +interface NextInitialContext extends NextStaticContext { + res?: ServerResponse & { + locals: { + gasketData: GasketData; + localesDir: string; + }; + }; +} + +/** Load locale file(s) for Next.js static pages */ +export function intlGetStaticProps( + /** Path(s) containing locale files */ + localePathPart?: LocalePathPartOrThunk | LocalePathPartOrThunk[] +): ( + ctx: NextStaticContext +) => Promise<{ props: { localesProps: LocalesProps } }>; + +/** Load locale file(s) for Next.js server-side rendered pages */ +export function intlGetServerSideProps( + /** Path(s) containing locale files */ + localePathPart?: LocalePathPartOrThunk | LocalePathPartOrThunk[] +): ( + ctx: NextServerContext +) => Promise<{ props: { localesProps: LocalesProps } }>; + +declare module '@gasket/data' { + export interface GasketData { + intl?: LocalesProps & { + /** Path to where locale files exist */ + basePath?: string; + }; + } +} + +export interface GasketIntlContext { + locale: string; + status?: LocaleStatus; + dispatch?: React.Dispatch<{ + type: string; + payload: {}; + }>; +} + +/** Merges any initial state from render with that from page props */ +export function init(localesProps: LocalesProps): LocalesState; + +/** Reducer for managing locale file loading status and messages */ +export function reducer( + /** Incoming State */ + state: LocalesState, + /** State change action */ + action: { + type: string; + payload: Record; + } +): LocalesState; + +export function attachGetInitialProps( + /** The HOC */ + Wrapper: React.ComponentType & { + WrappedComponent?: React.ComponentType & { + getInitialProps?: (ctx: NextInitialContext) => Promise; + }; + }, + /** Path containing locale files */ + localePathPart: LocalePathPartOrThunk +): void; + +export async function attachedGetInitialProps( + ctx: NextInitialContext +): Promise<{ + localePathPart?: LocalePathPartOrThunk; + localesProps?: LocalesProps; +}>; diff --git a/packages/gasket-react-intl/src/locale-required.js b/packages/gasket-react-intl/src/locale-required.js index cb6fd41c1..a8b73c9aa 100644 --- a/packages/gasket-react-intl/src/locale-required.js +++ b/packages/gasket-react-intl/src/locale-required.js @@ -1,4 +1,3 @@ -import React from 'react'; import PropTypes from 'prop-types'; import { manifest } from './config'; import { LocaleStatus } from './utils'; @@ -6,24 +5,19 @@ import useLocaleRequired from './use-locale-required'; /** * Component that loads a locale file before rendering children - * - * @param {object} props - Props - * @param {LocalePathPart} props.localesPath - Path containing locale files - * @param {React.Component} [props.loading] - Custom component to show while loading - * @returns {JSX.Element|null} element + * @type {import('./index').LocaleRequired} */ export default function LocaleRequired(props) { const { localesPath, loading = null, children } = props; const loadState = useLocaleRequired(localesPath); + if (loadState === LocaleStatus.LOADING) return loading; - return <>{ children }; + + return children; } LocaleRequired.propTypes = { - localesPath: PropTypes.oneOfType([ - PropTypes.string, - PropTypes.func - ]), + localesPath: PropTypes.oneOfType([PropTypes.string, PropTypes.func]), loading: PropTypes.node, children: PropTypes.node.isRequired }; diff --git a/packages/gasket-react-intl/src/next.js b/packages/gasket-react-intl/src/next.js index e96026858..f1f109b6b 100644 --- a/packages/gasket-react-intl/src/next.js +++ b/packages/gasket-react-intl/src/next.js @@ -2,21 +2,27 @@ import { localeUtils } from './utils'; import { manifest } from './config'; let localesParentDir; +/** + * Get the parent directory of the locales directory + * @returns {string} localesParentDir + */ export function getLocalesParentDir() { - return localesParentDir || ( + return ( + localesParentDir || // eslint-disable-next-line no-process-env - localesParentDir = require('path').dirname(process.env.GASKET_INTL_LOCALES_DIR) + (localesParentDir = require('path').dirname( + // eslint-disable-next-line no-process-env + process.env.GASKET_INTL_LOCALES_DIR + )) ); } /** * Load locale file(s) for Next.js static pages - * - * @param {LocalePathPart|LocalePathPart[]} localePathPart - Path(s) containing locale files - * @returns {function({}): Promise<{props: {localesProps: LocalesProps}}>} pageProps + * @type {import('./index').intlGetStaticProps} */ export function intlGetStaticProps(localePathPart = manifest.defaultPath) { - return async ctx => { + return async (ctx) => { // provide by next i18n let { locale } = ctx; // otherwise, check for locale in path params @@ -24,8 +30,13 @@ export function intlGetStaticProps(localePathPart = manifest.defaultPath) { locale = ctx.params.locale; } - // eslint-disable-next-line no-process-env - const localesProps = localeUtils.serverLoadData(localePathPart, locale, getLocalesParentDir(), ctx); + /** @type {import('@gasket/helper-intl').LocalesProps} */ + const localesProps = localeUtils.serverLoadData( + localePathPart, + locale, + getLocalesParentDir(), + ctx + ); return { props: { @@ -36,21 +47,31 @@ export function intlGetStaticProps(localePathPart = manifest.defaultPath) { } /** - * Load locale file(s) for Next.js static pages - * - * @param {LocalePathPart|LocalePathPart[]} localePathPart - Path(s) containing locale files - * @returns {function({}): Promise<{props: {localesProps: LocalesProps}}>} pageProps + * Load locale file(s) for Next.js server-side rendered pages + * @type {import('./index').intlGetServerSideProps} */ export function intlGetServerSideProps(localePathPart = manifest.defaultPath) { - return async ctx => { + return async (ctx) => { const { res } = ctx; // provide by next i18n let { locale } = ctx; // otherwise, check gasketData - if (!locale && res.locals && res.locals.gasketData && res.locals.gasketData.intl) { + if ( + !locale && + res.locals && + res.locals.gasketData && + res.locals.gasketData.intl + ) { locale = res.locals.gasketData.intl.locale; } - const localesProps = localeUtils.serverLoadData(localePathPart, locale, getLocalesParentDir(), ctx); + + /** @type {import('@gasket/helper-intl').LocalesProps} */ + const localesProps = localeUtils.serverLoadData( + localePathPart, + locale, + getLocalesParentDir(), + ctx + ); return { props: { diff --git a/packages/gasket-react-intl/src/use-locale-required.js b/packages/gasket-react-intl/src/use-locale-required.js index 8a511ca5f..518712728 100644 --- a/packages/gasket-react-intl/src/use-locale-required.js +++ b/packages/gasket-react-intl/src/use-locale-required.js @@ -6,9 +6,7 @@ import { GasketIntlContext } from './context'; /** * React that fetches a locale file and returns loading status - * - * @param {LocalePathPartOrThunk} localePathPart - Path containing locale files - * @returns {LocaleStatus} status + * @type {import('./index').useLocaleRequired} */ export default function useLocaleRequired(localePathPart) { const { locale, status = {}, dispatch } = useContext(GasketIntlContext); @@ -31,8 +29,14 @@ export default function useLocaleRequired(localePathPart) { // Upon fetching, we will dispatch file status and messages to kick off a render. fetch(url) - .then(r => r.ok ? r.json() : Promise.reject(new Error(`Error loading locale file (${ r.status }): ${ url }`))) - .then(messages => { + .then((r) => + r.ok + ? r.json() + : Promise.reject( + new Error(`Error loading locale file (${r.status}): ${url}`) + ) + ) + .then((messages) => { dispatch({ type: LocaleStatus.LOADED, payload: { @@ -42,7 +46,7 @@ export default function useLocaleRequired(localePathPart) { } }); }) - .catch(e => { + .catch((e) => { console.error(e.message || e); // eslint-disable-line no-console dispatch({ type: LocaleStatus.ERROR, diff --git a/packages/gasket-react-intl/src/utils.js b/packages/gasket-react-intl/src/utils.js index 8c9ea6781..954a5aca4 100644 --- a/packages/gasket-react-intl/src/utils.js +++ b/packages/gasket-react-intl/src/utils.js @@ -8,13 +8,15 @@ export { LocaleStatus } from '@gasket/helper-intl'; /** * Determines the active locale from either what was rendered for the page (preferred), * or what is set in navigator.languages for the browser. - * @see: https://developer.mozilla.org/en-US/docs/Web/API/NavigatorLanguage/languages#Browser_compatibility - * - * @returns {Locale} locale + * @see https://developer.mozilla.org/en-US/docs/Web/API/NavigatorLanguage/languages#Browser_compatibility + * @returns {string} locale */ export function getActiveLocale() { if (isBrowser) { - return window.gasketIntlLocale ?? clientData.locale ?? navigator.languages[0]; + return ( + // @ts-ignore + window.gasketIntlLocale ?? clientData.locale ?? navigator.languages[0] + ); } return manifest.defaultLocale; } diff --git a/packages/gasket-react-intl/src/with-intl-provider.js b/packages/gasket-react-intl/src/with-intl-provider.js index 584eb233f..a4b6b08bd 100644 --- a/packages/gasket-react-intl/src/with-intl-provider.js +++ b/packages/gasket-react-intl/src/with-intl-provider.js @@ -1,4 +1,5 @@ -import React, { useReducer } from 'react'; +import { useReducer, createElement } from 'react'; +import PropTypes from 'prop-types'; import hoistNonReactStatics from 'hoist-non-react-statics'; import extend from 'just-extend'; import { IntlProvider } from 'react-intl'; @@ -8,30 +9,35 @@ import { getActiveLocale, LocaleStatus } from './utils'; /** * Merges any initial state from render with that from page props - * - * @param {LocalesProps|{}} localesProps - Initial props from a Next.js page - * @returns {LocalesState} state + * @type {import('./index').init} */ export function init(localesProps) { - const { messages = {}, status = {} } = localesProps; + const { messages = {}, status } = localesProps; + if (isBrowser) { - // merge any data set on window with what comes from SSR or static page props + // merge any data set on window with what comes from SSR or static page + // props const { messages: dataMessages = {}, status: dataStatus = {} } = clientData; - return extend(true, {}, { messages: dataMessages, status: dataStatus }, { messages, status }); + // @ts-ignore + return extend( + true, + {}, + { messages: dataMessages, status: dataStatus }, + { messages, status } + ); } return { messages, status }; } /** - * - * @param {LocalesState} state - Incoming state - * @param {{type: string, payload: {}}} action - State change action - * @returns {LocalesState} state result + * Reducer for managing locale file loading status and messages + * @type {import('./index').reducer} */ export function reducer(state, action) { const { type } = action; const { locale, messages, file } = action.payload; + if (type === LocaleStatus.LOADED) { return { ...state, @@ -59,57 +65,66 @@ export function reducer(state, action) { } /** - * Make an HOC that adds a provider to managing locale files as well as the react-intl Provider. - * This can be used to wrap a top level React or a Next.js custom App component. - * - * @returns {function} wrapper + * Make an HOC that adds a provider to managing locale files as well as the + * react-intl Provider. This can be used to wrap a top level React or a Next.js + * custom App component. + * @type {import('./index').withIntlProvider} */ export default function withIntlProvider() { - /** - * Wrap the component - * @param {React.Component} Component - Component to wrap - * @returns {React.Component} wrapped component - */ - return Component => { + return (Component) => { /** - * Wrapper component which sets up providers and reducer hook - * - * @param {object} props - Component props - * @param {object} [props.pageProps] - Component props from a Next.js page - * @param {LocalesProps} [props.pageProps.localesProps] - Initial state from a Next.js page - * @returns {JSX.Element} element + * @type {import('./index').IntlProviderWrapper} */ - function Wrapper(props = {}) { - - // Support for wrapping Next.js App with data from get server side and static props - const { pageProps: { localesProps } = {} } = props; // eslint-disable-line react/prop-types + function Wrapper(props) { + // Support for wrapping Next.js App with data from get server side and + // static props + const { pageProps: { localesProps } = {} } = props; const [state, dispatch] = useReducer(reducer, localesProps || {}, init); // If we have incoming pageProps, we need to update state but have to by - // mutation rather than issuing a dispatch to avoid re-renders and timing issues + // mutation rather than issuing a dispatch to avoid re-renders and timing + // issues if (localesProps) { extend(true, state, localesProps); } - const locale = localesProps?.locale || - getActiveLocale(); + const locale = localesProps?.locale || getActiveLocale(); + /** @type {import('./index').LocaleStatus} */ + // @ts-ignore - the extend() mutation causes types issues const { status } = state; const messages = (state.messages || {})[locale]; + + /** @type {import('./index').GasketIntlContext} */ const contextValue = { locale, status, dispatch }; - return ( - - - - - + return createElement( + GasketIntlContext.Provider, + { value: contextValue }, + createElement( + IntlProvider, + { + locale, + key: locale, + messages + }, + // @ts-ignore + createElement(Component, props) + ) ); } - Wrapper.displayName = `withIntlProvider(${ Component.displayName || Component.name || 'Component' })`; + Wrapper.displayName = `withIntlProvider(${ + Component.displayName || Component.name || 'Component' + })`; + + Wrapper.propTypes = { + pageProps: PropTypes.object + }; + hoistNonReactStatics(Wrapper, Component); + return Wrapper; }; } diff --git a/packages/gasket-react-intl/src/with-locale-required.js b/packages/gasket-react-intl/src/with-locale-required.js index bb4f9a9f9..ab1670764 100644 --- a/packages/gasket-react-intl/src/with-locale-required.js +++ b/packages/gasket-react-intl/src/with-locale-required.js @@ -1,4 +1,5 @@ -import React from 'react'; +import React, { createElement } from 'react'; +import PropTypes from 'prop-types'; import hoistNonReactStatics from 'hoist-non-react-statics'; import { manifest } from './config'; import { localeUtils, LocaleStatus } from './utils'; @@ -10,87 +11,112 @@ const { defaultLocale, defaultPath } = manifest; * Sets up and attaches the getInitialProps static method which preloads locale * files during SSR for Next.js pages. For browser routing, the locale files * will be fetched as normal. - * - * @param {React.ComponentType} Wrapper - The HOC - * @param {LocalePathPart} localePathPart - Path containing locale files + * @type {import('./index').attachGetInitialProps} */ function attachGetInitialProps(Wrapper, localePathPart) { const { WrappedComponent } = Wrapper; + /** @type {import('./index').attachedGetInitialProps} */ + // @ts-ignore - attaches getInitialProps to Wrapper Wrapper.getInitialProps = async (ctx) => { const { res } = ctx; let localesProps; let resolvedLocalePathPart; if (typeof localePathPart === 'function') { - // While this can be resolved by serverLoadData, we will do it here - // and return in it in props to avoid having to re-resolve during hydrate under different context - resolvedLocalePathPart = localeUtils.resolveLocalePathPart(localePathPart, ctx); + // While this can be resolved by serverLoadData, we will do it here and + // return in it in props to avoid having to re-resolve during hydrate + // under different context + resolvedLocalePathPart = localeUtils.resolveLocalePathPart( + localePathPart, + ctx + ); } if (res && res.locals && res.locals.gasketData) { const { locale = defaultLocale } = res.locals.gasketData.intl || {}; const localesParentDir = require('path').dirname(res.locals.localesDir); - localesProps = localeUtils.serverLoadData(resolvedLocalePathPart ?? localePathPart, locale, localesParentDir); + localesProps = localeUtils.serverLoadData( + resolvedLocalePathPart ?? localePathPart, + locale, + localesParentDir + ); } return { - ...(resolvedLocalePathPart ? { localePathPart: resolvedLocalePathPart } : {}), + ...(resolvedLocalePathPart + ? { localePathPart: resolvedLocalePathPart } + : {}), ...(localesProps ? { localesProps } : {}), - ...(WrappedComponent.getInitialProps ? await WrappedComponent.getInitialProps(ctx) : {}) + ...(WrappedComponent.getInitialProps + ? await WrappedComponent.getInitialProps(ctx) + : {}) }; }; } /** * Make an HOC that loads a locale file before rendering wrapped component - * - * @param {LocalePathPartOrThunk} localePathPart - Path containing locale files - * @param {object} [options] - Options - * @param {React.Component} [options.loading=null] - Custom component to show while loading - * @param {boolean} [options.initialProps=false] - Preload locales during SSR with Next.js pages - * @param {boolean} [options.forwardRef=false] - Forward refs - * @returns {function} wrapper + * @type {import('./index').withLocaleRequired} */ -export default function withLocaleRequired(localePathPart = defaultPath, options = {}) { +export default function withLocaleRequired( + localePathPart = defaultPath, + options = {} +) { const { loading = null, initialProps = false, forwardRef = false } = options; - /** - * Wrap the component - * @param {React.Component} Component - Component to wrap - * @returns {React.Component} wrapped component - */ - return Component => { + // eslint-disable-next-line max-statements + return (Component) => { const displayName = Component.displayName || Component.name || 'Component'; /** - * Wrapper component that returns based on locale file status - * - * @param {object} props - Component props - * @param {object} [props.forwardedRef] - Forwarded ref - * @returns {JSX.Element} element + * @type {import('./index').LocaleRequiredWrapper} */ function Wrapper(props) { - // eslint-disable-next-line react/prop-types - const { forwardedRef, localePathPart: resolvedLocalePathPart, ...rest } = props; - const loadState = useLocaleRequired(resolvedLocalePathPart ?? localePathPart); + const { + forwardedRef, + localePathPart: resolvedLocalePathPart, + ...rest + } = props; + const loadState = useLocaleRequired( + resolvedLocalePathPart ?? localePathPart + ); + if (loadState === LocaleStatus.LOADING) return loading; - return ; + + // @ts-ignore + return createElement(Component, { + ...rest, + ref: forwardedRef + }); } + Wrapper.propTypes = { + forwardedRef: PropTypes.bool, + localePathPart: PropTypes.oneOfType([PropTypes.string, PropTypes.func]) + }; + hoistNonReactStatics(Wrapper, Component); Wrapper.displayName = `withLocaleRequired(${displayName})`; Wrapper.WrappedComponent = Component; - let Result = Wrapper; - // Forward ref through the HOC - if (forwardRef) { - Result = React.forwardRef((props, ref) => ); - hoistNonReactStatics(Result, Component); - Result.displayName = `ForwardRef(withLocaleRequired/${displayName}))`; - Result.WrappedComponent = Component; + if (!forwardRef) { + if (initialProps || 'getInitialProps' in Component) { + attachGetInitialProps(Wrapper, localePathPart); + } + + return Wrapper; } + const Result = React.forwardRef((props, ref) => + // @ts-ignore + createElement(Wrapper, { ...props, forwardedRef: ref }) + ); + hoistNonReactStatics(Result, Component); + Result.displayName = `ForwardRef(withLocaleRequired/${displayName}))`; + // @ts-ignore + Result.WrappedComponent = Component; + if (initialProps || 'getInitialProps' in Component) { attachGetInitialProps(Result, localePathPart); } diff --git a/packages/gasket-react-intl/test/with-intl-provider.test.js b/packages/gasket-react-intl/test/with-intl-provider.test.js index 08e1bf0f0..5a0695684 100644 --- a/packages/gasket-react-intl/test/with-intl-provider.test.js +++ b/packages/gasket-react-intl/test/with-intl-provider.test.js @@ -105,8 +105,7 @@ describe('withIntlProvider', function () { it('initializes state with empty objects', function () { const result = init({}); expect(result).toEqual({ - messages: {}, - status: {} + messages: {} }); }); diff --git a/packages/gasket-react-intl/test/with-locale-required.test.js b/packages/gasket-react-intl/test/with-locale-required.test.js index 2a0d1c743..35ece999d 100644 --- a/packages/gasket-react-intl/test/with-locale-required.test.js +++ b/packages/gasket-react-intl/test/with-locale-required.test.js @@ -37,8 +37,12 @@ describe('withLocaleRequired', function () { }); it('adds display name with ForwardRef', function () { - const wrapped = withLocaleRequired('/locales', { forwardRef: true })(MockComponent); - expect(wrapped.displayName).toBe('ForwardRef(withLocaleRequired/MockComponent))'); + const wrapped = withLocaleRequired('/locales', { forwardRef: true })( + MockComponent + ); + expect(wrapped.displayName).toBe( + 'ForwardRef(withLocaleRequired/MockComponent))' + ); }); it('hoists non-react statics', function () { @@ -64,13 +68,19 @@ describe('withLocaleRequired', function () { }); it('adds getInitialProps if initialProps set', function () { - const wrapped = withLocaleRequired('/locales', { initialProps: true })(MockComponent); + const wrapped = withLocaleRequired('/locales', { initialProps: true })( + MockComponent + ); expect(wrapped).toHaveProperty('getInitialProps'); }); it('executes wrapped getInitialProps', async function () { - MockComponent.getInitialProps = jest.fn().mockResolvedValue({ bogus: true }); - const wrapped = withLocaleRequired('/locales', { initialProps: true })(MockComponent); + MockComponent.getInitialProps = jest + .fn() + .mockResolvedValue({ bogus: true }); + const wrapped = withLocaleRequired('/locales', { initialProps: true })( + MockComponent + ); const ctx = {}; const props = await wrapped.getInitialProps(ctx); expect(MockComponent.getInitialProps).toHaveBeenCalledWith(ctx); @@ -78,8 +88,12 @@ describe('withLocaleRequired', function () { }); it('loads localeProps on server', async function () { - MockComponent.getInitialProps = jest.fn().mockResolvedValue({ bogus: true }); - const wrapped = withLocaleRequired('/locales', { initialProps: true })(MockComponent); + MockComponent.getInitialProps = jest + .fn() + .mockResolvedValue({ bogus: true }); + const wrapped = withLocaleRequired('/locales', { initialProps: true })( + MockComponent + ); const ctx = { res: { locals: { @@ -98,15 +112,24 @@ describe('withLocaleRequired', function () { bogus: true, localesProps: { locale: 'fr-FR', - messages: { 'fr-FR': { gasket_welcome: 'Bonjour!', gasket_learn: 'Apprendre Gasket' } }, + messages: { + 'fr-FR': { + gasket_welcome: 'Bonjour!', + gasket_learn: 'Apprendre Gasket' + } + }, status: { '/locales/fr-FR.json': 'loaded' } } }); }); it('handles missing gasketData', async function () { - MockComponent.getInitialProps = jest.fn().mockResolvedValue({ bogus: true }); - const wrapped = withLocaleRequired('/locales', { initialProps: true })(MockComponent); + MockComponent.getInitialProps = jest + .fn() + .mockResolvedValue({ bogus: true }); + const wrapped = withLocaleRequired('/locales', { initialProps: true })( + MockComponent + ); const ctx = { res: { locals: { @@ -124,9 +147,17 @@ describe('withLocaleRequired', function () { }); it('resolve localePahThunk and passes as prop', async function () { - const mockThunk = jest.fn().mockImplementation((context) => (context.extra ? '/locales/extra' : '/locales')); - MockComponent.getInitialProps = jest.fn().mockResolvedValue({ bogus: true }); - const wrapped = withLocaleRequired(mockThunk, { initialProps: true })(MockComponent); + const mockThunk = jest + .fn() + .mockImplementation((context) => + context.extra ? '/locales/extra' : '/locales' + ); + MockComponent.getInitialProps = jest + .fn() + .mockResolvedValue({ bogus: true }); + const wrapped = withLocaleRequired(mockThunk, { initialProps: true })( + MockComponent + ); const ctx = { extra: true, res: { @@ -156,7 +187,7 @@ describe('withLocaleRequired', function () { describe('#render', function () { it('renders empty if loading', function () { - useLocaleRequiredMock.mockReturnValue(LOADING); // Set the mock return value to LOADING; + useLocaleRequiredMock.mockReturnValue(LOADING); // Set the mock return value to LOADING; wrapper = doMount(); expect(wrapper.baseElement.innerHTML).toEqual('
'); }); @@ -194,7 +225,9 @@ describe('withLocaleRequired', function () { } } - const TestWrappedComponent = withLocaleRequired('/locales', { forwardRef: true })(TestComponent); + const TestWrappedComponent = withLocaleRequired('/locales', { + forwardRef: true + })(TestComponent); class TestRefComponent extends React.Component { constructor(...args) { diff --git a/packages/gasket-react-intl/tsconfig.json b/packages/gasket-react-intl/tsconfig.json index fa0fa18ba..76e172dec 100644 --- a/packages/gasket-react-intl/tsconfig.json +++ b/packages/gasket-react-intl/tsconfig.json @@ -11,11 +11,14 @@ "dom" ], "types": [ - "@types/jest" + "@types/jest", + "@types/node", ] }, "exclude": [ "test", - "coverage" + "coverage", + "lib", + "next.js" ] -} +} \ No newline at end of file diff --git a/packages/gasket-redux/jest.config.js b/packages/gasket-redux/jest.config.js index 85ae3ae62..63ee9e7b4 100644 --- a/packages/gasket-redux/jest.config.js +++ b/packages/gasket-redux/jest.config.js @@ -1,3 +1,4 @@ module.exports = { - collectCoverageFrom: ['src/**/*.js'] + collectCoverageFrom: ['src/**/*.js'], + testEnvironment: 'jsdom' }; diff --git a/packages/gasket-redux/package.json b/packages/gasket-redux/package.json index 97f612cf1..9c23ee174 100644 --- a/packages/gasket-redux/package.json +++ b/packages/gasket-redux/package.json @@ -16,10 +16,10 @@ "test": "cross-env NODE_OPTIONS='--unhandled-rejections=strict' jest", "test:watch": "jest --watchAll", "test:coverage": "jest --coverage", - "posttest": "npm run lint", + "posttest": "npm run lint && npm run typecheck", "build": "babel src -d lib --ignore \"**/*.spec.js\" --delete-dir-on-start", "prepublishOnly": "npm run build", - "typecheck:skip": "tsc", + "typecheck": "tsc", "typecheck:watch": "tsc --watch" }, "repository": { diff --git a/packages/gasket-redux/src/configure-make-store.js b/packages/gasket-redux/src/configure-make-store.js index 2ff3036e2..219e7936f 100644 --- a/packages/gasket-redux/src/configure-make-store.js +++ b/packages/gasket-redux/src/configure-make-store.js @@ -1,3 +1,5 @@ +/// + import { applyMiddleware, combineReducers, compose, createStore } from 'redux'; import thunk from 'redux-thunk'; import { createLogger } from 'redux-logger'; @@ -6,14 +8,12 @@ import placeholderReducers from './placeholder-reducers'; /** * Compose the reducer - * - * @param {Object.} allReducers - Map of identifiers and reducers - * @param {function} [rootReducer] - Entry reducer to run before combined reducers - * @returns {function} reducer - * @private + * @type {import('./index').prepareReducer} */ export function prepareReducer(allReducers, rootReducer) { - const combinedReducer = Object.keys(allReducers).length ? combineReducers(allReducers) : (f = {}) => f; + const combinedReducer = Object.keys(allReducers).length + ? combineReducers(allReducers) + : (f = {}) => f; if (rootReducer) { return (state, action) => { @@ -28,49 +28,34 @@ export function prepareReducer(allReducers, rootReducer) { return combinedReducer; } + /** * Set up redux store configuration and return a makeStore function - * - * @param {Object} options - Options for create store - * @param {Object.} options.reducers - Map of identifiers and reducers - * @param {function} [options.rootReducer] - Entry reducer to run before combined reducers - * @param {Object.} [options.initialState] - Initial redux state - * @param {function[]} [options.middleware] - Middleware - * @param {function[]} [options.enhancers] - Any additional enhancers - * @param {boolean} [options.logging] - logging is enabled by default. Passing false will disable logging completely. - * @param {function} [options.thunkMiddleware] - Optionally provide an extra argument for thunks - * @param {function} [postCreate] - Optional callback - * @returns {makeStoreFn} makeStore + * @type {import('./index').configureMakeStore} */ -export default function configureMakeStore( - { +export default function configureMakeStore(makeStoreOptions = {}, postCreate) { + const { + thunkMiddleware = thunk, + middleware = [], + logging = false, + enhancers = [(f) => f], reducers = {}, rootReducer, - initialState = {}, - middleware = [], - enhancers = [f => f], - logging = false, thunkMiddleware = thunk - } = {}, - postCreate -) { + initialState = {} + } = makeStoreOptions; + const baseMiddleware = [thunkMiddleware]; /** - * Wrapper for store create to create instance with SSR and to hydrate in browser. - * - * @typedef {function} makeStoreFn - * - * @param {Object.} state - The initial redux state - * @param {Object} options - Options - * @param {Request} options.req - Request if SSR - * @returns {Object} reduxStore + * Wrapper for store create to create instance with SSR and to hydrate in + * browser. + * @type {import('./index').MakeStoreFn} */ function makeStore(state = {}, options = {}) { const { req, logger = new Log() } = options; - // - // Use existing redux store if it has been already been instantiated by redux-plugin - // + // Use existing redux store if it has been already been instantiated by + // redux-plugin if (req && req.store) { return req.store; } @@ -86,14 +71,20 @@ export default function configureMakeStore( ); } - const composer = (typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__) || compose; - const enhancer = composer( - applyMiddleware(...allMiddleware), - ...enhancers - ); + const composer = + (typeof window !== 'undefined' && + // @ts-ignore - redux devtools extension + window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__) || + compose; + const enhancer = composer(applyMiddleware(...allMiddleware), ...enhancers); const preloadedState = { ...initialState, ...state }; - const allReducers = { ...reducers, ...placeholderReducers(reducers, preloadedState) }; + + /** @type {Record} */ + const allReducers = { + ...(reducers || {}), + ...placeholderReducers(reducers, preloadedState) + }; const reducer = prepareReducer(allReducers, rootReducer); const store = createStore(reducer, { ...initialState, ...state }, enhancer); diff --git a/packages/gasket-redux/src/get-or-create-store.js b/packages/gasket-redux/src/get-or-create-store.js index dafa5d10e..6f155e32d 100644 --- a/packages/gasket-redux/src/get-or-create-store.js +++ b/packages/gasket-redux/src/get-or-create-store.js @@ -1,8 +1,6 @@ /** * Helper to check for an existing store on context, otherwise make a new instance. - * - * @param {function} fallbackMakeStore - A makeStore function to create new stores - * @returns {function(object): object} getOrCreateStore + * @type {import('./index').getOrCreateStore} */ export default function getOrCreateStore(fallbackMakeStore) { /** diff --git a/packages/gasket-redux/src/index.d.ts b/packages/gasket-redux/src/index.d.ts index adbff5b64..43ee82ac4 100644 --- a/packages/gasket-redux/src/index.d.ts +++ b/packages/gasket-redux/src/index.d.ts @@ -1,60 +1,79 @@ -import type { Store } from 'redux'; +import type { Store, Reducer, Middleware } from 'redux'; +import type { IncomingMessage, OutgoingMessage } from 'http'; +import type { ThunkMiddleware } from 'redux-thunk'; + +declare module 'http' { + interface IncomingMessage { + store?: Store; + } +} /** - * Wrapper for store create to create instance with SSR and to hydrate in browser. - * - * @typedef {function} makeStoreFn - * - * @param {Object.} state - The initial redux state - * @param {Object} options - Options - * @param {Request} options.req - Request if SSR - * @returns {Object} reduxStore + * Wrapper for store create to create instance with SSR and to hydrate in + * browser. */ - export type MakeStoreFn = { - (state: any, options: { req?: Request }): Store; + ( + /** The initial redux state */ + state: any, + options: { + logger?: Log; + req?: IncomingMessage; + } + ): Store; }; -/** - * Set up redux store configuration and return a makeStore function - * - * @param {Object} options - Options for create store - * @param {Object.} options.reducers - Map of identifiers and reducers - * @param {function} [options.rootReducer] - Entry reducer to run before combined reducers - * @param {Object.} [options.initialState] - Initial redux state - * @param {function[]} [options.middleware] - Middleware - * @param {function[]} [options.enhancers] - Any additional enhancers - * @param {boolean} [options.logging] - logging is enabled by default. Passing false will disable logging completely. - * @param {function} [options.thunkMiddleware] - Optionally provide an extra argument for thunks - * @param {function} [postCreate] - Optional callback - * @returns {MakeStoreFn} makeStore - */ -export function configureMakeStore({ - reducers, - rootReducer, - initialState, - middleware, - enhancers, - logging, - thunkMiddleware -}?: { - reducers: { - [x: string]: (state: any, action: object) => any; - }; - rootReducer?: (state: any, action: object) => any; +export interface ConfigureMakeStoreOptions { + /** Map of identifiers and reducers */ + reducers?: Object; + /** Entry reducer to run before combined reducers */ + rootReducer?: Reducer; initialState?: { [x: string]: any; }; - middleware?: Function[]; + middleware?: Middleware[]; enhancers?: Function[]; + /** + * Logging is enabled by default. Passing false will disable logging + * completely. + */ logging?: boolean; - thunkMiddleware?: Function; -}, postCreate?: Function): MakeStoreFn; + thunkMiddleware?: ThunkMiddleware; +} + +/** Compose the reducer */ +export function prepareReducer( + /** Map of identifiers and reducers */ + allReducers: Record, + /** Entry reducer to run before combined reducers */ + rootReducer?: Reducer +): Reducer; + +/** + * Set up redux store configuration and return a makeStore function + */ +export function configureMakeStore( + options?: ConfigureMakeStoreOptions, + postCreate?: Function +): MakeStoreFn; + +/** + * Helper to check for an existing store on context, otherwise make a new + * instance. + */ +export function getOrCreateStore( + /** A makeStore function to create new stores */ + fallbackMakeStore: Function +): (arg0: object) => object; /** - * Helper to check for an existing store on context, otherwise make a new instance. - * - * @param {function} fallbackMakeStore - A makeStore function to create new stores - * @returns {function(object): object} getOrCreateStore + * Sometimes we want to use redux to set app state with utilizing actions or + * reducers, for consistency between browser and server rendering. As such, if + * keys in preloadedState do not have corresponding reducers, this will add + * placeholders. */ -export function getOrCreateStore(fallbackMakeStore: Function): (arg0: object) => object; +export function placeholderReducers( + reducers?: Object, + /** State to preload store with */ + preloadedState?: Object +): Object; diff --git a/packages/gasket-redux/src/placeholder-reducers.js b/packages/gasket-redux/src/placeholder-reducers.js index 760bf070f..66c56ae26 100644 --- a/packages/gasket-redux/src/placeholder-reducers.js +++ b/packages/gasket-redux/src/placeholder-reducers.js @@ -3,19 +3,18 @@ * or reducers, for consistency between browser and server rendering. * As such, if keys in preloadedState do not have corresponding reducers, * this will add placeholders. - * - * @see: https://redux.js.org/recipes/structuring-reducers/using-combinereducers#defining-state-shape - * - * @param {Object.} reducers - Reducers - * @param {Object.} preloadedState - State to preload store with - * @returns {Object.} placeholder reducers + * @see https://redux.js.org/recipes/structuring-reducers/using-combinereducers#defining-state-shape + * @type {import('./index').placeholderReducers} */ -export default function placeholderReducers(reducers = {}, preloadedState = {}) { +export default function placeholderReducers( + reducers = {}, + preloadedState = {} +) { const keys = new Set(Object.keys(preloadedState)); keys.add('config'); // from @gasket/plugin-config return Array.from(keys).reduce((acc, cur) => { - if (!(cur in reducers)) acc[cur] = f => f || preloadedState[cur] || null; + if (!(cur in reducers)) acc[cur] = (f) => f || preloadedState[cur] || null; return acc; }, {}); } diff --git a/packages/gasket-redux/test/configure-make-store.spec.js b/packages/gasket-redux/test/configure-make-store.spec.js index 367f2eeb4..250dbe0d0 100644 --- a/packages/gasket-redux/test/configure-make-store.spec.js +++ b/packages/gasket-redux/test/configure-make-store.spec.js @@ -1,7 +1,3 @@ -/** - * @jest-environment jsdom - */ - import * as redux from 'redux'; import configureMakeStore, { prepareReducer } from '../src/configure-make-store'; import thunk from 'redux-thunk'; diff --git a/packages/gasket-redux/tsconfig.json b/packages/gasket-redux/tsconfig.json index fa0fa18ba..152560122 100644 --- a/packages/gasket-redux/tsconfig.json +++ b/packages/gasket-redux/tsconfig.json @@ -16,6 +16,7 @@ }, "exclude": [ "test", - "coverage" + "coverage", + "lib" ] } diff --git a/packages/gasket-typescript-tests/test/helper-intl.spec.ts b/packages/gasket-typescript-tests/test/helper-intl.spec.ts deleted file mode 100644 index cf6721714..000000000 --- a/packages/gasket-typescript-tests/test/helper-intl.spec.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { LocaleStatus, LocaleUtils } from '@gasket/helper-intl'; - -describe('@gasket/helper-intl', function () { - const perform = false; - - describe('LocaleUtils', function () { - it('has expected API', function () { - const utils: LocaleUtils = new LocaleUtils({ - manifest: { - localesPath: '/locales', - defaultLocale: 'en-US', - paths: {} - } - }); - - if (perform) { - const a: string = utils.getLocalePath('/example', 'en'); - const c: string = utils.formatLocalePath('/example', 'en'); - const b: string = utils.pathToUrl('/example'); - const d: string | null = utils.getFallbackLocale('en'); - } - }); - - it('LocaleStatus enum type', function () { - const loading: string = LocaleStatus.LOADING; - const loaded: string = LocaleStatus.LOADED; - const error: string = LocaleStatus.ERROR; - }); - }); -}); diff --git a/packages/gasket-typescript-tests/test/nextjs.spec.tsx b/packages/gasket-typescript-tests/test/nextjs.spec.tsx deleted file mode 100644 index 602b52131..000000000 --- a/packages/gasket-typescript-tests/test/nextjs.spec.tsx +++ /dev/null @@ -1,77 +0,0 @@ -import React from 'react'; -import NextDocument from 'next/document'; -import { GasketDataProvider, GasketDataScript, useGasketData, withGasketData, withGasketDataProvider } from '@gasket/nextjs'; -import { GasketData } from '@gasket/data'; - - -describe('gasket/nextjs', function () { - const perform = false; - - describe('withGasketData', function () { - it('has expected API', function () { - class BaseDocument extends NextDocument { - render() { - return
Whatever
; - } - } - - const WrappedDocument = withGasketData({ index: 2 })(BaseDocument); - - class MyDocument extends WrappedDocument {} - }); - }); - - describe('useGasketData', function () { - it('has expected API', function () { - if (perform) { - const result: GasketData = useGasketData(); - } - }); - }); - - describe('GasketDataScript', function () { - it('has expected API', function () { - ; - - ; - }); - }); - - describe('GasketDataProvider', function () { - it('has expected API', function () { - if (perform) { - -
Some children
-
; - - -
Some children
-
; - } - }); - }); - - describe('withGasketDataProvider', function () { - it('takes a component type and returns a component type', function () { - const Original = (props: { label: string }) =>
{props.label}
; - const Modified = withGasketDataProvider()(Original); - ; - }); - }); -}); diff --git a/packages/gasket-typescript-tests/test/plugin-manifest.spec.ts b/packages/gasket-typescript-tests/test/plugin-manifest.spec.ts deleted file mode 100644 index 4fd425d34..000000000 --- a/packages/gasket-typescript-tests/test/plugin-manifest.spec.ts +++ /dev/null @@ -1,49 +0,0 @@ -import type { IncomingMessage, OutgoingMessage } from 'http'; -import type { Gasket, GasketConfigFile, Hook } from '@gasket/engine'; -import type { Manifest } from '@gasket/plugin-manifest'; - -describe('@gasket/plugin-manifest', () => { - it('adds a manifest section to Gasket config', () => { - const config: GasketConfigFile = { - manifest: { - short_name: 'PWAwesome', - name: 'Progressive Web Application', - path: '/custom/path/manifest.json', // default: /manifest.json - staticOutput: '/custom/path/manifest.json' - } - }; - - const config2: GasketConfigFile = { - manifest: true - }; - }); - - it('adds a manifest lifecycle', () => { - const handler: Hook<'manifest'> = ( - gasket: Gasket, - manifest: Manifest, - { req, res }: { req: IncomingMessage, res: OutgoingMessage } - ) => { - return { - ...manifest, - path: '/custom/path/manifest.json' // default: /manifest.json - }; - }; - - const fakeGasket = {} as Gasket; - const initialManifest = { - short_name: 'your-app', - name: 'Sample App', - path: '/manifest.json', - staticOutput: '/public/manifest.json' - }; - - const justWantToCheckTypes = async () => { - const manifest: Manifest = await fakeGasket.execWaterfall( - 'manifest', - initialManifest, - { req: {} as IncomingMessage, res: {} as OutgoingMessage } - ); - }; - }); -}); diff --git a/packages/gasket-typescript-tests/test/plugin-redux.spec.ts b/packages/gasket-typescript-tests/test/plugin-redux.spec.ts deleted file mode 100644 index 105e0e28c..000000000 --- a/packages/gasket-typescript-tests/test/plugin-redux.spec.ts +++ /dev/null @@ -1,57 +0,0 @@ -import type { IncomingMessage, OutgoingMessage } from 'http'; -import type { Gasket, GasketConfigFile, Hook } from '@gasket/engine'; -import type { Store } from 'redux'; -import '@gasket/plugin-redux'; - -describe('@gasket/plugin-redux', () => { - it('adds a redux config property to Gasket', () => { - const config: GasketConfigFile = { - redux: { - makeStore: './relative/path/to/customMakeStore.js', - initState: { - urls: { - fooService: 'https://foo.url/', - barService: 'https://bar.url/' - } - } - }, - - environments: { - test: { - redux: { - initState: { - urls: { - fooService: 'https://test.foo.url/' - } - } - } - } - } - }; - }); - - it('adds an initReduxState lifecycle', () => { - const hook: Hook<'initReduxState'> = ( - gasket: Gasket, - state: any, - req: IncomingMessage, - res: OutgoingMessage - ) => { - return { - ...state, - another: 'property' - }; - }; - }); - - it('adds an initReduxStore lifecycle', () => { - const hook: Hook<'initReduxStore'> = ( - gasket: Gasket, - store: Store, - req: IncomingMessage, - res: OutgoingMessage - ) => { - store.dispatch({ type: 'init', payload: { some: 'data' } }); - }; - }); -}); diff --git a/packages/gasket-typescript-tests/test/redux.spec.ts b/packages/gasket-typescript-tests/test/redux.spec.ts deleted file mode 100644 index b82505cf9..000000000 --- a/packages/gasket-typescript-tests/test/redux.spec.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { configureMakeStore, getOrCreateStore, MakeStoreFn } from '@gasket/redux'; -import type { Store } from 'redux'; - - -describe('gasket/redux', function () { - const perform = false; - - describe('configureMakeStore', function () { - - it('has expected API', function () { - if (perform) { - const result: MakeStoreFn = configureMakeStore({ - reducers: {}, - rootReducer: f => f, - initialState: { - fake: true - }, - middleware: [() => {}], - enhancers: [() => {}], - logging: true, - thunkMiddleware: () => {} - }); - } - }); - }); - - describe('getOrCreateStore', function () { - it('has expected API', function () { - if (perform) { - const fn: MakeStoreFn = (state) => { - return {} as Store; - }; - - const results: object = getOrCreateStore(fn); - } - }); - }); -}); diff --git a/packages/gasket-utils/test/package-manager.test.js b/packages/gasket-utils/test/package-manager.test.js index 219d0697a..461398b31 100644 --- a/packages/gasket-utils/test/package-manager.test.js +++ b/packages/gasket-utils/test/package-manager.test.js @@ -7,6 +7,11 @@ describe('packageManager', function () { let PackageManager; let runner; + /** + * Create a package manager instance + * @param run - run shell command + * @returns {PackageManager} + */ function manager(run) { mockShellStub.mockImplementation(run); return require('../lib/package-manager'); diff --git a/scripts/align-packages.js b/scripts/align-packages.js index 6f5d58612..3ed419ef7 100644 --- a/scripts/align-packages.js +++ b/scripts/align-packages.js @@ -271,7 +271,7 @@ function checkMaintainers(pkgJson) { function checkTypecheckScripts(pkgJson) { const { scripts } = pkgJson; if (scripts.posttest && !scripts.typecheck) { - // Remove 'skip' once types have been completed in each package + // TODO: Remove 'skip' once types have been completed in each package pkgJson.scripts['typecheck:skip'] = 'tsc'; pkgJson.scripts['typecheck:watch'] = 'tsc --watch'; } @@ -327,6 +327,7 @@ function setupTypes(pkgJson) { '@gasket/plugin-lifecycle', '@gasket/plugin-log', '@gasket/plugin-metadata', + '@gasket/plugin-workbox', // Skip until v7 as workbox-build@4 has no types '@gasket/preset-api', '@gasket/preset-nextjs', '@gasket/preset-pwa',