From a4892e5992a3ea5d56bd2c9b02e45c0018209321 Mon Sep 17 00:00:00 2001 From: LongYinan Date: Thu, 2 Mar 2023 16:49:33 +0800 Subject: [PATCH] build(web): introduce Perfsee (#1256) --- .github/workflows/build.yml | 1 + apps/web/next.config.mjs | 15 +- apps/web/package.json | 1 + pnpm-lock.yaml | 533 +++++++++++++++++++++++++----------- 4 files changed, 387 insertions(+), 163 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 12fe639f42..5cf7ee685f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -53,6 +53,7 @@ jobs: NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID: ${{ secrets.NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID }} NEXT_PUBLIC_FIREBASE_APP_ID: ${{ secrets.NEXT_PUBLIC_FIREBASE_APP_ID }} NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID: ${{ secrets.NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID }} + PERFSEE_TOKEN: ${{ secrets.PERFSEE_TOKEN }} - name: Export run: pnpm export diff --git a/apps/web/next.config.mjs b/apps/web/next.config.mjs index bfca02916a..6077c0166a 100644 --- a/apps/web/next.config.mjs +++ b/apps/web/next.config.mjs @@ -4,6 +4,7 @@ import debugLocal from 'next-debug-local'; import preset from './preset.config.mjs'; import { createRequire } from 'node:module'; import { getCommitHash, getGitVersion } from './scripts/gitInfo.mjs'; +import { PerfseePlugin } from '@perfsee/webpack'; const require = createRequire(import.meta.url); @@ -75,13 +76,25 @@ const nextConfig = { editorVersion: require('./package.json').dependencies['@blocksuite/editor'], ...preset, }, - webpack: config => { + webpack: (config, { dev, isServer }) => { config.experiments = { ...config.experiments, topLevelAwait: true }; config.module.rules.push({ test: /\.md$/i, loader: 'raw-loader', }); + if (!isServer && !dev) { + config.devtool = 'hidden-nosources-source-map'; + const perfsee = new PerfseePlugin({ + project: 'affine-toeverything', + }); + if (Array.isArray(config.plugins)) { + config.plugins.push(perfsee); + } else { + config.plugins = [perfsee]; + } + } + return config; }, rewrites: async () => { diff --git a/apps/web/package.json b/apps/web/package.json index 16c9ef49d0..34d4c276f8 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -39,6 +39,7 @@ "zod": "^3.20.6" }, "devDependencies": { + "@perfsee/webpack": "^1.3.0", "@redux-devtools/extension": "^3.2.5", "@swc-jotai/debug-label": "^0.0.6", "@swc-jotai/react-refresh": "^0.0.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2daee71d5a..43e4b8fb34 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -156,6 +156,7 @@ importers: '@emotion/css': ^11.10.6 '@emotion/react': ^11.10.6 '@mui/material': ^5.11.10 + '@perfsee/webpack': ^1.3.0 '@redux-devtools/extension': ^3.2.5 '@swc-jotai/debug-label': ^0.0.6 '@swc-jotai/react-refresh': ^0.0.4 @@ -214,6 +215,7 @@ importers: yjs: 13.5.47 zod: 3.20.6 devDependencies: + '@perfsee/webpack': 1.3.0_webpack@5.75.0 '@redux-devtools/extension': 3.2.5_redux@4.2.1 '@swc-jotai/debug-label': 0.0.6 '@swc-jotai/react-refresh': 0.0.4 @@ -221,11 +223,11 @@ importers: '@types/react-dom': 18.0.11 '@types/webpack-env': 1.18.0 dotenv: 16.0.3 - eslint-config-next: 13.2.2_typescript@4.9.5 + eslint-config-next: 13.2.2_7kw3g6rralp5ps6mg3uyzz6azm next: 13.2.2_biqbaboplfbrettd7655fr4n2y next-debug-local: 0.1.5 next-router-mock: 0.9.2_next@13.2.2+react@18.2.0 - raw-loader: 4.0.2 + raw-loader: 4.0.2_webpack@5.75.0 redux: 4.2.1 typescript: 4.9.5 @@ -297,7 +299,7 @@ importers: swc-loader: 0.2.3_wumblt6f7l27pkvqm54p67bbsa typescript: 4.9.5 vite: 4.1.4 - webpack: 5.75.0_@swc+core@1.3.36 + webpack: 5.75.0_vtoi35pt7ox7clreeappmlbt3e yjs: 13.5.47 packages/data-center: @@ -356,7 +358,7 @@ importers: dependencies: '@blocksuite/global': 0.4.1-20230220214107-0a354de devDependencies: - next: 13.2.3 + next: 13.2.3_biqbaboplfbrettd7655fr4n2y zod: 3.20.6 packages/i18n: @@ -375,11 +377,11 @@ importers: '@affine/debug': link:../debug i18next: 22.4.10 react: 18.2.0 - react-i18next: 12.2.0_dxv7ampvtjrtnimevxnrn5rvga + react-i18next: 12.2.0_3yopsigl4h4eb2nqrqfsy65uwi devDependencies: '@types/node': 18.14.2 '@types/prettier': 2.7.2 - next: 13.2.3_react@18.2.0 + next: 13.2.3_biqbaboplfbrettd7655fr4n2y prettier: 2.8.4 ts-node: 10.9.1_ellgaeuoqnti3hful2ny2iugba typescript: 4.9.5 @@ -2571,6 +2573,11 @@ packages: - supports-color dev: true + /@eyhn/msgpack-stream/2.8.4: + resolution: {integrity: sha512-Xx2/IEg+fLzzLH1t8sVr+UIQ3TK56lKOPxfxPCSZru8BkojW7xCXvRBCrYKVdm/BTgXYMQW5RaVIKk2HcQ4yrw==} + engines: {node: '>= 10'} + dev: true + /@fal-works/esbuild-plugin-global-externals/2.1.2: resolution: {integrity: sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==} dev: true @@ -3211,6 +3218,18 @@ packages: resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==} dev: true + /@kwsites/file-exists/1.1.1: + resolution: {integrity: sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==} + dependencies: + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@kwsites/promise-deferred/1.1.1: + resolution: {integrity: sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==} + dev: true + /@lit-labs/ssr-dom-shim/1.0.0: resolution: {integrity: sha512-ic93MBXfApIFTrup4a70M/+ddD8xdt2zxxj9sRwHQzhS9ag/syqkD8JPdTXsc1gUy2K8TTirhlCqyTEM/sifNw==} @@ -3913,6 +3932,64 @@ packages: fastq: 1.13.0 dev: true + /@perfsee/bundle-analyzer/1.3.0: + resolution: {integrity: sha512-saB1D08c2jEZ0oMTkWWLp+vSiLLWFN6ALrU2F3DIb+NC1rmSZWDzne++6kyZkuaPpzRZu7SR2LhfhiRi79Wsqg==} + dependencies: + '@eyhn/msgpack-stream': 2.8.4 + '@perfsee/utils': 1.3.0 + acorn: 8.8.2 + acorn-walk: 8.2.0 + htmlparser2: 8.0.1 + lodash: 4.17.21 + query-string: 7.1.3 + tar: 6.1.13 + tslib: 2.5.0 + dev: true + + /@perfsee/plugin-utils/1.3.0: + resolution: {integrity: sha512-2s8yH3LmYHDC9ya72fbgb8QwR7rBmlHsNz/wNmbibao9fofxSQlRpASTga4W0jccUf1XzCwo9wmEXuYjmBmCnA==} + dependencies: + '@eyhn/msgpack-stream': 2.8.4 + '@perfsee/bundle-analyzer': 1.3.0 + '@perfsee/utils': 1.3.0 + chalk: 4.1.2 + debug: 4.3.4 + env-ci: 7.3.0 + file-type: 16.5.4 + lodash: 4.17.21 + node-fetch: 2.6.7 + query-string: 7.1.3 + simple-git: 3.16.1 + table: 6.8.1 + tar: 6.1.13 + tslib: 2.5.0 + uuid: 9.0.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /@perfsee/utils/1.3.0: + resolution: {integrity: sha512-Qla/tiqM6Ct5fMEFfWXoRTPXo/T/n5lkRd0yHl3jmSUMvDhIH0EIAzL0L5IoVdha8H4de5ly/FhVv2p9zZ3o9g==} + dependencies: + tslib: 2.5.0 + dev: true + + /@perfsee/webpack/1.3.0_webpack@5.75.0: + resolution: {integrity: sha512-f0IMwQ6S8lKE1XMaaV7zkIxdnOWpswkjGHC1wVR+mauO3+njiGGrMFwm57o0nlJSxf9CQ5d9AFIUj8Yu/Q5hVg==} + peerDependencies: + webpack: '>= 4' + dependencies: + '@perfsee/bundle-analyzer': 1.3.0 + '@perfsee/plugin-utils': 1.3.0 + chalk: 4.1.2 + tslib: 2.5.0 + webpack: 5.75.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + /@pkgr/utils/2.3.1: resolution: {integrity: sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} @@ -5757,25 +5834,6 @@ packages: - supports-color dev: true - /@typescript-eslint/parser/5.53.0_typescript@4.9.5: - resolution: {integrity: sha512-MKBw9i0DLYlmdOb3Oq/526+al20AJZpANdT6Ct9ffxcV8nKCHz63t/S0IhlTFNsBIHJv+GY5SFJ0XfqVeydQrQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/scope-manager': 5.53.0 - '@typescript-eslint/types': 5.53.0 - '@typescript-eslint/typescript-estree': 5.53.0_typescript@4.9.5 - debug: 4.3.4 - typescript: 4.9.5 - transitivePeerDependencies: - - supports-color - dev: true - /@typescript-eslint/scope-manager/5.53.0: resolution: {integrity: sha512-Opy3dqNsp/9kBBeCPhkCNR7fmdSQqA+47r21hr9a14Bx0xnkElEQmhoHga+VoaoQ6uDHjDKmQPIYcUcKJifS7w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -6165,6 +6223,15 @@ packages: uri-js: 4.4.1 dev: true + /ajv/8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + dev: true + /ansi-align/3.0.1: resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} dependencies: @@ -7330,6 +7397,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /decode-uri-component/0.2.2: + resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} + engines: {node: '>=0.10'} + dev: true + /decompress-response/6.0.0: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} @@ -7537,16 +7609,43 @@ packages: csstype: 3.1.1 dev: false + /dom-serializer/2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.4.0 + dev: true + + /domelementtype/2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + dev: true + /domexception/1.0.1: resolution: {integrity: sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==} dependencies: webidl-conversions: 4.0.2 dev: true + /domhandler/5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + dependencies: + domelementtype: 2.3.0 + dev: true + /domino/2.1.6: resolution: {integrity: sha512-3VdM/SXBZX2omc9JF9nOPCtDaYQ67BGp5CoLpIQlO2KCAPETs8TcDHacF26jXadGbvUteZzRTeos2fhID5+ucQ==} dev: false + /domutils/3.0.1: + resolution: {integrity: sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==} + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + dev: true + /dotenv-expand/10.0.0: resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==} engines: {node: '>=12'} @@ -7625,6 +7724,20 @@ packages: ansi-colors: 4.1.3 dev: true + /entities/4.4.0: + resolution: {integrity: sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==} + engines: {node: '>=0.12'} + dev: true + + /env-ci/7.3.0: + resolution: {integrity: sha512-L8vK54CSjKB4pwlwx0YaqeBdUSGufaLHl/pEgD+EqnMrYCVUA8HzMjURALSyvOlC57e953yN7KyXS63qDoc3Rg==} + engines: {node: '>=12.20'} + dependencies: + execa: 5.1.1 + fromentries: 1.3.2 + java-properties: 1.0.2 + dev: true + /envinfo/7.8.1: resolution: {integrity: sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==} engines: {node: '>=4'} @@ -7872,7 +7985,7 @@ packages: source-map: 0.6.1 dev: true - /eslint-config-next/13.2.2_typescript@4.9.5: + /eslint-config-next/13.2.2_7kw3g6rralp5ps6mg3uyzz6azm: resolution: {integrity: sha512-aI56IaeSHaLevpmD/5sVTRGDp7rs1vFkrJxFsrwCSkd4GbWHkUbam0cv8neoW58fw+O/B05MoK/Nb0rcf9wOZQ==} peerDependencies: eslint: ^7.23.0 || ^8.0.0 @@ -7883,13 +7996,14 @@ packages: dependencies: '@next/eslint-plugin-next': 13.2.2 '@rushstack/eslint-patch': 1.2.0 - '@typescript-eslint/parser': 5.53.0_typescript@4.9.5 + '@typescript-eslint/parser': 5.53.0_7kw3g6rralp5ps6mg3uyzz6azm + eslint: 8.34.0 eslint-import-resolver-node: 0.3.7 - eslint-import-resolver-typescript: 3.5.3_5rfvta7qn57kxm7ir36ta6fixq - eslint-plugin-import: 2.27.5_d3ys7ohip27gahpsqrh6axvxiq - eslint-plugin-jsx-a11y: 6.7.1 - eslint-plugin-react: 7.32.2 - eslint-plugin-react-hooks: 4.6.0 + eslint-import-resolver-typescript: 3.5.3_mvgyw3chnqkp6sgfmmtihyjpnm + eslint-plugin-import: 2.27.5_eslint@8.34.0 + eslint-plugin-jsx-a11y: 6.7.1_eslint@8.34.0 + eslint-plugin-react: 7.32.2_eslint@8.34.0 + eslint-plugin-react-hooks: 4.6.0_eslint@8.34.0 typescript: 4.9.5 transitivePeerDependencies: - eslint-import-resolver-webpack @@ -7915,7 +8029,7 @@ packages: - supports-color dev: true - /eslint-import-resolver-typescript/3.5.3_5rfvta7qn57kxm7ir36ta6fixq: + /eslint-import-resolver-typescript/3.5.3_mvgyw3chnqkp6sgfmmtihyjpnm: resolution: {integrity: sha512-njRcKYBc3isE42LaTcJNVANR3R99H9bAxBDMNDr2W7yq5gYPxbU3MkdhsQukxZ/Xg9C2vcyLlDsbKfRDg0QvCQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -7924,7 +8038,8 @@ packages: dependencies: debug: 4.3.4 enhanced-resolve: 5.12.0 - eslint-plugin-import: 2.27.5_d3ys7ohip27gahpsqrh6axvxiq + eslint: 8.34.0 + eslint-plugin-import: 2.27.5_eslint@8.34.0 get-tsconfig: 4.4.0 globby: 13.1.3 is-core-module: 2.11.0 @@ -7963,7 +8078,7 @@ packages: - supports-color dev: true - /eslint-module-utils/2.7.4_a4difm2tsf7lmihf7yyalibgdq: + /eslint-module-utils/2.7.4_eyqnu5kib2hfrvsonwfdq4ojse: resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} engines: {node: '>=4'} peerDependencies: @@ -7984,46 +8099,13 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.53.0_typescript@4.9.5 debug: 3.2.7 + eslint: 8.34.0 eslint-import-resolver-node: 0.3.7 - eslint-import-resolver-typescript: 3.5.3_5rfvta7qn57kxm7ir36ta6fixq transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-import/2.27.5_d3ys7ohip27gahpsqrh6axvxiq: - resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - dependencies: - '@typescript-eslint/parser': 5.53.0_typescript@4.9.5 - array-includes: 3.1.6 - array.prototype.flat: 1.3.1 - array.prototype.flatmap: 1.3.1 - debug: 3.2.7 - doctrine: 2.1.0 - eslint-import-resolver-node: 0.3.7 - eslint-module-utils: 2.7.4_a4difm2tsf7lmihf7yyalibgdq - has: 1.0.3 - is-core-module: 2.11.0 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.values: 1.1.6 - resolve: 1.22.1 - semver: 6.3.0 - tsconfig-paths: 3.14.1 - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - dev: true - /eslint-plugin-import/2.27.5_dbs2zxbe2aiqaiiio3svelvkai: resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} engines: {node: '>=4'} @@ -8057,7 +8139,39 @@ packages: - supports-color dev: true - /eslint-plugin-jsx-a11y/6.7.1: + /eslint-plugin-import/2.27.5_eslint@8.34.0: + resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + array-includes: 3.1.6 + array.prototype.flat: 1.3.1 + array.prototype.flatmap: 1.3.1 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.34.0 + eslint-import-resolver-node: 0.3.7 + eslint-module-utils: 2.7.4_eyqnu5kib2hfrvsonwfdq4ojse + has: 1.0.3 + is-core-module: 2.11.0 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.values: 1.1.6 + resolve: 1.22.1 + semver: 6.3.0 + tsconfig-paths: 3.14.1 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-plugin-jsx-a11y/6.7.1_eslint@8.34.0: resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==} engines: {node: '>=4.0'} peerDependencies: @@ -8072,6 +8186,7 @@ packages: axobject-query: 3.1.1 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 + eslint: 8.34.0 has: 1.0.3 jsx-ast-utils: 3.3.3 language-tags: 1.0.5 @@ -8098,34 +8213,13 @@ packages: prettier-linter-helpers: 1.0.0 dev: true - /eslint-plugin-react-hooks/4.6.0: + /eslint-plugin-react-hooks/4.6.0_eslint@8.34.0: resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} engines: {node: '>=10'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - dev: true - - /eslint-plugin-react/7.32.2: - resolution: {integrity: sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: - array-includes: 3.1.6 - array.prototype.flatmap: 1.3.1 - array.prototype.tosorted: 1.1.1 - doctrine: 2.1.0 - estraverse: 5.3.0 - jsx-ast-utils: 3.3.3 - minimatch: 3.1.2 - object.entries: 1.1.6 - object.fromentries: 2.0.6 - object.hasown: 1.1.2 - object.values: 1.1.6 - prop-types: 15.8.1 - resolve: 2.0.0-next.4 - semver: 6.3.0 - string.prototype.matchall: 4.0.8 + eslint: 8.34.0 dev: true /eslint-plugin-react/7.32.2_eslint@8.34.0: @@ -8586,6 +8680,15 @@ packages: ramda: 0.28.0 dev: true + /file-type/16.5.4: + resolution: {integrity: sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==} + engines: {node: '>=10'} + dependencies: + readable-web-to-node-stream: 3.0.2 + strtok3: 6.3.0 + token-types: 4.2.1 + dev: true + /file-type/17.1.6: resolution: {integrity: sha512-hlDw5Ev+9e883s0pwUsuuYNu4tD7GgpUnOvykjv1Gya0ZIjuKumthDRua90VUn6/nlRKAjcxLUnHNTIUWwWIiw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -8622,6 +8725,11 @@ packages: to-regex-range: 5.0.1 dev: true + /filter-obj/1.1.0: + resolution: {integrity: sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==} + engines: {node: '>=0.10.0'} + dev: true + /finalhandler/1.2.0: resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} engines: {node: '>= 0.8'} @@ -9299,6 +9407,15 @@ packages: engines: {node: '>=8'} dev: true + /htmlparser2/8.0.1: + resolution: {integrity: sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==} + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.0.1 + entities: 4.4.0 + dev: true + /http-cache-semantics/4.1.0: resolution: {integrity: sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==} dev: true @@ -9852,6 +9969,11 @@ packages: minimatch: 3.1.2 dev: true + /java-properties/1.0.2: + resolution: {integrity: sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==} + engines: {node: '>= 0.6.0'} + dev: true + /jest-haste-map/29.4.2: resolution: {integrity: sha512-WkUgo26LN5UHPknkezrBzr7lUtV1OpGsp+NfXbBwHztsFruS3gz+AMTTBcEklvi8uPzpISzYjdKXYZQJXBnfvw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -10031,6 +10153,10 @@ packages: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} dev: true + /json-schema-traverse/1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + dev: true + /json-stable-stringify-without-jsonify/1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} dev: true @@ -10307,6 +10433,10 @@ packages: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} dev: true + /lodash.truncate/4.4.2: + resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} + dev: true + /lodash/4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} @@ -10830,52 +10960,7 @@ packages: - babel-plugin-macros dev: true - /next/13.2.3: - resolution: {integrity: sha512-nKFJC6upCPN7DWRx4+0S/1PIOT7vNlCT157w9AzbXEgKy6zkiPKEt5YyRUsRZkmpEqBVrGgOqNfwecTociyg+w==} - engines: {node: '>=14.6.0'} - hasBin: true - peerDependencies: - '@opentelemetry/api': ^1.4.0 - fibers: '>= 3.1.0' - node-sass: ^6.0.0 || ^7.0.0 - react: ^18.2.0 - react-dom: ^18.2.0 - sass: ^1.3.0 - peerDependenciesMeta: - '@opentelemetry/api': - optional: true - fibers: - optional: true - node-sass: - optional: true - sass: - optional: true - dependencies: - '@next/env': 13.2.3 - '@swc/helpers': 0.4.14 - caniuse-lite: 1.0.30001419 - postcss: 8.4.14 - styled-jsx: 5.1.1 - optionalDependencies: - '@next/swc-android-arm-eabi': 13.2.3 - '@next/swc-android-arm64': 13.2.3 - '@next/swc-darwin-arm64': 13.2.3 - '@next/swc-darwin-x64': 13.2.3 - '@next/swc-freebsd-x64': 13.2.3 - '@next/swc-linux-arm-gnueabihf': 13.2.3 - '@next/swc-linux-arm64-gnu': 13.2.3 - '@next/swc-linux-arm64-musl': 13.2.3 - '@next/swc-linux-x64-gnu': 13.2.3 - '@next/swc-linux-x64-musl': 13.2.3 - '@next/swc-win32-arm64-msvc': 13.2.3 - '@next/swc-win32-ia32-msvc': 13.2.3 - '@next/swc-win32-x64-msvc': 13.2.3 - transitivePeerDependencies: - - '@babel/core' - - babel-plugin-macros - dev: true - - /next/13.2.3_react@18.2.0: + /next/13.2.3_biqbaboplfbrettd7655fr4n2y: resolution: {integrity: sha512-nKFJC6upCPN7DWRx4+0S/1PIOT7vNlCT157w9AzbXEgKy6zkiPKEt5YyRUsRZkmpEqBVrGgOqNfwecTociyg+w==} engines: {node: '>=14.6.0'} hasBin: true @@ -10901,6 +10986,7 @@ packages: caniuse-lite: 1.0.30001419 postcss: 8.4.14 react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 styled-jsx: 5.1.1_react@18.2.0 optionalDependencies: '@next/swc-android-arm-eabi': 13.2.3 @@ -11440,6 +11526,11 @@ packages: through: 2.3.8 dev: true + /peek-readable/4.1.0: + resolution: {integrity: sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==} + engines: {node: '>=8'} + dev: true + /peek-readable/5.0.0: resolution: {integrity: sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==} engines: {node: '>=14.16'} @@ -11725,6 +11816,16 @@ packages: side-channel: 1.0.4 dev: true + /query-string/7.1.3: + resolution: {integrity: sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==} + engines: {node: '>=6'} + dependencies: + decode-uri-component: 0.2.2 + filter-obj: 1.1.0 + split-on-first: 1.1.0 + strict-uri-encode: 2.0.0 + dev: true + /queue-microtask/1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -11786,7 +11887,7 @@ packages: unpipe: 1.0.0 dev: true - /raw-loader/4.0.2: + /raw-loader/4.0.2_webpack@5.75.0: resolution: {integrity: sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -11794,6 +11895,7 @@ packages: dependencies: loader-utils: 2.0.4 schema-utils: 3.1.1 + webpack: 5.75.0 dev: true /react-colorful/5.6.1_biqbaboplfbrettd7655fr4n2y: @@ -11874,7 +11976,7 @@ packages: shallowequal: 1.1.0 dev: false - /react-i18next/12.2.0_dxv7ampvtjrtnimevxnrn5rvga: + /react-i18next/12.2.0_3yopsigl4h4eb2nqrqfsy65uwi: resolution: {integrity: sha512-5XeVgSygaGfyFmDd2WcXvINRw2WEC1XviW1LXY/xLOEMzsCFRwKqfnHN+hUjla8ZipbVJR27GCMSuTr0BhBBBQ==} peerDependencies: i18next: '>= 19.0.0' @@ -11891,6 +11993,7 @@ packages: html-parse-stringify: 3.0.1 i18next: 22.4.10 react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 dev: false /react-inspector/6.0.1_react@18.2.0: @@ -12213,6 +12316,11 @@ packages: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} + /require-from-string/2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + dev: true + /require-main-filename/2.0.0: resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} dev: true @@ -12522,6 +12630,16 @@ packages: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} dev: true + /simple-git/3.16.1: + resolution: {integrity: sha512-xzRxMKiy1zEYeHGXgAzvuXffDS0xgsq07Oi4LWEEcVH29vLpcZ2tyQRWyK0NLLlCVaKysZeem5tC1qHEOxsKwA==} + dependencies: + '@kwsites/file-exists': 1.1.1 + '@kwsites/promise-deferred': 1.1.1 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + /simple-peer/9.11.1: resolution: {integrity: sha512-D1SaWpOW8afq1CZGWB8xTfrT3FekjQmPValrqncJMX7QFl8YwhrPTZvMCANLtgBwwdS+7zURyqxDDEmY558tTw==} dependencies: @@ -12685,6 +12803,11 @@ packages: resolution: {integrity: sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==} dev: true + /split-on-first/1.1.0: + resolution: {integrity: sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==} + engines: {node: '>=6'} + dev: true + /split/0.3.3: resolution: {integrity: sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==} dependencies: @@ -12743,6 +12866,11 @@ packages: mixme: 0.5.4 dev: true + /strict-uri-encode/2.0.0: + resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==} + engines: {node: '>=4'} + dev: true + /string-argv/0.3.1: resolution: {integrity: sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==} engines: {node: '>=0.6.19'} @@ -12866,6 +12994,14 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true + /strtok3/6.3.0: + resolution: {integrity: sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==} + engines: {node: '>=10'} + dependencies: + '@tokenizer/token': 0.3.0 + peek-readable: 4.1.0 + dev: true + /strtok3/7.0.0: resolution: {integrity: sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==} engines: {node: '>=14.16'} @@ -12874,22 +13010,6 @@ packages: peek-readable: 5.0.0 dev: true - /styled-jsx/5.1.1: - resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} - engines: {node: '>= 12.0.0'} - peerDependencies: - '@babel/core': '*' - babel-plugin-macros: '*' - react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' - peerDependenciesMeta: - '@babel/core': - optional: true - babel-plugin-macros: - optional: true - dependencies: - client-only: 0.0.1 - dev: true - /styled-jsx/5.1.1_react@18.2.0: resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} engines: {node: '>= 12.0.0'} @@ -12941,7 +13061,7 @@ packages: webpack: '>=2' dependencies: '@swc/core': 1.3.36 - webpack: 5.75.0_@swc+core@1.3.36 + webpack: 5.75.0_vtoi35pt7ox7clreeappmlbt3e dev: true /swc/1.0.11: @@ -12975,6 +13095,17 @@ packages: tslib: 2.5.0 dev: true + /table/6.8.1: + resolution: {integrity: sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==} + engines: {node: '>=10.0.0'} + dependencies: + ajv: 8.12.0 + lodash.truncate: 4.4.2 + slice-ansi: 4.0.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + /tapable/2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} @@ -13026,7 +13157,7 @@ packages: engines: {node: '>=8'} dev: true - /terser-webpack-plugin/5.3.6_wumblt6f7l27pkvqm54p67bbsa: + /terser-webpack-plugin/5.3.6_idpwx3pifil5ztt5ydph72mifi: resolution: {integrity: sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -13044,11 +13175,36 @@ packages: dependencies: '@jridgewell/trace-mapping': 0.3.17 '@swc/core': 1.3.36 + esbuild: 0.16.17 jest-worker: 27.5.1 schema-utils: 3.1.1 serialize-javascript: 6.0.0 terser: 5.16.1 - webpack: 5.75.0_@swc+core@1.3.36 + webpack: 5.75.0_vtoi35pt7ox7clreeappmlbt3e + dev: true + + /terser-webpack-plugin/5.3.6_webpack@5.75.0: + resolution: {integrity: sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + dependencies: + '@jridgewell/trace-mapping': 0.3.17 + jest-worker: 27.5.1 + schema-utils: 3.1.1 + serialize-javascript: 6.0.0 + terser: 5.16.1 + webpack: 5.75.0 dev: true /terser/5.16.1: @@ -13147,6 +13303,14 @@ packages: engines: {node: '>=0.6'} dev: true + /token-types/4.2.1: + resolution: {integrity: sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==} + engines: {node: '>=10'} + dependencies: + '@tokenizer/token': 0.3.0 + ieee754: 1.2.1 + dev: true + /token-types/5.0.1: resolution: {integrity: sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==} engines: {node: '>=14.16'} @@ -13586,6 +13750,11 @@ packages: hasBin: true dev: true + /uuid/9.0.0: + resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} + hasBin: true + dev: true + /v8-compile-cache-lib/3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} dev: true @@ -13824,7 +13993,7 @@ packages: resolution: {integrity: sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==} dev: true - /webpack/5.75.0_@swc+core@1.3.36: + /webpack/5.75.0: resolution: {integrity: sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==} engines: {node: '>=10.13.0'} hasBin: true @@ -13855,7 +14024,47 @@ packages: neo-async: 2.6.2 schema-utils: 3.1.1 tapable: 2.2.1 - terser-webpack-plugin: 5.3.6_wumblt6f7l27pkvqm54p67bbsa + terser-webpack-plugin: 5.3.6_webpack@5.75.0 + watchpack: 2.4.0 + webpack-sources: 3.2.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + dev: true + + /webpack/5.75.0_vtoi35pt7ox7clreeappmlbt3e: + resolution: {integrity: sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + dependencies: + '@types/eslint-scope': 3.7.4 + '@types/estree': 0.0.51 + '@webassemblyjs/ast': 1.11.1 + '@webassemblyjs/wasm-edit': 1.11.1 + '@webassemblyjs/wasm-parser': 1.11.1 + acorn: 8.8.2 + acorn-import-assertions: 1.8.0_acorn@8.8.2 + browserslist: 4.21.4 + chrome-trace-event: 1.0.3 + enhanced-resolve: 5.12.0 + es-module-lexer: 0.9.3 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.10 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 3.1.1 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.6_idpwx3pifil5ztt5ydph72mifi watchpack: 2.4.0 webpack-sources: 3.2.3 transitivePeerDependencies: