From c57830f7b4467b38774e38e70f6537506c836e87 Mon Sep 17 00:00:00 2001 From: shuai Date: Thu, 16 Feb 2023 12:14:00 +0800 Subject: [PATCH 1/4] fix: content changes have not been saved to leave the page to increase the prompt --- i18n/en_US.yaml | 4 +- ui/package.json | 2 +- ui/pnpm-lock.yaml | 1476 ++++------------- ui/public/index.html | 2 +- .../Comment/components/Form/index.tsx | 8 +- .../Comment/components/Reply/index.tsx | 7 +- ui/src/hooks/index.ts | 2 + ui/src/hooks/usePrompt/index.tsx | 40 + ui/src/pages/Questions/Ask/index.tsx | 42 +- .../Detail/components/WriteAnswer/index.tsx | 5 + ui/src/pages/Questions/EditAnswer/index.tsx | 24 +- ui/src/pages/Tags/Edit/index.tsx | 44 +- ui/src/router/routes.ts | 9 +- 13 files changed, 515 insertions(+), 1150 deletions(-) create mode 100644 ui/src/hooks/usePrompt/index.tsx diff --git a/i18n/en_US.yaml b/i18n/en_US.yaml index ce9a04da..2b980457 100644 --- a/i18n/en_US.yaml +++ b/i18n/en_US.yaml @@ -1404,5 +1404,7 @@ ui: staffs: Our community staff reputation: reputation votes: votes - + prompt: + leave_page: "Are you sure you want to leave the page?" + changes_not_save: "Your changes may not be saved." diff --git a/ui/package.json b/ui/package.json index 5c23dc5d..8e72060b 100644 --- a/ui/package.json +++ b/ui/package.json @@ -38,7 +38,7 @@ "react-dom": "^18.2.0", "react-helmet-async": "^1.3.0", "react-i18next": "^11.18.3", - "react-router-dom": "^6.4.0", + "react-router-dom": "^6.8.1", "semver": "^7.3.8", "swr": "^1.3.0", "urlcat": "^3.0.0", diff --git a/ui/pnpm-lock.yaml b/ui/pnpm-lock.yaml index 8ec5b138..569d1f00 100644 --- a/ui/pnpm-lock.yaml +++ b/ui/pnpm-lock.yaml @@ -63,7 +63,7 @@ specifiers: react-dom: ^18.2.0 react-helmet-async: ^1.3.0 react-i18next: ^11.18.3 - react-router-dom: ^6.4.0 + react-router-dom: ^6.8.1 react-scripts: 5.0.1 sass: ^1.54.4 semver: ^7.3.8 @@ -99,7 +99,7 @@ dependencies: react-dom: 18.2.0_react@18.2.0 react-helmet-async: 1.3.0_biqbaboplfbrettd7655fr4n2y react-i18next: 11.18.6_ulhmqqxshznzmtuvahdi5nasbq - react-router-dom: 6.4.0_biqbaboplfbrettd7655fr4n2y + react-router-dom: 6.8.1_biqbaboplfbrettd7655fr4n2y semver: 7.3.8 swr: 1.3.0_react@18.2.0 urlcat: 3.0.0 @@ -141,9 +141,9 @@ devDependencies: lint-staged: 13.0.3 postcss: 8.4.16 prettier: 2.7.1 - purgecss-webpack-plugin: 4.1.3_webpack@5.74.0 + purgecss-webpack-plugin: 4.1.3_webpack@5.75.0 react-app-rewired: 2.2.1_react-scripts@5.0.1 - react-scripts: 5.0.1_v2uhgyutubjd4jjlagvop2mfmq + react-scripts: 5.0.1_mml7drqgt2b2zrp2ma74zmeoqy sass: 1.54.9 typescript: 4.8.3 yaml-loader: 0.8.0 @@ -178,6 +178,10 @@ packages: resolution: {integrity: sha512-72a9ghR0gnESIa7jBN53U32FOVCEoztyIlKaNoU05zRhEecduGK9L9c3ww7Mp06JiR+0ls0GBPFJQwwtjn9ksg==} engines: {node: '>=6.9.0'} + /@babel/compat-data/7.20.14: + resolution: {integrity: sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw==} + engines: {node: '>=6.9.0'} + /@babel/core/7.19.1: resolution: {integrity: sha512-1H8VgqXme4UXCRv7/Wa1bq7RVymKOzC7znjyFM8KiEzwFqcKUKYNoQef4GhdklgNvoBXyW4gYhuBNCM5o1zImw==} engines: {node: '>=6.9.0'} @@ -200,6 +204,28 @@ packages: transitivePeerDependencies: - supports-color + /@babel/core/7.20.12: + resolution: {integrity: sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.0 + '@babel/code-frame': 7.18.6 + '@babel/generator': 7.20.14 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12 + '@babel/helper-module-transforms': 7.20.11 + '@babel/helpers': 7.20.13 + '@babel/parser': 7.20.15 + '@babel/template': 7.20.7 + '@babel/traverse': 7.20.13 + '@babel/types': 7.20.7 + convert-source-map: 1.9.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + /@babel/eslint-parser/7.19.1_zdglor7vg7osicr5spasq6cc5a: resolution: {integrity: sha512-AqNf2QWt1rtu2/1rLswy6CDP7H9Oh3mMhk177Y67Rg8d7RD9WfOLLv8CGn6tisFvS2htm86yIe1yLF6I1UDaGQ==} engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} @@ -221,6 +247,14 @@ packages: '@jridgewell/gen-mapping': 0.3.2 jsesc: 2.5.2 + /@babel/generator/7.20.14: + resolution: {integrity: sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.20.7 + '@jridgewell/gen-mapping': 0.3.2 + jsesc: 2.5.2 + /@babel/helper-annotate-as-pure/7.18.6: resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} engines: {node: '>=6.9.0'} @@ -246,6 +280,19 @@ packages: browserslist: 4.21.4 semver: 6.3.0 + /@babel/helper-compilation-targets/7.20.7_@babel+core@7.20.12: + resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/compat-data': 7.20.14 + '@babel/core': 7.20.12 + '@babel/helper-validator-option': 7.18.6 + browserslist: 4.21.5 + lru-cache: 5.1.1 + semver: 6.3.0 + /@babel/helper-create-class-features-plugin/7.19.0_@babel+core@7.19.1: resolution: {integrity: sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw==} engines: {node: '>=6.9.0'} @@ -338,6 +385,21 @@ packages: transitivePeerDependencies: - supports-color + /@babel/helper-module-transforms/7.20.11: + resolution: {integrity: sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-module-imports': 7.18.6 + '@babel/helper-simple-access': 7.20.2 + '@babel/helper-split-export-declaration': 7.18.6 + '@babel/helper-validator-identifier': 7.19.1 + '@babel/template': 7.20.7 + '@babel/traverse': 7.20.13 + '@babel/types': 7.20.7 + transitivePeerDependencies: + - supports-color + /@babel/helper-optimise-call-expression/7.18.6: resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==} engines: {node: '>=6.9.0'} @@ -348,6 +410,10 @@ packages: resolution: {integrity: sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==} engines: {node: '>=6.9.0'} + /@babel/helper-plugin-utils/7.20.2: + resolution: {integrity: sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==} + engines: {node: '>=6.9.0'} + /@babel/helper-remap-async-to-generator/7.18.9_@babel+core@7.19.1: resolution: {integrity: sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==} engines: {node: '>=6.9.0'} @@ -380,6 +446,12 @@ packages: dependencies: '@babel/types': 7.19.0 + /@babel/helper-simple-access/7.20.2: + resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.20.7 + /@babel/helper-skip-transparent-expression-wrappers/7.18.9: resolution: {integrity: sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==} engines: {node: '>=6.9.0'} @@ -396,6 +468,10 @@ packages: resolution: {integrity: sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==} engines: {node: '>=6.9.0'} + /@babel/helper-string-parser/7.19.4: + resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} + engines: {node: '>=6.9.0'} + /@babel/helper-validator-identifier/7.19.1: resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} engines: {node: '>=6.9.0'} @@ -425,6 +501,16 @@ packages: transitivePeerDependencies: - supports-color + /@babel/helpers/7.20.13: + resolution: {integrity: sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.20.7 + '@babel/traverse': 7.20.13 + '@babel/types': 7.20.7 + transitivePeerDependencies: + - supports-color + /@babel/highlight/7.18.6: resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} engines: {node: '>=6.9.0'} @@ -440,6 +526,13 @@ packages: dependencies: '@babel/types': 7.19.0 + /@babel/parser/7.20.15: + resolution: {integrity: sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.20.7 + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.18.6_@babel+core@7.19.1: resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} engines: {node: '>=6.9.0'} @@ -711,6 +804,15 @@ packages: '@babel/core': 7.19.1 '@babel/helper-plugin-utils': 7.19.0 + /@babel/plugin-syntax-flow/7.18.6_@babel+core@7.20.12: + resolution: {integrity: sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.19.0 + /@babel/plugin-syntax-import-assertions/7.18.6_@babel+core@7.19.1: resolution: {integrity: sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==} engines: {node: '>=6.9.0'} @@ -745,6 +847,15 @@ packages: '@babel/core': 7.19.1 '@babel/helper-plugin-utils': 7.19.0 + /@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.20.12: + resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.19.0 + /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.19.1: resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: @@ -1117,6 +1228,19 @@ packages: '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.19.1 '@babel/types': 7.19.0 + /@babel/plugin-transform-react-jsx/7.20.13_@babel+core@7.20.12: + resolution: {integrity: sha512-MmTZx/bkUrfJhhYAYt3Urjm+h8DQGrPrnKQ94jLo7NLuOU+T89a7IByhKmrb8SKhrIYIQ0FN0CHMbnFRen4qNw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-module-imports': 7.18.6 + '@babel/helper-plugin-utils': 7.20.2 + '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.20.12 + '@babel/types': 7.20.7 + /@babel/plugin-transform-react-pure-annotations/7.18.6_@babel+core@7.19.1: resolution: {integrity: sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==} engines: {node: '>=6.9.0'} @@ -1385,6 +1509,14 @@ packages: '@babel/parser': 7.19.1 '@babel/types': 7.19.0 + /@babel/template/7.20.7: + resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.18.6 + '@babel/parser': 7.20.15 + '@babel/types': 7.20.7 + /@babel/traverse/7.19.1: resolution: {integrity: sha512-0j/ZfZMxKukDaag2PtOPDbwuELqIar6lLskVPPJDjXMXjfLb1Obo/1yjxIGqqAJrmfaTIY3z2wFLAQ7qSkLsuA==} engines: {node: '>=6.9.0'} @@ -1402,6 +1534,23 @@ packages: transitivePeerDependencies: - supports-color + /@babel/traverse/7.20.13: + resolution: {integrity: sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.18.6 + '@babel/generator': 7.20.14 + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-function-name': 7.19.0 + '@babel/helper-hoist-variables': 7.18.6 + '@babel/helper-split-export-declaration': 7.18.6 + '@babel/parser': 7.20.15 + '@babel/types': 7.20.7 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + /@babel/types/7.19.0: resolution: {integrity: sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA==} engines: {node: '>=6.9.0'} @@ -1410,6 +1559,14 @@ packages: '@babel/helper-validator-identifier': 7.19.1 to-fast-properties: 2.0.0 + /@babel/types/7.20.7: + resolution: {integrity: sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.19.4 + '@babel/helper-validator-identifier': 7.19.1 + to-fast-properties: 2.0.0 + /@bcoe/v8-coverage/0.2.3: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} @@ -1900,7 +2057,7 @@ packages: collect-v8-coverage: 1.0.1 exit: 0.1.2 glob: 7.2.3 - graceful-fs: registry.npmjs.org/graceful-fs/4.2.10 + graceful-fs: 4.2.10 istanbul-lib-coverage: 3.2.0 istanbul-lib-instrument: 5.2.0 istanbul-lib-report: 3.0.0 @@ -1929,7 +2086,7 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: callsites: 3.1.0 - graceful-fs: registry.npmjs.org/graceful-fs/4.2.10 + graceful-fs: 4.2.10 source-map: 0.6.1 /@jest/test-result/27.5.1: @@ -1955,7 +2112,7 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/test-result': 27.5.1 - graceful-fs: registry.npmjs.org/graceful-fs/4.2.10 + graceful-fs: 4.2.10 jest-haste-map: 27.5.1 jest-runtime: 27.5.1 transitivePeerDependencies: @@ -2135,8 +2292,8 @@ packages: react: 18.2.0 dev: false - /@remix-run/router/1.0.0: - resolution: {integrity: sha512-SCR1cxRSMNKjaVYptCzBApPDqGwa3FGdjVHc+rOToocNPHQdIYLZBfv/3f+KvYuXDkUGVIW9IAzmPNZDRL1I4A==} + /@remix-run/router/1.3.2: + resolution: {integrity: sha512-t54ONhl/h75X94SWsHGQ4G/ZrCEguKSRQr7DrjTciJXW0YU1QhlwYeycvK5JgkzlxmvrK7wq1NB/PLtHxoiDcA==} engines: {node: '>=14'} dev: false @@ -2922,6 +3079,14 @@ packages: dependencies: acorn: 8.8.0 + /acorn-import-assertions/1.8.0_acorn@8.8.2: + resolution: {integrity: sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==} + peerDependencies: + acorn: ^8 + dependencies: + acorn: 8.8.2 + dev: true + /acorn-jsx/5.3.2_acorn@8.8.0: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -2954,6 +3119,12 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + /acorn/8.8.2: + resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + /address/1.2.1: resolution: {integrity: sha512-B+6bi5D34+fDYENiH5qOlA0cV2rAGKuWZ9LeyUUehbXy8e0VS9e498yO0Jeeh+iM+6KbfudHTFjXw2MmJD4QRA==} engines: {node: '>= 10.0.0'} @@ -3440,7 +3611,7 @@ packages: peerDependencies: '@popperjs/core': ^2.11.6 dependencies: - '@popperjs/core': registry.npmjs.org/@popperjs/core/2.11.6 + '@popperjs/core': 2.11.6 dev: false /brace-expansion/1.1.11: @@ -3473,6 +3644,16 @@ packages: node-releases: 2.0.6 update-browserslist-db: 1.0.9_browserslist@4.21.4 + /browserslist/4.21.5: + resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001452 + electron-to-chromium: 1.4.295 + node-releases: 2.0.10 + update-browserslist-db: 1.0.10_browserslist@4.21.5 + /bser/2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} dependencies: @@ -3547,6 +3728,9 @@ packages: /caniuse-lite/1.0.30001408: resolution: {integrity: sha512-DdUCktgMSM+1ndk9EFMZcavsGszV7zxV9O7MtOHniTa/iyAIwJCF0dFVBdU9SijJbfh29hC9bCs07wu8pjnGJQ==} + /caniuse-lite/1.0.30001452: + resolution: {integrity: sha512-Lkp0vFjMkBB3GTpLR8zk4NwW5EdRdnitwYJHDOOKIU85x4ckYCPQ+9WlVvSVClHxVReefkUMtWZH2l9KGlD51w==} + /case-sensitive-paths-webpack-plugin/2.4.0: resolution: {integrity: sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==} engines: {node: '>=4'} @@ -3593,7 +3777,7 @@ packages: normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: registry.npmjs.org/fsevents/2.3.2 + fsevents: 2.3.2 /chrome-trace-event/1.0.3: resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} @@ -3821,6 +4005,9 @@ packages: dependencies: safe-buffer: 5.1.2 + /convert-source-map/1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + /cookie-signature/1.0.6: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} @@ -4879,6 +5066,9 @@ packages: /electron-to-chromium/1.4.256: resolution: {integrity: sha512-x+JnqyluoJv8I0U9gVe+Sk2st8vF0CzMt78SXxuoWCooLLY2k5VerIBdpvG7ql6GKI4dzNnPjmqgDJ76EdaAKw==} + /electron-to-chromium/1.4.295: + resolution: {integrity: sha512-lEO94zqf1bDA3aepxwnWoHUjA8sZ+2owgcSZjYQy0+uOSEclJX0VieZC+r+wLpSxUHRd6gG32znTWmr+5iGzFw==} + /emittery/0.10.2: resolution: {integrity: sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==} engines: {node: '>=12'} @@ -4909,9 +5099,17 @@ packages: resolution: {integrity: sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==} engines: {node: '>=10.13.0'} dependencies: - graceful-fs: registry.npmjs.org/graceful-fs/4.2.10 + graceful-fs: 4.2.10 tapable: 2.2.1 + /enhanced-resolve/5.12.0: + resolution: {integrity: sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==} + engines: {node: '>=10.13.0'} + dependencies: + graceful-fs: 4.2.10 + tapable: 2.2.1 + dev: true + /error-ex/1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: @@ -4998,7 +5196,7 @@ packages: esutils: 2.0.3 optionator: 0.8.3 optionalDependencies: - source-map: registry.npmjs.org/source-map/0.6.1 + source-map: 0.6.1 /eslint-config-airbnb-base/15.0.0_hdzsmr7kawaomymueo2tso6fjq: resolution: {integrity: sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==} @@ -5059,7 +5257,7 @@ packages: eslint: 8.23.1 dev: true - /eslint-config-react-app/7.0.1_ep5hkfurrjf46kbnkcej3benz4: + /eslint-config-react-app/7.0.1_n6qatnnbpoccspltxi3idzpmam: resolution: {integrity: sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==} engines: {node: '>=14.0.0'} peerDependencies: @@ -5077,7 +5275,7 @@ packages: babel-preset-react-app: 10.0.1 confusing-browser-globals: 1.0.11 eslint: 8.23.1 - eslint-plugin-flowtype: 8.0.3_yb7llsfoad77a2vx2os7pgkvmi + eslint-plugin-flowtype: 8.0.3_kpcs5p4zm4a4w6zxhbzwfayc7m eslint-plugin-import: 2.26.0_cxqatnnjiq7ozd2bkspxnuicdq eslint-plugin-jest: 25.7.0_hpujes4m5fznz335nz2hgbshme eslint-plugin-jsx-a11y: 6.6.1_eslint@8.23.1 @@ -5176,7 +5374,7 @@ packages: regexpp: 3.2.0 dev: true - /eslint-plugin-flowtype/8.0.3_yb7llsfoad77a2vx2os7pgkvmi: + /eslint-plugin-flowtype/8.0.3_kpcs5p4zm4a4w6zxhbzwfayc7m: resolution: {integrity: sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==} engines: {node: '>=12.0.0'} peerDependencies: @@ -5184,8 +5382,8 @@ packages: '@babel/plugin-transform-react-jsx': ^7.14.9 eslint: ^8.1.0 dependencies: - '@babel/plugin-syntax-flow': registry.npmjs.org/@babel/plugin-syntax-flow/7.18.6_@babel+core@7.19.1 - '@babel/plugin-transform-react-jsx': registry.npmjs.org/@babel/plugin-transform-react-jsx/7.19.0_@babel+core@7.19.1 + '@babel/plugin-syntax-flow': 7.18.6_@babel+core@7.20.12 + '@babel/plugin-transform-react-jsx': 7.20.13_@babel+core@7.20.12 eslint: 8.23.1 lodash: 4.17.21 string-natural-compare: 3.0.1 @@ -5786,7 +5984,7 @@ packages: engines: {node: '>=10'} dependencies: at-least-node: 1.0.0 - graceful-fs: registry.npmjs.org/graceful-fs/4.2.10 + graceful-fs: 4.2.10 jsonfile: 6.1.0 universalify: 2.0.0 @@ -5796,6 +5994,13 @@ packages: /fs.realpath/1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + /fsevents/2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + optional: true + /function-bind/1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} @@ -6566,7 +6771,7 @@ packages: ci-info: 3.4.0 deepmerge: 4.2.2 glob: 7.2.3 - graceful-fs: registry.npmjs.org/graceful-fs/4.2.10 + graceful-fs: 4.2.10 jest-circus: 27.5.1 jest-environment-jsdom: 27.5.1 jest-environment-node: 27.5.1 @@ -6678,7 +6883,7 @@ packages: micromatch: 4.0.5 walker: 1.0.8 optionalDependencies: - fsevents: registry.npmjs.org/fsevents/2.3.2 + fsevents: 2.3.2 /jest-jasmine2/27.5.1: resolution: {integrity: sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==} @@ -6738,7 +6943,7 @@ packages: '@jest/types': 27.5.1 '@types/stack-utils': 2.0.1 chalk: 4.1.2 - graceful-fs: registry.npmjs.org/graceful-fs/4.2.10 + graceful-fs: 4.2.10 micromatch: 4.0.5 pretty-format: 27.5.1 slash: 3.0.0 @@ -6752,7 +6957,7 @@ packages: '@jest/types': 28.1.3 '@types/stack-utils': 2.0.1 chalk: 4.1.2 - graceful-fs: registry.npmjs.org/graceful-fs/4.2.10 + graceful-fs: 4.2.10 micromatch: 4.0.5 pretty-format: 28.1.3 slash: 3.0.0 @@ -6821,7 +7026,7 @@ packages: '@types/node': 16.11.59 chalk: 4.1.2 emittery: 0.8.1 - graceful-fs: registry.npmjs.org/graceful-fs/4.2.10 + graceful-fs: 4.2.10 jest-docblock: 27.5.1 jest-environment-jsdom: 27.5.1 jest-environment-node: 27.5.1 @@ -6856,7 +7061,7 @@ packages: collect-v8-coverage: 1.0.1 execa: 5.1.1 glob: 7.2.3 - graceful-fs: registry.npmjs.org/graceful-fs/4.2.10 + graceful-fs: 4.2.10 jest-haste-map: 27.5.1 jest-message-util: 27.5.1 jest-mock: 27.5.1 @@ -6874,7 +7079,7 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@types/node': 16.11.59 - graceful-fs: registry.npmjs.org/graceful-fs/4.2.10 + graceful-fs: 4.2.10 /jest-snapshot/27.5.1: resolution: {integrity: sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==} @@ -6892,7 +7097,7 @@ packages: babel-preset-current-node-syntax: 1.0.1_@babel+core@7.19.1 chalk: 4.1.2 expect: 27.5.1 - graceful-fs: registry.npmjs.org/graceful-fs/4.2.10 + graceful-fs: 4.2.10 jest-diff: 27.5.1 jest-get-type: 27.5.1 jest-haste-map: 27.5.1 @@ -6924,7 +7129,7 @@ packages: '@types/node': 16.11.59 chalk: 4.1.2 ci-info: 3.4.0 - graceful-fs: registry.npmjs.org/graceful-fs/4.2.10 + graceful-fs: 4.2.10 picomatch: 2.3.1 /jest-validate/27.5.1: @@ -7117,12 +7322,17 @@ packages: engines: {node: '>=6'} hasBin: true + /json5/2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + /jsonfile/6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: registry.npmjs.org/graceful-fs/4.2.10 + graceful-fs: 4.2.10 /jsonp/0.2.1: resolution: {integrity: sha512-pfog5gdDxPdV4eP7Kg87M8/bHgshlZ5pybl+yKxAnCZ5O7lCIn7Ixydj03wOlnDQesky2BPyA91SQ+5Y/mNwzw==} @@ -7329,6 +7539,11 @@ packages: dependencies: tslib: 2.4.0 + /lru-cache/5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + dependencies: + yallist: 3.1.1 + /lru-cache/6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} @@ -7572,7 +7787,7 @@ packages: jsonp: 0.2.1 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 - react-scripts: 5.0.1_v2uhgyutubjd4jjlagvop2mfmq + react-scripts: 5.0.1_mml7drqgt2b2zrp2ma74zmeoqy transitivePeerDependencies: - supports-color dev: false @@ -7590,6 +7805,9 @@ packages: /node-int64/0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + /node-releases/2.0.10: + resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} + /node-releases/2.0.6: resolution: {integrity: sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==} @@ -8732,13 +8950,13 @@ packages: resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} engines: {node: '>=6'} - /purgecss-webpack-plugin/4.1.3_webpack@5.74.0: + /purgecss-webpack-plugin/4.1.3_webpack@5.75.0: resolution: {integrity: sha512-1OHS0WE935w66FjaFSlV06ycmn3/A8a6Q+iVUmmCYAujQ1HPdX+psMXUhASEW0uF1PYEpOlhMc5ApigVqYK08g==} peerDependencies: webpack: '*' dependencies: purgecss: 4.1.3 - webpack: registry.npmjs.org/webpack/5.74.0 + webpack: 5.75.0 webpack-sources: 3.2.3 dev: true @@ -8824,7 +9042,7 @@ packages: peerDependencies: react-scripts: '>=2.1.3' dependencies: - react-scripts: 5.0.1_v2uhgyutubjd4jjlagvop2mfmq + react-scripts: 5.0.1_mml7drqgt2b2zrp2ma74zmeoqy semver: 5.7.1 dev: true @@ -8964,29 +9182,30 @@ packages: resolution: {integrity: sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==} engines: {node: '>=0.10.0'} - /react-router-dom/6.4.0_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-4Aw1xmXKeleYYQ3x0Lcl2undHR6yMjXZjd9DKZd53SGOYqirrUThyUb0wwAX5VZAyvSuzjNJmZlJ3rR9+/vzqg==} + /react-router-dom/6.8.1_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-67EXNfkQgf34P7+PSb6VlBuaacGhkKn3kpE51+P6zYSG2kiRoumXEL6e27zTa9+PGF2MNXbgIUHTVlleLbIcHQ==} engines: {node: '>=14'} peerDependencies: react: '>=16.8' react-dom: '>=16.8' dependencies: + '@remix-run/router': 1.3.2 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 - react-router: 6.4.0_react@18.2.0 + react-router: 6.8.1_react@18.2.0 dev: false - /react-router/6.4.0_react@18.2.0: - resolution: {integrity: sha512-B+5bEXFlgR1XUdHYR6P94g299SjrfCBMmEDJNcFbpAyRH1j1748yt9NdDhW3++nw1lk3zQJ6aOO66zUx3KlTZg==} + /react-router/6.8.1_react@18.2.0: + resolution: {integrity: sha512-Jgi8BzAJQ8MkPt8ipXnR73rnD7EmZ0HFFb7jdQU24TynGW1Ooqin2KVDN9voSC+7xhqbbCd2cjGUepb6RObnyg==} engines: {node: '>=14'} peerDependencies: react: '>=16.8' dependencies: - '@remix-run/router': 1.0.0 + '@remix-run/router': 1.3.2 react: 18.2.0 dev: false - /react-scripts/5.0.1_v2uhgyutubjd4jjlagvop2mfmq: + /react-scripts/5.0.1_mml7drqgt2b2zrp2ma74zmeoqy: resolution: {integrity: sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==} engines: {node: '>=14.0.0'} hasBin: true @@ -9014,7 +9233,7 @@ packages: dotenv: 10.0.0 dotenv-expand: 5.1.0 eslint: 8.23.1 - eslint-config-react-app: 7.0.1_ep5hkfurrjf46kbnkcej3benz4 + eslint-config-react-app: 7.0.1_n6qatnnbpoccspltxi3idzpmam eslint-webpack-plugin: 3.2.0_cnsurwdbw57xgwxuf5k544xt5e file-loader: 6.2.0_webpack@5.74.0 fs-extra: 10.1.0 @@ -9048,7 +9267,7 @@ packages: webpack-manifest-plugin: 4.1.1_webpack@5.74.0 workbox-webpack-plugin: 6.5.4_webpack@5.74.0 optionalDependencies: - fsevents: registry.npmjs.org/fsevents/2.3.2 + fsevents: 2.3.2 transitivePeerDependencies: - '@babel/plugin-syntax-flow' - '@babel/plugin-transform-react-jsx' @@ -9351,7 +9570,7 @@ packages: engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: registry.npmjs.org/fsevents/2.3.2 + fsevents: 2.3.2 /run-parallel/1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -10072,6 +10291,30 @@ packages: terser: 5.15.0 webpack: 5.74.0 + /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.15 + jest-worker: 27.5.1 + schema-utils: 3.1.1 + serialize-javascript: 6.0.0 + terser: 5.15.0 + webpack: 5.75.0 + dev: true + /terser/5.15.0: resolution: {integrity: sha512-L1BJiXVmheAQQy+as0oF3Pwtlo4s3Wi1X2zNZ2NxOB4wx9bdS9Vk67XQENLFdLYGCK/Z2di53mTj/hBafR+dTA==} engines: {node: '>=10'} @@ -10340,6 +10583,16 @@ packages: resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} engines: {node: '>=4'} + /update-browserslist-db/1.0.10_browserslist@4.21.5: + resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.21.5 + escalade: 3.1.1 + picocolors: 1.0.0 + /update-browserslist-db/1.0.9_browserslist@4.21.4: resolution: {integrity: sha512-/xsqn21EGVdXI3EXSum1Yckj3ZVZugqyOZQ/CxYPBD/R+ko9NSUScf8tFF4dOKY+2pvSSJA/S+5B8s4Zr4kyvg==} hasBin: true @@ -10456,7 +10709,7 @@ packages: engines: {node: '>=10.13.0'} dependencies: glob-to-regexp: 0.4.1 - graceful-fs: registry.npmjs.org/graceful-fs/4.2.10 + graceful-fs: 4.2.10 /wbuf/1.7.3: resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} @@ -10600,6 +10853,46 @@ packages: - esbuild - uglify-js + /webpack/5.75.0: + 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.5 + 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_webpack@5.75.0 + watchpack: 2.4.0 + webpack-sources: 3.2.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + dev: true + /websocket-driver/0.7.4: resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} engines: {node: '>=0.8.0'} @@ -10876,6 +11169,9 @@ packages: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} + /yallist/3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + /yallist/4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} @@ -10955,343 +11251,6 @@ packages: use-sync-external-store: 1.2.0_react@18.2.0 dev: false - registry.npmjs.org/@ampproject/remapping/2.2.0: - resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz} - name: '@ampproject/remapping' - version: 2.2.0 - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/gen-mapping': registry.npmjs.org/@jridgewell/gen-mapping/0.1.1 - '@jridgewell/trace-mapping': registry.npmjs.org/@jridgewell/trace-mapping/0.3.15 - - registry.npmjs.org/@babel/code-frame/7.18.6: - resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz} - name: '@babel/code-frame' - version: 7.18.6 - engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': registry.npmjs.org/@babel/highlight/7.18.6 - - registry.npmjs.org/@babel/compat-data/7.19.1: - resolution: {integrity: sha512-72a9ghR0gnESIa7jBN53U32FOVCEoztyIlKaNoU05zRhEecduGK9L9c3ww7Mp06JiR+0ls0GBPFJQwwtjn9ksg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.1.tgz} - name: '@babel/compat-data' - version: 7.19.1 - engines: {node: '>=6.9.0'} - - registry.npmjs.org/@babel/core/7.19.1: - resolution: {integrity: sha512-1H8VgqXme4UXCRv7/Wa1bq7RVymKOzC7znjyFM8KiEzwFqcKUKYNoQef4GhdklgNvoBXyW4gYhuBNCM5o1zImw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@babel/core/-/core-7.19.1.tgz} - name: '@babel/core' - version: 7.19.1 - engines: {node: '>=6.9.0'} - dependencies: - '@ampproject/remapping': registry.npmjs.org/@ampproject/remapping/2.2.0 - '@babel/code-frame': registry.npmjs.org/@babel/code-frame/7.18.6 - '@babel/generator': registry.npmjs.org/@babel/generator/7.19.0 - '@babel/helper-compilation-targets': registry.npmjs.org/@babel/helper-compilation-targets/7.19.1_@babel+core@7.19.1 - '@babel/helper-module-transforms': registry.npmjs.org/@babel/helper-module-transforms/7.19.0 - '@babel/helpers': registry.npmjs.org/@babel/helpers/7.19.0 - '@babel/parser': registry.npmjs.org/@babel/parser/7.19.1 - '@babel/template': registry.npmjs.org/@babel/template/7.18.10 - '@babel/traverse': registry.npmjs.org/@babel/traverse/7.19.1 - '@babel/types': registry.npmjs.org/@babel/types/7.19.0 - convert-source-map: registry.npmjs.org/convert-source-map/1.8.0 - debug: registry.npmjs.org/debug/4.3.4 - gensync: registry.npmjs.org/gensync/1.0.0-beta.2 - json5: registry.npmjs.org/json5/2.2.1 - semver: registry.npmjs.org/semver/6.3.0 - transitivePeerDependencies: - - supports-color - - registry.npmjs.org/@babel/generator/7.19.0: - resolution: {integrity: sha512-S1ahxf1gZ2dpoiFgA+ohK9DIpz50bJ0CWs7Zlzb54Z4sG8qmdIrGrVqmy1sAtTVRb+9CU6U8VqT9L0Zj7hxHVg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@babel/generator/-/generator-7.19.0.tgz} - name: '@babel/generator' - version: 7.19.0 - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': registry.npmjs.org/@babel/types/7.19.0 - '@jridgewell/gen-mapping': registry.npmjs.org/@jridgewell/gen-mapping/0.3.2 - jsesc: registry.npmjs.org/jsesc/2.5.2 - - registry.npmjs.org/@babel/helper-annotate-as-pure/7.18.6: - resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz} - name: '@babel/helper-annotate-as-pure' - version: 7.18.6 - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': registry.npmjs.org/@babel/types/7.19.0 - - registry.npmjs.org/@babel/helper-compilation-targets/7.19.1_@babel+core@7.19.1: - resolution: {integrity: sha512-LlLkkqhCMyz2lkQPvJNdIYU7O5YjWRgC2R4omjCTpZd8u8KMQzZvX4qce+/BluN1rcQiV7BoGUpmQ0LeHerbhg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.1.tgz} - id: registry.npmjs.org/@babel/helper-compilation-targets/7.19.1 - name: '@babel/helper-compilation-targets' - version: 7.19.1 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/compat-data': registry.npmjs.org/@babel/compat-data/7.19.1 - '@babel/core': registry.npmjs.org/@babel/core/7.19.1 - '@babel/helper-validator-option': registry.npmjs.org/@babel/helper-validator-option/7.18.6 - browserslist: registry.npmjs.org/browserslist/4.21.4 - semver: registry.npmjs.org/semver/6.3.0 - - registry.npmjs.org/@babel/helper-environment-visitor/7.18.9: - resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz} - name: '@babel/helper-environment-visitor' - version: 7.18.9 - engines: {node: '>=6.9.0'} - - registry.npmjs.org/@babel/helper-function-name/7.19.0: - resolution: {integrity: sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz} - name: '@babel/helper-function-name' - version: 7.19.0 - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': registry.npmjs.org/@babel/template/7.18.10 - '@babel/types': registry.npmjs.org/@babel/types/7.19.0 - - registry.npmjs.org/@babel/helper-hoist-variables/7.18.6: - resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz} - name: '@babel/helper-hoist-variables' - version: 7.18.6 - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': registry.npmjs.org/@babel/types/7.19.0 - - registry.npmjs.org/@babel/helper-module-imports/7.18.6: - resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz} - name: '@babel/helper-module-imports' - version: 7.18.6 - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': registry.npmjs.org/@babel/types/7.19.0 - - registry.npmjs.org/@babel/helper-module-transforms/7.19.0: - resolution: {integrity: sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz} - name: '@babel/helper-module-transforms' - version: 7.19.0 - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-environment-visitor': registry.npmjs.org/@babel/helper-environment-visitor/7.18.9 - '@babel/helper-module-imports': registry.npmjs.org/@babel/helper-module-imports/7.18.6 - '@babel/helper-simple-access': registry.npmjs.org/@babel/helper-simple-access/7.18.6 - '@babel/helper-split-export-declaration': registry.npmjs.org/@babel/helper-split-export-declaration/7.18.6 - '@babel/helper-validator-identifier': registry.npmjs.org/@babel/helper-validator-identifier/7.19.1 - '@babel/template': registry.npmjs.org/@babel/template/7.18.10 - '@babel/traverse': registry.npmjs.org/@babel/traverse/7.19.1 - '@babel/types': registry.npmjs.org/@babel/types/7.19.0 - transitivePeerDependencies: - - supports-color - - registry.npmjs.org/@babel/helper-plugin-utils/7.19.0: - resolution: {integrity: sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz} - name: '@babel/helper-plugin-utils' - version: 7.19.0 - engines: {node: '>=6.9.0'} - - registry.npmjs.org/@babel/helper-simple-access/7.18.6: - resolution: {integrity: sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz} - name: '@babel/helper-simple-access' - version: 7.18.6 - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': registry.npmjs.org/@babel/types/7.19.0 - - registry.npmjs.org/@babel/helper-split-export-declaration/7.18.6: - resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz} - name: '@babel/helper-split-export-declaration' - version: 7.18.6 - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': registry.npmjs.org/@babel/types/7.19.0 - - registry.npmjs.org/@babel/helper-string-parser/7.18.10: - resolution: {integrity: sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz} - name: '@babel/helper-string-parser' - version: 7.18.10 - engines: {node: '>=6.9.0'} - - registry.npmjs.org/@babel/helper-validator-identifier/7.19.1: - resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz} - name: '@babel/helper-validator-identifier' - version: 7.19.1 - engines: {node: '>=6.9.0'} - - registry.npmjs.org/@babel/helper-validator-option/7.18.6: - resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz} - name: '@babel/helper-validator-option' - version: 7.18.6 - engines: {node: '>=6.9.0'} - - registry.npmjs.org/@babel/helpers/7.19.0: - resolution: {integrity: sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.0.tgz} - name: '@babel/helpers' - version: 7.19.0 - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': registry.npmjs.org/@babel/template/7.18.10 - '@babel/traverse': registry.npmjs.org/@babel/traverse/7.19.1 - '@babel/types': registry.npmjs.org/@babel/types/7.19.0 - transitivePeerDependencies: - - supports-color - - registry.npmjs.org/@babel/highlight/7.18.6: - resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz} - name: '@babel/highlight' - version: 7.18.6 - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': registry.npmjs.org/@babel/helper-validator-identifier/7.19.1 - chalk: registry.npmjs.org/chalk/2.4.2 - js-tokens: registry.npmjs.org/js-tokens/4.0.0 - - registry.npmjs.org/@babel/parser/7.19.1: - resolution: {integrity: sha512-h7RCSorm1DdTVGJf3P2Mhj3kdnkmF/EiysUkzS2TdgAYqyjFdMQJbVuXOBej2SBJaXan/lIVtT6KkGbyyq753A==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@babel/parser/-/parser-7.19.1.tgz} - name: '@babel/parser' - version: 7.19.1 - engines: {node: '>=6.0.0'} - hasBin: true - dependencies: - '@babel/types': registry.npmjs.org/@babel/types/7.19.0 - - registry.npmjs.org/@babel/plugin-syntax-flow/7.18.6_@babel+core@7.19.1: - resolution: {integrity: sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz} - id: registry.npmjs.org/@babel/plugin-syntax-flow/7.18.6 - name: '@babel/plugin-syntax-flow' - version: 7.18.6 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': registry.npmjs.org/@babel/core/7.19.1 - '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils/7.19.0 - - registry.npmjs.org/@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.19.1: - resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz} - id: registry.npmjs.org/@babel/plugin-syntax-jsx/7.18.6 - name: '@babel/plugin-syntax-jsx' - version: 7.18.6 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': registry.npmjs.org/@babel/core/7.19.1 - '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils/7.19.0 - - registry.npmjs.org/@babel/plugin-transform-react-jsx/7.19.0_@babel+core@7.19.1: - resolution: {integrity: sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz} - id: registry.npmjs.org/@babel/plugin-transform-react-jsx/7.19.0 - name: '@babel/plugin-transform-react-jsx' - version: 7.19.0 - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': registry.npmjs.org/@babel/core/7.19.1 - '@babel/helper-annotate-as-pure': registry.npmjs.org/@babel/helper-annotate-as-pure/7.18.6 - '@babel/helper-module-imports': registry.npmjs.org/@babel/helper-module-imports/7.18.6 - '@babel/helper-plugin-utils': registry.npmjs.org/@babel/helper-plugin-utils/7.19.0 - '@babel/plugin-syntax-jsx': registry.npmjs.org/@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.19.1 - '@babel/types': registry.npmjs.org/@babel/types/7.19.0 - - registry.npmjs.org/@babel/template/7.18.10: - resolution: {integrity: sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz} - name: '@babel/template' - version: 7.18.10 - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': registry.npmjs.org/@babel/code-frame/7.18.6 - '@babel/parser': registry.npmjs.org/@babel/parser/7.19.1 - '@babel/types': registry.npmjs.org/@babel/types/7.19.0 - - registry.npmjs.org/@babel/traverse/7.19.1: - resolution: {integrity: sha512-0j/ZfZMxKukDaag2PtOPDbwuELqIar6lLskVPPJDjXMXjfLb1Obo/1yjxIGqqAJrmfaTIY3z2wFLAQ7qSkLsuA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.1.tgz} - name: '@babel/traverse' - version: 7.19.1 - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': registry.npmjs.org/@babel/code-frame/7.18.6 - '@babel/generator': registry.npmjs.org/@babel/generator/7.19.0 - '@babel/helper-environment-visitor': registry.npmjs.org/@babel/helper-environment-visitor/7.18.9 - '@babel/helper-function-name': registry.npmjs.org/@babel/helper-function-name/7.19.0 - '@babel/helper-hoist-variables': registry.npmjs.org/@babel/helper-hoist-variables/7.18.6 - '@babel/helper-split-export-declaration': registry.npmjs.org/@babel/helper-split-export-declaration/7.18.6 - '@babel/parser': registry.npmjs.org/@babel/parser/7.19.1 - '@babel/types': registry.npmjs.org/@babel/types/7.19.0 - debug: registry.npmjs.org/debug/4.3.4 - globals: registry.npmjs.org/globals/11.12.0 - transitivePeerDependencies: - - supports-color - - registry.npmjs.org/@babel/types/7.19.0: - resolution: {integrity: sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@babel/types/-/types-7.19.0.tgz} - name: '@babel/types' - version: 7.19.0 - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': registry.npmjs.org/@babel/helper-string-parser/7.18.10 - '@babel/helper-validator-identifier': registry.npmjs.org/@babel/helper-validator-identifier/7.19.1 - to-fast-properties: registry.npmjs.org/to-fast-properties/2.0.0 - - registry.npmjs.org/@jridgewell/gen-mapping/0.1.1: - resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz} - name: '@jridgewell/gen-mapping' - version: 0.1.1 - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/set-array': registry.npmjs.org/@jridgewell/set-array/1.1.2 - '@jridgewell/sourcemap-codec': registry.npmjs.org/@jridgewell/sourcemap-codec/1.4.14 - - registry.npmjs.org/@jridgewell/gen-mapping/0.3.2: - resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz} - name: '@jridgewell/gen-mapping' - version: 0.3.2 - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/set-array': registry.npmjs.org/@jridgewell/set-array/1.1.2 - '@jridgewell/sourcemap-codec': registry.npmjs.org/@jridgewell/sourcemap-codec/1.4.14 - '@jridgewell/trace-mapping': registry.npmjs.org/@jridgewell/trace-mapping/0.3.15 - - registry.npmjs.org/@jridgewell/resolve-uri/3.1.0: - resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz} - name: '@jridgewell/resolve-uri' - version: 3.1.0 - engines: {node: '>=6.0.0'} - - registry.npmjs.org/@jridgewell/set-array/1.1.2: - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz} - name: '@jridgewell/set-array' - version: 1.1.2 - engines: {node: '>=6.0.0'} - - registry.npmjs.org/@jridgewell/source-map/0.3.2: - resolution: {integrity: sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz} - name: '@jridgewell/source-map' - version: 0.3.2 - dependencies: - '@jridgewell/gen-mapping': registry.npmjs.org/@jridgewell/gen-mapping/0.3.2 - '@jridgewell/trace-mapping': registry.npmjs.org/@jridgewell/trace-mapping/0.3.15 - dev: true - - registry.npmjs.org/@jridgewell/sourcemap-codec/1.4.14: - resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz} - name: '@jridgewell/sourcemap-codec' - version: 1.4.14 - - registry.npmjs.org/@jridgewell/trace-mapping/0.3.15: - resolution: {integrity: sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz} - name: '@jridgewell/trace-mapping' - version: 0.3.15 - dependencies: - '@jridgewell/resolve-uri': registry.npmjs.org/@jridgewell/resolve-uri/3.1.0 - '@jridgewell/sourcemap-codec': registry.npmjs.org/@jridgewell/sourcemap-codec/1.4.14 - - registry.npmjs.org/@popperjs/core/2.11.6: - resolution: {integrity: sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz} - name: '@popperjs/core' - version: 2.11.6 - dev: false - registry.npmjs.org/@types/color-convert/2.0.0: resolution: {integrity: sha512-m7GG7IKKGuJUXvkZ1qqG3ChccdIM/qBBo913z+Xft0nKCX4hAU/IxKwZBU4cpRZ7GS5kV4vOblUkILtSShCPXQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@types/color-convert/-/color-convert-2.0.0.tgz} name: '@types/color-convert' @@ -11322,328 +11281,11 @@ packages: '@types/trusted-types': registry.npmjs.org/@types/trusted-types/2.0.2 dev: true - registry.npmjs.org/@types/eslint-scope/3.7.4: - resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz} - name: '@types/eslint-scope' - version: 3.7.4 - dependencies: - '@types/eslint': registry.npmjs.org/@types/eslint/8.4.6 - '@types/estree': registry.npmjs.org/@types/estree/1.0.0 - dev: true - - registry.npmjs.org/@types/eslint/8.4.6: - resolution: {integrity: sha512-/fqTbjxyFUaYNO7VcW5g+4npmqVACz1bB7RTHYuLj+PRjw9hrCwrUXVQFpChUS0JsyEFvMZ7U/PfmvWgxJhI9g==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@types/eslint/-/eslint-8.4.6.tgz} - name: '@types/eslint' - version: 8.4.6 - dependencies: - '@types/estree': registry.npmjs.org/@types/estree/1.0.0 - '@types/json-schema': registry.npmjs.org/@types/json-schema/7.0.11 - dev: true - - registry.npmjs.org/@types/estree/0.0.51: - resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz} - name: '@types/estree' - version: 0.0.51 - dev: true - - registry.npmjs.org/@types/estree/1.0.0: - resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz} - name: '@types/estree' - version: 1.0.0 - dev: true - - registry.npmjs.org/@types/json-schema/7.0.11: - resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz} - name: '@types/json-schema' - version: 7.0.11 - dev: true - - registry.npmjs.org/@types/node/16.11.59: - resolution: {integrity: sha512-6u+36Dj3aDzhfBVUf/mfmc92OEdzQ2kx2jcXGdigfl70E/neV21ZHE6UCz4MDzTRcVqGAM27fk+DLXvyDsn3Jw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@types/node/-/node-16.11.59.tgz} - name: '@types/node' - version: 16.11.59 - dev: true - registry.npmjs.org/@types/trusted-types/2.0.2: resolution: {integrity: sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.2.tgz} name: '@types/trusted-types' version: 2.0.2 - registry.npmjs.org/@webassemblyjs/ast/1.11.1: - resolution: {integrity: sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz} - name: '@webassemblyjs/ast' - version: 1.11.1 - dependencies: - '@webassemblyjs/helper-numbers': registry.npmjs.org/@webassemblyjs/helper-numbers/1.11.1 - '@webassemblyjs/helper-wasm-bytecode': registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/1.11.1 - dev: true - - registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/1.11.1: - resolution: {integrity: sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz} - name: '@webassemblyjs/floating-point-hex-parser' - version: 1.11.1 - dev: true - - registry.npmjs.org/@webassemblyjs/helper-api-error/1.11.1: - resolution: {integrity: sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz} - name: '@webassemblyjs/helper-api-error' - version: 1.11.1 - dev: true - - registry.npmjs.org/@webassemblyjs/helper-buffer/1.11.1: - resolution: {integrity: sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz} - name: '@webassemblyjs/helper-buffer' - version: 1.11.1 - dev: true - - registry.npmjs.org/@webassemblyjs/helper-numbers/1.11.1: - resolution: {integrity: sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz} - name: '@webassemblyjs/helper-numbers' - version: 1.11.1 - dependencies: - '@webassemblyjs/floating-point-hex-parser': registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/1.11.1 - '@webassemblyjs/helper-api-error': registry.npmjs.org/@webassemblyjs/helper-api-error/1.11.1 - '@xtuc/long': registry.npmjs.org/@xtuc/long/4.2.2 - dev: true - - registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/1.11.1: - resolution: {integrity: sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz} - name: '@webassemblyjs/helper-wasm-bytecode' - version: 1.11.1 - dev: true - - registry.npmjs.org/@webassemblyjs/helper-wasm-section/1.11.1: - resolution: {integrity: sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz} - name: '@webassemblyjs/helper-wasm-section' - version: 1.11.1 - dependencies: - '@webassemblyjs/ast': registry.npmjs.org/@webassemblyjs/ast/1.11.1 - '@webassemblyjs/helper-buffer': registry.npmjs.org/@webassemblyjs/helper-buffer/1.11.1 - '@webassemblyjs/helper-wasm-bytecode': registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/1.11.1 - '@webassemblyjs/wasm-gen': registry.npmjs.org/@webassemblyjs/wasm-gen/1.11.1 - dev: true - - registry.npmjs.org/@webassemblyjs/ieee754/1.11.1: - resolution: {integrity: sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz} - name: '@webassemblyjs/ieee754' - version: 1.11.1 - dependencies: - '@xtuc/ieee754': registry.npmjs.org/@xtuc/ieee754/1.2.0 - dev: true - - registry.npmjs.org/@webassemblyjs/leb128/1.11.1: - resolution: {integrity: sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz} - name: '@webassemblyjs/leb128' - version: 1.11.1 - dependencies: - '@xtuc/long': registry.npmjs.org/@xtuc/long/4.2.2 - dev: true - - registry.npmjs.org/@webassemblyjs/utf8/1.11.1: - resolution: {integrity: sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz} - name: '@webassemblyjs/utf8' - version: 1.11.1 - dev: true - - registry.npmjs.org/@webassemblyjs/wasm-edit/1.11.1: - resolution: {integrity: sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz} - name: '@webassemblyjs/wasm-edit' - version: 1.11.1 - dependencies: - '@webassemblyjs/ast': registry.npmjs.org/@webassemblyjs/ast/1.11.1 - '@webassemblyjs/helper-buffer': registry.npmjs.org/@webassemblyjs/helper-buffer/1.11.1 - '@webassemblyjs/helper-wasm-bytecode': registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/1.11.1 - '@webassemblyjs/helper-wasm-section': registry.npmjs.org/@webassemblyjs/helper-wasm-section/1.11.1 - '@webassemblyjs/wasm-gen': registry.npmjs.org/@webassemblyjs/wasm-gen/1.11.1 - '@webassemblyjs/wasm-opt': registry.npmjs.org/@webassemblyjs/wasm-opt/1.11.1 - '@webassemblyjs/wasm-parser': registry.npmjs.org/@webassemblyjs/wasm-parser/1.11.1 - '@webassemblyjs/wast-printer': registry.npmjs.org/@webassemblyjs/wast-printer/1.11.1 - dev: true - - registry.npmjs.org/@webassemblyjs/wasm-gen/1.11.1: - resolution: {integrity: sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz} - name: '@webassemblyjs/wasm-gen' - version: 1.11.1 - dependencies: - '@webassemblyjs/ast': registry.npmjs.org/@webassemblyjs/ast/1.11.1 - '@webassemblyjs/helper-wasm-bytecode': registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/1.11.1 - '@webassemblyjs/ieee754': registry.npmjs.org/@webassemblyjs/ieee754/1.11.1 - '@webassemblyjs/leb128': registry.npmjs.org/@webassemblyjs/leb128/1.11.1 - '@webassemblyjs/utf8': registry.npmjs.org/@webassemblyjs/utf8/1.11.1 - dev: true - - registry.npmjs.org/@webassemblyjs/wasm-opt/1.11.1: - resolution: {integrity: sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz} - name: '@webassemblyjs/wasm-opt' - version: 1.11.1 - dependencies: - '@webassemblyjs/ast': registry.npmjs.org/@webassemblyjs/ast/1.11.1 - '@webassemblyjs/helper-buffer': registry.npmjs.org/@webassemblyjs/helper-buffer/1.11.1 - '@webassemblyjs/wasm-gen': registry.npmjs.org/@webassemblyjs/wasm-gen/1.11.1 - '@webassemblyjs/wasm-parser': registry.npmjs.org/@webassemblyjs/wasm-parser/1.11.1 - dev: true - - registry.npmjs.org/@webassemblyjs/wasm-parser/1.11.1: - resolution: {integrity: sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz} - name: '@webassemblyjs/wasm-parser' - version: 1.11.1 - dependencies: - '@webassemblyjs/ast': registry.npmjs.org/@webassemblyjs/ast/1.11.1 - '@webassemblyjs/helper-api-error': registry.npmjs.org/@webassemblyjs/helper-api-error/1.11.1 - '@webassemblyjs/helper-wasm-bytecode': registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/1.11.1 - '@webassemblyjs/ieee754': registry.npmjs.org/@webassemblyjs/ieee754/1.11.1 - '@webassemblyjs/leb128': registry.npmjs.org/@webassemblyjs/leb128/1.11.1 - '@webassemblyjs/utf8': registry.npmjs.org/@webassemblyjs/utf8/1.11.1 - dev: true - - registry.npmjs.org/@webassemblyjs/wast-printer/1.11.1: - resolution: {integrity: sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz} - name: '@webassemblyjs/wast-printer' - version: 1.11.1 - dependencies: - '@webassemblyjs/ast': registry.npmjs.org/@webassemblyjs/ast/1.11.1 - '@xtuc/long': registry.npmjs.org/@xtuc/long/4.2.2 - dev: true - - registry.npmjs.org/@xtuc/ieee754/1.2.0: - resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz} - name: '@xtuc/ieee754' - version: 1.2.0 - dev: true - - registry.npmjs.org/@xtuc/long/4.2.2: - resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz} - name: '@xtuc/long' - version: 4.2.2 - dev: true - - registry.npmjs.org/acorn-import-assertions/1.8.0_acorn@8.8.0: - resolution: {integrity: sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz} - id: registry.npmjs.org/acorn-import-assertions/1.8.0 - name: acorn-import-assertions - version: 1.8.0 - peerDependencies: - acorn: ^8 - dependencies: - acorn: registry.npmjs.org/acorn/8.8.0 - dev: true - - registry.npmjs.org/acorn/8.8.0: - resolution: {integrity: sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz} - name: acorn - version: 8.8.0 - engines: {node: '>=0.4.0'} - hasBin: true - dev: true - - registry.npmjs.org/ajv-keywords/3.5.2_ajv@6.12.6: - resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz} - id: registry.npmjs.org/ajv-keywords/3.5.2 - name: ajv-keywords - version: 3.5.2 - peerDependencies: - ajv: ^6.9.1 - dependencies: - ajv: registry.npmjs.org/ajv/6.12.6 - dev: true - - registry.npmjs.org/ajv/6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz} - name: ajv - version: 6.12.6 - dependencies: - fast-deep-equal: registry.npmjs.org/fast-deep-equal/3.1.3 - fast-json-stable-stringify: registry.npmjs.org/fast-json-stable-stringify/2.1.0 - json-schema-traverse: registry.npmjs.org/json-schema-traverse/0.4.1 - uri-js: registry.npmjs.org/uri-js/4.4.1 - dev: true - - registry.npmjs.org/ansi-styles/3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz} - name: ansi-styles - version: 3.2.1 - engines: {node: '>=4'} - dependencies: - color-convert: registry.npmjs.org/color-convert/1.9.3 - - registry.npmjs.org/browserslist/4.21.4: - resolution: {integrity: sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz} - name: browserslist - version: 4.21.4 - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - dependencies: - caniuse-lite: registry.npmjs.org/caniuse-lite/1.0.30001408 - electron-to-chromium: registry.npmjs.org/electron-to-chromium/1.4.256 - node-releases: registry.npmjs.org/node-releases/2.0.6 - update-browserslist-db: registry.npmjs.org/update-browserslist-db/1.0.9_browserslist@4.21.4 - - registry.npmjs.org/buffer-from/1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz} - name: buffer-from - version: 1.1.2 - dev: true - - registry.npmjs.org/caniuse-lite/1.0.30001408: - resolution: {integrity: sha512-DdUCktgMSM+1ndk9EFMZcavsGszV7zxV9O7MtOHniTa/iyAIwJCF0dFVBdU9SijJbfh29hC9bCs07wu8pjnGJQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001408.tgz} - name: caniuse-lite - version: 1.0.30001408 - - registry.npmjs.org/chalk/2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz} - name: chalk - version: 2.4.2 - engines: {node: '>=4'} - dependencies: - ansi-styles: registry.npmjs.org/ansi-styles/3.2.1 - escape-string-regexp: registry.npmjs.org/escape-string-regexp/1.0.5 - supports-color: registry.npmjs.org/supports-color/5.5.0 - - registry.npmjs.org/chrome-trace-event/1.0.3: - resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz} - name: chrome-trace-event - version: 1.0.3 - engines: {node: '>=6.0'} - dev: true - - registry.npmjs.org/color-convert/1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz} - name: color-convert - version: 1.9.3 - dependencies: - color-name: registry.npmjs.org/color-name/1.1.3 - - registry.npmjs.org/color-name/1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz} - name: color-name - version: 1.1.3 - - registry.npmjs.org/commander/2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/commander/-/commander-2.20.3.tgz} - name: commander - version: 2.20.3 - dev: true - - registry.npmjs.org/convert-source-map/1.8.0: - resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz} - name: convert-source-map - version: 1.8.0 - dependencies: - safe-buffer: registry.npmjs.org/safe-buffer/5.1.2 - - registry.npmjs.org/debug/4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/debug/-/debug-4.3.4.tgz} - name: debug - version: 4.3.4 - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: registry.npmjs.org/ms/2.1.2 - registry.npmjs.org/dom-serializer/0.2.2: resolution: {integrity: sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz} name: dom-serializer @@ -11737,21 +11379,6 @@ packages: domhandler: registry.npmjs.org/domhandler/5.0.3 dev: false - registry.npmjs.org/electron-to-chromium/1.4.256: - resolution: {integrity: sha512-x+JnqyluoJv8I0U9gVe+Sk2st8vF0CzMt78SXxuoWCooLLY2k5VerIBdpvG7ql6GKI4dzNnPjmqgDJ76EdaAKw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.256.tgz} - name: electron-to-chromium - version: 1.4.256 - - registry.npmjs.org/enhanced-resolve/5.10.0: - resolution: {integrity: sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz} - name: enhanced-resolve - version: 5.10.0 - engines: {node: '>=10.13.0'} - dependencies: - graceful-fs: registry.npmjs.org/graceful-fs/4.2.10 - tapable: registry.npmjs.org/tapable/2.2.1 - dev: true - registry.npmjs.org/entities/2.2.0: resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/entities/-/entities-2.2.0.tgz} name: entities @@ -11764,121 +11391,6 @@ packages: engines: {node: '>=0.12'} dev: false - registry.npmjs.org/es-module-lexer/0.9.3: - resolution: {integrity: sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz} - name: es-module-lexer - version: 0.9.3 - dev: true - - registry.npmjs.org/escalade/3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz} - name: escalade - version: 3.1.1 - engines: {node: '>=6'} - - registry.npmjs.org/escape-string-regexp/1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz} - name: escape-string-regexp - version: 1.0.5 - engines: {node: '>=0.8.0'} - - registry.npmjs.org/eslint-scope/5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz} - name: eslint-scope - version: 5.1.1 - engines: {node: '>=8.0.0'} - dependencies: - esrecurse: registry.npmjs.org/esrecurse/4.3.0 - estraverse: registry.npmjs.org/estraverse/4.3.0 - dev: true - - registry.npmjs.org/esrecurse/4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz} - name: esrecurse - version: 4.3.0 - engines: {node: '>=4.0'} - dependencies: - estraverse: registry.npmjs.org/estraverse/5.3.0 - dev: true - - registry.npmjs.org/estraverse/4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz} - name: estraverse - version: 4.3.0 - engines: {node: '>=4.0'} - dev: true - - registry.npmjs.org/estraverse/5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz} - name: estraverse - version: 5.3.0 - engines: {node: '>=4.0'} - dev: true - - registry.npmjs.org/events/3.3.0: - resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/events/-/events-3.3.0.tgz} - name: events - version: 3.3.0 - engines: {node: '>=0.8.x'} - dev: true - - registry.npmjs.org/fast-deep-equal/3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz} - name: fast-deep-equal - version: 3.1.3 - dev: true - - registry.npmjs.org/fast-json-stable-stringify/2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz} - name: fast-json-stable-stringify - version: 2.1.0 - dev: true - - registry.npmjs.org/fsevents/2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz} - name: fsevents - version: 2.3.2 - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - optional: true - - registry.npmjs.org/gensync/1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz} - name: gensync - version: 1.0.0-beta.2 - engines: {node: '>=6.9.0'} - - registry.npmjs.org/glob-to-regexp/0.4.1: - resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz} - name: glob-to-regexp - version: 0.4.1 - dev: true - - registry.npmjs.org/globals/11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/globals/-/globals-11.12.0.tgz} - name: globals - version: 11.12.0 - engines: {node: '>=4'} - - registry.npmjs.org/graceful-fs/4.2.10: - resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz} - name: graceful-fs - version: 4.2.10 - - registry.npmjs.org/has-flag/3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz} - name: has-flag - version: 3.0.0 - engines: {node: '>=4'} - - registry.npmjs.org/has-flag/4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz} - name: has-flag - version: 4.0.0 - engines: {node: '>=8'} - dev: true - registry.npmjs.org/html-dom-parser/3.1.3: resolution: {integrity: sha512-fI0yyNlIeSboxU+jnrA4v8qj4+M8SI9/q6AKYdwCY2qki22UtKCDTxvagHniECu7sa5/o2zFRdLleA67035lsA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/html-dom-parser/-/html-dom-parser-3.1.3.tgz} name: html-dom-parser @@ -11930,170 +11442,12 @@ packages: version: 0.1.1 dev: false - registry.npmjs.org/jest-worker/27.5.1: - resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz} - name: jest-worker - version: 27.5.1 - engines: {node: '>= 10.13.0'} - dependencies: - '@types/node': registry.npmjs.org/@types/node/16.11.59 - merge-stream: registry.npmjs.org/merge-stream/2.0.0 - supports-color: registry.npmjs.org/supports-color/8.1.1 - dev: true - - registry.npmjs.org/js-tokens/4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz} - name: js-tokens - version: 4.0.0 - - registry.npmjs.org/jsesc/2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz} - name: jsesc - version: 2.5.2 - engines: {node: '>=4'} - hasBin: true - - registry.npmjs.org/json-parse-even-better-errors/2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz} - name: json-parse-even-better-errors - version: 2.3.1 - dev: true - - registry.npmjs.org/json-schema-traverse/0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz} - name: json-schema-traverse - version: 0.4.1 - dev: true - - registry.npmjs.org/json5/2.2.1: - resolution: {integrity: sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/json5/-/json5-2.2.1.tgz} - name: json5 - version: 2.2.1 - engines: {node: '>=6'} - hasBin: true - - registry.npmjs.org/loader-runner/4.3.0: - resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz} - name: loader-runner - version: 4.3.0 - engines: {node: '>=6.11.5'} - dev: true - - registry.npmjs.org/merge-stream/2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz} - name: merge-stream - version: 2.0.0 - dev: true - - registry.npmjs.org/mime-db/1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz} - name: mime-db - version: 1.52.0 - engines: {node: '>= 0.6'} - dev: true - - registry.npmjs.org/mime-types/2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz} - name: mime-types - version: 2.1.35 - engines: {node: '>= 0.6'} - dependencies: - mime-db: registry.npmjs.org/mime-db/1.52.0 - dev: true - - registry.npmjs.org/ms/2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/ms/-/ms-2.1.2.tgz} - name: ms - version: 2.1.2 - - registry.npmjs.org/neo-async/2.6.2: - resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz} - name: neo-async - version: 2.6.2 - dev: true - - registry.npmjs.org/node-releases/2.0.6: - resolution: {integrity: sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz} - name: node-releases - version: 2.0.6 - - registry.npmjs.org/picocolors/1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz} - name: picocolors - version: 1.0.0 - - registry.npmjs.org/punycode/2.1.1: - resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz} - name: punycode - version: 2.1.1 - engines: {node: '>=6'} - dev: true - - registry.npmjs.org/randombytes/2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz} - name: randombytes - version: 2.1.0 - dependencies: - safe-buffer: registry.npmjs.org/safe-buffer/5.2.1 - dev: true - registry.npmjs.org/react-property/2.0.0: resolution: {integrity: sha512-kzmNjIgU32mO4mmH5+iUyrqlpFQhF8K2k7eZ4fdLSOPFrD1XgEuSBv9LDEgxRXTMBqMd8ppT0x6TIzqE5pdGdw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/react-property/-/react-property-2.0.0.tgz} name: react-property version: 2.0.0 dev: false - registry.npmjs.org/safe-buffer/5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz} - name: safe-buffer - version: 5.1.2 - - registry.npmjs.org/safe-buffer/5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz} - name: safe-buffer - version: 5.2.1 - dev: true - - registry.npmjs.org/schema-utils/3.1.1: - resolution: {integrity: sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz} - name: schema-utils - version: 3.1.1 - engines: {node: '>= 10.13.0'} - dependencies: - '@types/json-schema': registry.npmjs.org/@types/json-schema/7.0.11 - ajv: registry.npmjs.org/ajv/6.12.6 - ajv-keywords: registry.npmjs.org/ajv-keywords/3.5.2_ajv@6.12.6 - dev: true - - registry.npmjs.org/semver/6.3.0: - resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/semver/-/semver-6.3.0.tgz} - name: semver - version: 6.3.0 - hasBin: true - - registry.npmjs.org/serialize-javascript/6.0.0: - resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz} - name: serialize-javascript - version: 6.0.0 - dependencies: - randombytes: registry.npmjs.org/randombytes/2.1.0 - dev: true - - registry.npmjs.org/source-map-support/0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz} - name: source-map-support - version: 0.5.21 - dependencies: - buffer-from: registry.npmjs.org/buffer-from/1.1.2 - source-map: registry.npmjs.org/source-map/0.6.1 - dev: true - - registry.npmjs.org/source-map/0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz} - name: source-map - version: 0.6.1 - engines: {node: '>=0.10.0'} - registry.npmjs.org/style-to-js/1.1.3: resolution: {integrity: sha512-zKI5gN/zb7LS/Vm0eUwjmjrXWw8IMtyA8aPBJZdYiQTXj4+wQ3IucOLIOnF7zCHxvW8UhIGh/uZh/t9zEHXNTQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.3.tgz} name: style-to-js @@ -12109,153 +11463,3 @@ packages: dependencies: inline-style-parser: registry.npmjs.org/inline-style-parser/0.1.1 dev: false - - registry.npmjs.org/supports-color/5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz} - name: supports-color - version: 5.5.0 - engines: {node: '>=4'} - dependencies: - has-flag: registry.npmjs.org/has-flag/3.0.0 - - registry.npmjs.org/supports-color/8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz} - name: supports-color - version: 8.1.1 - engines: {node: '>=10'} - dependencies: - has-flag: registry.npmjs.org/has-flag/4.0.0 - dev: true - - registry.npmjs.org/tapable/2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz} - name: tapable - version: 2.2.1 - engines: {node: '>=6'} - dev: true - - registry.npmjs.org/terser-webpack-plugin/5.3.6_webpack@5.74.0: - resolution: {integrity: sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz} - id: registry.npmjs.org/terser-webpack-plugin/5.3.6 - name: terser-webpack-plugin - version: 5.3.6 - 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': registry.npmjs.org/@jridgewell/trace-mapping/0.3.15 - jest-worker: registry.npmjs.org/jest-worker/27.5.1 - schema-utils: registry.npmjs.org/schema-utils/3.1.1 - serialize-javascript: registry.npmjs.org/serialize-javascript/6.0.0 - terser: registry.npmjs.org/terser/5.15.0 - webpack: registry.npmjs.org/webpack/5.74.0 - dev: true - - registry.npmjs.org/terser/5.15.0: - resolution: {integrity: sha512-L1BJiXVmheAQQy+as0oF3Pwtlo4s3Wi1X2zNZ2NxOB4wx9bdS9Vk67XQENLFdLYGCK/Z2di53mTj/hBafR+dTA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/terser/-/terser-5.15.0.tgz} - name: terser - version: 5.15.0 - engines: {node: '>=10'} - hasBin: true - dependencies: - '@jridgewell/source-map': registry.npmjs.org/@jridgewell/source-map/0.3.2 - acorn: registry.npmjs.org/acorn/8.8.0 - commander: registry.npmjs.org/commander/2.20.3 - source-map-support: registry.npmjs.org/source-map-support/0.5.21 - dev: true - - registry.npmjs.org/to-fast-properties/2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz} - name: to-fast-properties - version: 2.0.0 - engines: {node: '>=4'} - - registry.npmjs.org/update-browserslist-db/1.0.9_browserslist@4.21.4: - resolution: {integrity: sha512-/xsqn21EGVdXI3EXSum1Yckj3ZVZugqyOZQ/CxYPBD/R+ko9NSUScf8tFF4dOKY+2pvSSJA/S+5B8s4Zr4kyvg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.9.tgz} - id: registry.npmjs.org/update-browserslist-db/1.0.9 - name: update-browserslist-db - version: 1.0.9 - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - dependencies: - browserslist: registry.npmjs.org/browserslist/4.21.4 - escalade: registry.npmjs.org/escalade/3.1.1 - picocolors: registry.npmjs.org/picocolors/1.0.0 - - registry.npmjs.org/uri-js/4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz} - name: uri-js - version: 4.4.1 - dependencies: - punycode: registry.npmjs.org/punycode/2.1.1 - dev: true - - registry.npmjs.org/watchpack/2.4.0: - resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz} - name: watchpack - version: 2.4.0 - engines: {node: '>=10.13.0'} - dependencies: - glob-to-regexp: registry.npmjs.org/glob-to-regexp/0.4.1 - graceful-fs: registry.npmjs.org/graceful-fs/4.2.10 - dev: true - - registry.npmjs.org/webpack-sources/3.2.3: - resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz} - name: webpack-sources - version: 3.2.3 - engines: {node: '>=10.13.0'} - dev: true - - registry.npmjs.org/webpack/5.74.0: - resolution: {integrity: sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz} - name: webpack - version: 5.74.0 - engines: {node: '>=10.13.0'} - hasBin: true - peerDependencies: - webpack-cli: '*' - peerDependenciesMeta: - webpack-cli: - optional: true - dependencies: - '@types/eslint-scope': registry.npmjs.org/@types/eslint-scope/3.7.4 - '@types/estree': registry.npmjs.org/@types/estree/0.0.51 - '@webassemblyjs/ast': registry.npmjs.org/@webassemblyjs/ast/1.11.1 - '@webassemblyjs/wasm-edit': registry.npmjs.org/@webassemblyjs/wasm-edit/1.11.1 - '@webassemblyjs/wasm-parser': registry.npmjs.org/@webassemblyjs/wasm-parser/1.11.1 - acorn: registry.npmjs.org/acorn/8.8.0 - acorn-import-assertions: registry.npmjs.org/acorn-import-assertions/1.8.0_acorn@8.8.0 - browserslist: registry.npmjs.org/browserslist/4.21.4 - chrome-trace-event: registry.npmjs.org/chrome-trace-event/1.0.3 - enhanced-resolve: registry.npmjs.org/enhanced-resolve/5.10.0 - es-module-lexer: registry.npmjs.org/es-module-lexer/0.9.3 - eslint-scope: registry.npmjs.org/eslint-scope/5.1.1 - events: registry.npmjs.org/events/3.3.0 - glob-to-regexp: registry.npmjs.org/glob-to-regexp/0.4.1 - graceful-fs: registry.npmjs.org/graceful-fs/4.2.10 - json-parse-even-better-errors: registry.npmjs.org/json-parse-even-better-errors/2.3.1 - loader-runner: registry.npmjs.org/loader-runner/4.3.0 - mime-types: registry.npmjs.org/mime-types/2.1.35 - neo-async: registry.npmjs.org/neo-async/2.6.2 - schema-utils: registry.npmjs.org/schema-utils/3.1.1 - tapable: registry.npmjs.org/tapable/2.2.1 - terser-webpack-plugin: registry.npmjs.org/terser-webpack-plugin/5.3.6_webpack@5.74.0 - watchpack: registry.npmjs.org/watchpack/2.4.0 - webpack-sources: registry.npmjs.org/webpack-sources/3.2.3 - transitivePeerDependencies: - - '@swc/core' - - esbuild - - uglify-js - dev: true diff --git a/ui/public/index.html b/ui/public/index.html index d4bd25a0..3e1eddd8 100644 --- a/ui/public/index.html +++ b/ui/public/index.html @@ -4,7 +4,7 @@ - + diff --git a/ui/src/components/Comment/components/Form/index.tsx b/ui/src/components/Comment/components/Form/index.tsx index bc93ddb4..66e6596f 100644 --- a/ui/src/components/Comment/components/Form/index.tsx +++ b/ui/src/components/Comment/components/Form/index.tsx @@ -5,7 +5,7 @@ import { useTranslation } from 'react-i18next'; import classNames from 'classnames'; import { TextArea, Mentions } from '@/components'; -import { usePageUsers } from '@/hooks'; +import { usePageUsers, usePromptWithUnload } from '@/hooks'; const Index = ({ className = '', @@ -16,13 +16,19 @@ const Index = ({ mode, }) => { const [value, setValue] = useState(''); + const [immData, setImmData] = useState(''); const pageUsers = usePageUsers(); const { t } = useTranslation('translation', { keyPrefix: 'comment' }); const [validationErrorMsg, setValidationErrorMsg] = useState(''); + + usePromptWithUnload({ + when: type === 'edit' ? immData !== value : Boolean(value), + }); useEffect(() => { if (!initialValue) { return; } + setImmData(initialValue); setValue(initialValue); }, [initialValue]); diff --git a/ui/src/components/Comment/components/Reply/index.tsx b/ui/src/components/Comment/components/Reply/index.tsx index 3048c3a4..c0e76927 100644 --- a/ui/src/components/Comment/components/Reply/index.tsx +++ b/ui/src/components/Comment/components/Reply/index.tsx @@ -5,13 +5,18 @@ import { useTranslation } from 'react-i18next'; import classNames from 'classnames'; import { TextArea, Mentions } from '@/components'; -import { usePageUsers } from '@/hooks'; +import { usePageUsers, usePromptWithUnload } from '@/hooks'; const Index = ({ userName, onSendReply, onCancel, mode }) => { const [value, setValue] = useState(''); const pageUsers = usePageUsers(); const { t } = useTranslation('translation', { keyPrefix: 'comment' }); const [validationErrorMsg, setValidationErrorMsg] = useState(''); + + usePromptWithUnload({ + when: Boolean(value), + }); + const handleChange = (e) => { setValue(e.target.value); }; diff --git a/ui/src/hooks/index.ts b/ui/src/hooks/index.ts index b7ee17ea..8144a4f0 100644 --- a/ui/src/hooks/index.ts +++ b/ui/src/hooks/index.ts @@ -8,6 +8,7 @@ import useChangeUserRoleModal from './useChangeUserRoleModal'; import useUserModal from './useUserModal'; import useChangePasswordModal from './useChangePasswordModal'; import usePageTags from './usePageTags'; +import usePromptWithUnload from './usePrompt'; export { useTagModal, @@ -20,4 +21,5 @@ export { useUserModal, useChangePasswordModal, usePageTags, + usePromptWithUnload, }; diff --git a/ui/src/hooks/usePrompt/index.tsx b/ui/src/hooks/usePrompt/index.tsx new file mode 100644 index 00000000..9b34db07 --- /dev/null +++ b/ui/src/hooks/usePrompt/index.tsx @@ -0,0 +1,40 @@ +import { useCallback } from 'react'; +import { + useBeforeUnload, + unstable_usePrompt as usePrompt, +} from 'react-router-dom'; +import { useTranslation } from 'react-i18next'; + +// https://gist.github.com/chaance/2f3c14ec2351a175024f62fd6ba64aa6 +// The link above is an example of implementing usePromt with useBlocer. +interface PromptProps { + when: boolean; + beforeUnload?: boolean; +} + +const usePromptWithUnload = ({ + when = false, + beforeUnload = true, +}: PromptProps) => { + const { t } = useTranslation('translation', { keyPrefix: 'prompt' }); + usePrompt({ + when, + message: `${t('leave_page')} ${t('changes_not_save')}`, + }); + + useBeforeUnload( + useCallback( + (event) => { + if (beforeUnload && when) { + const msg = t('changes_not_save'); + event.preventDefault(); + event.returnValue = msg; + } + }, + [when, beforeUnload], + ), + { capture: true }, + ); +}; + +export default usePromptWithUnload; diff --git a/ui/src/pages/Questions/Ask/index.tsx b/ui/src/pages/Questions/Ask/index.tsx index da0897f3..7bf73135 100644 --- a/ui/src/pages/Questions/Ask/index.tsx +++ b/ui/src/pages/Questions/Ask/index.tsx @@ -5,8 +5,9 @@ import { useTranslation } from 'react-i18next'; import dayjs from 'dayjs'; import classNames from 'classnames'; +import { isEqual } from 'lodash'; -import { usePageTags } from '@/hooks'; +import { usePageTags, usePromptWithUnload } from '@/hooks'; import { Editor, EditorRef, TagSelector } from '@/components'; import type * as Type from '@/common/interface'; import { @@ -60,7 +61,9 @@ const Ask = () => { }; const { t } = useTranslation('translation', { keyPrefix: 'ask' }); const [formData, setFormData] = useState(initFormData); + const [immData, setImmData] = useState(initFormData); const [checked, setCheckState] = useState(false); + const [contentChanged, setContentChanged] = useState(false); const [focusType, setForceType] = useState(''); const resetForm = () => { setFormData(initFormData); @@ -82,6 +85,40 @@ const Ask = () => { const { data: similarQuestions = { list: [] } } = useQueryQuestionByTitle( isEdit ? '' : formData.title.value, ); + + useEffect(() => { + const { title, tags, content, answer } = formData; + const { title: editTitle, tags: editTags, content: editContent } = immData; + + // edited + if (qid) { + if ( + editTitle.value !== title.value || + editContent.value !== content.value || + !isEqual( + editTags.value.map((v) => v.slug_name), + tags.value.map((v) => v.slug_name), + ) + ) { + setContentChanged(true); + } else { + setContentChanged(false); + } + return; + } + + // write + if (title.value || tags.value.length > 0 || content.value || answer.value) { + setContentChanged(true); + } else { + setContentChanged(false); + } + }, [formData]); + + usePromptWithUnload({ + when: contentChanged, + }); + useEffect(() => { if (!isEdit) { resetForm(); @@ -103,6 +140,7 @@ const Ask = () => { original_text: '', }; }); + setImmData({ ...formData }); setFormData({ ...formData }); }); }, [qid]); @@ -141,6 +179,7 @@ const Ask = () => { }); const handleSubmit = async (event: React.FormEvent) => { + setContentChanged(false); event.preventDefault(); event.stopPropagation(); @@ -206,6 +245,7 @@ const Ask = () => { const index = e.target.value; const revision = revisions[index]; formData.content.value = revision.content.content; + setImmData({ ...formData }); setFormData({ ...formData }); }; const bool = similarQuestions.length > 0 && !isEdit; diff --git a/ui/src/pages/Questions/Detail/components/WriteAnswer/index.tsx b/ui/src/pages/Questions/Detail/components/WriteAnswer/index.tsx index 44cfa2cd..6886a36c 100644 --- a/ui/src/pages/Questions/Detail/components/WriteAnswer/index.tsx +++ b/ui/src/pages/Questions/Detail/components/WriteAnswer/index.tsx @@ -5,6 +5,7 @@ import { useTranslation } from 'react-i18next'; import { marked } from 'marked'; import classNames from 'classnames'; +import { usePromptWithUnload } from '@/hooks'; import { Editor, Modal, TextArea } from '@/components'; import { FormDataType } from '@/common/interface'; import { postAnswer } from '@/services'; @@ -35,6 +36,10 @@ const Index: FC = ({ visible = false, data, callback }) => { const [focusType, setFocusType] = useState(''); const [editorFocusState, setEditorFocusState] = useState(false); + usePromptWithUnload({ + when: Boolean(formData.content.value), + }); + const checkValidated = (): boolean => { let bol = true; const { content } = formData; diff --git a/ui/src/pages/Questions/EditAnswer/index.tsx b/ui/src/pages/Questions/EditAnswer/index.tsx index 411affbd..680547f0 100644 --- a/ui/src/pages/Questions/EditAnswer/index.tsx +++ b/ui/src/pages/Questions/EditAnswer/index.tsx @@ -1,4 +1,4 @@ -import React, { useState, useRef } from 'react'; +import React, { useState, useRef, useEffect } from 'react'; import { Container, Row, Col, Form, Button, Card } from 'react-bootstrap'; import { useParams, useNavigate } from 'react-router-dom'; import { useTranslation } from 'react-i18next'; @@ -7,7 +7,7 @@ import dayjs from 'dayjs'; import classNames from 'classnames'; import { handleFormError } from '@/utils'; -import { usePageTags } from '@/hooks'; +import { usePageTags, usePromptWithUnload } from '@/hooks'; import { pathFactory } from '@/router/pathFactory'; import { Editor, EditorRef, Icon } from '@/components'; import type * as Type from '@/common/interface'; @@ -44,6 +44,8 @@ const Index = () => { const { data } = useQueryAnswerInfo(aid); const [formData, setFormData] = useState(initFormData); + const [immData, setImmData] = useState(initFormData); + const [contentChanged, setContentChanged] = useState(false); initFormData.content.value = data?.info.content || ''; @@ -55,6 +57,19 @@ const Index = () => { const questionContentRef = useRef(null); + usePromptWithUnload({ + when: contentChanged, + }); + + useEffect(() => { + const { content, description } = formData; + if (immData.content.value !== content.value || description.value) { + setContentChanged(true); + } else { + setContentChanged(false); + } + }, [formData.content.value, formData.description.value]); + const handleAnswerChange = (value: string) => setFormData({ ...formData, @@ -93,7 +108,9 @@ const Index = () => { return bol; }; - const handleSubmit = (event: React.FormEvent) => { + const handleSubmit = async (event: React.FormEvent) => { + setContentChanged(false); + event.preventDefault(); event.stopPropagation(); if (!checkValidated()) { @@ -131,6 +148,7 @@ const Index = () => { const index = e.target.value; const revision = revisions[index]; formData.content.value = revision.content.content; + setImmData({ ...formData }); setFormData({ ...formData }); }; diff --git a/ui/src/pages/Tags/Edit/index.tsx b/ui/src/pages/Tags/Edit/index.tsx index 1236db73..571796dd 100644 --- a/ui/src/pages/Tags/Edit/index.tsx +++ b/ui/src/pages/Tags/Edit/index.tsx @@ -1,4 +1,4 @@ -import React, { useState, useRef } from 'react'; +import React, { useState, useRef, useEffect } from 'react'; import { Container, Row, Col, Form, Button, Card } from 'react-bootstrap'; import { useParams, useNavigate } from 'react-router-dom'; import { useTranslation } from 'react-i18next'; @@ -6,7 +6,7 @@ import { useTranslation } from 'react-i18next'; import dayjs from 'dayjs'; import classNames from 'classnames'; -import { usePageTags } from '@/hooks'; +import { usePageTags, usePromptWithUnload } from '@/hooks'; import { Editor, EditorRef } from '@/components'; import { loggedUserInfoStore } from '@/stores'; import type * as Type from '@/common/interface'; @@ -40,6 +40,7 @@ const initFormData = { errorMsg: '', }, }; + const Index = () => { const { is_admin = false } = loggedUserInfoStore((state) => state.user); @@ -54,11 +55,45 @@ const Index = () => { initFormData.slugName.value = data?.slug_name || ''; initFormData.description.value = data?.original_text || ''; const [formData, setFormData] = useState(initFormData); + const [immData, setImmData] = useState(initFormData); + const [contentChanged, setContentChanged] = useState(false); const editorRef = useRef({ getHtml: () => '', }); + usePromptWithUnload({ + when: contentChanged, + }); + + useEffect(() => { + const { displayName, slugName, description, editSummary } = formData; + const { + displayName: display_name, + slugName: slug_name, + description: original_text, + } = immData; + if (!display_name || !slug_name || !original_text) { + return; + } + + if ( + display_name.value !== displayName.value || + slug_name.value !== slugName.value || + original_text.value !== description.value || + editSummary.value + ) { + setContentChanged(true); + } else { + setContentChanged(false); + } + }, [ + formData.displayName.value, + formData.slugName.value, + formData.description.value, + formData.editSummary.value, + ]); + const handleDescriptionChange = (value: string) => setFormData({ ...formData, @@ -91,6 +126,8 @@ const Index = () => { }; const handleSubmit = (event: React.FormEvent) => { + setContentChanged(false); + event.preventDefault(); event.stopPropagation(); if (!checkValidated()) { @@ -117,6 +154,9 @@ const Index = () => { const index = e.target.value; const revision = revisions[index]; formData.description.value = revision.content.original_text; + formData.displayName.value = revision.content.display_name; + formData.slugName.value = revision.content.slug_name; + setImmData({ ...formData }); setFormData({ ...formData }); }; diff --git a/ui/src/router/routes.ts b/ui/src/router/routes.ts index 12d6a51b..d2455a17 100644 --- a/ui/src/router/routes.ts +++ b/ui/src/router/routes.ts @@ -1,9 +1,9 @@ -import { RouteObject } from 'react-router-dom'; +import type { RouteObject } from 'react-router-dom'; import { guard } from '@/utils'; import type { TGuardFunc } from '@/utils/guard'; -export interface RouteNode extends RouteObject { +export type RouteNode = RouteObject & { page: string; children?: RouteNode[]; /** @@ -14,7 +14,7 @@ export interface RouteNode extends RouteObject { * then auto redirect route to the `redirect` target. */ guard?: TGuardFunc; -} +}; const routes: RouteNode[] = [ { @@ -113,6 +113,7 @@ const routes: RouteNode[] = [ children: [ { index: true, + // @ts-ignore page: 'pages/Users/Settings/Profile', }, { @@ -237,6 +238,7 @@ const routes: RouteNode[] = [ children: [ { index: true, + // @ts-ignore page: 'pages/Admin/Dashboard', }, { @@ -329,6 +331,7 @@ const routes: RouteNode[] = [ children: [ { path: 'tos', + // @ts-ignore page: 'pages/Legal/Tos', }, { From 22551f8ce5df126ed6d8afbf5ecd01c4112809cf Mon Sep 17 00:00:00 2001 From: shuai Date: Thu, 16 Feb 2023 14:40:33 +0800 Subject: [PATCH 2/4] fix: update admin general settings --- ui/src/pages/Admin/General/index.tsx | 12 +++++++++++- ui/src/router/routes.ts | 1 + ui/src/utils/guard.ts | 1 + 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/ui/src/pages/Admin/General/index.tsx b/ui/src/pages/Admin/General/index.tsx index 8eae8493..b6a10162 100644 --- a/ui/src/pages/Admin/General/index.tsx +++ b/ui/src/pages/Admin/General/index.tsx @@ -92,6 +92,7 @@ const General: FC = () => { const [formData, setFormData] = useState( initFormData(schema), ); + const onSubmit = (evt) => { evt.preventDefault(); evt.stopPropagation(); @@ -104,11 +105,20 @@ const General: FC = () => { }; updateGeneralSetting(reqParams) - .then(() => { + .then((res) => { Toast.onShow({ msg: t('update', { keyPrefix: 'toast' }), variant: 'success', }); + if (res.name) { + formData.name.value = res.name; + formData.description.value = res.description; + formData.short_description.value = res.short_description; + formData.site_url.value = res.site_url; + formData.contact_email.value = res.contact_email; + } + + setFormData({ ...formData }); updateSiteInfo(reqParams); }) .catch((err) => { diff --git a/ui/src/router/routes.ts b/ui/src/router/routes.ts index d2455a17..1b6b4bbf 100644 --- a/ui/src/router/routes.ts +++ b/ui/src/router/routes.ts @@ -231,6 +231,7 @@ const routes: RouteNode[] = [ page: 'pages/Admin', loader: async () => { await guard.pullLoggedUser(true); + return null; }, guard: () => { return guard.admin(); diff --git a/ui/src/utils/guard.ts b/ui/src/utils/guard.ts index 5b592180..fa0ab910 100644 --- a/ui/src/utils/guard.ts +++ b/ui/src/utils/guard.ts @@ -85,6 +85,7 @@ export const pullLoggedUser = async (forceRePull = false) => { if (Date.now() - dedupeTimestamp < 1000 * 10) { return; } + dedupeTimestamp = Date.now(); const loggedUserInfo = await getLoggedUserInfo().catch((ex) => { dedupeTimestamp = 0; From 3b8aa38192d4845c0eb644e459efe5da395b6a3d Mon Sep 17 00:00:00 2001 From: shuai Date: Thu, 16 Feb 2023 14:56:22 +0800 Subject: [PATCH 3/4] fix: general setting filter XSS data --- ui/src/pages/Admin/General/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/src/pages/Admin/General/index.tsx b/ui/src/pages/Admin/General/index.tsx index b6a10162..e6f2c803 100644 --- a/ui/src/pages/Admin/General/index.tsx +++ b/ui/src/pages/Admin/General/index.tsx @@ -119,7 +119,7 @@ const General: FC = () => { } setFormData({ ...formData }); - updateSiteInfo(reqParams); + updateSiteInfo(res); }) .catch((err) => { if (err.isError) { From 077e626f91f6abc032aa10f4a34f803c39f581d0 Mon Sep 17 00:00:00 2001 From: haitaoo Date: Thu, 16 Feb 2023 16:34:50 +0800 Subject: [PATCH 4/4] refactor(router): Adaptation to new versions of routing node types --- ui/src/App.tsx | 4 ++-- ui/src/router/index.tsx | 8 ++++---- ui/src/router/routes.ts | 11 ++++++----- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/ui/src/App.tsx b/ui/src/App.tsx index 92e9da21..e1c48a4f 100644 --- a/ui/src/App.tsx +++ b/ui/src/App.tsx @@ -1,7 +1,7 @@ -import { RouterProvider } from 'react-router-dom'; +import { RouterProvider, createBrowserRouter } from 'react-router-dom'; import './i18n/init'; -import { routes, createBrowserRouter } from '@/router'; +import routes from '@/router'; function App() { const router = createBrowserRouter(routes); diff --git a/ui/src/router/index.tsx b/ui/src/router/index.tsx index b7eeabff..20f1b520 100644 --- a/ui/src/router/index.tsx +++ b/ui/src/router/index.tsx @@ -1,14 +1,14 @@ import { Suspense, lazy } from 'react'; -import { RouteObject, createBrowserRouter } from 'react-router-dom'; +import { RouteObject } from 'react-router-dom'; import Layout from '@/pages/Layout'; import ErrorBoundary from '@/pages/50X'; import baseRoutes, { RouteNode } from '@/router/routes'; import RouteGuard from '@/router/RouteGuard'; -const routes: RouteObject[] = []; +const routes: RouteNode[] = []; -const routeWrapper = (routeNodes: RouteNode[], root: RouteObject[]) => { +const routeWrapper = (routeNodes: RouteNode[], root: RouteNode[]) => { routeNodes.forEach((rn) => { if (rn.page === 'pages/Layout') { rn.element = rn.guard ? ( @@ -49,4 +49,4 @@ const routeWrapper = (routeNodes: RouteNode[], root: RouteObject[]) => { routeWrapper(baseRoutes, routes); -export { routes, createBrowserRouter }; +export default routes as RouteObject[]; diff --git a/ui/src/router/routes.ts b/ui/src/router/routes.ts index 1b6b4bbf..1d124e71 100644 --- a/ui/src/router/routes.ts +++ b/ui/src/router/routes.ts @@ -1,9 +1,13 @@ -import type { RouteObject } from 'react-router-dom'; +import type { IndexRouteObject, NonIndexRouteObject } from 'react-router-dom'; import { guard } from '@/utils'; import type { TGuardFunc } from '@/utils/guard'; -export type RouteNode = RouteObject & { +type IndexRouteNode = Omit; +type NonIndexRouteNode = Omit; +type UnionRouteNode = IndexRouteNode | NonIndexRouteNode; + +export type RouteNode = UnionRouteNode & { page: string; children?: RouteNode[]; /** @@ -113,7 +117,6 @@ const routes: RouteNode[] = [ children: [ { index: true, - // @ts-ignore page: 'pages/Users/Settings/Profile', }, { @@ -239,7 +242,6 @@ const routes: RouteNode[] = [ children: [ { index: true, - // @ts-ignore page: 'pages/Admin/Dashboard', }, { @@ -332,7 +334,6 @@ const routes: RouteNode[] = [ children: [ { path: 'tos', - // @ts-ignore page: 'pages/Legal/Tos', }, {