From a8d5da0635c599ba20190223b8ce0e04f427d687 Mon Sep 17 00:00:00 2001 From: Niklas Gruhn Date: Tue, 18 Jul 2023 18:58:02 +0200 Subject: [PATCH] feat(QrcodeStream): throw timeout error when camera won't load On iOS devices in PWA mode, QrcodeStream works initially, but after killing and restarting the PWA, all video elements fail to display camera streams. Looks like this is related to this WebKit issue: https://bugs.webkit.org/show_bug.cgi?id=252465 No workarounds at the time of writing. But as suggested in the thread we can put a timeout on the video elements to start loading. That way we can at least detect when the error occurs and throw an error event. Also this commit: 1. Makes the demo page PWA installable to reproduce this problem. 2. Renames the "DecodeAll" demo to "HandleErrors". The demo already is focused on error handling because it renders the error message instead of just printing to the console, which is particularly useful on mobile devices. Renaming the demo emphasizes that and hints user to use this demo for debugging. See #298 --- .github/ISSUE_TEMPLATE/bug_report.md | 2 +- .gitignore | 1 + CONTRIBUTING.md | 4 +- README.md | 10 +- .../demos/{DecodeAll.vue => HandleErrors.vue} | 19 +- .../components/demos/SwitchCamera.vue | 2 +- docs/.vitepress/components/demos/Torch.vue | 2 +- docs/.vitepress/config.ts | 45 +- docs/demos/{DecodeAll.md => HandleErrors.md} | 8 +- docs/public/pwa-192x192.png | Bin 0 -> 26062 bytes docs/public/pwa-512x512.png | Bin 0 -> 39910 bytes package.json | 4 +- pnpm-lock.yaml | 2408 ++++++++++++++++- src/components/QrcodeStream.vue | 153 +- src/misc/callforth.ts | 10 +- src/misc/camera.ts | 16 +- src/misc/errors.ts | 8 + vite.config.ts | 3 +- 18 files changed, 2568 insertions(+), 127 deletions(-) rename docs/.vitepress/components/demos/{DecodeAll.vue => HandleErrors.vue} (63%) rename docs/demos/{DecodeAll.md => HandleErrors.md} (58%) create mode 100644 docs/public/pwa-192x192.png create mode 100644 docs/public/pwa-512x512.png diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index e595d60a..822c55b1 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -8,7 +8,7 @@ assignees: '' --- **Describe the bug** -A clear and concise description of what the bug is. Can you reproduce this issue with [one of the demos](https://vue-qrcode-reader.netlify.app/demos/DecodeAll.html)? +A clear and concise description of what the bug is. Can you reproduce this issue with [one of the demos](https://vue-qrcode-reader.netlify.app/demos/HandleErrors.html)? **To Reproduce** Please provide a link to a minimal reproduction of the bug. For example on jsFiddle, CodePen, etc. Please don't attach a ZIP file with your entire code base. I know this is additional effort but if it takes too much time to reproduce your issue you'll likely won't get help at all. diff --git a/.gitignore b/.gitignore index 824f247a..740aeb0d 100644 --- a/.gitignore +++ b/.gitignore @@ -142,6 +142,7 @@ out # Nuxt.js build / generate output .nuxt dist +dev-dist # Gatsby files .cache/ diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index fbcd6fdc..18342082 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -9,11 +9,11 @@ Clone the repository and run npm install ``` -We use a locally served version of the [demo page](https://vue-qrcode-reader.netlify.app/demos/DecodeAll.html) during development. +We use a locally served version of the [demo page](https://vue-qrcode-reader.netlify.app/) during development. To get that started run ``` -npm run dev +npm run docs:dev ``` ### Commit Messages diff --git a/README.md b/README.md index 1a30d129..440fa331 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@

- live demos | + live demos | api reference

