From 6b46b4648f7e81b26451e32a27e71bfd044653aa Mon Sep 17 00:00:00 2001 From: at24_bioeng625-pc Date: Wed, 26 Aug 2026 14:34:37 +0100 Subject: [PATCH 1/5] fix(flip-ui): scope shipped packages as dependencies (#1041) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Dependabot derives an alert's "Development" scope label from whether a package is reachable only through devDependencies. Sixteen packages that `src/` imports — and that vite therefore bundles into the production `dist/` — were declared as devDependencies, so an alert on any of them would arrive labelled "Development" and read as not-shipped, when it is in the bundle deploy-ui syncs to S3 and CloudFront serves. `husky`, a git-hook tool, had drifted the other way. Move all sixteen into dependencies and husky into devDependencies. Version specifiers are unchanged; the regenerated lockfile carries no version/resolved/integrity change, only the `dev: true` flags that follow from the stanza move. The change is inert at build and install time: vite tree-shakes from the `src/` entry points regardless of stanza, and no install path in the repo uses --omit=dev. Verified by building `dist/` from develop's manifest and from this one — all 113 files match by content-hashed name and byte size. #1041 originally listed eight packages. A re-sweep found sixteen; the issue body has been corrected. The eight it missed are @headlessui/vue, @popperjs/core, codemirror-editor-vue3, date-fns, mime, mitt, underscore and vuejs-smart-table (the last imported by src/main.ts itself). highlight.js is deliberately left in dependencies. It has no static import, so a `from "..."` grep reads it as dev-only, but it is loaded via `import("highlight.js/lib/core")` in src/utils/highlightJson.ts and does ship — hence the README note documents matching dynamic import() too, so the next audit does not "fix" it in the wrong direction. Signed-off-by: at24_bioeng625-pc --- flip-ui/README.md | 20 +++ flip-ui/package-lock.json | 327 +++----------------------------------- flip-ui/package.json | 38 ++--- 3 files changed, 59 insertions(+), 326 deletions(-) diff --git a/flip-ui/README.md b/flip-ui/README.md index 1e7222906..60d32c736 100644 --- a/flip-ui/README.md +++ b/flip-ui/README.md @@ -130,6 +130,26 @@ Client ID are required for a production deployment. > [`vite.config.mts`](vite.config.mts)). Use `VITE_LOCAL` only with `npm run dev` against a mocked API, and never > set `VITE_DEMO` at all — the demo build gets it from `--mode demo`. Keep both out of CI and deploy environments. +### Dependency scoping + +**If a non-test file under `src/` imports a package — statically or through a dynamic `import()` — it belongs in +`dependencies`, not `devDependencies`.** + +The build itself does not care: `vite build` tree-shakes from the `src/` entry points and bundles whatever they +reach, whichever stanza the package sits in. The stanza matters because **Dependabot derives an alert's scope +label from it**. A package that ships to users but sits in `devDependencies` produces an alert labelled +"Development", which reads as *not in the production bundle* and invites a wrongly-dismissed alert on code that +CloudFront is serving to every user. FLIP#1041 fixed 16 such packages (`axios`, `pinia`, `aws-amplify`, +`vee-validate` among them) plus `husky`, which had drifted the other way. + +Two traps when checking this: + +- **`src/` also holds the co-located `*.spec.ts` unit tests.** Their imports (`vitest`, `@vue/test-utils`, + `@pinia/testing`) are genuinely dev-only — exclude test files before concluding a package ships. +- **A `from "..."` grep alone under-reports.** `highlight.js` is loaded lazily via + `import("highlight.js/lib/core")` in [`src/utils/highlightJson.ts`](src/utils/highlightJson.ts) and is + correctly a `dependency` despite having no static import. + ## Testing ### Unit tests (Vitest) diff --git a/flip-ui/package-lock.json b/flip-ui/package-lock.json index 60b22293c..c4f245be4 100644 --- a/flip-ui/package-lock.json +++ b/flip-ui/package-lock.json @@ -8,23 +8,36 @@ "name": "flip-ui", "version": "0.5.0", "dependencies": { + "@headlessui/vue": "^1.7.0", + "@popperjs/core": "^2.10.2", + "@vueuse/core": "^8.7.5", + "aws-amplify": "^6.15.3", + "axios": "^1.16.0", + "codemirror-editor-vue3": "^2.1.7", + "date-fns": "^2.25.0", "echarts": "^6.1.0", "highlight.js": "^10.7.3", - "husky": "^9.1.7", "jszip": "^3.10.1", + "mime": "^2.5.2", + "mitt": "^3.0.0", + "pinia": "^2.1.7", "qrcode": "^1.5.4", + "swrv": "^1.0.4", + "underscore": "^1.13.4", + "vee-validate": "^4.5.8", "vue": "^3.2.16", - "vue-router": "^4.0.11" + "vue-router": "^4.0.11", + "vue-tippy": "^6.3.1", + "vuejs-smart-table": "^1.0.0-beta.5", + "yup": "^0.32.9" }, "devDependencies": { "@babel/node": "^7.8.7", "@babel/preset-env": "^7.14.7", "@cypress/vite-dev-server": "^3.0.0", "@cypress/vue": "^3.0.5", - "@headlessui/vue": "^1.7.0", "@iconify/json": "^2.2.496", "@pinia/testing": "^0.1.3", - "@popperjs/core": "^2.10.2", "@stylistic/eslint-plugin": "^5.10.0", "@tailwindcss/forms": "^0.5.2", "@tailwindcss/typography": "^0.5.4", @@ -42,38 +55,28 @@ "@vue/eslint-config-typescript": "^14.7.0", "@vue/test-utils": "^2.0.0", "@vueuse/components": "^9.2.0", - "@vueuse/core": "^8.7.5", "autoprefixer": "^10.4.7", - "aws-amplify": "^6.15.3", - "axios": "^1.16.0", "c8": "^11.0.0", - "codemirror-editor-vue3": "^2.1.7", "cypress": "14.5.2", "cypress-file-upload": "^5.0.8", "cypress-localstorage-commands": "^2.2.0", - "date-fns": "^2.25.0", "dotenv": "^16.0.3", "eslint": "^10.1.0", "eslint-plugin-simple-import-sort": "^13.0.0", "eslint-plugin-vue": "^10.8.0", + "husky": "^9.1.7", "jsdom": "^29.0.1", "lucene": "^2.1.1", - "mime": "^2.5.2", "miragejs": "^0.1.42", - "mitt": "^3.0.0", - "pinia": "^2.1.7", "postcss": "^8.4.5", "start-server-and-test": "^2.0.12", - "swrv": "^1.0.4", "tailwindcss": "^3.1.8", "ts-jest": "^29.1.2", "ts-node": "^10.9.2", "typescript": "^5.3.3", - "underscore": "^1.13.4", "unplugin-icons": "^0.14.3", "unplugin-vue-components": "^28.8.0", "uuid": "^14.0.0", - "vee-validate": "^4.5.8", "vite": "^8.0.16", "vite-plugin-icons": "^0.2.4", "vite-plugin-pages": "^0.33.3", @@ -85,10 +88,7 @@ "vue-click": "^2.1.7", "vue-eslint-parser": "^10.0.0", "vue-router-mock": "1.0.0", - "vue-tippy": "^6.3.1", - "vue-tsc": "^3.0.3", - "vuejs-smart-table": "^1.0.0-beta.5", - "yup": "^0.32.9" + "vue-tsc": "^3.0.3" }, "engines": { "node": "^20.19.0 || >=22.12.0" @@ -352,7 +352,6 @@ "version": "7.0.93", "resolved": "https://registry.npmjs.org/@aws-amplify/analytics/-/analytics-7.0.93.tgz", "integrity": "sha512-3WoB0VzATJyupTNQ+ZnzE0pLYnpZPtqNN4deZ8gadG5uzGhhvkt9uZtgVnn/QFGb35DnP8qNDTRiM0rL3vjyZQ==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-sdk/client-firehose": "3.982.0", @@ -369,7 +368,6 @@ "version": "6.3.24", "resolved": "https://registry.npmjs.org/@aws-amplify/api/-/api-6.3.24.tgz", "integrity": "sha512-19CVHj+0J35aHMPNzy12nO1mJS4oP68yFUfiMnulSsiVGV5XhUDc/bkdcX0uI7U1SsUSs+9TOBwZg27bzYIGkg==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-amplify/api-graphql": "4.8.5", @@ -386,7 +384,6 @@ "version": "4.8.5", "resolved": "https://registry.npmjs.org/@aws-amplify/api-graphql/-/api-graphql-4.8.5.tgz", "integrity": "sha512-Xu45+MizoethsRfCFIdN9RORenCu0e41tMkiTFVE5oKC76eoOlYHg2LlhG2Lmmasby/Ggi5bZouVxJIcP4IeIA==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-amplify/api-rest": "4.6.3", @@ -403,7 +400,6 @@ "version": "4.6.3", "resolved": "https://registry.npmjs.org/@aws-amplify/api-rest/-/api-rest-4.6.3.tgz", "integrity": "sha512-SPhttyB9SR2p5PkUPmUPfkXNqGrgvdqiNHNHhx7FjHnqFBXLDRtGhzqRbE7faDeAwrcWz1HCtcpk7MLHYt94yg==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.5.0" @@ -416,7 +412,6 @@ "version": "6.19.1", "resolved": "https://registry.npmjs.org/@aws-amplify/auth/-/auth-6.19.1.tgz", "integrity": "sha512-N6bqBUEly/xUiho0X5oGhLEDlQTWsj1i0FquDYsyuav5e9HHQBLNgG1zmpq28lyxtDaUREi/IDx+CD10EpcPcQ==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-js": "5.2.0", @@ -437,7 +432,6 @@ "version": "6.16.1", "resolved": "https://registry.npmjs.org/@aws-amplify/core/-/core-6.16.1.tgz", "integrity": "sha512-WHO6yYegmnZ+K3vnYzVwy+wnxYqSkdFakBIlgm4922QXHOQYWdIl/rrTcaagrpJEGT6YlTnqx1ANIoPojNxWmw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-js": "5.2.0", @@ -454,14 +448,12 @@ "version": "9.0.8", "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", - "dev": true, "license": "MIT" }, "node_modules/@aws-amplify/data-schema": { "version": "1.25.3", "resolved": "https://registry.npmjs.org/@aws-amplify/data-schema/-/data-schema-1.25.3.tgz", "integrity": "sha512-vEyPNky/JPYKazid3sghuRqHsIr7PAnSAgs7LpzXyUM/b3tZvLHcXYzhN9q8zHGiNEMzfq4/ISbV9ZqGfNDkfA==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-amplify/data-schema-types": "*", @@ -475,7 +467,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@aws-amplify/data-schema-types/-/data-schema-types-1.2.1.tgz", "integrity": "sha512-SuYVcy9Hg8Ox9P0QCXEPwqHxX5zVPgVo2YvNBOm5TpkZr4UK6ir3USame7dELZsk5/9f6KoP70QAYhTvp/j1Og==", - "dev": true, "license": "Apache-2.0", "dependencies": { "graphql": "15.8.0", @@ -486,7 +477,6 @@ "version": "5.1.5", "resolved": "https://registry.npmjs.org/@aws-amplify/datastore/-/datastore-5.1.5.tgz", "integrity": "sha512-/9o4eYqWOlxVxe/riDd282FmUHHSiGUEAwle464T8wzNSqPTB7yTeQfzt2LFYTWsrYLCSR0OtOM1bY5VPSVmew==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-amplify/api": "6.3.24", @@ -505,7 +495,6 @@ "version": "2.0.93", "resolved": "https://registry.npmjs.org/@aws-amplify/notifications/-/notifications-2.0.93.tgz", "integrity": "sha512-NtHKusaiWzkPXuaKsTyvKAWE8JnQcXmQoaidQ5/a9/nWWTzs983l5xgc4OPvfVR+3N63K+3iTmYHtKcEbhgS6w==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.973.1", @@ -520,7 +509,6 @@ "version": "6.13.2", "resolved": "https://registry.npmjs.org/@aws-amplify/storage/-/storage-6.13.2.tgz", "integrity": "sha512-XMhFXrEYD/x/cd5qvTnMa/xhbpJjZZyva2ea0wmLedLqY1glWyhKPmSi2PAfhhpkWcvA50XnQ/g9KaZsog5hww==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.973.1", @@ -538,7 +526,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz", "integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-crypto/util": "^5.2.0", @@ -553,7 +540,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-js": "^5.2.0", @@ -569,7 +555,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-crypto/util": "^5.2.0", @@ -584,7 +569,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -594,7 +578,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "^3.222.0", @@ -606,7 +589,6 @@ "version": "3.982.0", "resolved": "https://registry.npmjs.org/@aws-sdk/client-firehose/-/client-firehose-3.982.0.tgz", "integrity": "sha512-Qur2Siqep+gRReTjlKXcdpyX/MUnzm5OgNNudDPxzpmzdnc3ZKlUwGlbEoS1VA5cFS6N4zg6WfZqlwcXg//TSg==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", @@ -657,7 +639,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -670,7 +651,6 @@ "version": "4.3.2", "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.2.tgz", "integrity": "sha512-XRH6b0H/5A3SgblmMa5ErXQ2XKhfbQB+Fm/oyLZ2O2kCUrwgg55bU0RekmzAhuwOjA9qdN5VU2BprOvGGUkOOQ==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^4.2.2", @@ -685,7 +665,6 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.2.tgz", "integrity": "sha512-75MeYpjdWRe8M5E3AW0O4Cx3UadweS+cwdXjwYGBW5h/gxxnbeZ877sLPX/ZJA9GVTlL/qG0dXP29JWFCD1Ayw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^4.2.2", @@ -699,7 +678,6 @@ "version": "3.982.0", "resolved": "https://registry.npmjs.org/@aws-sdk/client-kinesis/-/client-kinesis-3.982.0.tgz", "integrity": "sha512-Gh3xyumdz3IRj91HIBR48TohQyA3VSn/blDcGXzl4dwQKXgM0ISdHgyniNo2GQNhORJF3d01MSMx72s5NNQxUA==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", @@ -754,7 +732,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -767,7 +744,6 @@ "version": "4.3.2", "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.2.tgz", "integrity": "sha512-XRH6b0H/5A3SgblmMa5ErXQ2XKhfbQB+Fm/oyLZ2O2kCUrwgg55bU0RekmzAhuwOjA9qdN5VU2BprOvGGUkOOQ==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^4.2.2", @@ -782,7 +758,6 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.2.tgz", "integrity": "sha512-75MeYpjdWRe8M5E3AW0O4Cx3UadweS+cwdXjwYGBW5h/gxxnbeZ877sLPX/ZJA9GVTlL/qG0dXP29JWFCD1Ayw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^4.2.2", @@ -796,7 +771,6 @@ "version": "3.982.0", "resolved": "https://registry.npmjs.org/@aws-sdk/client-personalize-events/-/client-personalize-events-3.982.0.tgz", "integrity": "sha512-JllssIZCPxAgYy4gkIM2e/kXxWT0xQzzZd5y9rRStm0bl5MiLAxzX4q9WhGG7glyB++EuhYskiT1N+DzyM5nTw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", @@ -847,7 +821,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -860,7 +833,6 @@ "version": "4.3.2", "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.2.tgz", "integrity": "sha512-XRH6b0H/5A3SgblmMa5ErXQ2XKhfbQB+Fm/oyLZ2O2kCUrwgg55bU0RekmzAhuwOjA9qdN5VU2BprOvGGUkOOQ==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^4.2.2", @@ -875,7 +847,6 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.2.tgz", "integrity": "sha512-75MeYpjdWRe8M5E3AW0O4Cx3UadweS+cwdXjwYGBW5h/gxxnbeZ877sLPX/ZJA9GVTlL/qG0dXP29JWFCD1Ayw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^4.2.2", @@ -889,7 +860,6 @@ "version": "3.973.25", "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.973.25.tgz", "integrity": "sha512-TNrx7eq6nKNOO62HWPqoBqPLXEkW6nLZQGwjL6lq1jZtigWYbK1NbCnT7mKDzbLMHZfuOECUt3n6CzxjUW9HWQ==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "^3.973.6", @@ -914,7 +884,6 @@ "version": "3.973.6", "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.6.tgz", "integrity": "sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.13.1", @@ -928,7 +897,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -941,7 +909,6 @@ "version": "4.3.2", "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.2.tgz", "integrity": "sha512-XRH6b0H/5A3SgblmMa5ErXQ2XKhfbQB+Fm/oyLZ2O2kCUrwgg55bU0RekmzAhuwOjA9qdN5VU2BprOvGGUkOOQ==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^4.2.2", @@ -956,7 +923,6 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.2.tgz", "integrity": "sha512-75MeYpjdWRe8M5E3AW0O4Cx3UadweS+cwdXjwYGBW5h/gxxnbeZ877sLPX/ZJA9GVTlL/qG0dXP29JWFCD1Ayw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^4.2.2", @@ -970,7 +936,6 @@ "version": "3.972.23", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.23.tgz", "integrity": "sha512-EamaclJcCEaPHp6wiVknNMM2RlsPMjAHSsYSFLNENBM8Wz92QPc6cOn3dif6vPDQt0Oo4IEghDy3NMDCzY/IvA==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-sdk/core": "^3.973.25", @@ -987,7 +952,6 @@ "version": "3.973.6", "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.6.tgz", "integrity": "sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.13.1", @@ -1001,7 +965,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -1014,7 +977,6 @@ "version": "3.972.25", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.25.tgz", "integrity": "sha512-qPymamdPcLp6ugoVocG1y5r69ScNiRzb0hogX25/ij+Wz7c7WnsgjLTaz7+eB5BfRxeyUwuw5hgULMuwOGOpcw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-sdk/core": "^3.973.25", @@ -1036,7 +998,6 @@ "version": "3.973.6", "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.6.tgz", "integrity": "sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.13.1", @@ -1050,7 +1011,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -1063,7 +1023,6 @@ "version": "3.972.25", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.972.25.tgz", "integrity": "sha512-G/v/PicYn4qs7xCv4vT6I4QKdvMyRvsgIFNBkUueCGlbLo7/PuKcNKgUozmLSsaYnE7jIl6UrfkP07EUubr48w==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-sdk/core": "^3.973.25", @@ -1089,7 +1048,6 @@ "version": "3.973.6", "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.6.tgz", "integrity": "sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.13.1", @@ -1103,7 +1061,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -1116,7 +1073,6 @@ "version": "3.972.25", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.25.tgz", "integrity": "sha512-bUdmyJeVua7SmD+g2a65x2/0YqsGn4K2k4GawI43js0odaNaIzpIhLtHehUnPnfLuyhPWbJR1NyuIO4iMVfM0w==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-sdk/core": "^3.973.25", @@ -1136,7 +1092,6 @@ "version": "3.973.6", "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.6.tgz", "integrity": "sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.13.1", @@ -1150,7 +1105,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -1163,7 +1117,6 @@ "version": "3.972.26", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.26.tgz", "integrity": "sha512-5XSK74rCXxCNj+UWv5bjq1EccYkiyW4XOHFU9NXnsCcQF8dJuHdua1qFg0m/LIwVOWklbKsrcnMtfxIXwgvwzQ==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-sdk/credential-provider-env": "^3.972.23", @@ -1187,7 +1140,6 @@ "version": "3.973.6", "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.6.tgz", "integrity": "sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.13.1", @@ -1201,7 +1153,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -1214,7 +1165,6 @@ "version": "3.972.23", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.23.tgz", "integrity": "sha512-IL/TFW59++b7MpHserjUblGrdP5UXy5Ekqqx1XQkERXBFJcZr74I7VaSrQT5dxdRMU16xGK4L0RQ5fQG1pMgnA==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-sdk/core": "^3.973.25", @@ -1232,7 +1182,6 @@ "version": "3.973.6", "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.6.tgz", "integrity": "sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.13.1", @@ -1246,7 +1195,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -1259,7 +1207,6 @@ "version": "3.972.25", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.972.25.tgz", "integrity": "sha512-r4OGAfHmlEa1QBInHWz+/dOD4tRljcjVNQe9wJ/AJNXEj1d2WdsRLppvRFImRV6FIs+bTpjtL0a23V5ELQpRPw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-sdk/core": "^3.973.25", @@ -1279,7 +1226,6 @@ "version": "3.973.6", "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.6.tgz", "integrity": "sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.13.1", @@ -1293,7 +1239,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -1306,7 +1251,6 @@ "version": "3.972.25", "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.25.tgz", "integrity": "sha512-uM1OtoJgj+yK3MlAmda8uR9WJJCdm5HB25JyCeFL5a5q1Fbafalf4uKidFO3/L0Pgd+Fsflkb4cM6jHIswi3QQ==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-sdk/core": "^3.973.25", @@ -1325,7 +1269,6 @@ "version": "3.973.6", "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.6.tgz", "integrity": "sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.13.1", @@ -1339,7 +1282,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -1352,7 +1294,6 @@ "version": "3.972.8", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.972.8.tgz", "integrity": "sha512-wAr2REfKsqoKQ+OkNqvOShnBoh+nkPurDKW7uAeVSu6kUECnWlSJiPvnoqxGlfousEY/v9LfS9sNc46hjSYDIQ==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "^3.973.6", @@ -1368,7 +1309,6 @@ "version": "3.973.6", "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.6.tgz", "integrity": "sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.13.1", @@ -1382,7 +1322,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -1395,7 +1334,6 @@ "version": "3.972.8", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.972.8.tgz", "integrity": "sha512-CWl5UCM57WUFaFi5kB7IBY1UmOeLvNZAZ2/OZ5l20ldiJ3TiIz1pC65gYj8X0BCPWkeR1E32mpsCk1L1I4n+lA==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "^3.973.6", @@ -1410,7 +1348,6 @@ "version": "3.973.6", "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.6.tgz", "integrity": "sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.13.1", @@ -1424,7 +1361,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -1437,7 +1373,6 @@ "version": "3.972.9", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.972.9.tgz", "integrity": "sha512-/Wt5+CT8dpTFQxEJ9iGy/UGrXr7p2wlIOEHvIr/YcHYByzoLjrqkYqXdJjd9UIgWjv7eqV2HnFJen93UTuwfTQ==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "^3.973.6", @@ -1454,7 +1389,6 @@ "version": "3.973.6", "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.6.tgz", "integrity": "sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.13.1", @@ -1468,7 +1402,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -1481,7 +1414,6 @@ "version": "3.972.26", "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.972.26.tgz", "integrity": "sha512-AilFIh4rI/2hKyyGN6XrB0yN96W2o7e7wyrPWCM6QjZM1mcC/pVkW3IWWRvuBWMpVP8Fg+rMpbzeLQ6dTM4gig==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-sdk/core": "^3.973.25", @@ -1501,7 +1433,6 @@ "version": "3.973.6", "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.6.tgz", "integrity": "sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.13.1", @@ -1515,7 +1446,6 @@ "version": "3.996.5", "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.996.5.tgz", "integrity": "sha512-Uh93L5sXFNbyR5sEPMzUU8tJ++Ku97EY4udmC01nB8Zu+xfBPwpIwJ6F7snqQeq8h2pf+8SGN5/NoytfKgYPIw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "^3.973.6", @@ -1532,7 +1462,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -1545,7 +1474,6 @@ "version": "3.996.15", "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.996.15.tgz", "integrity": "sha512-k6WAVNkub5DrU46iPQvH1m0xc1n+0dX79+i287tYJzf5g1yU2rX3uf4xNeL5JvK1NtYgfwMnsxHqhOXFBn367A==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", @@ -1595,7 +1523,6 @@ "version": "3.973.6", "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.6.tgz", "integrity": "sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.13.1", @@ -1609,7 +1536,6 @@ "version": "3.996.5", "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.996.5.tgz", "integrity": "sha512-Uh93L5sXFNbyR5sEPMzUU8tJ++Ku97EY4udmC01nB8Zu+xfBPwpIwJ6F7snqQeq8h2pf+8SGN5/NoytfKgYPIw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "^3.973.6", @@ -1626,7 +1552,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -1639,7 +1564,6 @@ "version": "4.3.2", "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.2.tgz", "integrity": "sha512-XRH6b0H/5A3SgblmMa5ErXQ2XKhfbQB+Fm/oyLZ2O2kCUrwgg55bU0RekmzAhuwOjA9qdN5VU2BprOvGGUkOOQ==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^4.2.2", @@ -1654,7 +1578,6 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.2.tgz", "integrity": "sha512-75MeYpjdWRe8M5E3AW0O4Cx3UadweS+cwdXjwYGBW5h/gxxnbeZ877sLPX/ZJA9GVTlL/qG0dXP29JWFCD1Ayw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^4.2.2", @@ -1668,7 +1591,6 @@ "version": "3.972.10", "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.972.10.tgz", "integrity": "sha512-1dq9ToC6e070QvnVhhbAs3bb5r6cQ10gTVc6cyRV5uvQe7P138TV2uG2i6+Yok4bAkVAcx5AqkTEBUvWEtBlsQ==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "^3.973.6", @@ -1685,7 +1607,6 @@ "version": "3.973.6", "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.6.tgz", "integrity": "sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.13.1", @@ -1699,7 +1620,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -1712,7 +1632,6 @@ "version": "3.1018.0", "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.1018.0.tgz", "integrity": "sha512-97OPNJHy37wmGOX44xAcu6E9oSTiqK9uPcy/fWpmN5uB3JuEp1f6x60Xot/jp+FxwhQWIFUsVJFnm3QKqt7T6Q==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-sdk/core": "^3.973.25", @@ -1731,7 +1650,6 @@ "version": "3.973.6", "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.6.tgz", "integrity": "sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.13.1", @@ -1745,7 +1663,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -1758,7 +1675,6 @@ "version": "3.973.1", "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.1.tgz", "integrity": "sha512-DwHBiMNOB468JiX6+i34c+THsKHErYUdNQ3HexeXZvVn4zouLjgaS4FejiGSi2HyBuzuyHg7SuOPmjSvoU9NRg==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.12.0", @@ -1772,7 +1688,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -1785,7 +1700,6 @@ "version": "3.982.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.982.0.tgz", "integrity": "sha512-M27u8FJP7O0Of9hMWX5dipp//8iglmV9jr7R8SR8RveU+Z50/8TqH68Tu6wUWBGMfXjzbVwn1INIAO5lZrlxXQ==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "^3.973.1", @@ -1802,7 +1716,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -1815,7 +1728,6 @@ "version": "3.965.5", "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.965.5.tgz", "integrity": "sha512-WhlJNNINQB+9qtLtZJcpQdgZw3SCDCpXdUJP7cToGwHbCWCnRckGlc6Bx/OhWwIYFNAn+FIydY8SZ0QmVu3xTQ==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -1828,7 +1740,6 @@ "version": "3.972.8", "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.972.8.tgz", "integrity": "sha512-B3KGXJviV2u6Cdw2SDY2aDhoJkVfY/Q/Trwk2CMSkikE1Oi6gRzxhvhIfiRpHfmIsAhV4EA54TVEX8K6CbHbkA==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "^3.973.6", @@ -1841,7 +1752,6 @@ "version": "3.973.6", "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.6.tgz", "integrity": "sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.13.1", @@ -1855,7 +1765,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -1868,7 +1777,6 @@ "version": "3.973.12", "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.973.12.tgz", "integrity": "sha512-8phW0TS8ntENJgDcFewYT/Q8dOmarpvSxEjATu2GUBAutiHr++oEGCiBUwxslCMNvwW2cAPZNT53S/ym8zm/gg==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-sdk/middleware-user-agent": "^3.972.26", @@ -1894,7 +1802,6 @@ "version": "3.973.6", "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.6.tgz", "integrity": "sha512-Atfcy4E++beKtwJHiDln2Nby8W/mam64opFPTiHEqgsthqeydFS1pY+OUlN1ouNOmf8ArPU/6cDS65anOP3KQw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.13.1", @@ -1908,7 +1815,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -1921,7 +1827,6 @@ "version": "3.972.16", "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.16.tgz", "integrity": "sha512-iu2pyvaqmeatIJLURLqx9D+4jKAdTH20ntzB6BFwjyN7V960r4jK32mx0Zf7YbtOYAbmbtQfDNuL60ONinyw7A==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.13.1", @@ -1936,7 +1841,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -1949,7 +1853,6 @@ "version": "0.2.4", "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.4.tgz", "integrity": "sha512-iY8yvjE0y651BixKNPgmv1WrQc+GZ142sb0z4gYnChDDY2YqI4P/jsSopBWrKfAt7LOJAkOXt7rC/hms+WclQQ==", - "dev": true, "license": "Apache-2.0", "engines": { "node": ">=18.0.0" @@ -3788,7 +3691,6 @@ "version": "7.27.6", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz", "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -4354,7 +4256,6 @@ "version": "1.7.23", "resolved": "https://registry.npmjs.org/@headlessui/vue/-/vue-1.7.23.tgz", "integrity": "sha512-JzdCNqurrtuu0YW6QaDtR2PIYCKPUWq28csDyMvN4zmGccmE7lz40Is6hc3LA4HFeCI7sekZ/PQMTNmn9I/4Wg==", - "dev": true, "license": "MIT", "dependencies": { "@tanstack/vue-virtual": "^3.0.0-beta.60" @@ -6022,7 +5923,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/@nodable/entities/-/entities-2.1.0.tgz", "integrity": "sha512-nyT7T3nbMyBI/lvr6L5TyWbFJAI9FTgVRakNoBqCD+PmID8DzFrrNdLLtHMwMszOtqZa8PAOV24ZqDnQrhQINA==", - "dev": true, "funding": [ { "type": "github", @@ -6130,7 +6030,6 @@ "version": "2.11.8", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", - "dev": true, "license": "MIT", "funding": { "type": "opencollective", @@ -6476,7 +6375,6 @@ "version": "4.2.12", "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.12.tgz", "integrity": "sha512-xolrFw6b+2iYGl6EcOL7IJY71vvyZ0DJ3mcKtpykqPe2uscwtzDZJa1uVQXyP7w9Dd+kGwYnPbMsJrGISKiY/Q==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.13.1", @@ -6490,7 +6388,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -6503,7 +6400,6 @@ "version": "4.4.13", "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.13.tgz", "integrity": "sha512-iIzMC5NmOUP6WL6o8iPBjFhUhBZ9pPjpUpQYWMUFQqKyXXzOftbfK8zcQCz/jFV1Psmf05BK5ypx4K2r4Tnwdg==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/node-config-provider": "^4.3.12", @@ -6521,7 +6417,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -6534,7 +6429,6 @@ "version": "3.23.12", "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.23.12.tgz", "integrity": "sha512-o9VycsYNtgC+Dy3I0yrwCqv9CWicDnke0L7EVOrZtJpjb2t0EjaEofmMrYc0T1Kn3yk32zm6cspxF9u9Bj7e5w==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/protocol-http": "^5.3.12", @@ -6556,7 +6450,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -6569,7 +6462,6 @@ "version": "4.3.2", "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.2.tgz", "integrity": "sha512-XRH6b0H/5A3SgblmMa5ErXQ2XKhfbQB+Fm/oyLZ2O2kCUrwgg55bU0RekmzAhuwOjA9qdN5VU2BprOvGGUkOOQ==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^4.2.2", @@ -6584,7 +6476,6 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.2.tgz", "integrity": "sha512-75MeYpjdWRe8M5E3AW0O4Cx3UadweS+cwdXjwYGBW5h/gxxnbeZ877sLPX/ZJA9GVTlL/qG0dXP29JWFCD1Ayw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^4.2.2", @@ -6598,7 +6489,6 @@ "version": "4.2.12", "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.12.tgz", "integrity": "sha512-cr2lR792vNZcYMriSIj+Um3x9KWrjcu98kn234xA6reOAFMmbRpQMOv8KPgEmLLtx3eldU6c5wALKFqNOhugmg==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/node-config-provider": "^4.3.12", @@ -6615,7 +6505,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -6628,7 +6517,6 @@ "version": "4.2.12", "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.2.12.tgz", "integrity": "sha512-FE3bZdEl62ojmy8x4FHqxq2+BuOHlcxiH5vaZ6aqHJr3AIZzwF5jfx8dEiU/X0a8RboyNDjmXjlbr8AdEyLgiA==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-crypto/crc32": "5.2.0", @@ -6644,7 +6532,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -6657,7 +6544,6 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.2.tgz", "integrity": "sha512-Qcz3W5vuHK4sLQdyT93k/rfrUwdJ8/HZ+nMUOyGdpeGA1Wxt65zYwi3oEl9kOM+RswvYq90fzkNDahPS8K0OIg==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -6670,7 +6556,6 @@ "version": "4.2.12", "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.2.12.tgz", "integrity": "sha512-XUSuMxlTxV5pp4VpqZf6Sa3vT/Q75FVkLSpSSE3KkWBvAQWeuWt1msTv8fJfgA4/jcJhrbrbMzN1AC/hvPmm5A==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/eventstream-serde-universal": "^4.2.12", @@ -6685,7 +6570,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -6698,7 +6582,6 @@ "version": "4.3.12", "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.3.12.tgz", "integrity": "sha512-7epsAZ3QvfHkngz6RXQYseyZYHlmWXSTPOfPmXkiS+zA6TBNo1awUaMFL9vxyXlGdoELmCZyZe1nQE+imbmV+Q==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.13.1", @@ -6712,7 +6595,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -6725,7 +6607,6 @@ "version": "4.2.12", "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.2.12.tgz", "integrity": "sha512-D1pFuExo31854eAvg89KMn9Oab/wEeJR6Buy32B49A9Ogdtx5fwZPqBHUlDzaCDpycTFk2+fSQgX689Qsk7UGA==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/eventstream-serde-universal": "^4.2.12", @@ -6740,7 +6621,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -6753,7 +6633,6 @@ "version": "4.2.12", "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.2.12.tgz", "integrity": "sha512-+yNuTiyBACxOJUTvbsNsSOfH9G9oKbaJE1lNL3YHpGcuucl6rPZMi3nrpehpVOVR2E07YqFFmtwpImtpzlouHQ==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/eventstream-codec": "^4.2.12", @@ -6768,7 +6647,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -6781,7 +6659,6 @@ "version": "5.3.15", "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.15.tgz", "integrity": "sha512-T4jFU5N/yiIfrtrsb9uOQn7RdELdM/7HbyLNr6uO/mpkj1ctiVs7CihVr51w4LyQlXWDpXFn4BElf1WmQvZu/A==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/protocol-http": "^5.3.12", @@ -6798,7 +6675,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -6811,7 +6687,6 @@ "version": "4.3.2", "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.2.tgz", "integrity": "sha512-XRH6b0H/5A3SgblmMa5ErXQ2XKhfbQB+Fm/oyLZ2O2kCUrwgg55bU0RekmzAhuwOjA9qdN5VU2BprOvGGUkOOQ==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^4.2.2", @@ -6826,7 +6701,6 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.2.tgz", "integrity": "sha512-75MeYpjdWRe8M5E3AW0O4Cx3UadweS+cwdXjwYGBW5h/gxxnbeZ877sLPX/ZJA9GVTlL/qG0dXP29JWFCD1Ayw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^4.2.2", @@ -6840,7 +6714,6 @@ "version": "4.2.12", "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.12.tgz", "integrity": "sha512-QhBYbGrbxTkZ43QoTPrK72DoYviDeg6YKDrHTMJbbC+A0sml3kSjzFtXP7BtbyJnXojLfTQldGdUR0RGD8dA3w==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.13.1", @@ -6856,7 +6729,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -6869,7 +6741,6 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.2.tgz", "integrity": "sha512-75MeYpjdWRe8M5E3AW0O4Cx3UadweS+cwdXjwYGBW5h/gxxnbeZ877sLPX/ZJA9GVTlL/qG0dXP29JWFCD1Ayw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^4.2.2", @@ -6883,7 +6754,6 @@ "version": "4.2.12", "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.12.tgz", "integrity": "sha512-/4F1zb7Z8LOu1PalTdESFHR0RbPwHd3FcaG1sI3UEIriQTWakysgJr65lc1jj6QY5ye7aFsisajotH6UhWfm/g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.13.1", @@ -6897,7 +6767,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -6910,7 +6779,6 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.2.tgz", "integrity": "sha512-n6rQ4N8Jj4YTQO3YFrlgZuwKodf4zUFs7EJIWH86pSCWBaAtAGBFfCM7Wx6D2bBJ2xqFNxGBSrUWswT3M0VJow==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -6923,7 +6791,6 @@ "version": "2.0.7", "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-2.0.7.tgz", "integrity": "sha512-2i2BpXF9pI5D1xekqUsgQ/ohv5+H//G9FlawJrkOJskV18PgJ8LiNbLiskMeYt07yAsSTZR7qtlcAaa/GQLWww==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/types": "^2.3.1", @@ -6935,7 +6802,6 @@ "version": "2.12.0", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -6948,7 +6814,6 @@ "version": "4.2.12", "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.12.tgz", "integrity": "sha512-YE58Yz+cvFInWI/wOTrB+DbvUVz/pLn5mC5MvOV4fdRUc6qGwygyngcucRQjAhiCEbmfLOXX0gntSIcgMvAjmA==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/protocol-http": "^5.3.12", @@ -6963,7 +6828,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -6976,7 +6840,6 @@ "version": "4.4.27", "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.27.tgz", "integrity": "sha512-T3TFfUgXQlpcg+UdzcAISdZpj4Z+XECZ/cefgA6wLBd6V4lRi0svN2hBouN/be9dXQ31X4sLWz3fAQDf+nt6BA==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/core": "^3.23.12", @@ -6996,7 +6859,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -7009,7 +6871,6 @@ "version": "4.4.44", "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.44.tgz", "integrity": "sha512-Y1Rav7m5CFRPQyM4CI0koD/bXjyjJu3EQxZZhtLGD88WIrBrQ7kqXM96ncd6rYnojwOo/u9MXu57JrEvu/nLrA==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/node-config-provider": "^4.3.12", @@ -7030,7 +6891,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -7043,7 +6903,6 @@ "version": "4.2.15", "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.15.tgz", "integrity": "sha512-ExYhcltZSli0pgAKOpQQe1DLFBLryeZ22605y/YS+mQpdNWekum9Ujb/jMKfJKgjtz1AZldtwA/wCYuKJgjjlg==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/core": "^3.23.12", @@ -7059,7 +6918,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -7072,7 +6930,6 @@ "version": "4.2.12", "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.12.tgz", "integrity": "sha512-kruC5gRHwsCOuyCd4ouQxYjgRAym2uDlCvQ5acuMtRrcdfg7mFBg6blaxcJ09STpt3ziEkis6bhg1uwrWU7txw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.13.1", @@ -7086,7 +6943,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -7099,7 +6955,6 @@ "version": "4.3.12", "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.12.tgz", "integrity": "sha512-tr2oKX2xMcO+rBOjobSwVAkV05SIfUKz8iI53rzxEmgW3GOOPOv0UioSDk+J8OpRQnpnhsO3Af6IEBabQBVmiw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/property-provider": "^4.2.12", @@ -7115,7 +6970,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -7128,7 +6982,6 @@ "version": "4.5.0", "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.5.0.tgz", "integrity": "sha512-Rnq9vQWiR1+/I6NZZMNzJHV6pZYyEHt2ZnuV3MG8z2NNenC4i/8Kzttz7CjZiHSmsN5frhXhg17z3Zqjjhmz1A==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/abort-controller": "^4.2.12", @@ -7145,7 +6998,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -7158,7 +7010,6 @@ "version": "4.2.12", "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.12.tgz", "integrity": "sha512-jqve46eYU1v7pZ5BM+fmkbq3DerkSluPr5EhvOcHxygxzD05ByDRppRwRPPpFrsFo5yDtCYLKu+kreHKVrvc7A==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.13.1", @@ -7172,7 +7023,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -7185,7 +7035,6 @@ "version": "5.3.12", "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.12.tgz", "integrity": "sha512-fit0GZK9I1xoRlR4jXmbLhoN0OdEpa96ul8M65XdmXnxXkuMxM0Y8HDT0Fh0Xb4I85MBvBClOzgSrV1X2s1Hxw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.13.1", @@ -7199,7 +7048,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -7212,7 +7060,6 @@ "version": "4.2.12", "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.12.tgz", "integrity": "sha512-6wTZjGABQufekycfDGMEB84BgtdOE/rCVTov+EDXQ8NHKTUNIp/j27IliwP7tjIU9LR+sSzyGBOXjeEtVgzCHg==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.13.1", @@ -7227,7 +7074,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -7240,7 +7086,6 @@ "version": "4.2.12", "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.12.tgz", "integrity": "sha512-P2OdvrgiAKpkPNKlKUtWbNZKB1XjPxM086NeVhK+W+wI46pIKdWBe5QyXvhUm3MEcyS/rkLvY8rZzyUdmyDZBw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.13.1", @@ -7254,7 +7099,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -7267,7 +7111,6 @@ "version": "4.2.12", "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.12.tgz", "integrity": "sha512-LlP29oSQN0Tw0b6D0Xo6BIikBswuIiGYbRACy5ujw/JgWSzTdYj46U83ssf6Ux0GyNJVivs2uReU8pt7Eu9okQ==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.13.1" @@ -7280,7 +7123,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -7293,7 +7135,6 @@ "version": "4.4.7", "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.7.tgz", "integrity": "sha512-HrOKWsUb+otTeo1HxVWeEb99t5ER1XrBi/xka2Wv6NVmTbuCUC1dvlrksdvxFtODLBjsC+PHK+fuy2x/7Ynyiw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.13.1", @@ -7307,7 +7148,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -7320,7 +7160,6 @@ "version": "5.3.12", "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.12.tgz", "integrity": "sha512-B/FBwO3MVOL00DaRSXfXfa/TRXRheagt/q5A2NM13u7q+sHS59EOVGQNfG7DkmVtdQm5m3vOosoKAXSqn/OEgw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/is-array-buffer": "^4.2.2", @@ -7340,7 +7179,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -7353,7 +7191,6 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.2.tgz", "integrity": "sha512-Qcz3W5vuHK4sLQdyT93k/rfrUwdJ8/HZ+nMUOyGdpeGA1Wxt65zYwi3oEl9kOM+RswvYq90fzkNDahPS8K0OIg==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -7366,7 +7203,6 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.2.tgz", "integrity": "sha512-75MeYpjdWRe8M5E3AW0O4Cx3UadweS+cwdXjwYGBW5h/gxxnbeZ877sLPX/ZJA9GVTlL/qG0dXP29JWFCD1Ayw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^4.2.2", @@ -7380,7 +7216,6 @@ "version": "4.12.7", "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.12.7.tgz", "integrity": "sha512-q3gqnwml60G44FECaEEsdQMplYhDMZYCtYhMCzadCnRnnHIobZJjegmdoUo6ieLQlPUzvrMdIJUpx6DoPmzANQ==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/core": "^3.23.12", @@ -7399,7 +7234,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -7412,7 +7246,6 @@ "version": "3.7.2", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.7.2.tgz", "integrity": "sha512-bNwBYYmN8Eh9RyjS1p2gW6MIhSO2rl7X9QeLM8iTdcGRP+eDiIWDt66c9IysCc22gefKszZv+ubV9qZc7hdESg==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -7425,7 +7258,6 @@ "version": "4.2.12", "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.12.tgz", "integrity": "sha512-wOPKPEpso+doCZGIlr+e1lVI6+9VAKfL4kZWFgzVgGWY2hZxshNKod4l2LXS3PRC9otH/JRSjtEHqQ/7eLciRA==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/querystring-parser": "^4.2.12", @@ -7440,7 +7272,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -7453,7 +7284,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^3.0.0", @@ -7468,7 +7298,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -7481,7 +7310,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/is-array-buffer": "^3.0.0", @@ -7495,7 +7323,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^3.0.0", @@ -7509,7 +7336,6 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.2.tgz", "integrity": "sha512-JKCrLNOup3OOgmzeaKQwi4ZCTWlYR5H4Gm1r2uTMVBXoemo1UEghk5vtMi1xSu2ymgKVGW631e2fp9/R610ZjQ==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -7522,7 +7348,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.2.3.tgz", "integrity": "sha512-ZkJGvqBzMHVHE7r/hcuCxlTY8pQr1kMtdsVPs7ex4mMU+EAbcXppfo5NmyxMYi2XU49eqaz56j2gsk4dHHPG/g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -7535,7 +7360,6 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.2.tgz", "integrity": "sha512-FDXD7cvUoFWwN6vtQfEta540Y/YBe5JneK3SoZg9bThSoOAC/eGeYEua6RkBgKjGa/sz6Y+DuBZj3+YEY21y4Q==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/is-array-buffer": "^4.2.2", @@ -7549,7 +7373,6 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.2.2.tgz", "integrity": "sha512-dWU03V3XUprJwaUIFVv4iOnS1FC9HnMHDfUrlNDSh4315v0cWyaIErP8KiqGVbf5z+JupoVpNM7ZB3jFiTejvQ==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -7562,7 +7385,6 @@ "version": "4.3.43", "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.43.tgz", "integrity": "sha512-Qd/0wCKMaXxev/z00TvNzGCH2jlKKKxXP1aDxB6oKwSQthe3Og2dMhSayGCnsma1bK/kQX1+X7SMP99t6FgiiQ==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/property-provider": "^4.2.12", @@ -7578,7 +7400,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -7591,7 +7412,6 @@ "version": "4.2.47", "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.47.tgz", "integrity": "sha512-qSRbYp1EQ7th+sPFuVcVO05AE0QH635hycdEXlpzIahqHHf2Fyd/Zl+8v0XYMJ3cgDVPa0lkMefU7oNUjAP+DQ==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/config-resolver": "^4.4.13", @@ -7610,7 +7430,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -7623,7 +7442,6 @@ "version": "3.3.3", "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.3.3.tgz", "integrity": "sha512-VACQVe50j0HZPjpwWcjyT51KUQ4AnsvEaQ2lKHOSL4mNLD0G9BjEniQ+yCt1qqfKfiAHRAts26ud7hBjamrwig==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/node-config-provider": "^4.3.12", @@ -7638,7 +7456,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -7651,7 +7468,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz", "integrity": "sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.5.0" @@ -7664,7 +7480,6 @@ "version": "4.2.12", "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.12.tgz", "integrity": "sha512-Er805uFUOvgc0l8nv0e0su0VFISoxhJ/AwOn3gL2NWNY2LUEldP5WtVcRYSQBcjg0y9NfG8JYrCJaYDpupBHJQ==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.13.1", @@ -7678,7 +7493,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -7691,7 +7505,6 @@ "version": "4.2.12", "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.2.12.tgz", "integrity": "sha512-1zopLDUEOwumjcHdJ1mwBHddubYF8GMQvstVCLC54Y46rqoHwlIU+8ZzUeaBcD+WCJHyDGSeZ2ml9YSe9aqcoQ==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/service-error-classification": "^4.2.12", @@ -7706,7 +7519,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -7719,7 +7531,6 @@ "version": "4.5.20", "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.20.tgz", "integrity": "sha512-4yXLm5n/B5SRBR2p8cZ90Sbv4zL4NKsgxdzCzp/83cXw2KxLEumt5p+GAVyRNZgQOSrzXn9ARpO0lUe8XSlSDw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/fetch-http-handler": "^5.3.15", @@ -7739,7 +7550,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -7752,7 +7562,6 @@ "version": "4.3.2", "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.2.tgz", "integrity": "sha512-XRH6b0H/5A3SgblmMa5ErXQ2XKhfbQB+Fm/oyLZ2O2kCUrwgg55bU0RekmzAhuwOjA9qdN5VU2BprOvGGUkOOQ==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^4.2.2", @@ -7767,7 +7576,6 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.2.tgz", "integrity": "sha512-Qcz3W5vuHK4sLQdyT93k/rfrUwdJ8/HZ+nMUOyGdpeGA1Wxt65zYwi3oEl9kOM+RswvYq90fzkNDahPS8K0OIg==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -7780,7 +7588,6 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.2.tgz", "integrity": "sha512-75MeYpjdWRe8M5E3AW0O4Cx3UadweS+cwdXjwYGBW5h/gxxnbeZ877sLPX/ZJA9GVTlL/qG0dXP29JWFCD1Ayw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^4.2.2", @@ -7794,7 +7601,6 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.2.2.tgz", "integrity": "sha512-2kAStBlvq+lTXHyAZYfJRb/DfS3rsinLiwb+69SstC9Vb0s9vNWkRwpnj918Pfi85mzi42sOqdV72OLxWAISnw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -7807,7 +7613,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.0.tgz", "integrity": "sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/util-buffer-from": "^2.0.0", @@ -7821,7 +7626,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -7834,7 +7638,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/is-array-buffer": "^2.2.0", @@ -7848,7 +7651,6 @@ "version": "4.2.13", "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.2.13.tgz", "integrity": "sha512-2zdZ9DTHngRtcYxJK1GUDxruNr53kv5W2Lupe0LMU+Imr6ohQg8M2T14MNkj1Y0wS3FFwpgpGQyvuaMF7CiTmQ==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/abort-controller": "^4.2.12", @@ -7863,7 +7665,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -7876,7 +7677,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@smithy/uuid/-/uuid-1.1.2.tgz", "integrity": "sha512-O/IEdcCUKkubz60tFbGA7ceITTAJsty+lBjNoorP4Z6XRqaFb/OjQjZODophEcuq68nKm6/0r+6/lLQ+XVpk8g==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -7977,7 +7777,6 @@ "version": "3.13.12", "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.13.12.tgz", "integrity": "sha512-1YBOJfRHV4sXUmWsFSf5rQor4Ss82G8dQWLRbnk3GA4jeP8hQt1hxXh0tmflpC0dz3VgEv/1+qwPyLeWkQuPFA==", - "dev": true, "license": "MIT", "funding": { "type": "github", @@ -7988,7 +7787,6 @@ "version": "3.13.12", "resolved": "https://registry.npmjs.org/@tanstack/vue-virtual/-/vue-virtual-3.13.12.tgz", "integrity": "sha512-vhF7kEU9EXWXh+HdAwKJ2m3xaOnTTmgcdXcF2pim8g4GvI7eRrk2YRuV5nUlZnd/NbCIX4/Ja2OZu5EjJL06Ww==", - "dev": true, "license": "MIT", "dependencies": { "@tanstack/virtual-core": "3.13.12" @@ -8044,7 +7842,6 @@ "version": "8.10.161", "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.161.tgz", "integrity": "sha512-rUYdp+MQwSFocxIOcSsYSF3YYYC/uUpMbCY/mbO21vGqfrEYvNSoPyKYDj6RhXXpPfS0KstW9RwG3qXh9sL7FQ==", - "dev": true, "license": "MIT" }, "node_modules/@types/babel__core": { @@ -8180,14 +7977,12 @@ "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, "license": "MIT" }, "node_modules/@types/lodash": { "version": "4.17.20", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.20.tgz", "integrity": "sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==", - "dev": true, "license": "MIT" }, "node_modules/@types/lucene": { @@ -8263,7 +8058,6 @@ "version": "0.0.14", "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.14.tgz", "integrity": "sha512-5d2RhCard1nQUC3aHcq/gHzWYO6K0WJmAbjO7mQJgCQKtZpgXxv1rOM6O/dBDhDYYVutk1sciOgNSe+5YyfM8A==", - "dev": true, "license": "MIT" }, "node_modules/@types/yargs": { @@ -9272,7 +9066,6 @@ "version": "7.7.7", "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.7.tgz", "integrity": "sha512-wgoZtxcTta65cnZ1Q6MbAfePVFxfM+gq0saaeytoph7nEa7yMXoi6sCPy4ufO111B9msnw0VOWjPEFCXuAKRHA==", - "dev": true, "license": "MIT", "dependencies": { "@vue/devtools-shared": "^7.7.7", @@ -9288,7 +9081,6 @@ "version": "7.7.7", "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.7.tgz", "integrity": "sha512-+udSj47aRl5aKb0memBvcUG9koarqnxNM5yjuREvqwK6T3ap4mn3Zqqc17QrBFTqSMjr3HK1cvStEZpMDpfdyw==", - "dev": true, "license": "MIT", "dependencies": { "rfdc": "^1.4.1" @@ -9455,7 +9247,6 @@ "version": "8.9.4", "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-8.9.4.tgz", "integrity": "sha512-B/Mdj9TK1peFyWaPof+Zf/mP9XuGAngaJZBwPaXBvU3aCTZlx3ltlrFFFyMV4iGBwsjSCeUCgZrtkEj9dS2Y3Q==", - "dev": true, "license": "MIT", "dependencies": { "@types/web-bluetooth": "^0.0.14", @@ -9483,7 +9274,6 @@ "version": "8.9.4", "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-8.9.4.tgz", "integrity": "sha512-wt+T30c4K6dGRMVqPddexEVLa28YwxW5OFIPmzUHICjphfAuBFTTdDoyqREZNDOFJZ44ARH1WWQNCUK8koJ+Ag==", - "dev": true, "license": "MIT", "dependencies": { "vue-demi": "*" @@ -9508,7 +9298,6 @@ "version": "8.9.4", "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-8.9.4.tgz", "integrity": "sha512-IwSfzH80bnJMzqhaapqJl9JRIiyQU0zsRGEgnxN6jhq7992cPUJIRfV+JHRIZXjYqbwt07E1gTEp0R0zPJ1aqw==", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/antfu" @@ -9564,7 +9353,6 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, "license": "MIT", "dependencies": { "debug": "4" @@ -9899,7 +9687,6 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true, "license": "MIT" }, "node_modules/at-least-node": { @@ -9970,7 +9757,6 @@ "version": "6.16.3", "resolved": "https://registry.npmjs.org/aws-amplify/-/aws-amplify-6.16.3.tgz", "integrity": "sha512-yWuvctncVzSI5K40k2LiZTTKu6p1O7YpbmFfbM9luAFssUj2P2DmgJgs2IQ0ArpJTi++QrAT5L4F60qxTpGTIA==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-amplify/analytics": "7.0.93", @@ -10004,7 +9790,6 @@ "version": "1.19.0", "resolved": "https://registry.npmjs.org/axios/-/axios-1.19.0.tgz", "integrity": "sha512-ht/iuYZXEjFxLH/Hkezgd7m6JKlHHXEUSneaDz8uZe1Gj5QZtCnpyDsckvAiEnT89OEbCLmnte4R4sn7P0EKFw==", - "dev": true, "license": "MIT", "dependencies": { "follow-redirects": "^1.16.0", @@ -10235,7 +10020,6 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, "funding": [ { "type": "github", @@ -10289,7 +10073,6 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.5.0.tgz", "integrity": "sha512-VSWO/W6nNQdyP520F1mhf+Lc2f8pjGQOtoHHm7Ze8Go1kX7akpVIrtTa0fn+HB0QJEDVacl6aO08YE0PgXfdnQ==", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/antfu" @@ -10320,7 +10103,6 @@ "version": "2.14.1", "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.14.1.tgz", "integrity": "sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg==", - "dev": true, "license": "MIT" }, "node_modules/brace-expansion": { @@ -10407,7 +10189,6 @@ "version": "4.9.2", "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, "license": "MIT", "dependencies": { "base64-js": "^1.0.2", @@ -10587,7 +10368,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -10915,14 +10695,12 @@ "version": "5.65.19", "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.65.19.tgz", "integrity": "sha512-+aFkvqhaAVr1gferNMuN8vkTSrWIFvzlMV9I2KBLCWS2WpZ2+UAkZjlMZmEuT+gcXTi6RrGQCkWq1/bDtGqhIA==", - "dev": true, "license": "MIT" }, "node_modules/codemirror-editor-vue3": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/codemirror-editor-vue3/-/codemirror-editor-vue3-2.8.0.tgz", "integrity": "sha512-ebYGNhBpLmQNLguXzNyMMkn6K8v3lcS5/Ncvdn6YS4bLGEHE67MfsJIS/WV0L7I6WavUuFlY/Rs/AJKChIwSwg==", - "dev": true, "license": "MIT", "dependencies": { "codemirror": "^5", @@ -10982,7 +10760,6 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" @@ -11062,7 +10839,6 @@ "version": "3.0.5", "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", - "dev": true, "license": "MIT", "dependencies": { "is-what": "^4.1.8" @@ -11110,7 +10886,6 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", - "dev": true, "license": "Apache-2.0", "bin": { "crc32": "bin/crc32.njs" @@ -11456,7 +11231,6 @@ "version": "2.30.0", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/runtime": "^7.21.0" @@ -11487,7 +11261,6 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", - "dev": true, "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -11591,7 +11364,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.4.0" @@ -11649,7 +11421,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.5.tgz", "integrity": "sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==", - "dev": true, "license": "Apache-2.0" }, "node_modules/diff-sequences": { @@ -11761,7 +11532,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "dev": true, "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.1", @@ -12009,7 +11779,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -12019,7 +11788,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -12036,7 +11804,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0" @@ -12049,7 +11816,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -12728,7 +12494,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/fast-xml-builder/-/fast-xml-builder-1.2.0.tgz", "integrity": "sha512-00aAWieqff+ZJhsXA4g1g7M8k+7AYoMUUHF+/zFb5U6Uv/P0Vl4QZo84/IcufzYalLuEj9928bXN9PbbFzMF0Q==", - "dev": true, "funding": [ { "type": "github", @@ -12745,7 +12510,6 @@ "version": "5.7.2", "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.7.2.tgz", "integrity": "sha512-P7oW7tLbYnhOLQk/Gv7cZgzgMPP/XN03K02/Jy6Y/NHzyIAIpxuZIM/YqAkfiXFPxA2CTm7NtCijK9EDu09u2w==", - "dev": true, "funding": [ { "type": "github", @@ -12921,7 +12685,6 @@ "version": "1.16.0", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", - "dev": true, "funding": [ { "type": "individual", @@ -12998,7 +12761,6 @@ "version": "4.0.6", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", - "dev": true, "license": "MIT", "dependencies": { "asynckit": "^0.4.0", @@ -13075,7 +12837,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -13135,7 +12896,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "dev": true, "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", @@ -13171,7 +12931,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "dev": true, "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", @@ -13307,7 +13066,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -13327,7 +13085,6 @@ "version": "15.8.0", "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.8.0.tgz", "integrity": "sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==", - "dev": true, "license": "MIT", "engines": { "node": ">= 10.x" @@ -13411,7 +13168,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -13424,7 +13180,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" @@ -13467,7 +13222,6 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", - "dev": true, "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -13512,7 +13266,6 @@ "version": "5.5.3", "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", - "dev": true, "license": "MIT" }, "node_modules/html-encoding-sniffer": { @@ -13554,7 +13307,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, "license": "MIT", "dependencies": { "agent-base": "6", @@ -13578,6 +13330,7 @@ "version": "9.1.7", "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", + "dev": true, "license": "MIT", "bin": { "husky": "bin.js" @@ -13593,14 +13346,12 @@ "version": "5.0.6", "resolved": "https://registry.npmjs.org/idb/-/idb-5.0.6.tgz", "integrity": "sha512-/PFvOWPzRcEPmlDt5jEvzVZVs0wyd/EvGvkDIcbBpGuMMLQKrTPG0TxvE2UJtgZtCQCmOtM2QD7yQJBVEjKGOw==", - "dev": true, "license": "ISC" }, "node_modules/ieee754": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", - "dev": true, "license": "BSD-3-Clause" }, "node_modules/ignore": { @@ -13623,7 +13374,6 @@ "version": "9.0.6", "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.6.tgz", "integrity": "sha512-G95ivKpy+EvVAnAab4fVa4YGYn24J1SpEktnJX7JJ45Bd7xqME/SCplFzYFmTbrkwZbQ4xJK1xMTUYBkN6pWsQ==", - "dev": true, "license": "MIT", "funding": { "type": "opencollective", @@ -14323,7 +14073,6 @@ "version": "4.1.16", "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", - "dev": true, "license": "MIT", "engines": { "node": ">=12.13" @@ -16739,7 +16488,6 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.7.tgz", "integrity": "sha512-z/wZZgDrkNV1eA0ULjM/F9/50Ya8fbzgKneSpoPsXSGd0KnpdtHfOZWK+GcwLk+EZbS4F9RBhU+K2RgzuDaItw==", - "dev": true, "license": "MIT", "engines": { "node": ">=20" @@ -17455,14 +17203,12 @@ "version": "4.18.1", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", - "dev": true, "license": "MIT" }, "node_modules/lodash-es": { "version": "4.18.1", "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.18.1.tgz", "integrity": "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==", - "dev": true, "license": "MIT" }, "node_modules/lodash.castarray": { @@ -17676,7 +17422,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -17737,7 +17482,6 @@ "version": "2.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true, "license": "MIT", "bin": { "mime": "cli.js" @@ -17750,7 +17494,6 @@ "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -17760,7 +17503,6 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, "license": "MIT", "dependencies": { "mime-db": "1.52.0" @@ -17845,7 +17587,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", - "dev": true, "license": "MIT" }, "node_modules/mlly": { @@ -17872,7 +17613,6 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, "license": "MIT" }, "node_modules/muggle-string": { @@ -17898,7 +17638,6 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/nanoclone/-/nanoclone-0.2.1.tgz", "integrity": "sha512-wynEP02LmIbLpcYw8uBKpcfF6dmg2vcpKqxeH5UcoKEYdExslsdUA4ugFauuaeYdTB76ez6gJW8XAZ6CgkXYxA==", - "dev": true, "license": "MIT" }, "node_modules/nanoid": { @@ -18389,7 +18128,6 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/path-expression-matcher/-/path-expression-matcher-1.5.0.tgz", "integrity": "sha512-cbrerZV+6rvdQrrD+iGMcZFEiiSrbv9Tfdkvnusy6y0x0GKBXREFg/Y65GhIfm0tnLntThhzCnfKwp1WRjeCyQ==", - "dev": true, "funding": [ { "type": "github", @@ -18484,7 +18222,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", - "dev": true, "license": "MIT" }, "node_modules/performance-now": { @@ -18527,7 +18264,6 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.3.1.tgz", "integrity": "sha512-khUlZSwt9xXCaTbbxFYBKDc/bWAGWJjOgvxETwkTN7KRm66EeT1ZdZj6i2ceh9sP2Pzqsbc704r2yngBrxBVug==", - "dev": true, "license": "MIT", "dependencies": { "@vue/devtools-api": "^6.6.3", @@ -18928,7 +18664,6 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-2.0.6.tgz", "integrity": "sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==", - "dev": true, "license": "MIT" }, "node_modules/proto-list": { @@ -18942,7 +18677,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -19514,7 +19248,6 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", - "dev": true, "license": "MIT" }, "node_modules/rolldown": { @@ -19593,7 +19326,6 @@ "version": "7.8.2", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.1.0" @@ -19975,7 +19707,6 @@ "version": "14.0.1", "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", - "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -20345,7 +20076,6 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.2.3.tgz", "integrity": "sha512-oKx6RUCuHfT3oyVjtnrmn19H1SiCqgJSg+54XqURKp5aCMbrXrhLjRN9TjuwMjiYstZ0MzDrHqkGZ5dFTKd+zg==", - "dev": true, "funding": [ { "type": "github", @@ -20391,7 +20121,6 @@ "version": "2.2.2", "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.2.tgz", "integrity": "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==", - "dev": true, "license": "MIT", "dependencies": { "copy-anything": "^3.0.2" @@ -20532,7 +20261,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/swrv/-/swrv-1.1.0.tgz", "integrity": "sha512-pjllRDr2s0iTwiE5Isvip51dZGR7GjLH1gCSVyE8bQnbAx6xackXsFdojau+1O5u98yHF5V73HQGOFxKUXO9gQ==", - "dev": true, "license": "Apache-2.0", "peerDependencies": { "vue": ">=3.2.26 < 4" @@ -20801,7 +20529,6 @@ "version": "6.3.7", "resolved": "https://registry.npmjs.org/tippy.js/-/tippy.js-6.3.7.tgz", "integrity": "sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==", - "dev": true, "license": "MIT", "dependencies": { "@popperjs/core": "^2.9.0" @@ -20862,7 +20589,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==", - "dev": true, "license": "MIT" }, "node_modules/tough-cookie": { @@ -21055,7 +20781,6 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, "license": "0BSD" }, "node_modules/tunnel-agent": { @@ -21106,7 +20831,6 @@ "version": "4.41.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", - "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=16" @@ -21256,7 +20980,6 @@ "version": "2.4.0", "resolved": "https://registry.npmjs.org/ulid/-/ulid-2.4.0.tgz", "integrity": "sha512-fIRiVTJNcSRmXKPZtGzFQv9WRrZ3M9eoptl/teFJvjOzmpU+/K/JH6HZ8deBfb5vMEpicJcLn7JmvdknlMq7Zg==", - "dev": true, "license": "MIT", "bin": { "ulid": "bin/cli.js" @@ -21285,7 +21008,6 @@ "version": "1.13.8", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.8.tgz", "integrity": "sha512-DXtD3ZtEQzc7M8m4cXotyHR+FAS18C64asBYY5vqZexfYryNNnDc02W4hKg3rdQuqOYas1jkseX0+nZXjTXnvQ==", - "dev": true, "license": "MIT" }, "node_modules/undici": { @@ -21641,7 +21363,6 @@ "version": "14.0.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-14.0.0.tgz", "integrity": "sha512-Qo+uWgilfSmAhXCMav1uYFynlQO7fMFiMVZsQqZRMIXp0O7rR7qjkj+cPvBHLgBqi960QCoo/PH2/6ZtVqKvrg==", - "dev": true, "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" @@ -21690,7 +21411,6 @@ "version": "4.15.1", "resolved": "https://registry.npmjs.org/vee-validate/-/vee-validate-4.15.1.tgz", "integrity": "sha512-DkFsiTwEKau8VIxyZBGdO6tOudD+QoUBPuHj3e6QFqmbfCRj1ArmYWue9lEp6jLSWBIw4XPlDLjFIZNLdRAMSg==", - "dev": true, "license": "MIT", "dependencies": { "@vue/devtools-api": "^7.5.2", @@ -21704,7 +21424,6 @@ "version": "7.7.7", "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.7.tgz", "integrity": "sha512-lwOnNBH2e7x1fIIbVT7yF5D+YWhqELm55/4ZKf45R9T8r9dE2AIOy8HKjfqzGsoTHFbWbr337O4E0A0QADnjBg==", - "dev": true, "license": "MIT", "dependencies": { "@vue/devtools-kit": "^7.7.7" @@ -22179,7 +21898,6 @@ "version": "0.14.10", "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", - "dev": true, "hasInstallScript": true, "license": "MIT", "bin": { @@ -22282,7 +22000,6 @@ "version": "6.7.1", "resolved": "https://registry.npmjs.org/vue-tippy/-/vue-tippy-6.7.1.tgz", "integrity": "sha512-gdHbBV5/Vc8gH87hQHLA7TN1K4BlLco3MAPrTb70ZYGXxx+55rAU4a4mt0fIoP+gB3etu1khUZ6c29Br1n0CiA==", - "dev": true, "license": "MIT", "dependencies": { "tippy.js": "^6.3.7" @@ -22312,7 +22029,6 @@ "version": "1.0.0-beta.6", "resolved": "https://registry.npmjs.org/vuejs-smart-table/-/vuejs-smart-table-1.0.0-beta.6.tgz", "integrity": "sha512-pGd5tAYkNQQpZ5v9wiyiPg8DcQuTId7PGZWmpK1V2w1CSVWwPnbkn3oVBv4k2ctCopC9iwj1Pck1LCAKIJrCYw==", - "dev": true, "dependencies": { "vue-demi": "^0.7.4" }, @@ -22330,7 +22046,6 @@ "version": "0.7.5", "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.7.5.tgz", "integrity": "sha512-eFSQSvbQdY7C9ujOzvM6tn7XxwLjn0VQDXQsiYBLBwf28Na+2nTQR4BBBcomhmdP6mmHlBKAwarq6a0BPG87hQ==", - "dev": true, "hasInstallScript": true, "license": "MIT", "bin": { @@ -22752,7 +22467,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/xml-naming/-/xml-naming-0.1.0.tgz", "integrity": "sha512-k8KO9hrMyNk6tUWqUfkTEZbezRRpONVOzUTnc97VnCvyj6Tf9lyUR9EDAIeiVLv56jsMcoXEwjW8Kv5yPY52lw==", - "dev": true, "funding": [ { "type": "github", @@ -22871,7 +22585,6 @@ "version": "0.32.11", "resolved": "https://registry.npmjs.org/yup/-/yup-0.32.11.tgz", "integrity": "sha512-Z2Fe1bn+eLstG8DRR6FTavGD+MeAwyfmouhHsIUgaADz8jvFKbO/fXc2trJKZg+5EBjh4gGm3iU/t3onKlXHIg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/runtime": "^7.15.4", diff --git a/flip-ui/package.json b/flip-ui/package.json index ee43a8c3d..45d110a0e 100644 --- a/flip-ui/package.json +++ b/flip-ui/package.json @@ -38,23 +38,36 @@ "docs:gifs": "bash scripts/videos-to-gifs.sh" }, "dependencies": { + "@headlessui/vue": "^1.7.0", + "@popperjs/core": "^2.10.2", + "@vueuse/core": "^8.7.5", + "aws-amplify": "^6.15.3", + "axios": "^1.16.0", + "codemirror-editor-vue3": "^2.1.7", + "date-fns": "^2.25.0", "echarts": "^6.1.0", "highlight.js": "^10.7.3", - "husky": "^9.1.7", "jszip": "^3.10.1", + "mime": "^2.5.2", + "mitt": "^3.0.0", + "pinia": "^2.1.7", "qrcode": "^1.5.4", + "swrv": "^1.0.4", + "underscore": "^1.13.4", + "vee-validate": "^4.5.8", "vue": "^3.2.16", - "vue-router": "^4.0.11" + "vue-router": "^4.0.11", + "vue-tippy": "^6.3.1", + "vuejs-smart-table": "^1.0.0-beta.5", + "yup": "^0.32.9" }, "devDependencies": { "@babel/node": "^7.8.7", "@babel/preset-env": "^7.14.7", "@cypress/vite-dev-server": "^3.0.0", "@cypress/vue": "^3.0.5", - "@headlessui/vue": "^1.7.0", "@iconify/json": "^2.2.496", "@pinia/testing": "^0.1.3", - "@popperjs/core": "^2.10.2", "@stylistic/eslint-plugin": "^5.10.0", "@tailwindcss/forms": "^0.5.2", "@tailwindcss/typography": "^0.5.4", @@ -72,38 +85,28 @@ "@vue/eslint-config-typescript": "^14.7.0", "@vue/test-utils": "^2.0.0", "@vueuse/components": "^9.2.0", - "@vueuse/core": "^8.7.5", "autoprefixer": "^10.4.7", - "aws-amplify": "^6.15.3", - "axios": "^1.16.0", "c8": "^11.0.0", - "codemirror-editor-vue3": "^2.1.7", "cypress": "14.5.2", "cypress-file-upload": "^5.0.8", "cypress-localstorage-commands": "^2.2.0", - "date-fns": "^2.25.0", "dotenv": "^16.0.3", "eslint": "^10.1.0", "eslint-plugin-simple-import-sort": "^13.0.0", "eslint-plugin-vue": "^10.8.0", + "husky": "^9.1.7", "jsdom": "^29.0.1", "lucene": "^2.1.1", - "mime": "^2.5.2", "miragejs": "^0.1.42", - "mitt": "^3.0.0", - "pinia": "^2.1.7", "postcss": "^8.4.5", "start-server-and-test": "^2.0.12", - "swrv": "^1.0.4", "tailwindcss": "^3.1.8", "ts-jest": "^29.1.2", "ts-node": "^10.9.2", "typescript": "^5.3.3", - "underscore": "^1.13.4", "unplugin-icons": "^0.14.3", "unplugin-vue-components": "^28.8.0", "uuid": "^14.0.0", - "vee-validate": "^4.5.8", "vite": "^8.0.16", "vite-plugin-icons": "^0.2.4", "vite-plugin-pages": "^0.33.3", @@ -115,10 +118,7 @@ "vue-click": "^2.1.7", "vue-eslint-parser": "^10.0.0", "vue-router-mock": "1.0.0", - "vue-tippy": "^6.3.1", - "vue-tsc": "^3.0.3", - "vuejs-smart-table": "^1.0.0-beta.5", - "yup": "^0.32.9" + "vue-tsc": "^3.0.3" }, "overrides": { "undici": ">=7.28.0 <8.0.0", From 4202e488cd60b86eb76ce87942da7ed503b5409f Mon Sep 17 00:00:00 2001 From: at24_bioeng625-pc Date: Wed, 26 Aug 2026 15:04:47 +0100 Subject: [PATCH 2/5] fix(flip-ui): stop shipping Mirage; enforce dependency scoping in CI (#1041) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Review of the first commit found that its own stated rule — "if a non-test file under src/ imports it, it is a dependency" — was under-inclusive, and that the tree violated it. src/main.ts statically imported ../mocks/server, which is outside src/ and therefore outside the sweep. Three things follow, and all three are fixed here. 1. Mirage was shipping in the production bundle. The VITE_LOCAL branch that calls makeServer() folds correctly, but miragejs patches Error.prototype at module scope, so rolldown kept the module and emitted ~230 of them — Mirage, Pretender, route-recognizer, inflected and all of lodash — into the entry chunk of every build. This is the exact FLIP#794 mechanism that src/main.ts already documents for mocks/demo-server; that one was fixed with a dynamic import, this one never was. Making it dynamic cuts the entry chunk from 331 KB to 182 KB and total shipped JS by 128 KB. 2. Four more packages were mis-scoped. miragejs and uuid ship in the public /ark_demo bundle via mocks/demo-server, so they are dependencies whatever happens to the main bundle. codemirror and tippy.js are imported directly by src/ but were declared in neither stanza — they resolved only through npm hoisting a parent's tree, so a dedupe or a parent bump would have broken the build, and Dependabot could not scope-label them at all. 3. Prose was never going to hold this line. eslint.config.mjs now runs import-x/no-extraneous-dependencies over src/ (minus tests) and mocks/, so a devDependency imported from production source fails `npm run lint` in CI at the moment it is written. mocks/ is deliberately not exempt — it ships in the demo bundle. Verified adversarially: demoting axios back to devDependencies reddens the lint. Bringing mocks/ under the linter surfaced 19 pre-existing errors there (it was never in the lint glob). Sixteen were formatting, auto-fixed. The rest were one stale eslint-disable naming @typescript-eslint/ban-types, a rule removed in typescript-eslint v8 and split into no-empty-object-type — so it had been suppressing nothing; it now names the rule that exists. @popperjs/core stays in dependencies even though tree-shaking currently drops it, because its only consumers (AiSelect/AiChipSelect) are unused. Scoping keys off the import graph, not the bundle: what production code imports is stable, whereas what survives tree-shaking flips whenever an unrelated component starts or stops being used. Totals: 21 packages corrected — 18 out of devDependencies, 2 that were declared nowhere, and husky the other way. Signed-off-by: at24_bioeng625-pc --- flip-ui/README.md | 54 ++++++--- flip-ui/eslint.config.mjs | 28 +++++ flip-ui/mocks/demo-server.ts | 16 ++- flip-ui/mocks/roles/seed-data.ts | 4 +- flip-ui/mocks/server.ts | 12 +- flip-ui/package-lock.json | 189 +++++++++++++++++++++++-------- flip-ui/package.json | 9 +- flip-ui/src/main.ts | 9 +- 8 files changed, 244 insertions(+), 77 deletions(-) diff --git a/flip-ui/README.md b/flip-ui/README.md index 60d32c736..b0270e009 100644 --- a/flip-ui/README.md +++ b/flip-ui/README.md @@ -132,23 +132,43 @@ Client ID are required for a production deployment. ### Dependency scoping -**If a non-test file under `src/` imports a package — statically or through a dynamic `import()` — it belongs in -`dependencies`, not `devDependencies`.** - -The build itself does not care: `vite build` tree-shakes from the `src/` entry points and bundles whatever they -reach, whichever stanza the package sits in. The stanza matters because **Dependabot derives an alert's scope -label from it**. A package that ships to users but sits in `devDependencies` produces an alert labelled -"Development", which reads as *not in the production bundle* and invites a wrongly-dismissed alert on code that -CloudFront is serving to every user. FLIP#1041 fixed 16 such packages (`axios`, `pinia`, `aws-amplify`, -`vee-validate` among them) plus `husky`, which had drifted the other way. - -Two traps when checking this: - -- **`src/` also holds the co-located `*.spec.ts` unit tests.** Their imports (`vitest`, `@vue/test-utils`, - `@pinia/testing`) are genuinely dev-only — exclude test files before concluding a package ships. -- **A `from "..."` grep alone under-reports.** `highlight.js` is loaded lazily via - `import("highlight.js/lib/core")` in [`src/utils/highlightJson.ts`](src/utils/highlightJson.ts) and is - correctly a `dependency` despite having no static import. +**Production source may not import a package that is only declared in `devDependencies`, nor one that is +declared nowhere and resolves through npm's hoisting of a parent's tree.** "Production source" is everything +the deployed bundles reach: `src/`, minus its test files, plus `mocks/` — which `build:demo` pulls into the +public `/ark_demo` bundle. + +This is enforced, not just documented: the `flip-ui/dependency-scoping` block in +[`eslint.config.mjs`](eslint.config.mjs) runs `import-x/no-extraneous-dependencies` over exactly that file +set, so `npm run lint` fails in CI the moment an import lands in the wrong stanza. + +The rule exists for **Dependabot**, not the build. `vite build` tree-shakes from the entry points and bundles +whatever they reach whichever stanza a package sits in, and every install path in the repo (`npm ci` in CI, +the Dockerfile, `make deploy-ui`) installs both stanzas — so a wrong stanza breaks nothing and is invisible +until it matters. What it changes is the **scope label on a security alert**: a package that ships to users +but sits in `devDependencies` produces an alert labelled "Development", which reads as *not in the production +bundle* and invites a wrongly-dismissed alert on code CloudFront is serving. FLIP#1041 corrected 21 +packages: 18 moved out of `devDependencies`, two that were declared nowhere at all (`codemirror`, +`tippy.js` — they resolved only by hoisting), and `husky`, which had drifted the other way. Correct scoping +is also the precondition for ever adopting `npm ci --omit=dev` here. + +Note the rule keys off the **import graph, not the bundle**. `@popperjs/core` is a `dependency` even though +tree-shaking currently drops it (its only consumers, `AiSelect`/`AiChipSelect`, are unused) — declaring on +what production code imports is stable, whereas declaring on what survives tree-shaking silently flips the +correct answer whenever an unrelated component starts or stops being used. + +Two traps when auditing this by hand: + +- **A `from "..."` grep under-reports.** `highlight.js` is loaded lazily via + `import("highlight.js/lib/core")` and `import("highlight.js/lib/languages/json")` in + [`src/utils/highlightJson.ts`](src/utils/highlightJson.ts), and is correctly a `dependency` despite having + no static import. Test files also live under `src/` (107 in `__tests__/` directories plus two flat + `*.spec.ts`), and their imports — `vitest`, `@vue/test-utils`, `@pinia/testing` — are genuinely dev-only. +- **A static import of a side-effecting module is never dropped, even from a branch that folds.** Neither + mock server may be imported statically from [`src/main.ts`](src/main.ts); both are loaded through dynamic + `import()` inside their own folded branch. `mocks/server` was static until FLIP#1041 and shipped ~230 + modules — Mirage, Pretender, route-recognizer, inflected and all of lodash — in the production entry + chunk of every build, because miragejs patches `Error.prototype` at module scope. Making it dynamic cut + the entry chunk from 331 KB to 182 KB. See the comment above `bootstrap()`. ## Testing diff --git a/flip-ui/eslint.config.mjs b/flip-ui/eslint.config.mjs index 38ea52f6b..b15004bac 100644 --- a/flip-ui/eslint.config.mjs +++ b/flip-ui/eslint.config.mjs @@ -13,6 +13,7 @@ import stylistic from "@stylistic/eslint-plugin"; import { defineConfigWithVueTs, vueTsConfigs } from "@vue/eslint-config-typescript"; +import importX from "eslint-plugin-import-x"; import simpleImportSort from "eslint-plugin-simple-import-sort"; import pluginVue from "eslint-plugin-vue"; @@ -141,4 +142,31 @@ export default defineConfigWithVueTs( }, }, }, + + { + // Dependency scoping guard (FLIP#1041). Production source may not import a + // package that is only declared in `devDependencies`, nor one that is declared + // nowhere and resolves solely through npm's hoisting of a parent's tree. + // + // The point is not the build - vite bundles whatever the entry points reach, + // whichever stanza a package sits in. It is that Dependabot derives a security + // alert's scope label from the stanza, so a shipped package left in + // `devDependencies` yields an alert labelled "Development" that reads as + // not-user-facing. See flip-ui/README.md -> Dependency scoping. + // + // `mocks/` is deliberately NOT exempt: mocks/demo-server.ts ships in the public + // /ark_demo bundle, so its imports are production imports. + name: "flip-ui/dependency-scoping", + files: ["src/**/*.ts", "src/**/*.vue", "mocks/**/*.ts"], + ignores: ["**/*.spec.ts", "**/__tests__/**"], + plugins: { "import-x": importX }, + rules: { + "import-x/no-extraneous-dependencies": ["error", { + devDependencies: false, + optionalDependencies: false, + peerDependencies: true, + includeTypes: false, + }], + }, + }, ); diff --git a/flip-ui/mocks/demo-server.ts b/flip-ui/mocks/demo-server.ts index 19a664c46..058634ced 100644 --- a/flip-ui/mocks/demo-server.ts +++ b/flip-ui/mocks/demo-server.ts @@ -196,7 +196,11 @@ const allModels = (): unknown => { // Every recorded run finished, so the trust list is the project's own — the // real endpoint returns [] only for models that never reached dispatch. const runTrusts = (trusts as { id: string; name: string; code: string }[]) - .map(({ id, name, code }) => ({ id, name, code })); + .map(({ id, name, code }) => ({ + id, + name, + code + })); const data: Record[] = rows.map(({ model, project }) => ({ ...model, @@ -210,7 +214,10 @@ const allModels = (): unknown => { const statusCounts = data.reduce>((counts, model) => { const status = String(model.status); - return { ...counts, [status]: (counts[status] ?? 0) + 1 }; + return { + ...counts, + [status]: (counts[status] ?? 0) + 1 + }; }, {}); return { @@ -238,7 +245,10 @@ const flNets = (): unknown => { lastConnected: new Date().toUTCString() })); - return [{ name: "net-1", clients }]; + return [{ + name: "net-1", + clients + }]; }; /** diff --git a/flip-ui/mocks/roles/seed-data.ts b/flip-ui/mocks/roles/seed-data.ts index 075776dcc..c13b9236b 100644 --- a/flip-ui/mocks/roles/seed-data.ts +++ b/flip-ui/mocks/roles/seed-data.ts @@ -28,6 +28,4 @@ export const roleResearcher: IRole = { roledescription: "A researcher." }; -export const allRoles: IRoleResponse = { - roles: [roleAdmin, roleResearcher] -}; +export const allRoles: IRoleResponse = { roles: [roleAdmin, roleResearcher] }; diff --git a/flip-ui/mocks/server.ts b/flip-ui/mocks/server.ts index 60fd79acb..13375eda9 100644 --- a/flip-ui/mocks/server.ts +++ b/flip-ui/mocks/server.ts @@ -52,7 +52,11 @@ const projectsModel: ModelDefinition = Model.extend({}); const usersModel: ModelDefinition = Model.extend({}); const detailsModel: ModelDefinition = Model.extend({}); -// eslint-disable-next-line @typescript-eslint/ban-types +// Mirage's Registry is parameterised by the model and factory maps; this app +// registers neither, so both are genuinely empty. `ban-types` was removed in +// typescript-eslint v8 and split into `no-empty-object-type` (FLIP#1041 — the +// old disable named a rule that no longer exists, so it suppressed nothing). +// eslint-disable-next-line @typescript-eslint/no-empty-object-type export type AppRegistry = Registry<{}, {}>; type AppSchema = Schema @@ -270,7 +274,11 @@ export const makeServer = ({ environment = "development" } = {}): Server= 6" } }, + "node_modules/comment-parser": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.8.tgz", + "integrity": "sha512-rKZTGo4fzKYna8UcL0isTg5wkBNla7bxTypLwZQXjIdi++IdP1OJ41rI5Mti3/jltkPujbu4i9LIARYA+zpotQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12.0.0" + } + }, "node_modules/common-tags": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", @@ -11924,6 +11916,81 @@ } } }, + "node_modules/eslint-import-context": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/eslint-import-context/-/eslint-import-context-0.1.9.tgz", + "integrity": "sha512-K9Hb+yRaGAGUbwjhFNHvSmmkZs9+zbuoe3kFQ4V1wYjrepUFYM2dZAfNtjbbj3qsPfUfsA68Bx/ICWQMi+C8Eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-tsconfig": "^4.10.1", + "stable-hash-x": "^0.2.0" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-import-context" + }, + "peerDependencies": { + "unrs-resolver": "^1.0.0" + }, + "peerDependenciesMeta": { + "unrs-resolver": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-import-x": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import-x/-/eslint-plugin-import-x-4.17.1.tgz", + "integrity": "sha512-4cdstYkKCyjumM2Q9NSI03K8D2a9F4Ssz33K2lv2hQa4KmR9jPLwk3uWGtNvclfqBrPGfGuMBwsGMbe6dMRbfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "^8.56.0", + "comment-parser": "^1.4.1", + "debug": "^4.4.1", + "eslint-import-context": "^0.1.9", + "is-glob": "^4.0.3", + "minimatch": "^9.0.3 || ^10.1.2", + "semver": "^7.7.2", + "stable-hash-x": "^0.2.0", + "unrs-resolver": "^1.9.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-import-x" + }, + "peerDependencies": { + "@typescript-eslint/utils": "^8.56.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "eslint-import-resolver-node": "*" + }, + "peerDependenciesMeta": { + "@typescript-eslint/utils": { + "optional": true + }, + "eslint-import-resolver-node": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-import-x/node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/eslint-plugin-simple-import-sort": { "version": "13.0.0", "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-13.0.0.tgz", @@ -12436,7 +12503,6 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/fake-xml-http-request/-/fake-xml-http-request-2.1.2.tgz", "integrity": "sha512-HaFMBi7r+oEC9iJNpc3bvcW7Z7iLmM26hPDmlb0mFwyANSsOQAtJxbdWsXITKOzZUyMYK0zYCv3h5yDj9TsiXg==", - "dev": true, "license": "MIT" }, "node_modules/fast-deep-equal": { @@ -12974,6 +13040,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-tsconfig": { + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.14.3.tgz", + "integrity": "sha512-++QEw4DIY7WGoukz+/+A/8dGYPT9l9yIadnmSgZ8Rjr3YVSVDipQSO9CdnJo9ePqFqUUqh+wk9uIaoiAwsiPkA==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, "node_modules/getos": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", @@ -13510,7 +13589,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/inflected/-/inflected-2.1.0.tgz", "integrity": "sha512-hAEKNxvHf2Iq3H60oMBHkB4wl5jn3TPF3+fXek/sRwAB5gP9xWs4r7aweSF95f99HFoz69pnZTcu8f0SIHV18w==", - "dev": true, "license": "MIT" }, "node_modules/inflight": { @@ -17571,7 +17649,6 @@ "version": "0.1.48", "resolved": "https://registry.npmjs.org/miragejs/-/miragejs-0.1.48.tgz", "integrity": "sha512-MGZAq0Q3OuRYgZKvlB69z4gLN4G3PvgC4A2zhkCXCXrLD5wm2cCnwNB59xOBVA+srZ0zEes6u+VylcPIkB4SqA==", - "dev": true, "license": "MIT", "dependencies": { "@miragejs/pretender-node-polyfill": "^0.1.0", @@ -17664,7 +17741,6 @@ "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==", "dev": true, "license": "MIT", - "peer": true, "bin": { "napi-postinstall": "lib/cli.js" }, @@ -18586,7 +18662,6 @@ "version": "3.4.7", "resolved": "https://registry.npmjs.org/pretender/-/pretender-3.4.7.tgz", "integrity": "sha512-jkPAvt1BfRi0RKamweJdEcnjkeu7Es8yix3bJ+KgBC5VpG/Ln4JE3hYN6vJym4qprm8Xo5adhWpm3HCoft1dOw==", - "dev": true, "license": "MIT", "dependencies": { "fake-xml-http-request": "^2.1.2", @@ -19219,6 +19294,16 @@ "node": ">=8" } }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, "node_modules/restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -19295,7 +19380,6 @@ "version": "0.3.4", "resolved": "https://registry.npmjs.org/route-recognizer/-/route-recognizer-0.3.4.tgz", "integrity": "sha512-2+MhsfPhvauN1O8KaXpXAOfR/fwe8dnUXVM+xw7yt40lJRfPVQxV6yryZm0cgRvAj5fMF/mdRZbL2ptwbs5i2g==", - "dev": true, "license": "MIT" }, "node_modules/run-parallel": { @@ -19759,6 +19843,16 @@ "node": ">=0.10.0" } }, + "node_modules/stable-hash-x": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/stable-hash-x/-/stable-hash-x-0.2.0.tgz", + "integrity": "sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/stack-utils": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", @@ -21273,7 +21367,6 @@ "dev": true, "hasInstallScript": true, "license": "MIT", - "peer": true, "dependencies": { "napi-postinstall": "^0.3.0" }, diff --git a/flip-ui/package.json b/flip-ui/package.json index 45d110a0e..334d2e131 100644 --- a/flip-ui/package.json +++ b/flip-ui/package.json @@ -24,7 +24,7 @@ "serve:demo": "vite preview --mode demo --port 4174", "serve": "vite preview", "test:unit": "vitest run --silent --coverage", - "lint": "npx eslint \"./src/**/*.vue\" \"./src/**/*.ts\"", + "lint": "npx eslint \"./src/**/*.vue\" \"./src/**/*.ts\" \"./mocks/**/*.ts\"", "prepare": "husky install", "test:unit:update": "vitest run -u --silent --coverage", "test:unit:watch": "vitest watch --silent", @@ -43,17 +43,21 @@ "@vueuse/core": "^8.7.5", "aws-amplify": "^6.15.3", "axios": "^1.16.0", + "codemirror": "^5.65.19", "codemirror-editor-vue3": "^2.1.7", "date-fns": "^2.25.0", "echarts": "^6.1.0", "highlight.js": "^10.7.3", "jszip": "^3.10.1", "mime": "^2.5.2", + "miragejs": "^0.1.42", "mitt": "^3.0.0", "pinia": "^2.1.7", "qrcode": "^1.5.4", "swrv": "^1.0.4", + "tippy.js": "^6.3.7", "underscore": "^1.13.4", + "uuid": "^14.0.0", "vee-validate": "^4.5.8", "vue": "^3.2.16", "vue-router": "^4.0.11", @@ -92,12 +96,12 @@ "cypress-localstorage-commands": "^2.2.0", "dotenv": "^16.0.3", "eslint": "^10.1.0", + "eslint-plugin-import-x": "^4.17.1", "eslint-plugin-simple-import-sort": "^13.0.0", "eslint-plugin-vue": "^10.8.0", "husky": "^9.1.7", "jsdom": "^29.0.1", "lucene": "^2.1.1", - "miragejs": "^0.1.42", "postcss": "^8.4.5", "start-server-and-test": "^2.0.12", "tailwindcss": "^3.1.8", @@ -106,7 +110,6 @@ "typescript": "^5.3.3", "unplugin-icons": "^0.14.3", "unplugin-vue-components": "^28.8.0", - "uuid": "^14.0.0", "vite": "^8.0.16", "vite-plugin-icons": "^0.2.4", "vite-plugin-pages": "^0.33.3", diff --git a/flip-ui/src/main.ts b/flip-ui/src/main.ts index 3033c680c..f57b8d625 100644 --- a/flip-ui/src/main.ts +++ b/flip-ui/src/main.ts @@ -21,7 +21,6 @@ import { createApp } from "vue"; import VueTippy from "vue-tippy"; import SmartTable from "vuejs-smart-table"; -import { makeServer } from "../mocks/server"; import App from "./App.vue"; import { seedDemoAuth } from "./demo/bootstrap"; import router from "./router"; @@ -67,6 +66,13 @@ if (!isDemoBuild) { * Behind a dynamic import the reference disappears with the branch, so no * fixture chunk is emitted at all. * + * `mocks/server` (the VITE_LOCAL dev mock) is loaded the same way, for the same + * reason. It was a static import until FLIP#1041: the VITE_LOCAL branch folded + * correctly, but miragejs patches Error.prototype at module scope, so rolldown + * kept the module anyway and shipped ~230 modules — Mirage, Pretender, + * route-recognizer, inflected and all of lodash — in the production entry + * chunk of every build. Neither mock server may be imported statically here. + * * Mounting waits for that install: Mirage patches XHR globally when it is * constructed, and the app issues its first requests during mount. Mounting * first would let those escape to the network before the mock exists. In a @@ -90,6 +96,7 @@ async function bootstrap(): Promise { } else if (import.meta.env.VITE_LOCAL === "true" && !isE2E) { console.info("Running locally, will use mocked API."); + const { makeServer } = await import("../mocks/server"); makeServer(); } From 190e8d4de7f23f19e8a050894a100ac03252c31c Mon Sep 17 00:00:00 2001 From: at24_bioeng625-pc Date: Wed, 26 Aug 2026 15:24:37 +0100 Subject: [PATCH 3/5] refactor(flip-ui): remove dead AiSelect/AiChipSelect and @popperjs/core (#1063) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Neither component is rendered anywhere, and the codebase's only @popperjs/core import existed to serve them. 705 lines of dead code. The two arrived here differently, which is worth recording before the code is gone: - AiChipSelect was real. It was the multi-select role picker in RegisterUserModal until 84a2004f ("feat(user-profile): name + organisation on users"), which changed the modal from multi-role to single-role and replaced it with a Headless UI Listbox written inline in the template. The removal was collateral from a redesign, not a deliberate deprecation, so multi-select role assignment is a capability the platform quietly lost; this component is the prior art if it is ever wanted back. - AiSelect was never used in this repo at all. A pickaxe for ` --- flip-ui/README.md | 10 +- flip-ui/package-lock.json | 1 - flip-ui/package.json | 1 - .../src/components/AiSelect/AiChipSelect.vue | 150 --------------- flip-ui/src/components/AiSelect/AiSelect.vue | 147 -------------- .../AiSelect/__tests__/AiChipSelect.spec.ts | 179 ------------------ .../AiSelect/__tests__/AiSelect.spec.ts | 50 ----- .../__snapshots__/AiChipSelect.spec.ts.snap | 57 ------ .../__snapshots__/AiSelect.spec.ts.snap | 54 ------ .../AiSelect/__tests__/selectors.ts | 21 -- .../interfaces.ts => interfaces/select.ts} | 12 +- .../partials/users/RegisterUserModal.spec.ts | 9 +- .../src/partials/users/RegisterUserModal.vue | 2 +- flip-ui/src/utils/popper.ts | 47 ----- .../group-4/user/manage_users.spec.ts | 8 +- 15 files changed, 25 insertions(+), 723 deletions(-) delete mode 100644 flip-ui/src/components/AiSelect/AiChipSelect.vue delete mode 100644 flip-ui/src/components/AiSelect/AiSelect.vue delete mode 100644 flip-ui/src/components/AiSelect/__tests__/AiChipSelect.spec.ts delete mode 100644 flip-ui/src/components/AiSelect/__tests__/AiSelect.spec.ts delete mode 100644 flip-ui/src/components/AiSelect/__tests__/__snapshots__/AiChipSelect.spec.ts.snap delete mode 100644 flip-ui/src/components/AiSelect/__tests__/__snapshots__/AiSelect.spec.ts.snap delete mode 100644 flip-ui/src/components/AiSelect/__tests__/selectors.ts rename flip-ui/src/{components/AiSelect/interfaces.ts => interfaces/select.ts} (64%) delete mode 100644 flip-ui/src/utils/popper.ts diff --git a/flip-ui/README.md b/flip-ui/README.md index b0270e009..e8207d576 100644 --- a/flip-ui/README.md +++ b/flip-ui/README.md @@ -151,10 +151,12 @@ packages: 18 moved out of `devDependencies`, two that were declared nowhere at a `tippy.js` — they resolved only by hoisting), and `husky`, which had drifted the other way. Correct scoping is also the precondition for ever adopting `npm ci --omit=dev` here. -Note the rule keys off the **import graph, not the bundle**. `@popperjs/core` is a `dependency` even though -tree-shaking currently drops it (its only consumers, `AiSelect`/`AiChipSelect`, are unused) — declaring on -what production code imports is stable, whereas declaring on what survives tree-shaking silently flips the -correct answer whenever an unrelated component starts or stops being used. +Note the rule keys off the **import graph, not the bundle**: a package imported by production source is a +`dependency` even if tree-shaking currently drops it. What production code imports is stable, whereas what +survives tree-shaking silently flips the correct answer whenever an unrelated component starts or stops being +used. (`@popperjs/core` was the worked example of this until FLIP#1063 removed its only importer along with +the dead `AiSelect`/`AiChipSelect` components, at which point it left the manifest entirely — the honest +resolution, and the one a lint rule cannot reach, since nothing flags an import that is merely unreachable.) Two traps when auditing this by hand: diff --git a/flip-ui/package-lock.json b/flip-ui/package-lock.json index eee41a57a..adf292a34 100644 --- a/flip-ui/package-lock.json +++ b/flip-ui/package-lock.json @@ -9,7 +9,6 @@ "version": "0.5.0", "dependencies": { "@headlessui/vue": "^1.7.0", - "@popperjs/core": "^2.10.2", "@vueuse/core": "^8.7.5", "aws-amplify": "^6.15.3", "axios": "^1.16.0", diff --git a/flip-ui/package.json b/flip-ui/package.json index 334d2e131..cc10609fa 100644 --- a/flip-ui/package.json +++ b/flip-ui/package.json @@ -39,7 +39,6 @@ }, "dependencies": { "@headlessui/vue": "^1.7.0", - "@popperjs/core": "^2.10.2", "@vueuse/core": "^8.7.5", "aws-amplify": "^6.15.3", "axios": "^1.16.0", diff --git a/flip-ui/src/components/AiSelect/AiChipSelect.vue b/flip-ui/src/components/AiSelect/AiChipSelect.vue deleted file mode 100644 index ed3b1ce6f..000000000 --- a/flip-ui/src/components/AiSelect/AiChipSelect.vue +++ /dev/null @@ -1,150 +0,0 @@ - - - - - diff --git a/flip-ui/src/components/AiSelect/AiSelect.vue b/flip-ui/src/components/AiSelect/AiSelect.vue deleted file mode 100644 index bbc592c91..000000000 --- a/flip-ui/src/components/AiSelect/AiSelect.vue +++ /dev/null @@ -1,147 +0,0 @@ - - - - - - - diff --git a/flip-ui/src/components/AiSelect/__tests__/AiChipSelect.spec.ts b/flip-ui/src/components/AiSelect/__tests__/AiChipSelect.spec.ts deleted file mode 100644 index 84ea16c81..000000000 --- a/flip-ui/src/components/AiSelect/__tests__/AiChipSelect.spec.ts +++ /dev/null @@ -1,179 +0,0 @@ -/* - * Copyright (c) 2026 Guy's and St Thomas' NHS Foundation Trust & King's College London - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0 - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - - -import { mountComponent } from "@test/helper"; -import type { FieldEntry } from "vee-validate"; -import { nextTick } from "vue"; - -import { IOption } from "@/components/AiSelect/interfaces"; - -import AiChipSelect from "../AiChipSelect.vue"; - -describe("AI Chip Select", () => { - const component = mountComponent(AiChipSelect); - - it("renders the component successfully", () => { - expect(component.element).toMatchSnapshot(); - }); -}); - -describe("AI Chip Select — script logic", () => { - const optionA: IOption = { - id: "1", - description: "Admin" - }; - const optionB: IOption = { - id: "2", - description: "Researcher" - }; - - const fieldEntry = (option: IOption, key = option.id): FieldEntry => - ({ - key, - value: option, - isFirst: false, - isLast: false - } as FieldEntry); - - it("emits push + validate when a new option is selected", async () => { - const component = mountComponent(AiChipSelect, { - props: { - options: [optionA, optionB], - selectedOptions: [], - defaultText: "Select role" - } - }); - - // Drive the internal ref directly. Headlessui Listbox doesn't open in - // jsdom so we can't click ListboxOption — but the script under test - // is the watcher on currentlySelected, which fires regardless of - // which path set the ref. Tests the emit contract, not Listbox - // internals. Vue exposes script-setup state via $.setupState. - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (component.vm as any).$.setupState.currentlySelected = optionA; - await nextTick(); - - expect(component.emitted("push")).toEqual([[optionA]]); - expect(component.emitted("validate")).toEqual([[]]); - }); - - it("skips push but still fires validate when re-selecting an already-selected option", async () => { - const component = mountComponent(AiChipSelect, { - props: { - options: [optionA, optionB], - selectedOptions: [fieldEntry(optionA)], - defaultText: "Select role" - } - }); - - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (component.vm as any).$.setupState.currentlySelected = optionA; - await nextTick(); - - expect(component.emitted("push")).toBeUndefined(); - expect(component.emitted("validate")).toEqual([[]]); - }); - - it("renders a chip for each selectedOption with the option description", () => { - const component = mountComponent(AiChipSelect, { - props: { - options: [optionA, optionB], - selectedOptions: [fieldEntry(optionA), fieldEntry(optionB)], - defaultText: "Select role" - } - }); - - const chips = component.findAllComponents({ name: "AiButton" }); - expect(chips).toHaveLength(2); - expect(chips[0].text()).toContain("Admin"); - expect(chips[1].text()).toContain("Researcher"); - }); - - it("renders a checkmark on already-selected dropdown options", async () => { - const component = mountComponent(AiChipSelect, { - attachTo: document.body, - props: { - options: [optionA, optionB], - selectedOptions: [fieldEntry(optionA)], - defaultText: "Select role" - } - }); - - // Open the Listbox so the v-for over options actually renders, which - // is the only path that exercises selectedOptionsInclude(). Headlessui - // requires a real click on its ListboxButton; trigger() on the - // wrapper element does the job in jsdom once attachTo is set. - await component.get("[aria-haspopup=\"listbox\"]").trigger("click"); - await nextTick(); - - const optionElements = component.findAll("[data-test=\"chip-select-option\"]"); - expect(optionElements).toHaveLength(2); - // The check icon renders as an inline only when - // selectedOptionsInclude returns true. optionA is in selectedOptions - // → svg present; optionB isn't → no svg. - expect(optionElements[0].find("svg").exists()).toBe(true); - expect(optionElements[1].find("svg").exists()).toBe(false); - - component.unmount(); - }); - - it("emits remove + validate with the chip index when a chip is clicked", async () => { - const component = mountComponent(AiChipSelect, { - props: { - options: [optionA, optionB], - selectedOptions: [fieldEntry(optionA), fieldEntry(optionB)], - defaultText: "Select role" - } - }); - - // The chips render via AiButton (a
- - - - - - - - - - -
- - -
- -
-`; diff --git a/flip-ui/src/components/AiSelect/__tests__/__snapshots__/AiSelect.spec.ts.snap b/flip-ui/src/components/AiSelect/__tests__/__snapshots__/AiSelect.spec.ts.snap deleted file mode 100644 index a6e01fef1..000000000 --- a/flip-ui/src/components/AiSelect/__tests__/__snapshots__/AiSelect.spec.ts.snap +++ /dev/null @@ -1,54 +0,0 @@ -// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html - -exports[`Ai Select > renders the correct markups 1`] = ` -
- - - -
-
- - - -
-
- - -
-`; diff --git a/flip-ui/src/components/AiSelect/__tests__/selectors.ts b/flip-ui/src/components/AiSelect/__tests__/selectors.ts deleted file mode 100644 index e74e9549f..000000000 --- a/flip-ui/src/components/AiSelect/__tests__/selectors.ts +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright (c) 2026 Guy's and St Thomas' NHS Foundation Trust & King's College London - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0 - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - - -export const AiSelectComponent = { - selectButton: "[data-test=select-component-btn]", - selectButtonText: "[data-test=select-component-display-text]", - selectMenu: "[data-test=select-component-menu]" -}; diff --git a/flip-ui/src/components/AiSelect/interfaces.ts b/flip-ui/src/interfaces/select.ts similarity index 64% rename from flip-ui/src/components/AiSelect/interfaces.ts rename to flip-ui/src/interfaces/select.ts index 5ca121fa8..b9b3ba0fe 100644 --- a/flip-ui/src/components/AiSelect/interfaces.ts +++ b/flip-ui/src/interfaces/select.ts @@ -11,9 +11,15 @@ * limitations under the License. */ - - - +/** + * An option in a select-style control: a stable `id` plus the human-readable + * `description` shown to the user. + * + * Originally `@/components/AiSelect/interfaces`, alongside the AiSelect and + * AiChipSelect components. Both were removed as dead code in FLIP#1063, but the + * shape outlived them — RegisterUserModal's role chooser (a Headless UI Listbox + * written inline) still uses it. + */ export interface IOption { id: string, description: string, diff --git a/flip-ui/src/partials/users/RegisterUserModal.spec.ts b/flip-ui/src/partials/users/RegisterUserModal.spec.ts index 75d6e97f6..1b3f0c562 100644 --- a/flip-ui/src/partials/users/RegisterUserModal.spec.ts +++ b/flip-ui/src/partials/users/RegisterUserModal.spec.ts @@ -18,7 +18,7 @@ import { mount } from "@vue/test-utils"; import { vi } from "vitest"; import { nextTick } from "vue"; -import { IOption } from "@/components/AiSelect/interfaces"; +import { IOption } from "@/interfaces/select"; import RegisterUserModal from "@/partials/users/RegisterUserModal.vue"; import { IRole } from "@/services/role-service"; @@ -95,9 +95,10 @@ describe("Register User Modal", () => { })] } }); - // AiChipSelect tags its trigger with data-test="chip-select"; the new - // single-select tags its trigger with data-test="role-select". - expect(component.find("[data-test=\"chip-select\"]").exists()).toBe(false); + // The role chooser is a single-select Listbox, tagged data-test="role-select". + // (It was a multi-select AiChipSelect until 84a2004f; that component was + // deleted as dead code in FLIP#1063, so the old negative assertion against + // data-test="chip-select" could no longer fail and has been dropped.) expect(component.find("[data-test=\"role-select\"]").exists()).toBe(true); component.unmount(); }); diff --git a/flip-ui/src/partials/users/RegisterUserModal.vue b/flip-ui/src/partials/users/RegisterUserModal.vue index 3c6cd8fbf..22ccac69d 100644 --- a/flip-ui/src/partials/users/RegisterUserModal.vue +++ b/flip-ui/src/partials/users/RegisterUserModal.vue @@ -201,7 +201,7 @@ import { object, string } from "yup"; import AiDialogOverlay from "@/components/AiDialogOverlay/AiDialogOverlay.vue"; import AiInput from "@/components/AiInput/AiInput.vue"; -import { IOption } from "@/components/AiSelect/interfaces"; +import { IOption } from "@/interfaces/select"; import { IRole } from "@/services/role-service"; import { IRegisterUserDto, registerUser } from "@/services/user-service"; import { useErrorStore } from "@/store/error"; diff --git a/flip-ui/src/utils/popper.ts b/flip-ui/src/utils/popper.ts deleted file mode 100644 index ed97ccbea..000000000 --- a/flip-ui/src/utils/popper.ts +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (c) 2026 Guy's and St Thomas' NHS Foundation Trust & King's College London - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0 - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - - - -import { createPopper } from "@popperjs/core"; -import { OptionsGeneric } from "@popperjs/core/lib/types"; -import { onMounted, Ref, ref, watchEffect } from "vue"; - -export function usePopper(options: Partial>>): { - trigger: Ref; - popper: Ref -} { - const trigger = ref(null); - const popper = ref(null); - - onMounted(() => { - watchEffect(onInvalidate => { - const popperValue = popper.value as HTMLElement & { el?: HTMLElement } | null; - const triggerValue = trigger.value as HTMLElement & { el?: HTMLElement } | null; - const popperEl = popperValue?.el ?? popperValue; - const referenceElement = triggerValue?.el ?? triggerValue; - if (!(referenceElement instanceof HTMLElement) || !(popperEl instanceof HTMLElement)) { - return; - } - - const { destroy } = createPopper(referenceElement, popperEl, options); - onInvalidate(destroy); - }); - }); - - return { - trigger, - popper - }; -} diff --git a/flip-ui/test/cypress/integration/group-4/user/manage_users.spec.ts b/flip-ui/test/cypress/integration/group-4/user/manage_users.spec.ts index d752ff444..763efb358 100644 --- a/flip-ui/test/cypress/integration/group-4/user/manage_users.spec.ts +++ b/flip-ui/test/cypress/integration/group-4/user/manage_users.spec.ts @@ -129,10 +129,10 @@ describe("Manage Users as Administrator", () => { cy.getBySel("organisation-field").type("King's College London"); cy.getBySel("email-field").type("testperson@test.com"); cy.getBySel("register-user-confirm-btn").click(); - // Same as the email-validation case — the new modal's role chooser - // surfaces its yup error inline. Also note the wording changed with - // the Listbox refactor: "Please select a role" (was "Select at least - // 1 role" in the old chip-select form). + // Same as the email-validation case — the modal's role chooser surfaces + // its yup error inline. The wording changed with the Listbox refactor + // (84a2004f): "Please select a role", where the superseded multi-select + // said "Select at least 1 role". cy.contains("Please select a role").should("be.visible"); }); From 5a4cb89fcbe7e19f0ca7718780f635d446775059 Mon Sep 17 00:00:00 2001 From: at24_bioeng625-pc Date: Thu, 27 Aug 2026 16:48:34 +0100 Subject: [PATCH 4/5] fix(flip-ui): guard the Mirage removal itself in CI (#1041) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit miragejs is a legitimate dependency (build:demo ships it), so import-x/no-extraneous-dependencies cannot flag a static re-import of mocks/server from production source, and assert-no-demo-artefacts only checked demo-register sentinels — so nothing enforced the Mirage removal this PR's title claims. Close both routes: - eslint.config.mjs: new flip-ui/no-static-mirage block — no-restricted-imports over src/ production sources forbids static imports of miragejs/pretender and of either mock server. The rule does not match dynamic import(), so the legal loads in bootstrap() pass. Runs in npm run lint, i.e. the merge-gating test workflow. - assert-no-demo-artefacts.mjs: Mirage/Pretender library-code sentinels (stable literals from the libraries' own source), so the artefact check now also catches the class no source lint can see — a folded mock branch that stops folding. Verified against a real build:deploy: 7 sentinels absent from 93 dist files. Signed-off-by: at24_bioeng625-pc --- flip-ui/README.md | 8 ++++- flip-ui/eslint.config.mjs | 31 ++++++++++++++++ .../assert-no-demo-artefacts.spec.ts | 18 ++++++++++ flip-ui/scripts/assert-no-demo-artefacts.mjs | 36 +++++++++++++------ flip-ui/src/main.ts | 7 ++-- 5 files changed, 86 insertions(+), 14 deletions(-) diff --git a/flip-ui/README.md b/flip-ui/README.md index e092b43cb..ddc680a8e 100644 --- a/flip-ui/README.md +++ b/flip-ui/README.md @@ -170,7 +170,13 @@ Two traps when auditing this by hand: `import()` inside their own folded branch. `mocks/server` was static until FLIP#1041 and shipped ~230 modules — Mirage, Pretender, route-recognizer, inflected and all of lodash — in the production entry chunk of every build, because miragejs patches `Error.prototype` at module scope. Making it dynamic cut - the entry chunk from 331 KB to 182 KB. See the comment above `bootstrap()`. + the entry chunk from 331 KB to 182 KB. See the comment above `bootstrap()`. This is enforced twice, because + `miragejs` is a legitimate `dependency` (the demo bundle ships it) and so invisible to the scoping rule + above: the `flip-ui/no-static-mirage` block in [`eslint.config.mjs`](eslint.config.mjs) fails `npm run + lint` on any static import of `miragejs`/`pretender`/the mock servers from `src/` (dynamic `import()` + stays legal), and [`scripts/assert-no-demo-artefacts.mjs`](scripts/assert-no-demo-artefacts.mjs) carries + Mirage/Pretender sentinels so the built artefact is checked too — the only guard that also catches a + folded branch that stops folding. ## Testing diff --git a/flip-ui/eslint.config.mjs b/flip-ui/eslint.config.mjs index b15004bac..4ebe1afc8 100644 --- a/flip-ui/eslint.config.mjs +++ b/flip-ui/eslint.config.mjs @@ -169,4 +169,35 @@ export default defineConfigWithVueTs( }], }, }, + + { + // Static-import guard for Mirage (FLIP#1041 review). `miragejs` is a + // legitimate `dependency` — build:demo ships it — so the scoping rule above + // cannot flag a static re-import from production source, which is exactly the + // regression that put ~230 modules (Mirage, Pretender and all of lodash) in + // the production entry chunk. Both mock servers must stay behind a dynamic + // import() inside their folded branch (see the bootstrap() comment in + // src/main.ts); this rule ignores dynamic imports, so those stay legal. + // assert-no-demo-artefacts.mjs backstops this at the artefact level, where a + // fold failure — the class no source lint can see — would land. + name: "flip-ui/no-static-mirage", + files: ["src/**/*.ts", "src/**/*.vue"], + ignores: ["**/*.spec.ts", "**/__tests__/**"], + rules: { + "no-restricted-imports": ["error", { + patterns: [{ + group: [ + "miragejs", + "miragejs/*", + "pretender", + "pretender/*", + "**/mocks/server", + "**/mocks/demo-server", + ], + message: "Mirage must not be statically imported from production source — load it via a " + + "dynamic import() inside a folded branch. See bootstrap() in src/main.ts.", + }], + }], + }, + }, ); diff --git a/flip-ui/scripts/__tests__/assert-no-demo-artefacts.spec.ts b/flip-ui/scripts/__tests__/assert-no-demo-artefacts.spec.ts index d9aa732b7..8d16295d2 100644 --- a/flip-ui/scripts/__tests__/assert-no-demo-artefacts.spec.ts +++ b/flip-ui/scripts/__tests__/assert-no-demo-artefacts.spec.ts @@ -61,6 +61,16 @@ describe("sentinels", () => { expect(needles).toContain("Bangkok Dusit Medical Services"); expect(needles).toContain("Running in Ark+ demo mode"); }); + + it("covers the Mirage/Pretender library code, not just register data", () => { + // mocks/server carries no register data, so shipping it (static + // re-import, or a VITE_LOCAL branch that stops folding) would pass + // every register sentinel. These literals sit in the libraries' own + // code (FLIP#1041 review). + const needles = sentinels().map(s => s.needle); + expect(needles).toContain("Mirage: Passthrough request for "); + expect(needles).toContain("Pretender intercepted"); + }); }); describe("scan", () => { @@ -84,6 +94,14 @@ describe("scan", () => { expect(scan(dist).hits).toHaveLength(1); }); + it("finds Mirage library code shipped without any register data", () => { + write("assets/index-abc123.js", "t.warn('Mirage: Passthrough request for '+e.url)"); + + const { hits } = scan(dist); + expect(hits).toHaveLength(1); + expect(hits[0].label).toContain("MirageJS"); + }); + it("scans nested directories and non-JS text output", () => { write("static/nested/deep/chunk.js", "'Bangkok Dusit Medical Services'"); write("index.html", ""); diff --git a/flip-ui/scripts/assert-no-demo-artefacts.mjs b/flip-ui/scripts/assert-no-demo-artefacts.mjs index 0570115fc..0ce214b06 100644 --- a/flip-ui/scripts/assert-no-demo-artefacts.mjs +++ b/flip-ui/scripts/assert-no-demo-artefacts.mjs @@ -12,7 +12,8 @@ */ /** - * Fails a NON-demo build whose output still carries the Ark+ demo register. + * Fails a NON-demo build whose output still carries the Ark+ demo register or + * the MirageJS mock stack. * * scripts/check-build-flags.mjs inspects the *environment* — it proves the * build was invoked without VITE_DEMO. This script inspects the *artefact*, @@ -20,7 +21,10 @@ * register once shipped inside the public production entry chunk from a build * whose environment was entirely clean, because the branch guarding it was a * cross-module const that rolldown could not fold away (FLIP#794 review). Only - * an output check catches that class of regression. + * an output check catches that class of regression. The Mirage sentinels guard + * the same class for the mock servers themselves (FLIP#1041): the + * `flip-ui/no-static-mirage` lint block stops a static re-import at source, but + * only this check would see a folded branch that stops folding. * * Runs from `postbuild:deploy`, i.e. on exactly the build `make deploy-ui` * publishes to the production CloudFront origin. It deliberately does NOT run @@ -56,10 +60,11 @@ export function demoUserId() { } /** - * Strings that exist ONLY in the recorded register, each standing in for one - * class of leaked content. Model and project ids are deliberately absent: they - * are public URL path segments carried by src/demo/bootstrap.ts (the demo - * download map), which every build legitimately contains. + * Strings that must not appear in a deploy build, each standing in for one + * class of leaked content: recorded register data, the demo boot branch, or the + * Mirage/Pretender library code itself. Model and project ids are deliberately + * absent: they are public URL path segments carried by src/demo/bootstrap.ts + * (the demo download map), which every build legitimately contains. */ export function sentinels() { return [ @@ -67,7 +72,14 @@ export function sentinels() { { label: "recorded OMOP cohort SQL", needle: "WITH project_images AS" }, { label: "recorded trust roster", needle: "Bangkok Dusit Medical Services" }, { label: "recorded trust roster", needle: "AI Centre Private" }, - { label: "demo-mode boot branch", needle: "Running in Ark+ demo mode" } + { label: "demo-mode boot branch", needle: "Running in Ark+ demo mode" }, + // Mirage itself, not just the register (FLIP#1041): mocks/server (the + // VITE_LOCAL dev mock) carries no register data, so a static re-import + // of it — or a mock branch that stops folding — ships Mirage/Pretender + // without touching any needle above. These literals live in the + // libraries' own code and survive minification. + { label: "MirageJS library code", needle: "Mirage: Passthrough request for " }, + { label: "Pretender library code", needle: "Pretender intercepted" } ]; } @@ -127,7 +139,7 @@ export function runCli(argv, io) { } if (result.hits.length > 0) { - io.error("assert-no-demo-artefacts: FAILED — Ark+ demo register found in a non-demo build.\n"); + io.error("assert-no-demo-artefacts: FAILED — demo/mock artefacts found in a non-demo build.\n"); for (const { file, label, needle } of result.hits) { io.error(` ${file}\n ${label}: ${JSON.stringify(needle)}`); @@ -135,9 +147,11 @@ export function runCli(argv, io) { io.error( "\nThis output is published unauthenticated to the production CloudFront origin.\n" - + "Cause is almost always a demo branch guarded by a value rolldown cannot fold at\n" - + "build time — gate on the `import.meta.env.VITE_DEMO === \"true\"` literal in the\n" - + "same module, never on a const imported from another one. See src/main.ts.\n" + + "Cause is almost always a mock branch guarded by a value rolldown cannot fold at\n" + + "build time — gate on the `import.meta.env.VITE_DEMO === \"true\"` / VITE_LOCAL\n" + + "literal in the same module, never on a const imported from another one — or a\n" + + "static import of a mock server, which the flip-ui/no-static-mirage lint block\n" + + "flags at source. See src/main.ts.\n" ); io.exit(1); diff --git a/flip-ui/src/main.ts b/flip-ui/src/main.ts index 0860b9dc3..908ba40e2 100644 --- a/flip-ui/src/main.ts +++ b/flip-ui/src/main.ts @@ -78,8 +78,11 @@ if (!isDemoBuild) { * non-demo build the whole branch folds away, leaving no `await` before the * mount, so production boot stays synchronous. * - * Keep `assert-no-demo-artefacts` (npm postbuild:deploy) as the backstop for - * all of the above — it inspects the built artefact, not the source. + * Both halves are enforced: the `flip-ui/no-static-mirage` ESLint block rejects + * a static import of either mock server (or miragejs/pretender) from src/, and + * `assert-no-demo-artefacts` (npm postbuild:deploy) backstops it at the + * artefact level — it inspects the built output, not the source, so it also + * catches a branch that stops folding. */ async function bootstrap(): Promise { if (isDemoBuild) { From 5881b3de8f1fa7a8a7a68d014da3396fde1892ba Mon Sep 17 00:00:00 2001 From: at24_bioeng625-pc Date: Wed, 2 Sep 2026 00:49:55 +0100 Subject: [PATCH 5/5] fix(flip-ui): drop the unused vuejs-smart-table dependency resurrected by the develop merge (#1041) vuejs-smart-table reached develop with the /models page (9265eef7, #1014) and was later dropped there; develop today carries neither the package nor any import of it. The hand-resolved package.json in the 28 Aug develop merge (0d5e5f92) put it back, as a brand-new production dependency with no importer anywhere in src/, mocks/ or the tests - which contradicts the rule this PR exists to enforce: stanzas follow the import graph. Remove it (npm uninstall, so the lockfile loses the node and its nested vue-demi transitive with it) and correct the README tally to what the diff against develop actually is: 19 packages - 16 moved out of devDependencies, two that were declared nowhere, and husky. Signed-off-by: at24_bioeng625-pc --- flip-ui/README.md | 4 ++-- flip-ui/package-lock.json | 41 --------------------------------------- flip-ui/package.json | 1 - 3 files changed, 2 insertions(+), 44 deletions(-) diff --git a/flip-ui/README.md b/flip-ui/README.md index 6eb733e5e..c9c45682c 100644 --- a/flip-ui/README.md +++ b/flip-ui/README.md @@ -146,8 +146,8 @@ whatever they reach whichever stanza a package sits in, and every install path i the Dockerfile, `make deploy-ui`) installs both stanzas — so a wrong stanza breaks nothing and is invisible until it matters. What it changes is the **scope label on a security alert**: a package that ships to users but sits in `devDependencies` produces an alert labelled "Development", which reads as *not in the production -bundle* and invites a wrongly-dismissed alert on code CloudFront is serving. FLIP#1041 corrected 21 -packages: 18 moved out of `devDependencies`, two that were declared nowhere at all (`codemirror`, +bundle* and invites a wrongly-dismissed alert on code CloudFront is serving. FLIP#1041 corrected 19 +packages: 16 moved out of `devDependencies`, two that were declared nowhere at all (`codemirror`, `tippy.js` — they resolved only by hoisting), and `husky`, which had drifted the other way. Correct scoping is also the precondition for ever adopting `npm ci --omit=dev` here. diff --git a/flip-ui/package-lock.json b/flip-ui/package-lock.json index 44545755f..154d93736 100644 --- a/flip-ui/package-lock.json +++ b/flip-ui/package-lock.json @@ -31,7 +31,6 @@ "vue": "^3.2.16", "vue-router": "^4.0.11", "vue-tippy": "^6.3.1", - "vuejs-smart-table": "^1.0.0-beta.5", "yup": "^0.32.9" }, "devDependencies": { @@ -22040,46 +22039,6 @@ "typescript": ">=5.0.0" } }, - "node_modules/vuejs-smart-table": { - "version": "1.0.0-beta.6", - "resolved": "https://registry.npmjs.org/vuejs-smart-table/-/vuejs-smart-table-1.0.0-beta.6.tgz", - "integrity": "sha512-pGd5tAYkNQQpZ5v9wiyiPg8DcQuTId7PGZWmpK1V2w1CSVWwPnbkn3oVBv4k2ctCopC9iwj1Pck1LCAKIJrCYw==", - "dependencies": { - "vue-demi": "^0.7.4" - }, - "peerDependencies": { - "@vue/composition-api": "^1.0.0-beta.1", - "vue": "^2.0.0 || >=3.0.0-rc.0" - }, - "peerDependenciesMeta": { - "@vue/composition-api": { - "optional": true - } - } - }, - "node_modules/vuejs-smart-table/node_modules/vue-demi": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.7.5.tgz", - "integrity": "sha512-eFSQSvbQdY7C9ujOzvM6tn7XxwLjn0VQDXQsiYBLBwf28Na+2nTQR4BBBcomhmdP6mmHlBKAwarq6a0BPG87hQ==", - "hasInstallScript": true, - "license": "MIT", - "bin": { - "vue-demi-fix": "bin/vue-demi-fix.js", - "vue-demi-switch": "bin/vue-demi-switch.js" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "@vue/composition-api": "^1.0.0-beta.1", - "vue": "^2.6.0 || >=3.0.0-rc.1" - }, - "peerDependenciesMeta": { - "@vue/composition-api": { - "optional": true - } - } - }, "node_modules/w3c-xmlserializer": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", diff --git a/flip-ui/package.json b/flip-ui/package.json index fb2400117..c428e29ea 100644 --- a/flip-ui/package.json +++ b/flip-ui/package.json @@ -62,7 +62,6 @@ "vue": "^3.2.16", "vue-router": "^4.0.11", "vue-tippy": "^6.3.1", - "vuejs-smart-table": "^1.0.0-beta.5", "yup": "^0.32.9" }, "devDependencies": {