@@ -147,9 +147,11 @@ Use kebab-case to reference them in your templates: #### I don't see the camera when using `QrcodeStream`. -- Check if it works on the demo page. Especially the [Decode All](https://vue-qrcode-reader.netlify.app/demos/DecodeAll.html) demo, since it renders error messages. If you see errors, consult the docs to understand their meaning. - - The demo works but it doesn't work in my project: Listen for the `init` event to investigate errors. - - The demo doesn't work: Carefully review the Browser Support section above. Maybe your device is just not supported. +- Check if it works on the demo page. Especially the [Handle Errors](https://vue-qrcode-reader.netlify.app/demos/HandleErrors.html) demo, + since it renders error messages. + - The demo works but it doesn't work in my project: Listen for the `error` event to investigate errors. + - The demo doesn't work: Carefully review the Browser Support section above. + Maybe your device is just not supported. #### I'm running a dev server on localhost. How to test on my mobile device without HTTPS? diff --git a/docs/.vitepress/components/demos/DecodeAll.vue b/docs/.vitepress/components/demos/HandleErrors.vue similarity index 63% rename from docs/.vitepress/components/demos/DecodeAll.vue rename to docs/.vitepress/components/demos/HandleErrors.vue index 53270189..23991612 100644 --- a/docs/.vitepress/components/demos/DecodeAll.vue +++ b/docs/.vitepress/components/demos/HandleErrors.vue @@ -28,23 +28,24 @@ const onDetect = detectedCodes => { } const onError = err => { + error.value = `[${err.name}]: ` + if (err.name === 'NotAllowedError') { - error.value = 'ERROR: you need to grant camera access permission' + error.value += 'you need to grant camera access permission' } else if (err.name === 'NotFoundError') { - error.value = 'ERROR: no camera on this device' + error.value += 'no camera on this device' } else if (err.name === 'NotSupportedError') { - error.value = 'ERROR: secure context required (HTTPS, localhost)' + error.value += 'secure context required (HTTPS, localhost)' } else if (err.name === 'NotReadableError') { - error.value = 'ERROR: is the camera already in use?' + error.value += 'is the camera already in use?' } else if (err.name === 'OverconstrainedError') { - error.value = 'ERROR: installed cameras are not suitable' + error.value += 'installed cameras are not suitable' } else if (err.name === 'StreamApiNotSupportedError') { - error.value = 'ERROR: Stream API is not supported in this browser' + error.value += 'Stream API is not supported in this browser' } else if (err.name === 'InsecureContextError') { - error.value = - 'ERROR: Camera access is only permitted in secure context. Use HTTPS or localhost rather than HTTP.' + error.value += 'Camera access is only permitted in secure context. Use HTTPS or localhost rather than HTTP.' } else { - error.value = `ERROR: Camera error (${err.name})` + error.value += err.message } } diff --git a/docs/.vitepress/components/demos/SwitchCamera.vue b/docs/.vitepress/components/demos/SwitchCamera.vue index a6618ce7..58ae0099 100644 --- a/docs/.vitepress/components/demos/SwitchCamera.vue +++ b/docs/.vitepress/components/demos/SwitchCamera.vue @@ -69,7 +69,7 @@ button { top: 10px; } button img { - with: 50px; + width: 50px; height: 50px; } .error { diff --git a/docs/.vitepress/components/demos/Torch.vue b/docs/.vitepress/components/demos/Torch.vue index 480be052..250ab153 100644 --- a/docs/.vitepress/components/demos/Torch.vue +++ b/docs/.vitepress/components/demos/Torch.vue @@ -52,7 +52,7 @@ button { top: 10px; } button img { - with: 50px; + width: 50px; height: 50px; } .error { diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index 7bbae3d3..c0fc1fa9 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -1,7 +1,7 @@ import { defineConfig } from 'vitepress' +import { withPwa } from '@vite-pwa/vitepress' -export default defineConfig({ - // base: '/vue-qrcode-reader/', +export default withPwa(defineConfig({ description: 'A set of Vue.js components for detecting and decoding QR codes.', lang: 'en-US', lastUpdated: true, @@ -27,8 +27,8 @@ export default defineConfig({ link: '/demos/Simple' }, { - text: 'Decode Continuously', - link: '/demos/DecodeAll' + text: 'Handle Errors', + link: '/demos/HandleErrors' }, { text: 'Visual Tracking', @@ -105,5 +105,38 @@ export default defineConfig({ '@': __dirname } } - } -}) + }, + pwa: { + mode: 'development', + base: '/', + scope: '/', + registerType: 'autoUpdate', + // injectRegister: 'inline', + includeAssets: ['favicon.svg'], + manifest: { + name: 'Vue Qrcode Reader', + short_name: 'Vue QR', + theme_color: '#10b981', + icons: [ + { + src: 'pwa-192x192.png', + sizes: '192x192', + type: 'image/png', + }, + { + src: 'pwa-512x512.png', + sizes: '512x512', + type: 'image/png', + } + ], + }, + workbox: { + globPatterns: ['**/*.{css,js,html,svg,png,ico,txt,woff2}'], + }, + devOptions: { + enabled: true, + suppressWarnings: true, + navigateFallback: '/', + }, + }, +})) diff --git a/docs/demos/DecodeAll.md b/docs/demos/HandleErrors.md similarity index 58% rename from docs/demos/DecodeAll.md rename to docs/demos/HandleErrors.md index 18a8cd82..c3d9ee32 100644 --- a/docs/demos/DecodeAll.md +++ b/docs/demos/HandleErrors.md @@ -1,17 +1,17 @@ -# Decode Continuously +# Handle Errors Hold a QR code in the camera and see what happens. Note, you can't scan the same QR code multiple time in a row. - + ### Source -<<< @/.vitepress/components/demos/DecodeAll.vue +<<< @/.vitepress/components/demos/HandleErrors.vue diff --git a/docs/public/pwa-192x192.png b/docs/public/pwa-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..cfda4297b6904e9f033fadc394a64d5b12094466 GIT binary patch literal 26062 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�AwnaJ|R&Ji8LVY91tDEuJ7Kfmii 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 Qelu!)+1`S9>BfV<1B9JOl>h($ literal 0 HcmV?d00001 diff --git a/package.json b/package.json index cbd4218f..3b28dc03 100644 --- a/package.json +++ b/package.json @@ -42,6 +42,7 @@ "devDependencies": { "@tsconfig/node20": "1.0.1", "@types/node": "20.3.1", + "@vite-pwa/vitepress": "^0.2.0", "@vitejs/plugin-vue": "4.2.3", "@vue/compiler-sfc": "3.3.4", "@vue/eslint-config-prettier": "7.1.0", @@ -60,7 +61,8 @@ "vite-plugin-dts": "2.3.0", "vitepress": "1.0.0-beta.2", "vue": "3.3.4", - "vue-tsc": "1.6.5" + "vue-tsc": "1.6.5", + "workbox-window": "^7.0.0" }, "bugs": "https://github.com/gruhn/vue-qrcode-reader/issues", "homepage": "https://vue-qrcode-reader.netlify.app", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index da16239e..62ea6921 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -19,6 +19,9 @@ devDependencies: '@types/node': specifier: 20.3.1 version: 20.3.1 + '@vite-pwa/vitepress': + specifier: ^0.2.0 + version: 0.2.0(vite-plugin-pwa@0.16.4) '@vitejs/plugin-vue': specifier: 4.2.3 version: 4.2.3(vite@4.3.9)(vue@3.3.4) @@ -66,7 +69,7 @@ devDependencies: version: 4.3.9(@types/node@20.3.1) vite-plugin-dts: specifier: 2.3.0 - version: 2.3.0(@types/node@20.3.1)(vite@4.3.9) + version: 2.3.0(@types/node@20.3.1)(rollup@2.79.1)(vite@4.3.9) vitepress: specifier: 1.0.0-beta.2 version: 1.0.0-beta.2(@algolia/client-search@4.18.0)(@types/node@20.3.1)(react@18.2.0)(search-insights@2.6.0) @@ -76,6 +79,9 @@ devDependencies: vue-tsc: specifier: 1.6.5 version: 1.6.5(typescript@5.1.3) + workbox-window: + specifier: ^7.0.0 + version: 7.0.0 packages: @@ -218,40 +224,1194 @@ packages: '@algolia/requester-common': 4.18.0 dev: true + /@ampproject/remapping@2.2.1: + resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 + dev: true + + /@apideck/better-ajv-errors@0.3.6(ajv@8.12.0): + resolution: {integrity: sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==} + engines: {node: '>=10'} + peerDependencies: + ajv: '>=8' + dependencies: + ajv: 8.12.0 + json-schema: 0.4.0 + jsonpointer: 5.0.1 + leven: 3.1.0 + dev: true + /@babel/code-frame@7.22.5: resolution: {integrity: sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.22.5 + '@babel/highlight': 7.22.5 + dev: true + + /@babel/compat-data@7.22.9: + resolution: {integrity: sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/core@7.22.9: + resolution: {integrity: sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.22.5 + '@babel/generator': 7.22.9 + '@babel/helper-compilation-targets': 7.22.9(@babel/core@7.22.9) + '@babel/helper-module-transforms': 7.22.9(@babel/core@7.22.9) + '@babel/helpers': 7.22.6 + '@babel/parser': 7.22.7 + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.8 + '@babel/types': 7.22.5 + convert-source-map: 1.9.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/generator@7.22.9: + resolution: {integrity: sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 + jsesc: 2.5.2 + dev: true + + /@babel/helper-annotate-as-pure@7.22.5: + resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + dev: true + + /@babel/helper-builder-binary-assignment-operator-visitor@7.22.5: + resolution: {integrity: sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + dev: true + + /@babel/helper-compilation-targets@7.22.9(@babel/core@7.22.9): + resolution: {integrity: sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/compat-data': 7.22.9 + '@babel/core': 7.22.9 + '@babel/helper-validator-option': 7.22.5 + browserslist: 4.21.9 + lru-cache: 5.1.1 + semver: 6.3.1 + dev: true + + /@babel/helper-create-class-features-plugin@7.22.9(@babel/core@7.22.9): + resolution: {integrity: sha512-Pwyi89uO4YrGKxL/eNJ8lfEH55DnRloGPOseaA8NFNL6jAUnn+KccaISiFazCj5IolPPDjGSdzQzXVzODVRqUQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-member-expression-to-functions': 7.22.5 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.22.9(@babel/core@7.22.9) + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + semver: 6.3.1 + dev: true + + /@babel/helper-create-regexp-features-plugin@7.22.9(@babel/core@7.22.9): + resolution: {integrity: sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-annotate-as-pure': 7.22.5 + regexpu-core: 5.3.2 + semver: 6.3.1 + dev: true + + /@babel/helper-define-polyfill-provider@0.4.1(@babel/core@7.22.9): + resolution: {integrity: sha512-kX4oXixDxG197yhX+J3Wp+NpL2wuCFjWQAr6yX2jtCnflK9ulMI51ULFGIrWiX1jGfvAxdHp+XQCcP2bZGPs9A==} + peerDependencies: + '@babel/core': ^7.4.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-compilation-targets': 7.22.9(@babel/core@7.22.9) + '@babel/helper-plugin-utils': 7.22.5 + debug: 4.3.4 + lodash.debounce: 4.0.8 + resolve: 1.22.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-environment-visitor@7.22.5: + resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-function-name@7.22.5: + resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.5 + '@babel/types': 7.22.5 + dev: true + + /@babel/helper-hoist-variables@7.22.5: + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + dev: true + + /@babel/helper-member-expression-to-functions@7.22.5: + resolution: {integrity: sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + dev: true + + /@babel/helper-module-imports@7.22.5: + resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + dev: true + + /@babel/helper-module-transforms@7.22.9(@babel/core@7.22.9): + resolution: {integrity: sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-module-imports': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.5 + dev: true + + /@babel/helper-optimise-call-expression@7.22.5: + resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + dev: true + + /@babel/helper-plugin-utils@7.22.5: + resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-remap-async-to-generator@7.22.9(@babel/core@7.22.9): + resolution: {integrity: sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-wrap-function': 7.22.9 + dev: true + + /@babel/helper-replace-supers@7.22.9(@babel/core@7.22.9): + resolution: {integrity: sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-member-expression-to-functions': 7.22.5 + '@babel/helper-optimise-call-expression': 7.22.5 + dev: true + + /@babel/helper-simple-access@7.22.5: + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + dev: true + + /@babel/helper-skip-transparent-expression-wrappers@7.22.5: + resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + dev: true + + /@babel/helper-split-export-declaration@7.22.6: + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + dev: true + + /@babel/helper-string-parser@7.22.5: + resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-identifier@7.22.5: + resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-option@7.22.5: + resolution: {integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-wrap-function@7.22.9: + resolution: {integrity: sha512-sZ+QzfauuUEfxSEjKFmi3qDSHgLsTPK/pEpoD/qonZKOtTPTLbf59oabPQ4rKekt9lFcj/hTZaOhWwFYrgjk+Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-function-name': 7.22.5 + '@babel/template': 7.22.5 + '@babel/types': 7.22.5 + dev: true + + /@babel/helpers@7.22.6: + resolution: {integrity: sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.8 + '@babel/types': 7.22.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/highlight@7.22.5: + resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.22.5 + chalk: 2.4.2 + js-tokens: 4.0.0 + dev: true + + /@babel/parser@7.22.6: + resolution: {integrity: sha512-EIQu22vNkceq3LbjAq7knDf/UmtI2qbcNI8GRBlijez6TpQLvSodJPYfydQmNA5buwkxxxa/PVI44jjYZ+/cLw==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.22.5 + dev: true + + /@babel/parser@7.22.7: + resolution: {integrity: sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.22.5 + dev: true + + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-transform-optional-chaining': 7.22.6(@babel/core@7.22.9) + dev: true + + /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.22.9): + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + dev: true + + /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.22.9): + resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} + engines: {node: '>=4'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-create-regexp-features-plugin': 7.22.9(@babel/core@7.22.9) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.22.9): + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.22.9): + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.22.9): + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.22.9): + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.22.9): + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-import-assertions@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-import-attributes@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.22.9): + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.22.9): + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.22.9): + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.22.9): + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.22.9): + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.22.9): + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.22.9): + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.22.9): + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.22.9): + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.22.9): + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.22.9): + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-create-regexp-features-plugin': 7.22.9(@babel/core@7.22.9) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-async-generator-functions@7.22.7(@babel/core@7.22.9): + resolution: {integrity: sha512-7HmE7pk/Fmke45TODvxvkxRMV9RazV+ZZzhOL9AG8G29TLrr3jkjwF7uJfxZ30EoXpO+LJkq4oA8NjO2DTnEDg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.9(@babel/core@7.22.9) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.9) + dev: true + + /@babel/plugin-transform-async-to-generator@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-module-imports': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.9(@babel/core@7.22.9) + dev: true + + /@babel/plugin-transform-block-scoped-functions@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-block-scoping@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-class-properties@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-create-class-features-plugin': 7.22.9(@babel/core@7.22.9) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-class-static-block@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-create-class-features-plugin': 7.22.9(@babel/core@7.22.9) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.9) + dev: true + + /@babel/plugin-transform-classes@7.22.6(@babel/core@7.22.9): + resolution: {integrity: sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-compilation-targets': 7.22.9(@babel/core@7.22.9) + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.9(@babel/core@7.22.9) + '@babel/helper-split-export-declaration': 7.22.6 + globals: 11.12.0 + dev: true + + /@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/template': 7.22.5 + dev: true + + /@babel/plugin-transform-destructuring@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-dotall-regex@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-create-regexp-features-plugin': 7.22.9(@babel/core@7.22.9) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-duplicate-keys@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-dynamic-import@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.9) + dev: true + + /@babel/plugin-transform-exponentiation-operator@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-export-namespace-from@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.9) dev: true - /@babel/helper-string-parser@7.22.5: - resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} + /@babel/plugin-transform-for-of@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/helper-validator-identifier@7.22.5: - resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} + /@babel/plugin-transform-function-name@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-compilation-targets': 7.22.9(@babel/core@7.22.9) + '@babel/helper-function-name': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/highlight@7.22.5: - resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==} + /@babel/plugin-transform-json-strings@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.9) + dev: true + + /@babel/plugin-transform-literals@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-logical-assignment-operators@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.9) + dev: true + + /@babel/plugin-transform-member-expression-literals@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-modules-amd@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-module-transforms': 7.22.9(@babel/core@7.22.9) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-modules-commonjs@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-module-transforms': 7.22.9(@babel/core@7.22.9) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + dev: true + + /@babel/plugin-transform-modules-systemjs@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: + '@babel/core': 7.22.9 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-module-transforms': 7.22.9(@babel/core@7.22.9) + '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-validator-identifier': 7.22.5 - chalk: 2.4.2 - js-tokens: 4.0.0 dev: true - /@babel/parser@7.22.6: - resolution: {integrity: sha512-EIQu22vNkceq3LbjAq7knDf/UmtI2qbcNI8GRBlijez6TpQLvSodJPYfydQmNA5buwkxxxa/PVI44jjYZ+/cLw==} - engines: {node: '>=6.0.0'} - hasBin: true + /@babel/plugin-transform-modules-umd@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-module-transforms': 7.22.9(@babel/core@7.22.9) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-create-regexp-features-plugin': 7.22.9(@babel/core@7.22.9) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-new-target@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-nullish-coalescing-operator@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.9) + dev: true + + /@babel/plugin-transform-numeric-separator@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.9) + dev: true + + /@babel/plugin-transform-object-rest-spread@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.22.9 + '@babel/core': 7.22.9 + '@babel/helper-compilation-targets': 7.22.9(@babel/core@7.22.9) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.9) + '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.22.9) + dev: true + + /@babel/plugin-transform-object-super@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.9(@babel/core@7.22.9) + dev: true + + /@babel/plugin-transform-optional-catch-binding@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.9) + dev: true + + /@babel/plugin-transform-optional-chaining@7.22.6(@babel/core@7.22.9): + resolution: {integrity: sha512-Vd5HiWml0mDVtcLHIoEU5sw6HOUW/Zk0acLs/SAeuLzkGNOPc9DB4nkUajemhCmTIz3eiaKREZn2hQQqF79YTg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.9) + dev: true + + /@babel/plugin-transform-parameters@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-private-methods@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-create-class-features-plugin': 7.22.9(@babel/core@7.22.9) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-private-property-in-object@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.22.9(@babel/core@7.22.9) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.9) + dev: true + + /@babel/plugin-transform-property-literals@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-regenerator@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + regenerator-transform: 0.15.1 + dev: true + + /@babel/plugin-transform-reserved-words@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-shorthand-properties@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-spread@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + dev: true + + /@babel/plugin-transform-sticky-regex@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-template-literals@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-typeof-symbol@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-unicode-escapes@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-unicode-property-regex@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-create-regexp-features-plugin': 7.22.9(@babel/core@7.22.9) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-unicode-regex@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-create-regexp-features-plugin': 7.22.9(@babel/core@7.22.9) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-unicode-sets-regex@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-create-regexp-features-plugin': 7.22.9(@babel/core@7.22.9) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/preset-env@7.22.9(@babel/core@7.22.9): + resolution: {integrity: sha512-wNi5H/Emkhll/bqPjsjQorSykrlfY5OWakd6AulLvMEytpKasMVUpVy8RL4qBIBs5Ac6/5i0/Rv0b/Fg6Eag/g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.22.9 + '@babel/core': 7.22.9 + '@babel/helper-compilation-targets': 7.22.9(@babel/core@7.22.9) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.22.5 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.22.9) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.9) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.9) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.9) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.9) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.9) + '@babel/plugin-syntax-import-assertions': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-syntax-import-attributes': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.22.9) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.9) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.9) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.9) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.9) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.9) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.9) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.9) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.9) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.22.9) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.22.9) + '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-async-generator-functions': 7.22.7(@babel/core@7.22.9) + '@babel/plugin-transform-async-to-generator': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-block-scoped-functions': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-block-scoping': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-class-properties': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-class-static-block': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-classes': 7.22.6(@babel/core@7.22.9) + '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-destructuring': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-duplicate-keys': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-dynamic-import': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-exponentiation-operator': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-export-namespace-from': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-for-of': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-function-name': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-json-strings': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-literals': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-logical-assignment-operators': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-member-expression-literals': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-modules-amd': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-modules-commonjs': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-modules-systemjs': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-modules-umd': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-new-target': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-nullish-coalescing-operator': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-numeric-separator': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-object-rest-spread': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-object-super': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-optional-catch-binding': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-optional-chaining': 7.22.6(@babel/core@7.22.9) + '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-private-methods': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-private-property-in-object': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-property-literals': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-regenerator': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-reserved-words': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-shorthand-properties': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-spread': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-sticky-regex': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-template-literals': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-typeof-symbol': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-unicode-escapes': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-unicode-property-regex': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-unicode-regex': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-unicode-sets-regex': 7.22.5(@babel/core@7.22.9) + '@babel/preset-modules': 0.1.5(@babel/core@7.22.9) + '@babel/types': 7.22.5 + babel-plugin-polyfill-corejs2: 0.4.4(@babel/core@7.22.9) + babel-plugin-polyfill-corejs3: 0.8.2(@babel/core@7.22.9) + babel-plugin-polyfill-regenerator: 0.5.1(@babel/core@7.22.9) + core-js-compat: 3.31.1 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/preset-modules@0.1.5(@babel/core@7.22.9): + resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.22.9) + '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.22.9) + '@babel/types': 7.22.5 + esutils: 2.0.3 + dev: true + + /@babel/regjsgen@0.8.0: + resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} + dev: true + + /@babel/runtime@7.22.6: + resolution: {integrity: sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.13.11 + dev: true + + /@babel/template@7.22.5: + resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.22.5 + '@babel/parser': 7.22.7 '@babel/types': 7.22.5 dev: true + /@babel/traverse@7.22.8: + resolution: {integrity: sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.22.5 + '@babel/generator': 7.22.9 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.22.7 + '@babel/types': 7.22.5 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/types@7.22.5: resolution: {integrity: sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==} engines: {node: '>=6.9.0'} @@ -576,10 +1736,47 @@ packages: wrap-ansi-cjs: /wrap-ansi@7.0.0 dev: true + /@jridgewell/gen-mapping@0.3.3: + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.18 + dev: true + + /@jridgewell/resolve-uri@3.1.0: + resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/set-array@1.1.2: + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/source-map@0.3.5: + resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 + dev: true + + /@jridgewell/sourcemap-codec@1.4.14: + resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} + dev: true + /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} dev: true + /@jridgewell/trace-mapping@0.3.18: + resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} + dependencies: + '@jridgewell/resolve-uri': 3.1.0 + '@jridgewell/sourcemap-codec': 1.4.14 + dev: true + /@microsoft/api-extractor-model@7.27.4(@types/node@20.3.1): resolution: {integrity: sha512-HjqQFmuGPOS20rtnu+9Jj0QrqZyR59E+piUWXPMZTTn4jaZI+4UmsHSf3Id8vyueAhOBH2cgwBuRTE5R+MfSMw==} dependencies: @@ -623,6 +1820,11 @@ packages: resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==} dev: true + /@nicolo-ribaudo/semver-v6@6.3.3: + resolution: {integrity: sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg==} + hasBin: true + dev: true + /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -798,7 +2000,61 @@ packages: config-chain: 1.1.13 dev: true - /@rollup/pluginutils@5.0.2: + /@rollup/plugin-babel@5.3.1(@babel/core@7.22.9)(rollup@2.79.1): + resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} + engines: {node: '>= 10.0.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@types/babel__core': ^7.1.9 + rollup: ^1.20.0||^2.0.0 + peerDependenciesMeta: + '@types/babel__core': + optional: true + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-module-imports': 7.22.5 + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + rollup: 2.79.1 + dev: true + + /@rollup/plugin-node-resolve@11.2.1(rollup@2.79.1): + resolution: {integrity: sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==} + engines: {node: '>= 10.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + '@types/resolve': 1.17.1 + builtin-modules: 3.3.0 + deepmerge: 4.3.1 + is-module: 1.0.0 + resolve: 1.22.2 + rollup: 2.79.1 + dev: true + + /@rollup/plugin-replace@2.4.2(rollup@2.79.1): + resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==} + peerDependencies: + rollup: ^1.20.0 || ^2.0.0 + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + magic-string: 0.25.9 + rollup: 2.79.1 + dev: true + + /@rollup/pluginutils@3.1.0(rollup@2.79.1): + resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + dependencies: + '@types/estree': 0.0.39 + estree-walker: 1.0.1 + picomatch: 2.3.1 + rollup: 2.79.1 + dev: true + + /@rollup/pluginutils@5.0.2(rollup@2.79.1): resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==} engines: {node: '>=14.0.0'} peerDependencies: @@ -810,6 +2066,7 @@ packages: '@types/estree': 1.0.1 estree-walker: 2.0.2 picomatch: 2.3.1 + rollup: 2.79.1 dev: true /@rushstack/node-core-library@3.59.5(@types/node@20.3.1): @@ -959,6 +2216,15 @@ packages: - supports-color dev: true + /@surma/rollup-plugin-off-main-thread@2.2.3: + resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==} + dependencies: + ejs: 3.1.9 + json5: 2.2.3 + magic-string: 0.25.9 + string.prototype.matchall: 4.0.8 + dev: true + /@ts-morph/common@0.19.0: resolution: {integrity: sha512-Unz/WHmd4pGax91rdIKWi51wnVUW11QttMEPpBiBgIewnc9UQIX7UDLxr5vRlqeByXCwhkF6VabSsI0raWcyAQ==} dependencies: @@ -980,6 +2246,10 @@ packages: resolution: {integrity: sha512-H90aoynNhhkQP6DRweEjJp5vfUVdIj7tdPLsu7pq89vODD/lcugKfZOsfgwpvM6XUewEp2N5dCg1Uf3Qe55Dcg==} dev: false + /@types/estree@0.0.39: + resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} + dev: true + /@types/estree@1.0.1: resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} dev: true @@ -1000,10 +2270,20 @@ packages: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} dev: true + /@types/resolve@1.17.1: + resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} + dependencies: + '@types/node': 20.3.1 + dev: true + /@types/semver@7.5.0: resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} dev: true + /@types/trusted-types@2.0.3: + resolution: {integrity: sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==} + dev: true + /@types/web-bluetooth@0.0.17: resolution: {integrity: sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA==} dev: true @@ -1138,6 +2418,14 @@ packages: eslint-visitor-keys: 3.4.1 dev: true + /@vite-pwa/vitepress@0.2.0(vite-plugin-pwa@0.16.4): + resolution: {integrity: sha512-dVQVaP6NB9woCFe4UASUqRp7uwBQJOVXlJlqK4krqXcbb3NuXIXIWOnU7HLpJnHqZj5U/81gKtLN6gs5gJBwiQ==} + peerDependencies: + vite-plugin-pwa: '>=0.16.3 <1' + dependencies: + vite-plugin-pwa: 0.16.4(vite@4.3.9)(workbox-build@7.0.0)(workbox-window@7.0.0) + dev: true + /@vitejs/plugin-vue@4.2.3(vite@4.3.9)(vue@3.3.4): resolution: {integrity: sha512-R6JDUfiZbJA9cMiguQ7jxALsgiprjBeHL5ikpXfJCH62pPHtI+JdJ5xWj6Ev73yXSlYl86+blXn1kZHQ7uElxw==} engines: {node: ^14.18.0 || >=16.0.0} @@ -1449,6 +2737,15 @@ packages: uri-js: 4.4.1 dev: true + /ajv@8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + dev: true + /algoliasearch@4.18.0: resolution: {integrity: sha512-pCuVxC1SVcpc08ENH32T4sLKSyzoU7TkRIDBMwSLfIiW+fq4znOmWDkAygHZ6pRcO9I1UJdqlfgnV7TRj+MXrA==} dependencies: @@ -1533,6 +2830,13 @@ packages: resolution: {integrity: sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw==} dev: true + /array-buffer-byte-length@1.0.0: + resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + dependencies: + call-bind: 1.0.2 + is-array-buffer: 3.0.2 + dev: true + /array-ify@1.0.0: resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} dev: true @@ -1542,6 +2846,18 @@ packages: engines: {node: '>=8'} dev: true + /arraybuffer.prototype.slice@1.0.1: + resolution: {integrity: sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + call-bind: 1.0.2 + define-properties: 1.2.0 + get-intrinsic: 1.2.1 + is-array-buffer: 3.0.2 + is-shared-array-buffer: 1.0.2 + dev: true + /arrify@1.0.1: resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} engines: {node: '>=0.10.0'} @@ -1552,6 +2868,56 @@ packages: engines: {node: '>=8'} dev: true + /async@3.2.4: + resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} + dev: true + + /at-least-node@1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} + dev: true + + /available-typed-arrays@1.0.5: + resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + engines: {node: '>= 0.4'} + dev: true + + /babel-plugin-polyfill-corejs2@0.4.4(@babel/core@7.22.9): + resolution: {integrity: sha512-9WeK9snM1BfxB38goUEv2FLnA6ja07UMfazFHzCXUb3NyDZAwfXvQiURQ6guTTMeHcOsdknULm1PDhs4uWtKyA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.22.9 + '@babel/core': 7.22.9 + '@babel/helper-define-polyfill-provider': 0.4.1(@babel/core@7.22.9) + '@nicolo-ribaudo/semver-v6': 6.3.3 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-polyfill-corejs3@0.8.2(@babel/core@7.22.9): + resolution: {integrity: sha512-Cid+Jv1BrY9ReW9lIfNlNpsI53N+FN7gE+f73zLAUbr9C52W4gKLWSByx47pfDJsEysojKArqOtOKZSVIIUTuQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-define-polyfill-provider': 0.4.1(@babel/core@7.22.9) + core-js-compat: 3.31.1 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-polyfill-regenerator@0.5.1(@babel/core@7.22.9): + resolution: {integrity: sha512-L8OyySuI6OSQ5hFy9O+7zFjyr4WhAfRjLIOkhQGYl+emwJkd/S4XXT1JpfrgR1jrQ1NcGiOh+yAdGlF8pnC3Jw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-define-polyfill-provider': 0.4.1(@babel/core@7.22.9) + transitivePeerDependencies: + - supports-color + dev: true + /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true @@ -1592,6 +2958,33 @@ packages: fill-range: 7.0.1 dev: true + /browserslist@4.21.9: + resolution: {integrity: sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001516 + electron-to-chromium: 1.4.461 + node-releases: 2.0.13 + update-browserslist-db: 1.0.11(browserslist@4.21.9) + dev: true + + /buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + dev: true + + /builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + dev: true + + /call-bind@1.0.2: + resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + dependencies: + function-bind: 1.1.1 + get-intrinsic: 1.2.1 + dev: true + /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -1611,6 +3004,10 @@ packages: engines: {node: '>=6'} dev: true + /caniuse-lite@1.0.30001516: + resolution: {integrity: sha512-Wmec9pCBY8CWbmI4HsjBeQLqDTqV91nFVR83DnZpYyRnPI1wePDsTg0bGLPC5VU/3OIZV1fmxEea1b+tFKe86g==} + dev: true + /cardinal@2.1.1: resolution: {integrity: sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==} hasBin: true @@ -1733,6 +3130,10 @@ packages: engines: {node: '>=14'} dev: true + /commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + dev: true + /commander@9.5.0: resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} engines: {node: ^12.20.0 || >=14} @@ -1740,6 +3141,11 @@ packages: dev: true optional: true + /common-tags@1.8.2: + resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} + engines: {node: '>=4.0.0'} + dev: true + /compare-func@2.0.0: resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} dependencies: @@ -1798,6 +3204,16 @@ packages: split2: 3.2.2 dev: true + /convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + dev: true + + /core-js-compat@3.31.1: + resolution: {integrity: sha512-wIDWd2s5/5aJSdpOJHfSibxNODxoGoWOBHt8JSPB41NOE94M7kuTPZCYLOlTtuoXTsBPKobpJ6T+y0SSy5L9SA==} + dependencies: + browserslist: 4.21.9 + dev: true + /core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} dev: true @@ -1821,6 +3237,11 @@ packages: which: 2.0.2 dev: true + /crypto-random-string@2.0.0: + resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} + engines: {node: '>=8'} + dev: true + /crypto-random-string@4.0.0: resolution: {integrity: sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==} engines: {node: '>=12'} @@ -1880,6 +3301,19 @@ packages: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true + /deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + dev: true + + /define-properties@1.2.0: + resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} + engines: {node: '>= 0.4'} + dependencies: + has-property-descriptors: 1.0.0 + object-keys: 1.1.1 + dev: true + /deprecation@2.3.1: resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} dev: true @@ -1915,6 +3349,18 @@ packages: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true + /ejs@3.1.9: + resolution: {integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==} + engines: {node: '>=0.10.0'} + hasBin: true + dependencies: + jake: 10.8.7 + dev: true + + /electron-to-chromium@1.4.461: + resolution: {integrity: sha512-1JkvV2sgEGTDXjdsaQCeSwYYuhLRphRpc+g6EHTFELJXEiznLt3/0pZ9JuAOQ5p2rI3YxKTbivtvajirIfhrEQ==} + dev: true + /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} dev: true @@ -1937,6 +3383,69 @@ packages: is-arrayish: 0.2.1 dev: true + /es-abstract@1.22.1: + resolution: {integrity: sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + arraybuffer.prototype.slice: 1.0.1 + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + es-set-tostringtag: 2.0.1 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.5 + get-intrinsic: 1.2.1 + get-symbol-description: 1.0.0 + globalthis: 1.0.3 + gopd: 1.0.1 + has: 1.0.3 + has-property-descriptors: 1.0.0 + has-proto: 1.0.1 + has-symbols: 1.0.3 + internal-slot: 1.0.5 + is-array-buffer: 3.0.2 + is-callable: 1.2.7 + is-negative-zero: 2.0.2 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.2 + is-string: 1.0.7 + is-typed-array: 1.1.10 + is-weakref: 1.0.2 + object-inspect: 1.12.3 + object-keys: 1.1.1 + object.assign: 4.1.4 + regexp.prototype.flags: 1.5.0 + safe-array-concat: 1.0.0 + safe-regex-test: 1.0.0 + string.prototype.trim: 1.2.7 + string.prototype.trimend: 1.0.6 + string.prototype.trimstart: 1.0.6 + typed-array-buffer: 1.0.0 + typed-array-byte-length: 1.0.0 + typed-array-byte-offset: 1.0.0 + typed-array-length: 1.0.4 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.10 + dev: true + + /es-set-tostringtag@2.0.1: + resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.1 + has: 1.0.3 + has-tostringtag: 1.0.0 + dev: true + + /es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + dev: true + /esbuild@0.17.19: resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} engines: {node: '>=12'} @@ -2139,6 +3648,10 @@ packages: engines: {node: '>=4.0'} dev: true + /estree-walker@1.0.1: + resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} + dev: true + /estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} dev: true @@ -2229,6 +3742,12 @@ packages: flat-cache: 3.0.4 dev: true + /filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + dependencies: + minimatch: 5.1.6 + dev: true + /fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} @@ -2292,6 +3811,12 @@ packages: tabbable: 6.2.0 dev: true + /for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + dependencies: + is-callable: 1.2.7 + dev: true + /foreground-child@3.1.1: resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} engines: {node: '>=14'} @@ -2334,6 +3859,16 @@ packages: universalify: 0.1.2 dev: true + /fs-extra@9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} + dependencies: + at-least-node: 1.0.0 + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.0 + dev: true + /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} dev: true @@ -2350,11 +3885,43 @@ packages: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} dev: true + /function.prototype.name@1.1.5: + resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + functions-have-names: 1.2.3 + dev: true + + /functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + dev: true + + /gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + dev: true + /get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} dev: true + /get-intrinsic@1.2.1: + resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} + dependencies: + function-bind: 1.1.1 + has: 1.0.3 + has-proto: 1.0.1 + has-symbols: 1.0.3 + dev: true + + /get-own-enumerable-property-symbols@3.0.2: + resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} + dev: true + /get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} @@ -2365,6 +3932,14 @@ packages: engines: {node: '>=16'} dev: true + /get-symbol-description@1.0.0: + resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + dev: true + /git-log-parser@1.2.0: resolution: {integrity: sha512-rnCVNfkTL8tdNryFuaY0fYiBWEBcgF748O6ZI61rslBvr2o7U65c2/6npCRqH40vuAhtgtDiqLTJjBVdrejCzA==} dependencies: @@ -2413,6 +3988,11 @@ packages: path-is-absolute: 1.0.1 dev: true + /globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + dev: true + /globals@13.20.0: resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} engines: {node: '>=8'} @@ -2420,6 +4000,13 @@ packages: type-fest: 0.20.2 dev: true + /globalthis@1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.2.0 + dev: true + /globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} @@ -2443,6 +4030,12 @@ packages: slash: 4.0.0 dev: true + /gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.2.1 + dev: true + /graceful-fs@4.2.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} dev: true @@ -2473,6 +4066,10 @@ packages: engines: {node: '>=6'} dev: true + /has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + dev: true + /has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} @@ -2483,6 +4080,29 @@ packages: engines: {node: '>=8'} dev: true + /has-property-descriptors@1.0.0: + resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} + dependencies: + get-intrinsic: 1.2.1 + dev: true + + /has-proto@1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} + dev: true + + /has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + dev: true + + /has-tostringtag@1.0.0: + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + /has@1.0.3: resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} engines: {node: '>= 0.4.0'} @@ -2549,6 +4169,10 @@ packages: hasBin: true dev: true + /idb@7.1.1: + resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} + dev: true + /ignore@5.2.4: resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} engines: {node: '>= 4'} @@ -2602,6 +4226,15 @@ packages: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} dev: true + /internal-slot@1.0.5: + resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.1 + has: 1.0.3 + side-channel: 1.0.4 + dev: true + /into-stream@7.0.0: resolution: {integrity: sha512-2dYz766i9HprMBasCMvHMuazJ7u4WzhJwo5kb3iPSiW/iRYV6uPari3zHoqZlnuaR7V1bEiNMxikhp37rdBXbw==} engines: {node: '>=12'} @@ -2610,16 +4243,50 @@ packages: p-is-promise: 3.0.0 dev: true + /is-array-buffer@3.0.2: + resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + is-typed-array: 1.1.10 + dev: true + /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} dev: true + /is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + dependencies: + has-bigints: 1.0.2 + dev: true + + /is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + dev: true + + /is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + dev: true + /is-core-module@2.12.1: resolution: {integrity: sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==} dependencies: has: 1.0.3 dev: true + /is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -2642,11 +4309,32 @@ packages: is-extglob: 2.1.1 dev: true + /is-module@1.0.0: + resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} + dev: true + + /is-negative-zero@2.0.2: + resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + engines: {node: '>= 0.4'} + dev: true + + /is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} dev: true + /is-obj@1.0.1: + resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} + engines: {node: '>=0.10.0'} + dev: true + /is-obj@2.0.0: resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} engines: {node: '>=8'} @@ -2667,11 +4355,49 @@ packages: engines: {node: '>=0.10.0'} dev: true + /is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + dev: true + + /is-regexp@1.0.0: + resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} + engines: {node: '>=0.10.0'} + dev: true + + /is-shared-array-buffer@1.0.2: + resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + dependencies: + call-bind: 1.0.2 + dev: true + + /is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + dev: true + /is-stream@3.0.0: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true + /is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + /is-text-path@1.0.1: resolution: {integrity: sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==} engines: {node: '>=0.10.0'} @@ -2679,15 +4405,36 @@ packages: text-extensions: 1.9.0 dev: true + /is-typed-array@1.1.10: + resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.0 + dev: true + /is-unicode-supported@1.3.0: resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} engines: {node: '>=12'} dev: true + /is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + dependencies: + call-bind: 1.0.2 + dev: true + /isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} dev: true + /isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + dev: true + /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true @@ -2712,11 +4459,31 @@ packages: '@pkgjs/parseargs': 0.11.0 dev: true + /jake@10.8.7: + resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==} + engines: {node: '>=10'} + hasBin: true + dependencies: + async: 3.2.4 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 + dev: true + /java-properties@1.0.2: resolution: {integrity: sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==} engines: {node: '>= 0.6.0'} dev: true + /jest-worker@26.6.2: + resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} + engines: {node: '>= 10.13.0'} + dependencies: + '@types/node': 20.3.1 + merge-stream: 2.0.0 + supports-color: 7.2.0 + dev: true + /jju@1.4.0: resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} dev: true @@ -2731,6 +4498,17 @@ packages: argparse: 2.0.1 dev: true + /jsesc@0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true + dev: true + + /jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + dev: true + /json-parse-better-errors@1.0.2: resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} dev: true @@ -2748,6 +4526,14 @@ packages: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} dev: true + /json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + dev: true + + /json-schema@0.4.0: + resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + dev: true + /json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} dev: true @@ -2756,6 +4542,12 @@ packages: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} dev: true + /json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + dev: true + /jsonc-parser@3.2.0: resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} dev: true @@ -2779,6 +4571,11 @@ packages: engines: {'0': node >= 0.2.0} dev: true + /jsonpointer@5.0.1: + resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} + engines: {node: '>=0.10.0'} + dev: true + /kind-of@6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} @@ -2788,6 +4585,11 @@ packages: resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} dev: true + /leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + dev: true + /levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -2899,6 +4701,10 @@ packages: resolution: {integrity: sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==} dev: true + /lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + dev: true + /lodash.escaperegexp@4.1.2: resolution: {integrity: sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==} dev: true @@ -2927,6 +4733,10 @@ packages: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true + /lodash.sortby@4.7.0: + resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + dev: true + /lodash.uniqby@4.7.0: resolution: {integrity: sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==} dev: true @@ -2956,6 +4766,12 @@ packages: engines: {node: 14 || >=16.14} dev: true + /lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + dependencies: + yallist: 3.1.1 + dev: true + /lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} @@ -2968,6 +4784,12 @@ packages: engines: {node: '>=12'} dev: true + /magic-string@0.25.9: + resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} + dependencies: + sourcemap-codec: 1.4.8 + dev: true + /magic-string@0.29.0: resolution: {integrity: sha512-WcfidHrDjMY+eLjlU+8OvwREqHwpgCeKVBUpQ3OhYYuvfaYCUgcbuBzappNzZvg/v8onU3oQj+BYpkOJe9Iw4Q==} engines: {node: '>=12'} @@ -3078,6 +4900,13 @@ packages: brace-expansion: 1.1.11 dev: true + /minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + dev: true + /minimatch@7.4.6: resolution: {integrity: sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==} engines: {node: '>=10'} @@ -3173,6 +5002,10 @@ packages: whatwg-url: 5.0.0 dev: true + /node-releases@2.0.13: + resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} + dev: true + /normalize-package-data@2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} dependencies: @@ -3302,6 +5135,21 @@ packages: resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} dev: true + /object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + dev: true + + /object.assign@4.1.4: + resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + has-symbols: 1.0.3 + object-keys: 1.1.1 + dev: true + /once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: @@ -3590,6 +5438,16 @@ packages: hasBin: true dev: true + /pretty-bytes@5.6.0: + resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} + engines: {node: '>=6'} + dev: true + + /pretty-bytes@6.1.1: + resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==} + engines: {node: ^14.13.1 || >=16.0.0} + dev: true + /process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} dev: true @@ -3612,6 +5470,12 @@ packages: engines: {node: '>=8'} dev: true + /randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + dependencies: + safe-buffer: 5.2.1 + dev: true + /rc@1.2.8: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true @@ -3720,6 +5584,48 @@ packages: esprima: 4.0.1 dev: true + /regenerate-unicode-properties@10.1.0: + resolution: {integrity: sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==} + engines: {node: '>=4'} + dependencies: + regenerate: 1.4.2 + dev: true + + /regenerate@1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + dev: true + + /regenerator-runtime@0.13.11: + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + dev: true + + /regenerator-transform@0.15.1: + resolution: {integrity: sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==} + dependencies: + '@babel/runtime': 7.22.6 + dev: true + + /regexp.prototype.flags@1.5.0: + resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + functions-have-names: 1.2.3 + dev: true + + /regexpu-core@5.3.2: + resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} + engines: {node: '>=4'} + dependencies: + '@babel/regjsgen': 0.8.0 + regenerate: 1.4.2 + regenerate-unicode-properties: 10.1.0 + regjsparser: 0.9.1 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.1.0 + dev: true + /registry-auth-token@5.0.2: resolution: {integrity: sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==} engines: {node: '>=14'} @@ -3727,11 +5633,23 @@ packages: '@pnpm/npm-conf': 2.2.2 dev: true + /regjsparser@0.9.1: + resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} + hasBin: true + dependencies: + jsesc: 0.5.0 + dev: true + /require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} dev: true + /require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + dev: true + /resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -3790,6 +5708,27 @@ packages: glob: 10.3.1 dev: true + /rollup-plugin-terser@7.0.2(rollup@2.79.1): + resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} + deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser + peerDependencies: + rollup: ^2.0.0 + dependencies: + '@babel/code-frame': 7.22.5 + jest-worker: 26.6.2 + rollup: 2.79.1 + serialize-javascript: 4.0.0 + terser: 5.19.1 + dev: true + + /rollup@2.79.1: + resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} + engines: {node: '>=10.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.2 + dev: true + /rollup@3.26.1: resolution: {integrity: sha512-I5gJCSpSMr3U9wv4D5YA8g7w7cj3eaSDeo7t+JcaFQOmoOUBgu4K9iMp8k3EZnwbJrjQxUMSKxMyB8qEQzzaSg==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} @@ -3810,6 +5749,16 @@ packages: tslib: 2.6.0 dev: true + /safe-array-concat@1.0.0: + resolution: {integrity: sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==} + engines: {node: '>=0.4'} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + has-symbols: 1.0.3 + isarray: 2.0.5 + dev: true + /safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} dev: true @@ -3818,6 +5767,14 @@ packages: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} dev: true + /safe-regex-test@1.0.0: + resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + is-regex: 1.1.4 + dev: true + /sdp@3.2.0: resolution: {integrity: sha512-d7wDPgDV3DDiqulJjKiV2865wKsJ34YI+NDREbm+FySq6WuKOikwyNQcm+doLAZ1O6ltdO0SeKle2xMpN3Brgw==} dev: false @@ -3887,6 +5844,11 @@ packages: hasBin: true dev: true + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + dev: true + /semver@7.3.8: resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} engines: {node: '>=10'} @@ -3903,6 +5865,12 @@ packages: lru-cache: 6.0.0 dev: true + /serialize-javascript@4.0.0: + resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} + dependencies: + randombytes: 2.1.0 + dev: true + /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -3924,6 +5892,14 @@ packages: vscode-textmate: 8.0.0 dev: true + /side-channel@1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + object-inspect: 1.12.3 + dev: true + /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} dev: true @@ -3983,11 +5959,30 @@ packages: engines: {node: '>=0.10.0'} dev: true + /source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + dev: true + /source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} dev: true + /source-map@0.8.0-beta.0: + resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} + engines: {node: '>= 8'} + dependencies: + whatwg-url: 7.1.0 + dev: true + + /sourcemap-codec@1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + deprecated: Please use @jridgewell/sourcemap-codec instead + dev: true + /spawn-error-forwarder@1.0.0: resolution: {integrity: sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g==} dev: true @@ -4066,6 +6061,44 @@ packages: strip-ansi: 7.1.0 dev: true + /string.prototype.matchall@4.0.8: + resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + get-intrinsic: 1.2.1 + has-symbols: 1.0.3 + internal-slot: 1.0.5 + regexp.prototype.flags: 1.5.0 + side-channel: 1.0.4 + dev: true + + /string.prototype.trim@1.2.7: + resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + dev: true + + /string.prototype.trimend@1.0.6: + resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + dev: true + + /string.prototype.trimstart@1.0.6: + resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.2.0 + es-abstract: 1.22.1 + dev: true + /string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} dependencies: @@ -4078,6 +6111,15 @@ packages: safe-buffer: 5.2.1 dev: true + /stringify-object@3.3.0: + resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} + engines: {node: '>=4'} + dependencies: + get-own-enumerable-property-symbols: 3.0.2 + is-obj: 1.0.1 + is-regexp: 1.0.0 + dev: true + /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -4097,6 +6139,11 @@ packages: engines: {node: '>=4'} dev: true + /strip-comments@2.0.1: + resolution: {integrity: sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==} + engines: {node: '>=10'} + dev: true + /strip-final-newline@3.0.0: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} @@ -4155,6 +6202,16 @@ packages: engines: {node: '>=8'} dev: true + /tempy@0.6.0: + resolution: {integrity: sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==} + engines: {node: '>=10'} + dependencies: + is-stream: 2.0.1 + temp-dir: 2.0.0 + type-fest: 0.16.0 + unique-string: 2.0.0 + dev: true + /tempy@3.0.0: resolution: {integrity: sha512-B2I9X7+o2wOaW4r/CWMkpOO9mdiTRCxXNgob6iGvPmfPWgH/KyUD6Uy5crtWBxIBe3YrNZKR2lSzv1JJKWD4vA==} engines: {node: '>=14.16'} @@ -4165,6 +6222,17 @@ packages: unique-string: 3.0.0 dev: true + /terser@5.19.1: + resolution: {integrity: sha512-27hxBUVdV6GoNg1pKQ7Z5cbR6V9txPVyBA+FQw3BaZ1Wuzvztce5p156DaP0NVZNrMZZ+6iG9Syf7WgMNKDg2Q==} + engines: {node: '>=10'} + hasBin: true + dependencies: + '@jridgewell/source-map': 0.3.5 + acorn: 8.10.0 + commander: 2.20.3 + source-map-support: 0.5.21 + dev: true + /text-extensions@1.9.0: resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==} engines: {node: '>=0.10'} @@ -4201,6 +6269,12 @@ packages: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} dev: true + /tr46@1.0.1: + resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} + dependencies: + punycode: 2.3.0 + dev: true + /traverse@0.6.7: resolution: {integrity: sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==} dev: true @@ -4242,6 +6316,11 @@ packages: prelude-ls: 1.2.1 dev: true + /type-fest@0.16.0: + resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} + engines: {node: '>=10'} + dev: true + /type-fest@0.18.1: resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} engines: {node: '>=10'} @@ -4282,6 +6361,44 @@ packages: engines: {node: '>=14.16'} dev: true + /typed-array-buffer@1.0.0: + resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + is-typed-array: 1.1.10 + dev: true + + /typed-array-byte-length@1.0.0: + resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.10 + dev: true + + /typed-array-byte-offset@1.0.0: + resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.10 + dev: true + + /typed-array-length@1.0.4: + resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + dependencies: + call-bind: 1.0.2 + for-each: 0.3.3 + is-typed-array: 1.1.10 + dev: true + /typescript@5.0.4: resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==} engines: {node: '>=12.20'} @@ -4302,6 +6419,45 @@ packages: dev: true optional: true + /unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + dependencies: + call-bind: 1.0.2 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 + dev: true + + /unicode-canonical-property-names-ecmascript@2.0.0: + resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} + engines: {node: '>=4'} + dev: true + + /unicode-match-property-ecmascript@2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + dependencies: + unicode-canonical-property-names-ecmascript: 2.0.0 + unicode-property-aliases-ecmascript: 2.1.0 + dev: true + + /unicode-match-property-value-ecmascript@2.1.0: + resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} + engines: {node: '>=4'} + dev: true + + /unicode-property-aliases-ecmascript@2.1.0: + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + engines: {node: '>=4'} + dev: true + + /unique-string@2.0.0: + resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} + engines: {node: '>=8'} + dependencies: + crypto-random-string: 2.0.0 + dev: true + /unique-string@3.0.0: resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==} engines: {node: '>=12'} @@ -4323,6 +6479,22 @@ packages: engines: {node: '>= 10.0.0'} dev: true + /upath@1.2.0: + resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} + engines: {node: '>=4'} + dev: true + + /update-browserslist-db@1.0.11(browserslist@4.21.9): + resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.21.9 + escalade: 3.1.1 + picocolors: 1.0.0 + dev: true + /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: @@ -4358,7 +6530,7 @@ packages: engines: {node: '>= 0.10'} dev: true - /vite-plugin-dts@2.3.0(@types/node@20.3.1)(vite@4.3.9): + /vite-plugin-dts@2.3.0(@types/node@20.3.1)(rollup@2.79.1)(vite@4.3.9): resolution: {integrity: sha512-WbJgGtsStgQhdm3EosYmIdTGbag5YQpZ3HXWUAPCDyoXI5qN6EY0V7NXq0lAmnv9hVQsvh0htbYcg0Or5Db9JQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -4366,7 +6538,7 @@ packages: dependencies: '@babel/parser': 7.22.6 '@microsoft/api-extractor': 7.36.1(@types/node@20.3.1) - '@rollup/pluginutils': 5.0.2 + '@rollup/pluginutils': 5.0.2(rollup@2.79.1) '@rushstack/node-core-library': 3.59.5(@types/node@20.3.1) debug: 4.3.4 fast-glob: 3.2.12 @@ -4381,6 +6553,24 @@ packages: - supports-color dev: true + /vite-plugin-pwa@0.16.4(vite@4.3.9)(workbox-build@7.0.0)(workbox-window@7.0.0): + resolution: {integrity: sha512-lmwHFIs9zI2H9bXJld/zVTbCqCQHZ9WrpyDMqosICDV0FVnCJwniX1NMDB79HGTIZzOQkY4gSZaVTJTw6maz/Q==} + engines: {node: '>=16.0.0'} + peerDependencies: + vite: ^3.1.0 || ^4.0.0 + workbox-build: ^7.0.0 + workbox-window: ^7.0.0 + dependencies: + debug: 4.3.4 + fast-glob: 3.3.0 + pretty-bytes: 6.1.1 + vite: 4.3.9(@types/node@20.3.1) + workbox-build: 7.0.0 + workbox-window: 7.0.0 + transitivePeerDependencies: + - supports-color + dev: true + /vite@4.3.9(@types/node@20.3.1): resolution: {integrity: sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==} engines: {node: ^14.18.0 || >=16.0.0} @@ -4531,6 +6721,10 @@ packages: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} dev: true + /webidl-conversions@4.0.2: + resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + dev: true + /webrtc-adapter@8.2.2: resolution: {integrity: sha512-jQWwqiAEAFZamWliJo0Q+dIC6ZMJ8BgCFvW/oXWVFby1Nw14dOUfPwZ3lVe4nafDXdTyCUT7xfLt5xXiioXUCQ==} engines: {node: '>=6.0.0', npm: '>=3.10.0'} @@ -4545,6 +6739,36 @@ packages: webidl-conversions: 3.0.1 dev: true + /whatwg-url@7.1.0: + resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} + dependencies: + lodash.sortby: 4.7.0 + tr46: 1.0.1 + webidl-conversions: 4.0.2 + dev: true + + /which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 + dev: true + + /which-typed-array@1.1.10: + resolution: {integrity: sha512-uxoA5vLUfRPdjCuJ1h5LlYdmTLbYfums398v3WLkM+i/Wltl2/XyZpQWKbN++ck5L64SR/grOHqtXCUKmlZPNA==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.0 + is-typed-array: 1.1.10 + dev: true + /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -4557,6 +6781,152 @@ packages: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} dev: true + /workbox-background-sync@7.0.0: + resolution: {integrity: sha512-S+m1+84gjdueM+jIKZ+I0Lx0BDHkk5Nu6a3kTVxP4fdj3gKouRNmhO8H290ybnJTOPfBDtTMXSQA/QLTvr7PeA==} + dependencies: + idb: 7.1.1 + workbox-core: 7.0.0 + dev: true + + /workbox-broadcast-update@7.0.0: + resolution: {integrity: sha512-oUuh4jzZrLySOo0tC0WoKiSg90bVAcnE98uW7F8GFiSOXnhogfNDGZelPJa+6KpGBO5+Qelv04Hqx2UD+BJqNQ==} + dependencies: + workbox-core: 7.0.0 + dev: true + + /workbox-build@7.0.0: + resolution: {integrity: sha512-CttE7WCYW9sZC+nUYhQg3WzzGPr4IHmrPnjKiu3AMXsiNQKx+l4hHl63WTrnicLmKEKHScWDH8xsGBdrYgtBzg==} + engines: {node: '>=16.0.0'} + dependencies: + '@apideck/better-ajv-errors': 0.3.6(ajv@8.12.0) + '@babel/core': 7.22.9 + '@babel/preset-env': 7.22.9(@babel/core@7.22.9) + '@babel/runtime': 7.22.6 + '@rollup/plugin-babel': 5.3.1(@babel/core@7.22.9)(rollup@2.79.1) + '@rollup/plugin-node-resolve': 11.2.1(rollup@2.79.1) + '@rollup/plugin-replace': 2.4.2(rollup@2.79.1) + '@surma/rollup-plugin-off-main-thread': 2.2.3 + ajv: 8.12.0 + common-tags: 1.8.2 + fast-json-stable-stringify: 2.1.0 + fs-extra: 9.1.0 + glob: 7.2.3 + lodash: 4.17.21 + pretty-bytes: 5.6.0 + rollup: 2.79.1 + rollup-plugin-terser: 7.0.2(rollup@2.79.1) + source-map: 0.8.0-beta.0 + stringify-object: 3.3.0 + strip-comments: 2.0.1 + tempy: 0.6.0 + upath: 1.2.0 + workbox-background-sync: 7.0.0 + workbox-broadcast-update: 7.0.0 + workbox-cacheable-response: 7.0.0 + workbox-core: 7.0.0 + workbox-expiration: 7.0.0 + workbox-google-analytics: 7.0.0 + workbox-navigation-preload: 7.0.0 + workbox-precaching: 7.0.0 + workbox-range-requests: 7.0.0 + workbox-recipes: 7.0.0 + workbox-routing: 7.0.0 + workbox-strategies: 7.0.0 + workbox-streams: 7.0.0 + workbox-sw: 7.0.0 + workbox-window: 7.0.0 + transitivePeerDependencies: + - '@types/babel__core' + - supports-color + dev: true + + /workbox-cacheable-response@7.0.0: + resolution: {integrity: sha512-0lrtyGHn/LH8kKAJVOQfSu3/80WDc9Ma8ng0p2i/5HuUndGttH+mGMSvOskjOdFImLs2XZIimErp7tSOPmu/6g==} + dependencies: + workbox-core: 7.0.0 + dev: true + + /workbox-core@7.0.0: + resolution: {integrity: sha512-81JkAAZtfVP8darBpfRTovHg8DGAVrKFgHpOArZbdFd78VqHr5Iw65f2guwjE2NlCFbPFDoez3D3/6ZvhI/rwQ==} + dev: true + + /workbox-expiration@7.0.0: + resolution: {integrity: sha512-MLK+fogW+pC3IWU9SFE+FRStvDVutwJMR5if1g7oBJx3qwmO69BNoJQVaMXq41R0gg3MzxVfwOGKx3i9P6sOLQ==} + dependencies: + idb: 7.1.1 + workbox-core: 7.0.0 + dev: true + + /workbox-google-analytics@7.0.0: + resolution: {integrity: sha512-MEYM1JTn/qiC3DbpvP2BVhyIH+dV/5BjHk756u9VbwuAhu0QHyKscTnisQuz21lfRpOwiS9z4XdqeVAKol0bzg==} + dependencies: + workbox-background-sync: 7.0.0 + workbox-core: 7.0.0 + workbox-routing: 7.0.0 + workbox-strategies: 7.0.0 + dev: true + + /workbox-navigation-preload@7.0.0: + resolution: {integrity: sha512-juWCSrxo/fiMz3RsvDspeSLGmbgC0U9tKqcUPZBCf35s64wlaLXyn2KdHHXVQrb2cqF7I0Hc9siQalainmnXJA==} + dependencies: + workbox-core: 7.0.0 + dev: true + + /workbox-precaching@7.0.0: + resolution: {integrity: sha512-EC0vol623LJqTJo1mkhD9DZmMP604vHqni3EohhQVwhJlTgyKyOkMrZNy5/QHfOby+39xqC01gv4LjOm4HSfnA==} + dependencies: + workbox-core: 7.0.0 + workbox-routing: 7.0.0 + workbox-strategies: 7.0.0 + dev: true + + /workbox-range-requests@7.0.0: + resolution: {integrity: sha512-SxAzoVl9j/zRU9OT5+IQs7pbJBOUOlriB8Gn9YMvi38BNZRbM+RvkujHMo8FOe9IWrqqwYgDFBfv6sk76I1yaQ==} + dependencies: + workbox-core: 7.0.0 + dev: true + + /workbox-recipes@7.0.0: + resolution: {integrity: sha512-DntcK9wuG3rYQOONWC0PejxYYIDHyWWZB/ueTbOUDQgefaeIj1kJ7pdP3LZV2lfrj8XXXBWt+JDRSw1lLLOnww==} + dependencies: + workbox-cacheable-response: 7.0.0 + workbox-core: 7.0.0 + workbox-expiration: 7.0.0 + workbox-precaching: 7.0.0 + workbox-routing: 7.0.0 + workbox-strategies: 7.0.0 + dev: true + + /workbox-routing@7.0.0: + resolution: {integrity: sha512-8YxLr3xvqidnbVeGyRGkaV4YdlKkn5qZ1LfEePW3dq+ydE73hUUJJuLmGEykW3fMX8x8mNdL0XrWgotcuZjIvA==} + dependencies: + workbox-core: 7.0.0 + dev: true + + /workbox-strategies@7.0.0: + resolution: {integrity: sha512-dg3qJU7tR/Gcd/XXOOo7x9QoCI9nk74JopaJaYAQ+ugLi57gPsXycVdBnYbayVj34m6Y8ppPwIuecrzkpBVwbA==} + dependencies: + workbox-core: 7.0.0 + dev: true + + /workbox-streams@7.0.0: + resolution: {integrity: sha512-moVsh+5to//l6IERWceYKGiftc+prNnqOp2sgALJJFbnNVpTXzKISlTIsrWY+ogMqt+x1oMazIdHj25kBSq/HQ==} + dependencies: + workbox-core: 7.0.0 + workbox-routing: 7.0.0 + dev: true + + /workbox-sw@7.0.0: + resolution: {integrity: sha512-SWfEouQfjRiZ7GNABzHUKUyj8pCoe+RwjfOIajcx6J5mtgKkN+t8UToHnpaJL5UVVOf5YhJh+OHhbVNIHe+LVA==} + dev: true + + /workbox-window@7.0.0: + resolution: {integrity: sha512-j7P/bsAWE/a7sxqTzXo3P2ALb1reTfZdvVp6OJ/uLr/C2kZAMvjeWGm8V4htQhor7DOvYg0sSbFN2+flT5U0qA==} + dependencies: + '@types/trusted-types': 2.0.3 + workbox-core: 7.0.0 + dev: true + /wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} @@ -4603,6 +6973,10 @@ packages: engines: {node: '>=10'} dev: true + /yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + dev: true + /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} dev: true diff --git a/src/components/QrcodeStream.vue b/src/components/QrcodeStream.vue index 044dae5e..eba64d1d 100644 --- a/src/components/QrcodeStream.vue +++ b/src/components/QrcodeStream.vue @@ -54,12 +54,12 @@ const props = defineProps({ const emit = defineEmits(['detect', 'camera-on', 'camera-off', 'error']) -// refs +// DOM refs const pauseFrameRef = ref() const trackingLayerRef = ref() const videoRef = ref() -// data +// Whether the camera is currently streaming or not const cameraActive = ref(false) // `isMounted` sensitively influences many other reactive values but we make sure @@ -70,11 +70,11 @@ onMounted(() => { isMounted.value = true }) -// Initially assumed, that setting `isMounted.value = false` in a -// `onBeforeUnmounted` hook, would trigger the watcher on `cameraSettings` -// one last time before the component is destroyed. But apparently the -// watcher is not called in time. So we need to stop the camera directly. onUnmounted(() => { + // Initially assumed, that setting `isMounted.value = false` in a + // `onBeforeUnmounted` hook, would trigger the watcher on `cameraSettings` + // one last time before the component is destroyed. But apparently the + // watcher is not called in time. So we need to stop the camera directly. cameraController.stop() }) @@ -155,86 +155,95 @@ watch(shouldScan, shouldScan => { }) // methods +const clearCanvas = (canvas: HTMLCanvasElement) => { + const ctx = canvas.getContext('2d') + + console.assert( + ctx !== undefined, + 'tried to clear canvas with undefined 2D context' + ) + + ctx.clearRect(0, 0, canvas.width, canvas.height) +} + const onLocate = (detectedCodes: DetectedBarcode[]) => { const canvas = trackingLayerRef.value const video = videoRef.value - if (canvas !== undefined) { - if (detectedCodes.length > 0 && props.track !== undefined && video !== undefined) { - // The visually occupied area of the video element. - // Because the component is responsive and fills the available space, - // this can be more or less than the actual resolution of the camera. - const displayWidth = video.offsetWidth - const displayHeight = video.offsetHeight - - // The actual resolution of the camera. - // These values are fixed no matter the screen size. - const resolutionWidth = video.videoWidth - const resolutionHeight = video.videoHeight - - // Dimensions of the video element as if there would be no - // object-fit: cover; - // Thus, the ratio is the same as the cameras resolution but it's - // scaled down to the size of the visually occupied area. - const largerRatio = Math.max(displayWidth / resolutionWidth, displayHeight / resolutionHeight) - const uncutWidth = resolutionWidth * largerRatio - const uncutHeight = resolutionHeight * largerRatio - - const xScalar = uncutWidth / resolutionWidth - const yScalar = uncutHeight / resolutionHeight - const xOffset = (displayWidth - uncutWidth) / 2 - const yOffset = (displayHeight - uncutHeight) / 2 - - const scale = ({ x, y }: Point) => { - return { - x: Math.floor(x * xScalar), - y: Math.floor(y * yScalar) - } + console.assert( + canvas !== undefined && video !== undefined, + 'onLocate handler called although component is not mounted' + ) + + if (detectedCodes.length === 0 || props.track === undefined) { + clearCanvas(canvas) + } else { + // The visually occupied area of the video element. + // Because the component is responsive and fills the available space, + // this can be more or less than the actual resolution of the camera. + const displayWidth = video.offsetWidth + const displayHeight = video.offsetHeight + + // The actual resolution of the camera. + // These values are fixed no matter the screen size. + const resolutionWidth = video.videoWidth + const resolutionHeight = video.videoHeight + + // Dimensions of the video element as if there would be no + // object-fit: cover; + // Thus, the ratio is the same as the cameras resolution but it's + // scaled down to the size of the visually occupied area. + const largerRatio = Math.max(displayWidth / resolutionWidth, displayHeight / resolutionHeight) + const uncutWidth = resolutionWidth * largerRatio + const uncutHeight = resolutionHeight * largerRatio + + const xScalar = uncutWidth / resolutionWidth + const yScalar = uncutHeight / resolutionHeight + const xOffset = (displayWidth - uncutWidth) / 2 + const yOffset = (displayHeight - uncutHeight) / 2 + + const scale = ({ x, y }: Point) => { + return { + x: Math.floor(x * xScalar), + y: Math.floor(y * yScalar) } + } - const translate = ({ x, y }: Point) => { - return { - x: Math.floor(x + xOffset), - y: Math.floor(y + yOffset) - } + const translate = ({ x, y }: Point) => { + return { + x: Math.floor(x + xOffset), + y: Math.floor(y + yOffset) } + } - const adjustedCodes = detectedCodes.map((detectedCode) => { - const { boundingBox, cornerPoints } = detectedCode - - const { x, y } = translate( - scale({ - x: boundingBox.x, - y: boundingBox.y - }) - ) - const { x: width, y: height } = scale({ - x: boundingBox.width, - y: boundingBox.height - }) + const adjustedCodes = detectedCodes.map((detectedCode) => { + const { boundingBox, cornerPoints } = detectedCode - return { - ...detectedCode, - cornerPoints: cornerPoints.map((point) => translate(scale(point))), - boundingBox: DOMRectReadOnly.fromRect({ x, y, width, height }) - } + const { x, y } = translate( + scale({ + x: boundingBox.x, + y: boundingBox.y + }) + ) + const { x: width, y: height } = scale({ + x: boundingBox.width, + y: boundingBox.height }) - canvas.width = video.offsetWidth - canvas.height = video.offsetHeight + return { + ...detectedCode, + cornerPoints: cornerPoints.map((point) => translate(scale(point))), + boundingBox: DOMRectReadOnly.fromRect({ x, y, width, height }) + } + }) - const ctx = canvas.getContext('2d') + canvas.width = video.offsetWidth + canvas.height = video.offsetHeight - props.track(adjustedCodes, ctx) - } else { - clearCanvas(canvas) - } - } -} + const ctx = canvas.getContext('2d') -const clearCanvas = (canvas: HTMLCanvasElement) => { - const ctx = canvas.getContext('2d') - ctx?.clearRect(0, 0, canvas.width, canvas.height) + props.track(adjustedCodes, ctx) + } } diff --git a/src/misc/callforth.ts b/src/misc/callforth.ts index d14ea1cc..94647417 100644 --- a/src/misc/callforth.ts +++ b/src/misc/callforth.ts @@ -1,13 +1,13 @@ export const eventOn = ( - eventTarget: any, + eventTarget: EventTarget, successEvent: string, errorEvent = 'error' -) => { - let $resolve: (value: unknown) => void - let $reject: (reason?: any) => void +) : Promise => { + let $resolve: (value: Event) => void + let $reject: (reason?: Event) => void const promise = new Promise( - (resolve: (value: unknown) => void, reject: (reason?: any) => void) => { + (resolve: (value: Event) => void, reject: (reason?: Event) => void) => { $resolve = resolve $reject = reject diff --git a/src/misc/camera.ts b/src/misc/camera.ts index 7ae23d59..c3015b1d 100644 --- a/src/misc/camera.ts +++ b/src/misc/camera.ts @@ -1,4 +1,4 @@ -import { StreamApiNotSupportedError, InsecureContextError } from './errors' +import { StreamApiNotSupportedError, InsecureContextError, StreamLoadTimeoutError } from './errors' import { eventOn, timeout } from './callforth' import shimGetUserMedia from './shimGetUserMedia' @@ -14,7 +14,9 @@ let cameraState : Camera = { isActive: false } export function stop() { if (cameraState.isActive) { + cameraState.videoEl.src = "" cameraState.videoEl.srcObject = null + cameraState.videoEl.load() for (const track of cameraState.stream.getTracks()) { cameraState.stream.removeTrack(track) @@ -80,7 +82,17 @@ export async function start( videoEl.src = stream.id } - await eventOn(videoEl, 'loadeddata') + await Promise.race([ + eventOn(videoEl, 'loadeddata'), + + // On iOS devices in PWA mode, QrcodeStream works initially, but after + // killing and restarting the PWA, all video elements fail to load camera + // streams and never emit the `loadeddata` event. Looks like this is + // related to a WebKit issue (see #298). No workarounds at the moment. + // To at least detect this situation, we throw an error if the event + // has not been emitted after a 3 second timeout. + timeout(3000).then(() => { throw new StreamLoadTimeoutError() }) + ]) // According to: https://oberhofer.co/mediastreamtrack-and-its-capabilities/#queryingcapabilities // On some devices, getCapabilities only returns a non-empty object after diff --git a/src/misc/errors.ts b/src/misc/errors.ts index 4401a22e..51c27aef 100644 --- a/src/misc/errors.ts +++ b/src/misc/errors.ts @@ -23,3 +23,11 @@ export class InsecureContextError extends Error { this.name = 'InsecureContextError' } } + +export class StreamLoadTimeoutError extends Error { + constructor() { + super('Loading camera stream timed out after 3 seconds. If you are on iOS in PWA mode, this is a known issue (see https://github.com/gruhn/vue-qrcode-reader/issues/298)') + + this.name = 'StreamLoadTimeoutError' + } +} diff --git a/vite.config.ts b/vite.config.ts index d05c3d66..7d4f0d04 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,6 +1,5 @@ import { resolve } from 'node:path' import { fileURLToPath, URL } from 'node:url' - import vue from '@vitejs/plugin-vue' import { defineConfig } from 'vite' import dts from 'vite-plugin-dts' @@ -28,5 +27,5 @@ export default defineConfig({ alias: { '@': fileURLToPath(new URL('./src', import.meta.url)) } - } + }, })