diff --git a/.gitignore b/.gitignore index f06235c..e09a636 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,24 @@ node_modules dist + + +.nx* +.nx/cache +.nx/workspace-data +.cursor/rules/nx-rules.mdc +.github/instructions/nx.instructions.md + +coverage +.nyc* + +# Documentation build artifacts +docs/.next/ +docs/.source/ + +# Package build artifacts +bin/ +dist-bundle/ +dist-packages/ +.c8/ +*.deb +*.rpm \ No newline at end of file diff --git a/.lefthook.yml b/.lefthook.yml new file mode 100644 index 0000000..544a4dd --- /dev/null +++ b/.lefthook.yml @@ -0,0 +1,61 @@ +# Lefthook configuration for SSHield monorepo +# Git hooks management - faster alternative to Husky + +# Pre-commit hook - run before commit is created +pre-commit: + parallel: true + commands: + # Lint staged files + lint: + glob: "*.{js,ts,tsx,jsx}" + run: pnpm exec eslint --fix {staged_files} + + # Format staged files + format: + glob: "*.{js,ts,tsx,jsx,json,md,yml,yaml}" + run: pnpm exec prettier --write {staged_files} + + # Type check + typecheck: + run: pnpm exec nx affected --target=typecheck --parallel=3 + + # Run affected tests + test: + run: pnpm exec nx affected --target=test --parallel=3 + skip: merge + +# Commit message hook - validate commit message +commit-msg: + commands: + commitlint: + run: pnpm exec commitlint --edit {1} + +# Pre-push hook - run before pushing to remote +pre-push: + commands: + # Run all affected tests + test: + run: pnpm exec nx affected --target=test --parallel=3 + + # Build affected projects + build: + run: pnpm exec nx affected --target=build --parallel=3 + + # Run knip to check for unused dependencies + knip: + run: pnpm exec knip --no-exit-code + skip: rebase + +# Post-checkout hook - run after checkout +post-checkout: + commands: + # Install dependencies if package.json or pnpm-lock.yaml changed + install: + run: 'pnpm install --frozen-lockfile || echo "Skipping install - lockfile unchanged"' + +# Post-merge hook - run after merge +post-merge: + commands: + # Install dependencies if package.json or pnpm-lock.yaml changed + install: + run: 'pnpm install --frozen-lockfile || echo "Skipping install - lockfile unchanged"' diff --git a/.nx/workspace-data/d/daemon.log b/.nx/workspace-data/d/daemon.log deleted file mode 100644 index cdad2db..0000000 --- a/.nx/workspace-data/d/daemon.log +++ /dev/null @@ -1,59 +0,0 @@ -[NX v21.2.2 Daemon Server] - 2025-07-05T11:39:36.225Z - Started listening on: /tmp/63e4a0fa79e05ae49dbe/d.sock -[NX v21.2.2 Daemon Server] - 2025-07-05T11:39:36.226Z - [WATCHER]: Subscribed to changes within: /home/devsupreme/sshield (native) -[NX v21.2.2 Daemon Server] - 2025-07-05T11:39:36.228Z - Established a connection. Number of open connections: 1 -[NX v21.2.2 Daemon Server] - 2025-07-05T11:39:36.228Z - Established a connection. Number of open connections: 2 -[NX v21.2.2 Daemon Server] - 2025-07-05T11:39:36.229Z - Closed a connection. Number of open connections: 1 -[NX v21.2.2 Daemon Server] - 2025-07-05T11:39:36.230Z - [REQUEST]: Client Request for Project Graph Received -[NX v21.2.2 Daemon Server] - 2025-07-05T11:39:36.239Z - Time taken for 'loadSpecifiedNxPlugins' 0.9844480000000004ms -[NX v21.2.2 Daemon Server] - 2025-07-05T11:39:36.337Z - Time taken for 'Load Nx Plugin: /home/devsupreme/sshield/node_modules/.pnpm/nx@21.2.2/node_modules/nx/src/plugins/package-json' 106.01408100000002ms -[NX v21.2.2 Daemon Server] - 2025-07-05T11:39:36.346Z - Time taken for 'Load Nx Plugin: /home/devsupreme/sshield/node_modules/.pnpm/nx@21.2.2/node_modules/nx/src/plugins/project-json/build-nodes/project-json' 114.40364600000001ms -[NX v21.2.2 Daemon Server] - 2025-07-05T11:39:36.356Z - [REQUEST]: Updated workspace context based on watched changes, recomputing project graph... -[NX v21.2.2 Daemon Server] - 2025-07-05T11:39:36.357Z - [REQUEST]: -[NX v21.2.2 Daemon Server] - 2025-07-05T11:39:36.357Z - [REQUEST]: -[NX v21.2.2 Daemon Server] - 2025-07-05T11:39:36.360Z - Time taken for 'loadDefaultNxPlugins' 125.74362199999999ms -[NX v21.2.2 Daemon Server] - 2025-07-05T11:39:36.394Z - Time taken for 'build-project-configs' 27.41194299999998ms -[NX v21.2.2 Daemon Server] - 2025-07-05T11:39:36.399Z - [SYNC]: collect registered sync generators -[NX v21.2.2 Daemon Server] - 2025-07-05T11:39:36.399Z - [REQUEST]: Responding to the client. project-graph -[NX v21.2.2 Daemon Server] - 2025-07-05T11:39:36.399Z - Done responding to the client project-graph -[NX v21.2.2 Daemon Server] - 2025-07-05T11:39:36.399Z - Handled REQUEST_PROJECT_GRAPH. Handling time: 169. Response time: 0. -[NX v21.2.2 Daemon Server] - 2025-07-05T11:39:36.399Z - Time taken for 'total for creating and serializing project graph' 169.08558700000003ms -[NX v21.2.2 Daemon Server] - 2025-07-05T11:39:36.409Z - Closed a connection. Number of open connections: 0 -[NX v21.2.2 Daemon Server] - 2025-07-05T11:42:03.757Z - Established a connection. Number of open connections: 1 -[NX v21.2.2 Daemon Server] - 2025-07-05T11:42:03.758Z - Closed a connection. Number of open connections: 0 -[NX v21.2.2 Daemon Server] - 2025-07-05T11:42:03.758Z - Established a connection. Number of open connections: 1 -[NX v21.2.2 Daemon Server] - 2025-07-05T11:42:03.760Z - [REQUEST]: Client Request for Project Graph Received -[NX v21.2.2 Daemon Server] - 2025-07-05T11:42:03.760Z - [REQUEST]: Responding to the client. project-graph -[NX v21.2.2 Daemon Server] - 2025-07-05T11:42:03.760Z - Done responding to the client project-graph -[NX v21.2.2 Daemon Server] - 2025-07-05T11:42:03.760Z - Handled REQUEST_PROJECT_GRAPH. Handling time: 0. Response time: 0. -[NX v21.2.2 Daemon Server] - 2025-07-05T11:42:03.760Z - Time taken for 'total for creating and serializing project graph' 0.20716099999845028ms -[NX v21.2.2 Daemon Server] - 2025-07-05T11:42:03.763Z - Closed a connection. Number of open connections: 0 -[NX v21.2.2 Daemon Server] - 2025-07-05T11:42:31.174Z - Established a connection. Number of open connections: 1 -[NX v21.2.2 Daemon Server] - 2025-07-05T11:42:31.175Z - Closed a connection. Number of open connections: 0 -[NX v21.2.2 Daemon Server] - 2025-07-05T11:42:31.175Z - Established a connection. Number of open connections: 1 -[NX v21.2.2 Daemon Server] - 2025-07-05T11:42:31.176Z - [REQUEST]: Client Request for Project Graph Received -[NX v21.2.2 Daemon Server] - 2025-07-05T11:42:31.177Z - [REQUEST]: Responding to the client. project-graph -[NX v21.2.2 Daemon Server] - 2025-07-05T11:42:31.177Z - Done responding to the client project-graph -[NX v21.2.2 Daemon Server] - 2025-07-05T11:42:31.177Z - Handled REQUEST_PROJECT_GRAPH. Handling time: 1. Response time: 0. -[NX v21.2.2 Daemon Server] - 2025-07-05T11:42:31.177Z - Time taken for 'total for creating and serializing project graph' 0.20976500000688247ms -[NX v21.2.2 Daemon Server] - 2025-07-05T11:42:31.254Z - Closed a connection. Number of open connections: 0 -[NX v21.2.2 Daemon Server] - 2025-07-05T11:42:52.410Z - Established a connection. Number of open connections: 1 -[NX v21.2.2 Daemon Server] - 2025-07-05T11:42:52.411Z - Closed a connection. Number of open connections: 0 -[NX v21.2.2 Daemon Server] - 2025-07-05T11:42:52.412Z - Established a connection. Number of open connections: 1 -[NX v21.2.2 Daemon Server] - 2025-07-05T11:42:52.413Z - [REQUEST]: Client Request for Project Graph Received -[NX v21.2.2 Daemon Server] - 2025-07-05T11:42:52.413Z - [REQUEST]: Responding to the client. project-graph -[NX v21.2.2 Daemon Server] - 2025-07-05T11:42:52.413Z - Done responding to the client project-graph -[NX v21.2.2 Daemon Server] - 2025-07-05T11:42:52.413Z - Handled REQUEST_PROJECT_GRAPH. Handling time: 0. Response time: 0. -[NX v21.2.2 Daemon Server] - 2025-07-05T11:42:52.413Z - Time taken for 'total for creating and serializing project graph' 0.17217800000798889ms -[NX v21.2.2 Daemon Server] - 2025-07-05T11:42:52.469Z - Closed a connection. Number of open connections: 0 -[NX v21.2.2 Daemon Server] - 2025-07-28T03:22:09.455Z - Started listening on: /tmp/9e5dfe9759abf5ea51f4/d.sock -[NX v21.2.2 Daemon Server] - 2025-07-28T03:22:09.458Z - [WATCHER]: Subscribed to changes within: /home/devsupreme/sshield-v2 (native) -[NX v21.2.2 Daemon Server] - 2025-07-28T03:22:09.460Z - Established a connection. Number of open connections: 1 -[NX v21.2.2 Daemon Server] - 2025-07-28T03:22:09.460Z - Established a connection. Number of open connections: 2 -[NX v21.2.2 Daemon Server] - 2025-07-28T03:22:09.461Z - Closed a connection. Number of open connections: 1 -[NX v21.2.2 Daemon Server] - 2025-07-28T03:22:09.462Z - [REQUEST]: Responding to the client. Shutdown initiated -[NX v21.2.2 Daemon Server] - 2025-07-28T03:22:09.463Z - Done responding to the client Shutdown initiated -[NX v21.2.2 Daemon Server] - 2025-07-28T03:22:09.463Z - Handled FORCE_SHUTDOWN. Handling time: 0. Response time: 1. -[NX v21.2.2 Daemon Server] - 2025-07-28T03:22:09.463Z - Closed a connection. Number of open connections: 0 -[NX v21.2.2 Daemon Server] - 2025-07-28T03:22:09.463Z - [WATCHER]: Stopping the watcher for /home/devsupreme/sshield-v2 (sources) -[NX v21.2.2 Daemon Server] - 2025-07-28T03:22:09.464Z - [WATCHER]: Stopping the watcher for /home/devsupreme/sshield-v2 (outputs) -[NX v21.2.2 Daemon Server] - 2025-07-28T03:22:09.464Z - Server stopped because: "Request to shutdown" diff --git a/.nx/workspace-data/eslint-2654242865465226088.hash b/.nx/workspace-data/eslint-2654242865465226088.hash deleted file mode 100644 index 9e26dfe..0000000 --- a/.nx/workspace-data/eslint-2654242865465226088.hash +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/.nx/workspace-data/file-map.json b/.nx/workspace-data/file-map.json deleted file mode 100644 index 7e68ae7..0000000 --- a/.nx/workspace-data/file-map.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "version": "6.0", - "nxVersion": "21.2.2", - "pathMappings": {}, - "nxJsonPlugins": [], - "fileMap": { - "nonProjectFiles": [ - { - "file": ".gitignore", - "hash": "4070636367282582647" - }, - { - "file": "README.md", - "hash": "17030659868046573507" - }, - { - "file": "ROADMAP.md", - "hash": "16480809728302654931" - }, - { - "file": "nx.json", - "hash": "18336426213955174907" - }, - { - "file": "package.json", - "hash": "9906565705781003162" - }, - { - "file": "packages/core/package.json.backup", - "hash": "16897623061117680861" - }, - { - "file": "packages/core/src_backup/commands/agent.ts", - "hash": "13513784229154861585" - }, - { - "file": "packages/core/src_backup/commands/connection.ts", - "hash": "5249625492224251482" - }, - { - "file": "packages/core/src_backup/commands/init.ts", - "hash": "9701238279054566807" - }, - { - "file": "packages/core/src_backup/commands/key-manager.ts", - "hash": "5984491973432612876" - }, - { - "file": "packages/core/src_backup/commands/project.ts", - "hash": "18306129819231404094" - }, - { - "file": "packages/core/src_backup/constants.ts", - "hash": "7675334330066972557" - }, - { - "file": "packages/core/src_backup/index.ts", - "hash": "1816958002243486904" - }, - { - "file": "packages/core/src_backup/types/index.ts", - "hash": "11823265358146480748" - }, - { - "file": "packages/core/src_backup/utils/config.ts", - "hash": "11939319635901744196" - }, - { - "file": "packages/core/src_backup/utils/filesystem.ts", - "hash": "86928808210616833" - }, - { - "file": "packages/core/src_backup/utils/ssh.ts", - "hash": "18170319677470772566" - }, - { - "file": "packages/core/src_backup/utils/ui.ts", - "hash": "15254761485844159654" - }, - { - "file": "pnpm-lock.yaml", - "hash": "2488050919218374343" - }, - { - "file": "pnpm-workspace.yaml", - "hash": "9727375310959367618" - }, - { - "file": "tsconfig.json", - "hash": "1851435242678972897" - } - ], - "projectFileMap": {} - } -} \ No newline at end of file diff --git a/.nx/workspace-data/lockfile.hash b/.nx/workspace-data/lockfile.hash deleted file mode 100644 index 4c6ff0c..0000000 --- a/.nx/workspace-data/lockfile.hash +++ /dev/null @@ -1 +0,0 @@ -6729069288876359624 \ No newline at end of file diff --git a/.nx/workspace-data/nx_files.nxt b/.nx/workspace-data/nx_files.nxt deleted file mode 100644 index e2c6582..0000000 Binary files a/.nx/workspace-data/nx_files.nxt and /dev/null differ diff --git a/.nx/workspace-data/parsed-lock-file.json b/.nx/workspace-data/parsed-lock-file.json deleted file mode 100644 index 0c5f0cb..0000000 --- a/.nx/workspace-data/parsed-lock-file.json +++ /dev/null @@ -1,2734 +0,0 @@ -{ - "externalNodes": { - "npm:@emnapi/core": { - "type": "npm", - "name": "npm:@emnapi/core", - "data": { - "version": "1.4.3", - "packageName": "@emnapi/core", - "hash": "sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==" - } - }, - "npm:@emnapi/runtime": { - "type": "npm", - "name": "npm:@emnapi/runtime", - "data": { - "version": "1.4.3", - "packageName": "@emnapi/runtime", - "hash": "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==" - } - }, - "npm:@emnapi/wasi-threads": { - "type": "npm", - "name": "npm:@emnapi/wasi-threads", - "data": { - "version": "1.0.2", - "packageName": "@emnapi/wasi-threads", - "hash": "sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==" - } - }, - "npm:@isaacs/balanced-match": { - "type": "npm", - "name": "npm:@isaacs/balanced-match", - "data": { - "version": "4.0.1", - "packageName": "@isaacs/balanced-match", - "hash": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==" - } - }, - "npm:@isaacs/brace-expansion": { - "type": "npm", - "name": "npm:@isaacs/brace-expansion", - "data": { - "version": "5.0.0", - "packageName": "@isaacs/brace-expansion", - "hash": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==" - } - }, - "npm:@isaacs/cliui": { - "type": "npm", - "name": "npm:@isaacs/cliui", - "data": { - "version": "8.0.2", - "packageName": "@isaacs/cliui", - "hash": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==" - } - }, - "npm:@jest/schemas": { - "type": "npm", - "name": "npm:@jest/schemas", - "data": { - "version": "29.6.3", - "packageName": "@jest/schemas", - "hash": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==" - } - }, - "npm:@napi-rs/wasm-runtime": { - "type": "npm", - "name": "npm:@napi-rs/wasm-runtime", - "data": { - "version": "0.2.4", - "packageName": "@napi-rs/wasm-runtime", - "hash": "sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ==" - } - }, - "npm:@nx/devkit": { - "type": "npm", - "name": "npm:@nx/devkit", - "data": { - "version": "21.2.2", - "packageName": "@nx/devkit", - "hash": "sha512-fBeFY8wW9cb6AWjPGNZVa8nhYpDVu1hDPirxy+Z0Uxe3uo6BfwP9ZrUVIj99yGi2accEcvNx0ccygaa0aPzKng==" - } - }, - "npm:@nx/nx-darwin-arm64": { - "type": "npm", - "name": "npm:@nx/nx-darwin-arm64", - "data": { - "version": "21.2.2", - "packageName": "@nx/nx-darwin-arm64", - "hash": "sha512-qDF1SHW9UYzFQBRA3MGLYDPCU/j1ACasAdjv5kMXXBtmg+1WC3mZ/KO84wXJE7j9ImXOPKm9dmiW63LfXteXZw==" - } - }, - "npm:@nx/nx-darwin-x64": { - "type": "npm", - "name": "npm:@nx/nx-darwin-x64", - "data": { - "version": "21.2.2", - "packageName": "@nx/nx-darwin-x64", - "hash": "sha512-gdxOcfGonAD+eM5oKKd+2rcrGWmJOfON5HJpLkDfgOO/vyb6FUQub3xUu/JB2RAJ4r6iW/8JZxzheFDIiHDEug==" - } - }, - "npm:@nx/nx-freebsd-x64": { - "type": "npm", - "name": "npm:@nx/nx-freebsd-x64", - "data": { - "version": "21.2.2", - "packageName": "@nx/nx-freebsd-x64", - "hash": "sha512-uO+k4AXGchOlzsoE3uljBKYlI84hv15R2CcLfXjbwrIw+0YZOIeZ/pDYNZMpOy1HePTuCVUxaYQCEBO7N2PI3w==" - } - }, - "npm:@nx/nx-linux-arm-gnueabihf": { - "type": "npm", - "name": "npm:@nx/nx-linux-arm-gnueabihf", - "data": { - "version": "21.2.2", - "packageName": "@nx/nx-linux-arm-gnueabihf", - "hash": "sha512-7ZaZKJNqQvvXs66GYdvY7kJoZ3wFnaIamjdlFYtH+5oQdCTqRTHb9HsB0/q6pf5nEDCEW/FJkXszKgCfViDZLA==" - } - }, - "npm:@nx/nx-linux-arm64-gnu": { - "type": "npm", - "name": "npm:@nx/nx-linux-arm64-gnu", - "data": { - "version": "21.2.2", - "packageName": "@nx/nx-linux-arm64-gnu", - "hash": "sha512-M1YuraXtzYTm/HXDAUWN7e009lWFTvpFF1Z38f7IuB07u76ARw1Fb/BcjVYHwt65QR70AcM7MQ5Fpq7PThHPkw==" - } - }, - "npm:@nx/nx-linux-arm64-musl": { - "type": "npm", - "name": "npm:@nx/nx-linux-arm64-musl", - "data": { - "version": "21.2.2", - "packageName": "@nx/nx-linux-arm64-musl", - "hash": "sha512-raXkg8uijQFOgfKadUzwkFetyFb5pQbY0u6aLz0o9Eq5ml82B8ODrHwZdj2YLVNx2bB2Y0nq6R6HeYQRB94xIQ==" - } - }, - "npm:@nx/nx-linux-x64-gnu": { - "type": "npm", - "name": "npm:@nx/nx-linux-x64-gnu", - "data": { - "version": "21.2.2", - "packageName": "@nx/nx-linux-x64-gnu", - "hash": "sha512-je6D2kG8jCB72QVrYRXs4xRrU2g2zQREqODt+s1zI2lWlMDJcBwxDxGtlxXM3mDyeUGCh2s9nlkrA0GCTin1LQ==" - } - }, - "npm:@nx/nx-linux-x64-musl": { - "type": "npm", - "name": "npm:@nx/nx-linux-x64-musl", - "data": { - "version": "21.2.2", - "packageName": "@nx/nx-linux-x64-musl", - "hash": "sha512-ZDCNM0iBACq5Wgb1+JY20jMMRmxQKIDAoCrkxMciSAjh5s/1fGOboqWmKoztwW5g9QPJs/GdOojWbesu4B42eg==" - } - }, - "npm:@nx/nx-win32-arm64-msvc": { - "type": "npm", - "name": "npm:@nx/nx-win32-arm64-msvc", - "data": { - "version": "21.2.2", - "packageName": "@nx/nx-win32-arm64-msvc", - "hash": "sha512-jQRWpp2i5yAYD0FcZWZu6HMVxPWGEEa1DAf9wn7gHsORCehYH91GeOeVmaXcsPEg56uN+QhJhpIRIcDE5Ob4kw==" - } - }, - "npm:@nx/nx-win32-x64-msvc": { - "type": "npm", - "name": "npm:@nx/nx-win32-x64-msvc", - "data": { - "version": "21.2.2", - "packageName": "@nx/nx-win32-x64-msvc", - "hash": "sha512-qBrVdqYVRV1KQFyRtQbtic/R5ByH9F0kZJoQM3hSmcHgbg2s2+v9ivnaik4L6iX8FbAoCjYYm+J8L42yuOgCJA==" - } - }, - "npm:@nx/workspace": { - "type": "npm", - "name": "npm:@nx/workspace", - "data": { - "version": "21.2.2", - "packageName": "@nx/workspace", - "hash": "sha512-Q/EJgc+QOyFjNcAmMw6zn6BRdoKxaWvrl/WDyiG3vwcmnUCdFlT+KRZ6ux7cVXMEVLLpQIHStxyS3sdGpXl6HA==" - } - }, - "npm:@sinclair/typebox": { - "type": "npm", - "name": "npm:@sinclair/typebox", - "data": { - "version": "0.27.8", - "packageName": "@sinclair/typebox", - "hash": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" - } - }, - "npm:@tybys/wasm-util": { - "type": "npm", - "name": "npm:@tybys/wasm-util", - "data": { - "version": "0.9.0", - "packageName": "@tybys/wasm-util", - "hash": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==" - } - }, - "npm:@yarnpkg/lockfile": { - "type": "npm", - "name": "npm:@yarnpkg/lockfile", - "data": { - "version": "1.1.0", - "packageName": "@yarnpkg/lockfile", - "hash": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==" - } - }, - "npm:@yarnpkg/parsers": { - "type": "npm", - "name": "npm:@yarnpkg/parsers", - "data": { - "version": "3.0.2", - "packageName": "@yarnpkg/parsers", - "hash": "sha512-/HcYgtUSiJiot/XWGLOlGxPYUG65+/31V8oqk17vZLW1xlCoR4PampyePljOxY2n8/3jz9+tIFzICsyGujJZoA==" - } - }, - "npm:@zkochan/js-yaml": { - "type": "npm", - "name": "npm:@zkochan/js-yaml", - "data": { - "version": "0.0.7", - "packageName": "@zkochan/js-yaml", - "hash": "sha512-nrUSn7hzt7J6JWgWGz78ZYI8wj+gdIJdk0Ynjpp8l+trkn58Uqsf6RYrYkEK+3X18EX+TNdtJI0WxAtc+L84SQ==" - } - }, - "npm:ansi-colors": { - "type": "npm", - "name": "npm:ansi-colors", - "data": { - "version": "4.1.3", - "packageName": "ansi-colors", - "hash": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==" - } - }, - "npm:ansi-regex@5.0.1": { - "type": "npm", - "name": "npm:ansi-regex@5.0.1", - "data": { - "version": "5.0.1", - "packageName": "ansi-regex", - "hash": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - } - }, - "npm:ansi-regex@6.1.0": { - "type": "npm", - "name": "npm:ansi-regex@6.1.0", - "data": { - "version": "6.1.0", - "packageName": "ansi-regex", - "hash": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==" - } - }, - "npm:ansi-styles@4.3.0": { - "type": "npm", - "name": "npm:ansi-styles@4.3.0", - "data": { - "version": "4.3.0", - "packageName": "ansi-styles", - "hash": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==" - } - }, - "npm:ansi-styles@5.2.0": { - "type": "npm", - "name": "npm:ansi-styles@5.2.0", - "data": { - "version": "5.2.0", - "packageName": "ansi-styles", - "hash": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" - } - }, - "npm:ansi-styles@6.2.1": { - "type": "npm", - "name": "npm:ansi-styles@6.2.1", - "data": { - "version": "6.2.1", - "packageName": "ansi-styles", - "hash": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" - } - }, - "npm:argparse@1.0.10": { - "type": "npm", - "name": "npm:argparse@1.0.10", - "data": { - "version": "1.0.10", - "packageName": "argparse", - "hash": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==" - } - }, - "npm:argparse@2.0.1": { - "type": "npm", - "name": "npm:argparse@2.0.1", - "data": { - "version": "2.0.1", - "packageName": "argparse", - "hash": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - } - }, - "npm:async": { - "type": "npm", - "name": "npm:async", - "data": { - "version": "3.2.6", - "packageName": "async", - "hash": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==" - } - }, - "npm:asynckit": { - "type": "npm", - "name": "npm:asynckit", - "data": { - "version": "0.4.0", - "packageName": "asynckit", - "hash": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - } - }, - "npm:axios": { - "type": "npm", - "name": "npm:axios", - "data": { - "version": "1.10.0", - "packageName": "axios", - "hash": "sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==" - } - }, - "npm:balanced-match": { - "type": "npm", - "name": "npm:balanced-match", - "data": { - "version": "1.0.2", - "packageName": "balanced-match", - "hash": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - } - }, - "npm:base64-js": { - "type": "npm", - "name": "npm:base64-js", - "data": { - "version": "1.5.1", - "packageName": "base64-js", - "hash": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - } - }, - "npm:bl": { - "type": "npm", - "name": "npm:bl", - "data": { - "version": "4.1.0", - "packageName": "bl", - "hash": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==" - } - }, - "npm:brace-expansion@1.1.12": { - "type": "npm", - "name": "npm:brace-expansion@1.1.12", - "data": { - "version": "1.1.12", - "packageName": "brace-expansion", - "hash": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==" - } - }, - "npm:brace-expansion@2.0.2": { - "type": "npm", - "name": "npm:brace-expansion@2.0.2", - "data": { - "version": "2.0.2", - "packageName": "brace-expansion", - "hash": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==" - } - }, - "npm:buffer": { - "type": "npm", - "name": "npm:buffer", - "data": { - "version": "5.7.1", - "packageName": "buffer", - "hash": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==" - } - }, - "npm:call-bind-apply-helpers": { - "type": "npm", - "name": "npm:call-bind-apply-helpers", - "data": { - "version": "1.0.2", - "packageName": "call-bind-apply-helpers", - "hash": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==" - } - }, - "npm:chalk": { - "type": "npm", - "name": "npm:chalk", - "data": { - "version": "4.1.2", - "packageName": "chalk", - "hash": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==" - } - }, - "npm:cli-cursor": { - "type": "npm", - "name": "npm:cli-cursor", - "data": { - "version": "3.1.0", - "packageName": "cli-cursor", - "hash": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==" - } - }, - "npm:cli-spinners": { - "type": "npm", - "name": "npm:cli-spinners", - "data": { - "version": "2.6.1", - "packageName": "cli-spinners", - "hash": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==" - } - }, - "npm:cliui": { - "type": "npm", - "name": "npm:cliui", - "data": { - "version": "8.0.1", - "packageName": "cliui", - "hash": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==" - } - }, - "npm:clone": { - "type": "npm", - "name": "npm:clone", - "data": { - "version": "1.0.4", - "packageName": "clone", - "hash": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==" - } - }, - "npm:color-convert": { - "type": "npm", - "name": "npm:color-convert", - "data": { - "version": "2.0.1", - "packageName": "color-convert", - "hash": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==" - } - }, - "npm:color-name": { - "type": "npm", - "name": "npm:color-name", - "data": { - "version": "1.1.4", - "packageName": "color-name", - "hash": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - } - }, - "npm:combined-stream": { - "type": "npm", - "name": "npm:combined-stream", - "data": { - "version": "1.0.8", - "packageName": "combined-stream", - "hash": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==" - } - }, - "npm:concat-map": { - "type": "npm", - "name": "npm:concat-map", - "data": { - "version": "0.0.1", - "packageName": "concat-map", - "hash": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - } - }, - "npm:cross-spawn": { - "type": "npm", - "name": "npm:cross-spawn", - "data": { - "version": "7.0.6", - "packageName": "cross-spawn", - "hash": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==" - } - }, - "npm:defaults": { - "type": "npm", - "name": "npm:defaults", - "data": { - "version": "1.0.4", - "packageName": "defaults", - "hash": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==" - } - }, - "npm:define-lazy-prop": { - "type": "npm", - "name": "npm:define-lazy-prop", - "data": { - "version": "2.0.0", - "packageName": "define-lazy-prop", - "hash": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" - } - }, - "npm:delayed-stream": { - "type": "npm", - "name": "npm:delayed-stream", - "data": { - "version": "1.0.0", - "packageName": "delayed-stream", - "hash": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" - } - }, - "npm:diff-sequences": { - "type": "npm", - "name": "npm:diff-sequences", - "data": { - "version": "29.6.3", - "packageName": "diff-sequences", - "hash": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==" - } - }, - "npm:dotenv-expand": { - "type": "npm", - "name": "npm:dotenv-expand", - "data": { - "version": "11.0.7", - "packageName": "dotenv-expand", - "hash": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==" - } - }, - "npm:dotenv": { - "type": "npm", - "name": "npm:dotenv", - "data": { - "version": "16.4.7", - "packageName": "dotenv", - "hash": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==" - } - }, - "npm:dunder-proto": { - "type": "npm", - "name": "npm:dunder-proto", - "data": { - "version": "1.0.1", - "packageName": "dunder-proto", - "hash": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==" - } - }, - "npm:eastasianwidth": { - "type": "npm", - "name": "npm:eastasianwidth", - "data": { - "version": "0.2.0", - "packageName": "eastasianwidth", - "hash": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" - } - }, - "npm:ejs": { - "type": "npm", - "name": "npm:ejs", - "data": { - "version": "3.1.10", - "packageName": "ejs", - "hash": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==" - } - }, - "npm:emoji-regex@8.0.0": { - "type": "npm", - "name": "npm:emoji-regex@8.0.0", - "data": { - "version": "8.0.0", - "packageName": "emoji-regex", - "hash": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - } - }, - "npm:emoji-regex@9.2.2": { - "type": "npm", - "name": "npm:emoji-regex@9.2.2", - "data": { - "version": "9.2.2", - "packageName": "emoji-regex", - "hash": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - } - }, - "npm:end-of-stream": { - "type": "npm", - "name": "npm:end-of-stream", - "data": { - "version": "1.4.5", - "packageName": "end-of-stream", - "hash": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==" - } - }, - "npm:enquirer": { - "type": "npm", - "name": "npm:enquirer", - "data": { - "version": "2.3.6", - "packageName": "enquirer", - "hash": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==" - } - }, - "npm:es-define-property": { - "type": "npm", - "name": "npm:es-define-property", - "data": { - "version": "1.0.1", - "packageName": "es-define-property", - "hash": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==" - } - }, - "npm:es-errors": { - "type": "npm", - "name": "npm:es-errors", - "data": { - "version": "1.3.0", - "packageName": "es-errors", - "hash": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" - } - }, - "npm:es-object-atoms": { - "type": "npm", - "name": "npm:es-object-atoms", - "data": { - "version": "1.1.1", - "packageName": "es-object-atoms", - "hash": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==" - } - }, - "npm:es-set-tostringtag": { - "type": "npm", - "name": "npm:es-set-tostringtag", - "data": { - "version": "2.1.0", - "packageName": "es-set-tostringtag", - "hash": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==" - } - }, - "npm:escalade": { - "type": "npm", - "name": "npm:escalade", - "data": { - "version": "3.2.0", - "packageName": "escalade", - "hash": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==" - } - }, - "npm:escape-string-regexp": { - "type": "npm", - "name": "npm:escape-string-regexp", - "data": { - "version": "1.0.5", - "packageName": "escape-string-regexp", - "hash": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - } - }, - "npm:esprima": { - "type": "npm", - "name": "npm:esprima", - "data": { - "version": "4.0.1", - "packageName": "esprima", - "hash": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - } - }, - "npm:figures": { - "type": "npm", - "name": "npm:figures", - "data": { - "version": "3.2.0", - "packageName": "figures", - "hash": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==" - } - }, - "npm:filelist": { - "type": "npm", - "name": "npm:filelist", - "data": { - "version": "1.0.4", - "packageName": "filelist", - "hash": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==" - } - }, - "npm:flat": { - "type": "npm", - "name": "npm:flat", - "data": { - "version": "5.0.2", - "packageName": "flat", - "hash": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==" - } - }, - "npm:follow-redirects": { - "type": "npm", - "name": "npm:follow-redirects", - "data": { - "version": "1.15.9", - "packageName": "follow-redirects", - "hash": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==" - } - }, - "npm:foreground-child": { - "type": "npm", - "name": "npm:foreground-child", - "data": { - "version": "3.3.1", - "packageName": "foreground-child", - "hash": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==" - } - }, - "npm:form-data": { - "type": "npm", - "name": "npm:form-data", - "data": { - "version": "4.0.3", - "packageName": "form-data", - "hash": "sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==" - } - }, - "npm:front-matter": { - "type": "npm", - "name": "npm:front-matter", - "data": { - "version": "4.0.2", - "packageName": "front-matter", - "hash": "sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==" - } - }, - "npm:fs-constants": { - "type": "npm", - "name": "npm:fs-constants", - "data": { - "version": "1.0.0", - "packageName": "fs-constants", - "hash": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - } - }, - "npm:function-bind": { - "type": "npm", - "name": "npm:function-bind", - "data": { - "version": "1.1.2", - "packageName": "function-bind", - "hash": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" - } - }, - "npm:get-caller-file": { - "type": "npm", - "name": "npm:get-caller-file", - "data": { - "version": "2.0.5", - "packageName": "get-caller-file", - "hash": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" - } - }, - "npm:get-intrinsic": { - "type": "npm", - "name": "npm:get-intrinsic", - "data": { - "version": "1.3.0", - "packageName": "get-intrinsic", - "hash": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==" - } - }, - "npm:get-proto": { - "type": "npm", - "name": "npm:get-proto", - "data": { - "version": "1.0.1", - "packageName": "get-proto", - "hash": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==" - } - }, - "npm:glob": { - "type": "npm", - "name": "npm:glob", - "data": { - "version": "11.0.3", - "packageName": "glob", - "hash": "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==" - } - }, - "npm:gopd": { - "type": "npm", - "name": "npm:gopd", - "data": { - "version": "1.2.0", - "packageName": "gopd", - "hash": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==" - } - }, - "npm:has-flag": { - "type": "npm", - "name": "npm:has-flag", - "data": { - "version": "4.0.0", - "packageName": "has-flag", - "hash": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - } - }, - "npm:has-symbols": { - "type": "npm", - "name": "npm:has-symbols", - "data": { - "version": "1.1.0", - "packageName": "has-symbols", - "hash": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==" - } - }, - "npm:has-tostringtag": { - "type": "npm", - "name": "npm:has-tostringtag", - "data": { - "version": "1.0.2", - "packageName": "has-tostringtag", - "hash": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==" - } - }, - "npm:hasown": { - "type": "npm", - "name": "npm:hasown", - "data": { - "version": "2.0.2", - "packageName": "hasown", - "hash": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==" - } - }, - "npm:ieee754": { - "type": "npm", - "name": "npm:ieee754", - "data": { - "version": "1.2.1", - "packageName": "ieee754", - "hash": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" - } - }, - "npm:ignore": { - "type": "npm", - "name": "npm:ignore", - "data": { - "version": "5.3.2", - "packageName": "ignore", - "hash": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==" - } - }, - "npm:inherits": { - "type": "npm", - "name": "npm:inherits", - "data": { - "version": "2.0.4", - "packageName": "inherits", - "hash": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - } - }, - "npm:is-docker": { - "type": "npm", - "name": "npm:is-docker", - "data": { - "version": "2.2.1", - "packageName": "is-docker", - "hash": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" - } - }, - "npm:is-fullwidth-code-point": { - "type": "npm", - "name": "npm:is-fullwidth-code-point", - "data": { - "version": "3.0.0", - "packageName": "is-fullwidth-code-point", - "hash": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - } - }, - "npm:is-interactive": { - "type": "npm", - "name": "npm:is-interactive", - "data": { - "version": "1.0.0", - "packageName": "is-interactive", - "hash": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==" - } - }, - "npm:is-unicode-supported": { - "type": "npm", - "name": "npm:is-unicode-supported", - "data": { - "version": "0.1.0", - "packageName": "is-unicode-supported", - "hash": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" - } - }, - "npm:is-wsl": { - "type": "npm", - "name": "npm:is-wsl", - "data": { - "version": "2.2.0", - "packageName": "is-wsl", - "hash": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==" - } - }, - "npm:isexe": { - "type": "npm", - "name": "npm:isexe", - "data": { - "version": "2.0.0", - "packageName": "isexe", - "hash": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - } - }, - "npm:jackspeak": { - "type": "npm", - "name": "npm:jackspeak", - "data": { - "version": "4.1.1", - "packageName": "jackspeak", - "hash": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==" - } - }, - "npm:jake": { - "type": "npm", - "name": "npm:jake", - "data": { - "version": "10.9.2", - "packageName": "jake", - "hash": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==" - } - }, - "npm:jest-diff": { - "type": "npm", - "name": "npm:jest-diff", - "data": { - "version": "29.7.0", - "packageName": "jest-diff", - "hash": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==" - } - }, - "npm:jest-get-type": { - "type": "npm", - "name": "npm:jest-get-type", - "data": { - "version": "29.6.3", - "packageName": "jest-get-type", - "hash": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==" - } - }, - "npm:js-yaml": { - "type": "npm", - "name": "npm:js-yaml", - "data": { - "version": "3.14.1", - "packageName": "js-yaml", - "hash": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==" - } - }, - "npm:json5": { - "type": "npm", - "name": "npm:json5", - "data": { - "version": "2.2.3", - "packageName": "json5", - "hash": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" - } - }, - "npm:jsonc-parser": { - "type": "npm", - "name": "npm:jsonc-parser", - "data": { - "version": "3.2.0", - "packageName": "jsonc-parser", - "hash": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==" - } - }, - "npm:lines-and-columns": { - "type": "npm", - "name": "npm:lines-and-columns", - "data": { - "version": "2.0.3", - "packageName": "lines-and-columns", - "hash": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==" - } - }, - "npm:log-symbols": { - "type": "npm", - "name": "npm:log-symbols", - "data": { - "version": "4.1.0", - "packageName": "log-symbols", - "hash": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==" - } - }, - "npm:lru-cache": { - "type": "npm", - "name": "npm:lru-cache", - "data": { - "version": "11.1.0", - "packageName": "lru-cache", - "hash": "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==" - } - }, - "npm:math-intrinsics": { - "type": "npm", - "name": "npm:math-intrinsics", - "data": { - "version": "1.1.0", - "packageName": "math-intrinsics", - "hash": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==" - } - }, - "npm:mime-db": { - "type": "npm", - "name": "npm:mime-db", - "data": { - "version": "1.52.0", - "packageName": "mime-db", - "hash": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - } - }, - "npm:mime-types": { - "type": "npm", - "name": "npm:mime-types", - "data": { - "version": "2.1.35", - "packageName": "mime-types", - "hash": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==" - } - }, - "npm:mimic-fn": { - "type": "npm", - "name": "npm:mimic-fn", - "data": { - "version": "2.1.0", - "packageName": "mimic-fn", - "hash": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - } - }, - "npm:minimatch@10.0.3": { - "type": "npm", - "name": "npm:minimatch@10.0.3", - "data": { - "version": "10.0.3", - "packageName": "minimatch", - "hash": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==" - } - }, - "npm:minimatch@3.1.2": { - "type": "npm", - "name": "npm:minimatch@3.1.2", - "data": { - "version": "3.1.2", - "packageName": "minimatch", - "hash": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==" - } - }, - "npm:minimatch@5.1.6": { - "type": "npm", - "name": "npm:minimatch@5.1.6", - "data": { - "version": "5.1.6", - "packageName": "minimatch", - "hash": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==" - } - }, - "npm:minimatch@9.0.3": { - "type": "npm", - "name": "npm:minimatch@9.0.3", - "data": { - "version": "9.0.3", - "packageName": "minimatch", - "hash": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==" - } - }, - "npm:minimist": { - "type": "npm", - "name": "npm:minimist", - "data": { - "version": "1.2.8", - "packageName": "minimist", - "hash": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" - } - }, - "npm:minipass": { - "type": "npm", - "name": "npm:minipass", - "data": { - "version": "7.1.2", - "packageName": "minipass", - "hash": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==" - } - }, - "npm:node-machine-id": { - "type": "npm", - "name": "npm:node-machine-id", - "data": { - "version": "1.1.12", - "packageName": "node-machine-id", - "hash": "sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==" - } - }, - "npm:npm-run-path": { - "type": "npm", - "name": "npm:npm-run-path", - "data": { - "version": "4.0.1", - "packageName": "npm-run-path", - "hash": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==" - } - }, - "npm:nx": { - "type": "npm", - "name": "npm:nx", - "data": { - "version": "21.2.2", - "packageName": "nx", - "hash": "sha512-SP+gojzJhvUfGPw94myECAvF+a7KDQe8c1HUr2HOPR20oSukpdhZM2B1Ki4FGUUuzOcCILhNT2QHLo82+FGLng==" - } - }, - "npm:once": { - "type": "npm", - "name": "npm:once", - "data": { - "version": "1.4.0", - "packageName": "once", - "hash": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==" - } - }, - "npm:onetime": { - "type": "npm", - "name": "npm:onetime", - "data": { - "version": "5.1.2", - "packageName": "onetime", - "hash": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==" - } - }, - "npm:open": { - "type": "npm", - "name": "npm:open", - "data": { - "version": "8.4.2", - "packageName": "open", - "hash": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==" - } - }, - "npm:ora": { - "type": "npm", - "name": "npm:ora", - "data": { - "version": "5.3.0", - "packageName": "ora", - "hash": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==" - } - }, - "npm:package-json-from-dist": { - "type": "npm", - "name": "npm:package-json-from-dist", - "data": { - "version": "1.0.1", - "packageName": "package-json-from-dist", - "hash": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" - } - }, - "npm:path-key": { - "type": "npm", - "name": "npm:path-key", - "data": { - "version": "3.1.1", - "packageName": "path-key", - "hash": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - } - }, - "npm:path-scurry": { - "type": "npm", - "name": "npm:path-scurry", - "data": { - "version": "2.0.0", - "packageName": "path-scurry", - "hash": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==" - } - }, - "npm:picomatch": { - "type": "npm", - "name": "npm:picomatch", - "data": { - "version": "4.0.2", - "packageName": "picomatch", - "hash": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==" - } - }, - "npm:pretty-format": { - "type": "npm", - "name": "npm:pretty-format", - "data": { - "version": "29.7.0", - "packageName": "pretty-format", - "hash": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==" - } - }, - "npm:proxy-from-env": { - "type": "npm", - "name": "npm:proxy-from-env", - "data": { - "version": "1.1.0", - "packageName": "proxy-from-env", - "hash": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - } - }, - "npm:react-is": { - "type": "npm", - "name": "npm:react-is", - "data": { - "version": "18.3.1", - "packageName": "react-is", - "hash": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" - } - }, - "npm:readable-stream": { - "type": "npm", - "name": "npm:readable-stream", - "data": { - "version": "3.6.2", - "packageName": "readable-stream", - "hash": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==" - } - }, - "npm:require-directory": { - "type": "npm", - "name": "npm:require-directory", - "data": { - "version": "2.1.1", - "packageName": "require-directory", - "hash": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" - } - }, - "npm:resolve.exports": { - "type": "npm", - "name": "npm:resolve.exports", - "data": { - "version": "2.0.3", - "packageName": "resolve.exports", - "hash": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==" - } - }, - "npm:restore-cursor": { - "type": "npm", - "name": "npm:restore-cursor", - "data": { - "version": "3.1.0", - "packageName": "restore-cursor", - "hash": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==" - } - }, - "npm:rimraf": { - "type": "npm", - "name": "npm:rimraf", - "data": { - "version": "6.0.1", - "packageName": "rimraf", - "hash": "sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==" - } - }, - "npm:safe-buffer": { - "type": "npm", - "name": "npm:safe-buffer", - "data": { - "version": "5.2.1", - "packageName": "safe-buffer", - "hash": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } - }, - "npm:semver": { - "type": "npm", - "name": "npm:semver", - "data": { - "version": "7.7.2", - "packageName": "semver", - "hash": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==" - } - }, - "npm:shebang-command": { - "type": "npm", - "name": "npm:shebang-command", - "data": { - "version": "2.0.0", - "packageName": "shebang-command", - "hash": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==" - } - }, - "npm:shebang-regex": { - "type": "npm", - "name": "npm:shebang-regex", - "data": { - "version": "3.0.0", - "packageName": "shebang-regex", - "hash": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" - } - }, - "npm:signal-exit@3.0.7": { - "type": "npm", - "name": "npm:signal-exit@3.0.7", - "data": { - "version": "3.0.7", - "packageName": "signal-exit", - "hash": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - } - }, - "npm:signal-exit@4.1.0": { - "type": "npm", - "name": "npm:signal-exit@4.1.0", - "data": { - "version": "4.1.0", - "packageName": "signal-exit", - "hash": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==" - } - }, - "npm:sprintf-js": { - "type": "npm", - "name": "npm:sprintf-js", - "data": { - "version": "1.0.3", - "packageName": "sprintf-js", - "hash": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - } - }, - "npm:string-width@4.2.3": { - "type": "npm", - "name": "npm:string-width@4.2.3", - "data": { - "version": "4.2.3", - "packageName": "string-width", - "hash": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==" - } - }, - "npm:string-width@5.1.2": { - "type": "npm", - "name": "npm:string-width@5.1.2", - "data": { - "version": "5.1.2", - "packageName": "string-width", - "hash": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==" - } - }, - "npm:string-width-cjs": { - "type": "npm", - "name": "npm:string-width-cjs", - "data": { - "version": "npm:string-width@4.2.3", - "packageName": "string-width-cjs", - "hash": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==" - } - }, - "npm:string_decoder": { - "type": "npm", - "name": "npm:string_decoder", - "data": { - "version": "1.3.0", - "packageName": "string_decoder", - "hash": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==" - } - }, - "npm:strip-ansi@6.0.1": { - "type": "npm", - "name": "npm:strip-ansi@6.0.1", - "data": { - "version": "6.0.1", - "packageName": "strip-ansi", - "hash": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==" - } - }, - "npm:strip-ansi@7.1.0": { - "type": "npm", - "name": "npm:strip-ansi@7.1.0", - "data": { - "version": "7.1.0", - "packageName": "strip-ansi", - "hash": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==" - } - }, - "npm:strip-ansi-cjs": { - "type": "npm", - "name": "npm:strip-ansi-cjs", - "data": { - "version": "npm:strip-ansi@6.0.1", - "packageName": "strip-ansi-cjs", - "hash": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==" - } - }, - "npm:strip-bom": { - "type": "npm", - "name": "npm:strip-bom", - "data": { - "version": "3.0.0", - "packageName": "strip-bom", - "hash": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==" - } - }, - "npm:supports-color": { - "type": "npm", - "name": "npm:supports-color", - "data": { - "version": "7.2.0", - "packageName": "supports-color", - "hash": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==" - } - }, - "npm:tar-stream": { - "type": "npm", - "name": "npm:tar-stream", - "data": { - "version": "2.2.0", - "packageName": "tar-stream", - "hash": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==" - } - }, - "npm:tmp": { - "type": "npm", - "name": "npm:tmp", - "data": { - "version": "0.2.3", - "packageName": "tmp", - "hash": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==" - } - }, - "npm:tree-kill": { - "type": "npm", - "name": "npm:tree-kill", - "data": { - "version": "1.2.2", - "packageName": "tree-kill", - "hash": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==" - } - }, - "npm:tsconfig-paths": { - "type": "npm", - "name": "npm:tsconfig-paths", - "data": { - "version": "4.2.0", - "packageName": "tsconfig-paths", - "hash": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==" - } - }, - "npm:tslib": { - "type": "npm", - "name": "npm:tslib", - "data": { - "version": "2.8.1", - "packageName": "tslib", - "hash": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" - } - }, - "npm:typescript": { - "type": "npm", - "name": "npm:typescript", - "data": { - "version": "5.8.3", - "packageName": "typescript", - "hash": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==" - } - }, - "npm:util-deprecate": { - "type": "npm", - "name": "npm:util-deprecate", - "data": { - "version": "1.0.2", - "packageName": "util-deprecate", - "hash": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - } - }, - "npm:wcwidth": { - "type": "npm", - "name": "npm:wcwidth", - "data": { - "version": "1.0.1", - "packageName": "wcwidth", - "hash": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==" - } - }, - "npm:which": { - "type": "npm", - "name": "npm:which", - "data": { - "version": "2.0.2", - "packageName": "which", - "hash": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==" - } - }, - "npm:wrap-ansi@7.0.0": { - "type": "npm", - "name": "npm:wrap-ansi@7.0.0", - "data": { - "version": "7.0.0", - "packageName": "wrap-ansi", - "hash": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==" - } - }, - "npm:wrap-ansi@8.1.0": { - "type": "npm", - "name": "npm:wrap-ansi@8.1.0", - "data": { - "version": "8.1.0", - "packageName": "wrap-ansi", - "hash": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==" - } - }, - "npm:wrap-ansi-cjs": { - "type": "npm", - "name": "npm:wrap-ansi-cjs", - "data": { - "version": "npm:wrap-ansi@7.0.0", - "packageName": "wrap-ansi-cjs", - "hash": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==" - } - }, - "npm:wrappy": { - "type": "npm", - "name": "npm:wrappy", - "data": { - "version": "1.0.2", - "packageName": "wrappy", - "hash": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - } - }, - "npm:y18n": { - "type": "npm", - "name": "npm:y18n", - "data": { - "version": "5.0.8", - "packageName": "y18n", - "hash": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" - } - }, - "npm:yaml": { - "type": "npm", - "name": "npm:yaml", - "data": { - "version": "2.8.0", - "packageName": "yaml", - "hash": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==" - } - }, - "npm:yargs-parser": { - "type": "npm", - "name": "npm:yargs-parser", - "data": { - "version": "21.1.1", - "packageName": "yargs-parser", - "hash": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" - } - }, - "npm:yargs": { - "type": "npm", - "name": "npm:yargs", - "data": { - "version": "17.7.2", - "packageName": "yargs", - "hash": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==" - } - } - }, - "dependencies": [ - { - "source": "npm:@emnapi/core", - "target": "npm:@emnapi/wasi-threads", - "type": "static" - }, - { - "source": "npm:@emnapi/core", - "target": "npm:tslib", - "type": "static" - }, - { - "source": "npm:@emnapi/runtime", - "target": "npm:tslib", - "type": "static" - }, - { - "source": "npm:@emnapi/wasi-threads", - "target": "npm:tslib", - "type": "static" - }, - { - "source": "npm:@isaacs/brace-expansion", - "target": "npm:@isaacs/balanced-match", - "type": "static" - }, - { - "source": "npm:@isaacs/cliui", - "target": "npm:string-width@5.1.2", - "type": "static" - }, - { - "source": "npm:@isaacs/cliui", - "target": "npm:string-width-cjs", - "type": "static" - }, - { - "source": "npm:@isaacs/cliui", - "target": "npm:strip-ansi@7.1.0", - "type": "static" - }, - { - "source": "npm:@isaacs/cliui", - "target": "npm:strip-ansi-cjs", - "type": "static" - }, - { - "source": "npm:@isaacs/cliui", - "target": "npm:wrap-ansi@8.1.0", - "type": "static" - }, - { - "source": "npm:@isaacs/cliui", - "target": "npm:wrap-ansi-cjs", - "type": "static" - }, - { - "source": "npm:@jest/schemas", - "target": "npm:@sinclair/typebox", - "type": "static" - }, - { - "source": "npm:@napi-rs/wasm-runtime", - "target": "npm:@emnapi/core", - "type": "static" - }, - { - "source": "npm:@napi-rs/wasm-runtime", - "target": "npm:@emnapi/runtime", - "type": "static" - }, - { - "source": "npm:@napi-rs/wasm-runtime", - "target": "npm:@tybys/wasm-util", - "type": "static" - }, - { - "source": "npm:@nx/devkit", - "target": "npm:ejs", - "type": "static" - }, - { - "source": "npm:@nx/devkit", - "target": "npm:enquirer", - "type": "static" - }, - { - "source": "npm:@nx/devkit", - "target": "npm:ignore", - "type": "static" - }, - { - "source": "npm:@nx/devkit", - "target": "npm:minimatch@9.0.3", - "type": "static" - }, - { - "source": "npm:@nx/devkit", - "target": "npm:nx", - "type": "static" - }, - { - "source": "npm:@nx/devkit", - "target": "npm:semver", - "type": "static" - }, - { - "source": "npm:@nx/devkit", - "target": "npm:tmp", - "type": "static" - }, - { - "source": "npm:@nx/devkit", - "target": "npm:tslib", - "type": "static" - }, - { - "source": "npm:@nx/devkit", - "target": "npm:yargs-parser", - "type": "static" - }, - { - "source": "npm:@nx/workspace", - "target": "npm:@nx/devkit", - "type": "static" - }, - { - "source": "npm:@nx/workspace", - "target": "npm:@zkochan/js-yaml", - "type": "static" - }, - { - "source": "npm:@nx/workspace", - "target": "npm:chalk", - "type": "static" - }, - { - "source": "npm:@nx/workspace", - "target": "npm:enquirer", - "type": "static" - }, - { - "source": "npm:@nx/workspace", - "target": "npm:nx", - "type": "static" - }, - { - "source": "npm:@nx/workspace", - "target": "npm:picomatch", - "type": "static" - }, - { - "source": "npm:@nx/workspace", - "target": "npm:tslib", - "type": "static" - }, - { - "source": "npm:@nx/workspace", - "target": "npm:yargs-parser", - "type": "static" - }, - { - "source": "npm:@tybys/wasm-util", - "target": "npm:tslib", - "type": "static" - }, - { - "source": "npm:@yarnpkg/parsers", - "target": "npm:js-yaml", - "type": "static" - }, - { - "source": "npm:@yarnpkg/parsers", - "target": "npm:tslib", - "type": "static" - }, - { - "source": "npm:@zkochan/js-yaml", - "target": "npm:argparse@2.0.1", - "type": "static" - }, - { - "source": "npm:ansi-styles@4.3.0", - "target": "npm:color-convert", - "type": "static" - }, - { - "source": "npm:argparse@1.0.10", - "target": "npm:sprintf-js", - "type": "static" - }, - { - "source": "npm:axios", - "target": "npm:follow-redirects", - "type": "static" - }, - { - "source": "npm:axios", - "target": "npm:form-data", - "type": "static" - }, - { - "source": "npm:axios", - "target": "npm:proxy-from-env", - "type": "static" - }, - { - "source": "npm:bl", - "target": "npm:buffer", - "type": "static" - }, - { - "source": "npm:bl", - "target": "npm:inherits", - "type": "static" - }, - { - "source": "npm:bl", - "target": "npm:readable-stream", - "type": "static" - }, - { - "source": "npm:brace-expansion@1.1.12", - "target": "npm:balanced-match", - "type": "static" - }, - { - "source": "npm:brace-expansion@1.1.12", - "target": "npm:concat-map", - "type": "static" - }, - { - "source": "npm:brace-expansion@2.0.2", - "target": "npm:balanced-match", - "type": "static" - }, - { - "source": "npm:buffer", - "target": "npm:base64-js", - "type": "static" - }, - { - "source": "npm:buffer", - "target": "npm:ieee754", - "type": "static" - }, - { - "source": "npm:call-bind-apply-helpers", - "target": "npm:es-errors", - "type": "static" - }, - { - "source": "npm:call-bind-apply-helpers", - "target": "npm:function-bind", - "type": "static" - }, - { - "source": "npm:chalk", - "target": "npm:ansi-styles@4.3.0", - "type": "static" - }, - { - "source": "npm:chalk", - "target": "npm:supports-color", - "type": "static" - }, - { - "source": "npm:cli-cursor", - "target": "npm:restore-cursor", - "type": "static" - }, - { - "source": "npm:cliui", - "target": "npm:string-width@4.2.3", - "type": "static" - }, - { - "source": "npm:cliui", - "target": "npm:strip-ansi@6.0.1", - "type": "static" - }, - { - "source": "npm:cliui", - "target": "npm:wrap-ansi@7.0.0", - "type": "static" - }, - { - "source": "npm:color-convert", - "target": "npm:color-name", - "type": "static" - }, - { - "source": "npm:combined-stream", - "target": "npm:delayed-stream", - "type": "static" - }, - { - "source": "npm:cross-spawn", - "target": "npm:path-key", - "type": "static" - }, - { - "source": "npm:cross-spawn", - "target": "npm:shebang-command", - "type": "static" - }, - { - "source": "npm:cross-spawn", - "target": "npm:which", - "type": "static" - }, - { - "source": "npm:defaults", - "target": "npm:clone", - "type": "static" - }, - { - "source": "npm:dotenv-expand", - "target": "npm:dotenv", - "type": "static" - }, - { - "source": "npm:dunder-proto", - "target": "npm:call-bind-apply-helpers", - "type": "static" - }, - { - "source": "npm:dunder-proto", - "target": "npm:es-errors", - "type": "static" - }, - { - "source": "npm:dunder-proto", - "target": "npm:gopd", - "type": "static" - }, - { - "source": "npm:ejs", - "target": "npm:jake", - "type": "static" - }, - { - "source": "npm:end-of-stream", - "target": "npm:once", - "type": "static" - }, - { - "source": "npm:enquirer", - "target": "npm:ansi-colors", - "type": "static" - }, - { - "source": "npm:es-object-atoms", - "target": "npm:es-errors", - "type": "static" - }, - { - "source": "npm:es-set-tostringtag", - "target": "npm:es-errors", - "type": "static" - }, - { - "source": "npm:es-set-tostringtag", - "target": "npm:get-intrinsic", - "type": "static" - }, - { - "source": "npm:es-set-tostringtag", - "target": "npm:has-tostringtag", - "type": "static" - }, - { - "source": "npm:es-set-tostringtag", - "target": "npm:hasown", - "type": "static" - }, - { - "source": "npm:figures", - "target": "npm:escape-string-regexp", - "type": "static" - }, - { - "source": "npm:filelist", - "target": "npm:minimatch@5.1.6", - "type": "static" - }, - { - "source": "npm:foreground-child", - "target": "npm:cross-spawn", - "type": "static" - }, - { - "source": "npm:foreground-child", - "target": "npm:signal-exit@4.1.0", - "type": "static" - }, - { - "source": "npm:form-data", - "target": "npm:asynckit", - "type": "static" - }, - { - "source": "npm:form-data", - "target": "npm:combined-stream", - "type": "static" - }, - { - "source": "npm:form-data", - "target": "npm:es-set-tostringtag", - "type": "static" - }, - { - "source": "npm:form-data", - "target": "npm:hasown", - "type": "static" - }, - { - "source": "npm:form-data", - "target": "npm:mime-types", - "type": "static" - }, - { - "source": "npm:front-matter", - "target": "npm:js-yaml", - "type": "static" - }, - { - "source": "npm:get-intrinsic", - "target": "npm:call-bind-apply-helpers", - "type": "static" - }, - { - "source": "npm:get-intrinsic", - "target": "npm:es-define-property", - "type": "static" - }, - { - "source": "npm:get-intrinsic", - "target": "npm:es-errors", - "type": "static" - }, - { - "source": "npm:get-intrinsic", - "target": "npm:es-object-atoms", - "type": "static" - }, - { - "source": "npm:get-intrinsic", - "target": "npm:function-bind", - "type": "static" - }, - { - "source": "npm:get-intrinsic", - "target": "npm:get-proto", - "type": "static" - }, - { - "source": "npm:get-intrinsic", - "target": "npm:gopd", - "type": "static" - }, - { - "source": "npm:get-intrinsic", - "target": "npm:has-symbols", - "type": "static" - }, - { - "source": "npm:get-intrinsic", - "target": "npm:hasown", - "type": "static" - }, - { - "source": "npm:get-intrinsic", - "target": "npm:math-intrinsics", - "type": "static" - }, - { - "source": "npm:get-proto", - "target": "npm:dunder-proto", - "type": "static" - }, - { - "source": "npm:get-proto", - "target": "npm:es-object-atoms", - "type": "static" - }, - { - "source": "npm:glob", - "target": "npm:foreground-child", - "type": "static" - }, - { - "source": "npm:glob", - "target": "npm:jackspeak", - "type": "static" - }, - { - "source": "npm:glob", - "target": "npm:minimatch@10.0.3", - "type": "static" - }, - { - "source": "npm:glob", - "target": "npm:minipass", - "type": "static" - }, - { - "source": "npm:glob", - "target": "npm:package-json-from-dist", - "type": "static" - }, - { - "source": "npm:glob", - "target": "npm:path-scurry", - "type": "static" - }, - { - "source": "npm:has-tostringtag", - "target": "npm:has-symbols", - "type": "static" - }, - { - "source": "npm:hasown", - "target": "npm:function-bind", - "type": "static" - }, - { - "source": "npm:is-wsl", - "target": "npm:is-docker", - "type": "static" - }, - { - "source": "npm:jackspeak", - "target": "npm:@isaacs/cliui", - "type": "static" - }, - { - "source": "npm:jake", - "target": "npm:async", - "type": "static" - }, - { - "source": "npm:jake", - "target": "npm:chalk", - "type": "static" - }, - { - "source": "npm:jake", - "target": "npm:filelist", - "type": "static" - }, - { - "source": "npm:jake", - "target": "npm:minimatch@3.1.2", - "type": "static" - }, - { - "source": "npm:jest-diff", - "target": "npm:chalk", - "type": "static" - }, - { - "source": "npm:jest-diff", - "target": "npm:diff-sequences", - "type": "static" - }, - { - "source": "npm:jest-diff", - "target": "npm:jest-get-type", - "type": "static" - }, - { - "source": "npm:jest-diff", - "target": "npm:pretty-format", - "type": "static" - }, - { - "source": "npm:js-yaml", - "target": "npm:argparse@1.0.10", - "type": "static" - }, - { - "source": "npm:js-yaml", - "target": "npm:esprima", - "type": "static" - }, - { - "source": "npm:log-symbols", - "target": "npm:chalk", - "type": "static" - }, - { - "source": "npm:log-symbols", - "target": "npm:is-unicode-supported", - "type": "static" - }, - { - "source": "npm:mime-types", - "target": "npm:mime-db", - "type": "static" - }, - { - "source": "npm:minimatch@10.0.3", - "target": "npm:@isaacs/brace-expansion", - "type": "static" - }, - { - "source": "npm:minimatch@3.1.2", - "target": "npm:brace-expansion@1.1.12", - "type": "static" - }, - { - "source": "npm:minimatch@5.1.6", - "target": "npm:brace-expansion@2.0.2", - "type": "static" - }, - { - "source": "npm:minimatch@9.0.3", - "target": "npm:brace-expansion@2.0.2", - "type": "static" - }, - { - "source": "npm:npm-run-path", - "target": "npm:path-key", - "type": "static" - }, - { - "source": "npm:nx", - "target": "npm:@napi-rs/wasm-runtime", - "type": "static" - }, - { - "source": "npm:nx", - "target": "npm:@yarnpkg/lockfile", - "type": "static" - }, - { - "source": "npm:nx", - "target": "npm:@yarnpkg/parsers", - "type": "static" - }, - { - "source": "npm:nx", - "target": "npm:@zkochan/js-yaml", - "type": "static" - }, - { - "source": "npm:nx", - "target": "npm:axios", - "type": "static" - }, - { - "source": "npm:nx", - "target": "npm:chalk", - "type": "static" - }, - { - "source": "npm:nx", - "target": "npm:cli-cursor", - "type": "static" - }, - { - "source": "npm:nx", - "target": "npm:cli-spinners", - "type": "static" - }, - { - "source": "npm:nx", - "target": "npm:cliui", - "type": "static" - }, - { - "source": "npm:nx", - "target": "npm:dotenv", - "type": "static" - }, - { - "source": "npm:nx", - "target": "npm:dotenv-expand", - "type": "static" - }, - { - "source": "npm:nx", - "target": "npm:enquirer", - "type": "static" - }, - { - "source": "npm:nx", - "target": "npm:figures", - "type": "static" - }, - { - "source": "npm:nx", - "target": "npm:flat", - "type": "static" - }, - { - "source": "npm:nx", - "target": "npm:front-matter", - "type": "static" - }, - { - "source": "npm:nx", - "target": "npm:ignore", - "type": "static" - }, - { - "source": "npm:nx", - "target": "npm:jest-diff", - "type": "static" - }, - { - "source": "npm:nx", - "target": "npm:jsonc-parser", - "type": "static" - }, - { - "source": "npm:nx", - "target": "npm:lines-and-columns", - "type": "static" - }, - { - "source": "npm:nx", - "target": "npm:minimatch@9.0.3", - "type": "static" - }, - { - "source": "npm:nx", - "target": "npm:node-machine-id", - "type": "static" - }, - { - "source": "npm:nx", - "target": "npm:npm-run-path", - "type": "static" - }, - { - "source": "npm:nx", - "target": "npm:open", - "type": "static" - }, - { - "source": "npm:nx", - "target": "npm:ora", - "type": "static" - }, - { - "source": "npm:nx", - "target": "npm:resolve.exports", - "type": "static" - }, - { - "source": "npm:nx", - "target": "npm:semver", - "type": "static" - }, - { - "source": "npm:nx", - "target": "npm:string-width@4.2.3", - "type": "static" - }, - { - "source": "npm:nx", - "target": "npm:tar-stream", - "type": "static" - }, - { - "source": "npm:nx", - "target": "npm:tmp", - "type": "static" - }, - { - "source": "npm:nx", - "target": "npm:tree-kill", - "type": "static" - }, - { - "source": "npm:nx", - "target": "npm:tsconfig-paths", - "type": "static" - }, - { - "source": "npm:nx", - "target": "npm:tslib", - "type": "static" - }, - { - "source": "npm:nx", - "target": "npm:yaml", - "type": "static" - }, - { - "source": "npm:nx", - "target": "npm:yargs", - "type": "static" - }, - { - "source": "npm:nx", - "target": "npm:yargs-parser", - "type": "static" - }, - { - "source": "npm:nx", - "target": "npm:@nx/nx-darwin-arm64", - "type": "static" - }, - { - "source": "npm:nx", - "target": "npm:@nx/nx-darwin-x64", - "type": "static" - }, - { - "source": "npm:nx", - "target": "npm:@nx/nx-freebsd-x64", - "type": "static" - }, - { - "source": "npm:nx", - "target": "npm:@nx/nx-linux-arm-gnueabihf", - "type": "static" - }, - { - "source": "npm:nx", - "target": "npm:@nx/nx-linux-arm64-gnu", - "type": "static" - }, - { - "source": "npm:nx", - "target": "npm:@nx/nx-linux-arm64-musl", - "type": "static" - }, - { - "source": "npm:nx", - "target": "npm:@nx/nx-linux-x64-gnu", - "type": "static" - }, - { - "source": "npm:nx", - "target": "npm:@nx/nx-linux-x64-musl", - "type": "static" - }, - { - "source": "npm:nx", - "target": "npm:@nx/nx-win32-arm64-msvc", - "type": "static" - }, - { - "source": "npm:nx", - "target": "npm:@nx/nx-win32-x64-msvc", - "type": "static" - }, - { - "source": "npm:once", - "target": "npm:wrappy", - "type": "static" - }, - { - "source": "npm:onetime", - "target": "npm:mimic-fn", - "type": "static" - }, - { - "source": "npm:open", - "target": "npm:define-lazy-prop", - "type": "static" - }, - { - "source": "npm:open", - "target": "npm:is-docker", - "type": "static" - }, - { - "source": "npm:open", - "target": "npm:is-wsl", - "type": "static" - }, - { - "source": "npm:ora", - "target": "npm:bl", - "type": "static" - }, - { - "source": "npm:ora", - "target": "npm:chalk", - "type": "static" - }, - { - "source": "npm:ora", - "target": "npm:cli-cursor", - "type": "static" - }, - { - "source": "npm:ora", - "target": "npm:cli-spinners", - "type": "static" - }, - { - "source": "npm:ora", - "target": "npm:is-interactive", - "type": "static" - }, - { - "source": "npm:ora", - "target": "npm:log-symbols", - "type": "static" - }, - { - "source": "npm:ora", - "target": "npm:strip-ansi@6.0.1", - "type": "static" - }, - { - "source": "npm:ora", - "target": "npm:wcwidth", - "type": "static" - }, - { - "source": "npm:path-scurry", - "target": "npm:lru-cache", - "type": "static" - }, - { - "source": "npm:path-scurry", - "target": "npm:minipass", - "type": "static" - }, - { - "source": "npm:pretty-format", - "target": "npm:@jest/schemas", - "type": "static" - }, - { - "source": "npm:pretty-format", - "target": "npm:ansi-styles@5.2.0", - "type": "static" - }, - { - "source": "npm:pretty-format", - "target": "npm:react-is", - "type": "static" - }, - { - "source": "npm:readable-stream", - "target": "npm:inherits", - "type": "static" - }, - { - "source": "npm:readable-stream", - "target": "npm:string_decoder", - "type": "static" - }, - { - "source": "npm:readable-stream", - "target": "npm:util-deprecate", - "type": "static" - }, - { - "source": "npm:restore-cursor", - "target": "npm:onetime", - "type": "static" - }, - { - "source": "npm:restore-cursor", - "target": "npm:signal-exit@3.0.7", - "type": "static" - }, - { - "source": "npm:rimraf", - "target": "npm:glob", - "type": "static" - }, - { - "source": "npm:rimraf", - "target": "npm:package-json-from-dist", - "type": "static" - }, - { - "source": "npm:shebang-command", - "target": "npm:shebang-regex", - "type": "static" - }, - { - "source": "npm:string-width@4.2.3", - "target": "npm:emoji-regex@8.0.0", - "type": "static" - }, - { - "source": "npm:string-width@4.2.3", - "target": "npm:is-fullwidth-code-point", - "type": "static" - }, - { - "source": "npm:string-width@4.2.3", - "target": "npm:strip-ansi@6.0.1", - "type": "static" - }, - { - "source": "npm:string-width-cjs", - "target": "npm:emoji-regex@8.0.0", - "type": "static" - }, - { - "source": "npm:string-width-cjs", - "target": "npm:is-fullwidth-code-point", - "type": "static" - }, - { - "source": "npm:string-width-cjs", - "target": "npm:strip-ansi@6.0.1", - "type": "static" - }, - { - "source": "npm:string-width@5.1.2", - "target": "npm:eastasianwidth", - "type": "static" - }, - { - "source": "npm:string-width@5.1.2", - "target": "npm:emoji-regex@9.2.2", - "type": "static" - }, - { - "source": "npm:string-width@5.1.2", - "target": "npm:strip-ansi@7.1.0", - "type": "static" - }, - { - "source": "npm:string_decoder", - "target": "npm:safe-buffer", - "type": "static" - }, - { - "source": "npm:strip-ansi@6.0.1", - "target": "npm:ansi-regex@5.0.1", - "type": "static" - }, - { - "source": "npm:strip-ansi-cjs", - "target": "npm:ansi-regex@5.0.1", - "type": "static" - }, - { - "source": "npm:strip-ansi@7.1.0", - "target": "npm:ansi-regex@6.1.0", - "type": "static" - }, - { - "source": "npm:supports-color", - "target": "npm:has-flag", - "type": "static" - }, - { - "source": "npm:tar-stream", - "target": "npm:bl", - "type": "static" - }, - { - "source": "npm:tar-stream", - "target": "npm:end-of-stream", - "type": "static" - }, - { - "source": "npm:tar-stream", - "target": "npm:fs-constants", - "type": "static" - }, - { - "source": "npm:tar-stream", - "target": "npm:inherits", - "type": "static" - }, - { - "source": "npm:tar-stream", - "target": "npm:readable-stream", - "type": "static" - }, - { - "source": "npm:tsconfig-paths", - "target": "npm:json5", - "type": "static" - }, - { - "source": "npm:tsconfig-paths", - "target": "npm:minimist", - "type": "static" - }, - { - "source": "npm:tsconfig-paths", - "target": "npm:strip-bom", - "type": "static" - }, - { - "source": "npm:wcwidth", - "target": "npm:defaults", - "type": "static" - }, - { - "source": "npm:which", - "target": "npm:isexe", - "type": "static" - }, - { - "source": "npm:wrap-ansi@7.0.0", - "target": "npm:ansi-styles@4.3.0", - "type": "static" - }, - { - "source": "npm:wrap-ansi@7.0.0", - "target": "npm:string-width@4.2.3", - "type": "static" - }, - { - "source": "npm:wrap-ansi@7.0.0", - "target": "npm:strip-ansi@6.0.1", - "type": "static" - }, - { - "source": "npm:wrap-ansi-cjs", - "target": "npm:ansi-styles@4.3.0", - "type": "static" - }, - { - "source": "npm:wrap-ansi-cjs", - "target": "npm:string-width@4.2.3", - "type": "static" - }, - { - "source": "npm:wrap-ansi-cjs", - "target": "npm:strip-ansi@6.0.1", - "type": "static" - }, - { - "source": "npm:wrap-ansi@8.1.0", - "target": "npm:ansi-styles@6.2.1", - "type": "static" - }, - { - "source": "npm:wrap-ansi@8.1.0", - "target": "npm:string-width@5.1.2", - "type": "static" - }, - { - "source": "npm:wrap-ansi@8.1.0", - "target": "npm:strip-ansi@7.1.0", - "type": "static" - }, - { - "source": "npm:yargs", - "target": "npm:cliui", - "type": "static" - }, - { - "source": "npm:yargs", - "target": "npm:escalade", - "type": "static" - }, - { - "source": "npm:yargs", - "target": "npm:get-caller-file", - "type": "static" - }, - { - "source": "npm:yargs", - "target": "npm:require-directory", - "type": "static" - }, - { - "source": "npm:yargs", - "target": "npm:string-width@4.2.3", - "type": "static" - }, - { - "source": "npm:yargs", - "target": "npm:y18n", - "type": "static" - }, - { - "source": "npm:yargs", - "target": "npm:yargs-parser", - "type": "static" - } - ] -} \ No newline at end of file diff --git a/.nx/workspace-data/project-graph.json b/.nx/workspace-data/project-graph.json deleted file mode 100644 index 2bafb72..0000000 --- a/.nx/workspace-data/project-graph.json +++ /dev/null @@ -1,419 +0,0 @@ -{ - "nodes": { - "ssh-manager": { - "name": "ssh-manager", - "type": "lib", - "data": { - "root": "packages/core", - "name": "ssh-manager", - "tags": [ - "npm:public", - "npm:ssh", - "npm:security", - "npm:key-management", - "npm:cli", - "npm:terminal" - ], - "metadata": { - "targetGroups": { - "NPM Scripts": [ - "build", - "start", - "dev", - "lint", - "test", - "prepare" - ] - }, - "description": "Secure SSH key management with project-based namespaces", - "js": { - "packageName": "ssh-manager", - "packageMain": "dist/index.js", - "isInPackageManagerWorkspaces": true - } - }, - "targets": { - "build": { - "executor": "nx:run-script", - "options": { - "script": "build" - }, - "metadata": { - "scriptContent": "tsc", - "runCommand": "pnpm run build" - }, - "configurations": {}, - "parallelism": true, - "dependsOn": [ - "^build" - ], - "cache": true - }, - "start": { - "executor": "nx:run-script", - "options": { - "script": "start" - }, - "metadata": { - "scriptContent": "node dist/index.js", - "runCommand": "pnpm run start" - }, - "configurations": {}, - "parallelism": true - }, - "dev": { - "executor": "nx:run-script", - "options": { - "script": "dev" - }, - "metadata": { - "scriptContent": "ts-node src/index.ts", - "runCommand": "pnpm run dev" - }, - "configurations": {}, - "parallelism": true - }, - "lint": { - "executor": "nx:run-script", - "options": { - "script": "lint" - }, - "metadata": { - "scriptContent": "eslint --ext .ts src/", - "runCommand": "pnpm run lint" - }, - "configurations": {}, - "parallelism": true, - "cache": true - }, - "test": { - "executor": "nx:run-script", - "options": { - "script": "test" - }, - "metadata": { - "scriptContent": "jest", - "runCommand": "pnpm run test" - }, - "configurations": {}, - "parallelism": true - }, - "prepare": { - "executor": "nx:run-script", - "options": { - "script": "prepare" - }, - "metadata": { - "scriptContent": "npm run build", - "runCommand": "pnpm run prepare" - }, - "configurations": {}, - "parallelism": true - }, - "nx-release-publish": { - "executor": "@nx/js:release-publish", - "dependsOn": [ - "^nx-release-publish" - ], - "options": {}, - "configurations": {}, - "parallelism": true - } - }, - "implicitDependencies": [] - } - }, - "cli": { - "name": "cli", - "type": "lib", - "data": { - "root": "packages/cli", - "projectType": "library", - "targets": { - "typecheck": { - "dependsOn": [ - "^typecheck" - ], - "options": { - "cwd": "packages/cli", - "command": "tsc --build --emitDeclarationOnly" - }, - "cache": true, - "inputs": [ - "production", - "^production", - { - "externalDependencies": [ - "typescript" - ] - } - ], - "outputs": [ - "{projectRoot}/**/*.js", - "{projectRoot}/**/*.cjs", - "{projectRoot}/**/*.mjs", - "{projectRoot}/**/*.jsx", - "{projectRoot}/**/*.js.map", - "{projectRoot}/**/*.jsx.map", - "{projectRoot}/**/*.d.ts", - "{projectRoot}/**/*.d.cts", - "{projectRoot}/**/*.d.mts", - "{projectRoot}/**/*.d.ts.map", - "{projectRoot}/**/*.d.cts.map", - "{projectRoot}/**/*.d.mts.map", - "{projectRoot}/tsconfig.tsbuildinfo" - ], - "syncGenerators": [ - "@nx/js:typescript-sync" - ], - "metadata": { - "technologies": [ - "typescript" - ], - "description": "Runs type-checking for the project.", - "help": { - "command": "pnpm exec tsc --build --help", - "example": { - "args": [ - "--force" - ] - } - } - }, - "executor": "nx:run-commands", - "configurations": {}, - "parallelism": true - }, - "test": { - "executor": "nx:run-script", - "options": { - "script": "test" - }, - "metadata": { - "scriptContent": "mocha", - "runCommand": "pnpm run test" - }, - "configurations": {}, - "parallelism": true - }, - "build": { - "executor": "nx:run-script", - "options": { - "script": "build" - }, - "metadata": { - "scriptContent": "tsup", - "runCommand": "pnpm run build" - }, - "configurations": {}, - "parallelism": true, - "dependsOn": [ - "^build" - ], - "cache": true - }, - "nx-release-publish": { - "executor": "@nx/js:release-publish", - "dependsOn": [ - "^nx-release-publish" - ], - "options": {}, - "configurations": {}, - "parallelism": true - } - }, - "name": "cli", - "tags": [ - "npm:public" - ], - "metadata": { - "targetGroups": { - "NPM Scripts": [ - "test", - "build" - ] - }, - "description": "", - "js": { - "packageName": "cli", - "packageMain": "index.js", - "isInPackageManagerWorkspaces": true - } - }, - "implicitDependencies": [] - } - }, - "@sshield/config": { - "name": "@sshield/config", - "type": "lib", - "data": { - "root": "config", - "projectType": "library", - "targets": { - "typecheck": { - "dependsOn": [ - "build", - "^typecheck" - ], - "options": { - "cwd": "config", - "command": "tsc --build --emitDeclarationOnly" - }, - "cache": true, - "inputs": [ - "production", - "!{workspaceRoot}/node_modules", - "^production", - { - "externalDependencies": [ - "typescript" - ] - } - ], - "outputs": [ - "{projectRoot}/**/*.js", - "{projectRoot}/**/*.cjs", - "{projectRoot}/**/*.mjs", - "{projectRoot}/**/*.jsx", - "{projectRoot}/**/*.js.map", - "{projectRoot}/**/*.jsx.map", - "{projectRoot}/**/*.d.ts", - "{projectRoot}/**/*.d.cts", - "{projectRoot}/**/*.d.mts", - "{projectRoot}/**/*.d.ts.map", - "{projectRoot}/**/*.d.cts.map", - "{projectRoot}/**/*.d.mts.map", - "{projectRoot}/tsconfig.tsbuildinfo" - ], - "syncGenerators": [ - "@nx/js:typescript-sync" - ], - "metadata": { - "technologies": [ - "typescript" - ], - "description": "Runs type-checking for the project.", - "help": { - "command": "pnpm exec tsc --build --help", - "example": { - "args": [ - "--force" - ] - } - } - }, - "executor": "nx:run-commands", - "configurations": {}, - "parallelism": true - }, - "build": { - "executor": "@nx/js:tsc", - "outputs": [ - "{options.outputPath}" - ], - "cache": true, - "options": { - "outputPath": "config/dist", - "main": "config/src/index.ts", - "tsConfig": "config/tsconfig.lib.json", - "assets": [ - "*.md" - ], - "clean": true - }, - "configurations": {}, - "parallelism": true, - "dependsOn": [ - "^build" - ], - "inputs": [ - "production", - "^production" - ] - }, - "build-deps": { - "dependsOn": [ - "^build" - ], - "configurations": {}, - "options": {}, - "parallelism": true, - "executor": "nx:noop" - }, - "watch-deps": { - "continuous": true, - "dependsOn": [ - "build-deps" - ], - "executor": "nx:run-commands", - "options": { - "command": "pnpm exec nx watch --projects @sshield/config --includeDependentProjects -- pnpm exec nx build-deps @sshield/config" - }, - "configurations": {}, - "parallelism": true - }, - "nx-release-publish": { - "executor": "@nx/js:release-publish", - "dependsOn": [ - "^nx-release-publish" - ], - "options": {}, - "configurations": {}, - "parallelism": true - } - }, - "name": "@sshield/config", - "tags": [ - "npm:public" - ], - "metadata": { - "targetGroups": {}, - "description": "Shared configuration templates for SSHield monorepo", - "js": { - "packageName": "@sshield/config", - "packageExports": { - "./ts/lib": "./dist/typescript/tsconfig.lib.json", - "./ts/spec": "./dist/typescript/tsconfig.spec.json" - }, - "packageMain": "dist/index.js", - "isInPackageManagerWorkspaces": true - } - }, - "$schema": "../../../node_modules/nx/schemas/project-schema.json", - "sourceRoot": "config/src", - "implicitDependencies": [] - } - } - }, - "externalNodes": {}, - "dependencies": { - "ssh-manager": [], - "cli": [ - { - "source": "cli", - "target": "@sshield/config", - "type": "static" - } - ], - "@sshield/config": [] - }, - "version": "6.0", - "errors": [ - { - "stack": " - pnpm-lock.yaml: Error: Could not find \".modules.yaml\" at \"/home/devsupreme/sshield-v2/node_modules/.modules.yaml\"\n at loadPnpmHoistedDepsDefinition (/home/devsupreme/sshield-v2/node_modules/.pnpm/nx@21.2.2/node_modules/nx/src/plugins/js/lock-file/utils/pnpm-normalizer.js:40:15)\n at getNodes (/home/devsupreme/sshield-v2/node_modules/.pnpm/nx@21.2.2/node_modules/nx/src/plugins/js/lock-file/pnpm-parser.js:214:77)\n at getPnpmLockfileNodes (/home/devsupreme/sshield-v2/node_modules/.pnpm/nx@21.2.2/node_modules/nx/src/plugins/js/lock-file/pnpm-parser.js:33:12)\n at getLockFileNodes (/home/devsupreme/sshield-v2/node_modules/.pnpm/nx@21.2.2/node_modules/nx/src/plugins/js/lock-file/lock-file.js:53:59)\n at exports.createNodes (/home/devsupreme/sshield-v2/node_modules/.pnpm/nx@21.2.2/node_modules/nx/src/plugins/js/index.js:54:64)\n at /home/devsupreme/sshield-v2/node_modules/.pnpm/nx@21.2.2/node_modules/nx/src/project-graph/plugins/utils.js:10:33\n at Array.map ()\n at createNodesFromFiles (/home/devsupreme/sshield-v2/node_modules/.pnpm/nx@21.2.2/node_modules/nx/src/project-graph/plugins/utils.js:8:35)\n at exports.createNodesV2 (/home/devsupreme/sshield-v2/node_modules/.pnpm/nx@21.2.2/node_modules/nx/src/plugins/js/index.js:23:51)\n at LoadedNxPlugin.createNodes (/home/devsupreme/sshield-v2/node_modules/.pnpm/nx@21.2.2/node_modules/nx/src/project-graph/plugins/loaded-nx-plugin.js:22:65)", - "message": "An error occurred while processing files for the nx/js/dependencies-and-lockfile plugin\n.\n - pnpm-lock.yaml: Could not find \".modules.yaml\" at \"/home/devsupreme/sshield-v2/node_modules/.modules.yaml\"", - "errors": [ - [ - "pnpm-lock.yaml", - { - "stack": "Error: Could not find \".modules.yaml\" at \"/home/devsupreme/sshield-v2/node_modules/.modules.yaml\"\n at loadPnpmHoistedDepsDefinition (/home/devsupreme/sshield-v2/node_modules/.pnpm/nx@21.2.2/node_modules/nx/src/plugins/js/lock-file/utils/pnpm-normalizer.js:40:15)\n at getNodes (/home/devsupreme/sshield-v2/node_modules/.pnpm/nx@21.2.2/node_modules/nx/src/plugins/js/lock-file/pnpm-parser.js:214:77)\n at getPnpmLockfileNodes (/home/devsupreme/sshield-v2/node_modules/.pnpm/nx@21.2.2/node_modules/nx/src/plugins/js/lock-file/pnpm-parser.js:33:12)\n at getLockFileNodes (/home/devsupreme/sshield-v2/node_modules/.pnpm/nx@21.2.2/node_modules/nx/src/plugins/js/lock-file/lock-file.js:53:59)\n at exports.createNodes (/home/devsupreme/sshield-v2/node_modules/.pnpm/nx@21.2.2/node_modules/nx/src/plugins/js/index.js:54:64)\n at /home/devsupreme/sshield-v2/node_modules/.pnpm/nx@21.2.2/node_modules/nx/src/project-graph/plugins/utils.js:10:33\n at Array.map ()\n at createNodesFromFiles (/home/devsupreme/sshield-v2/node_modules/.pnpm/nx@21.2.2/node_modules/nx/src/project-graph/plugins/utils.js:8:35)\n at exports.createNodesV2 (/home/devsupreme/sshield-v2/node_modules/.pnpm/nx@21.2.2/node_modules/nx/src/plugins/js/index.js:23:51)\n at LoadedNxPlugin.createNodes (/home/devsupreme/sshield-v2/node_modules/.pnpm/nx@21.2.2/node_modules/nx/src/project-graph/plugins/loaded-nx-plugin.js:22:65)", - "message": "Could not find \".modules.yaml\" at \"/home/devsupreme/sshield-v2/node_modules/.modules.yaml\"" - } - ] - ], - "partialResults": [], - "name": "AggregateCreateNodesError" - } - ], - "computedAt": 1753672930582 -} \ No newline at end of file diff --git a/.nx/workspace-data/rollup-14273536953574808233.hash b/.nx/workspace-data/rollup-14273536953574808233.hash deleted file mode 100644 index 9e26dfe..0000000 --- a/.nx/workspace-data/rollup-14273536953574808233.hash +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/.nx/workspace-data/source-maps.json b/.nx/workspace-data/source-maps.json deleted file mode 100644 index ca9bfc6..0000000 --- a/.nx/workspace-data/source-maps.json +++ /dev/null @@ -1,744 +0,0 @@ -{ - "config": { - "root": [ - "config/project.json", - "nx/core/project-json" - ], - "projectType": [ - "config/project.json", - "nx/core/project-json" - ], - "targets": [ - "config/tsconfig.json", - "@nx/js/typescript" - ], - "targets.typecheck": [ - "config/tsconfig.json", - "@nx/js/typescript" - ], - "targets.typecheck.dependsOn": [ - "config/tsconfig.json", - "@nx/js/typescript" - ], - "targets.typecheck.options": [ - "config/tsconfig.json", - "@nx/js/typescript" - ], - "targets.typecheck.cache": [ - "nx.json", - "nx/target-defaults" - ], - "targets.typecheck.inputs": [ - "config/tsconfig.json", - "@nx/js/typescript" - ], - "targets.typecheck.outputs": [ - "config/tsconfig.json", - "@nx/js/typescript" - ], - "targets.typecheck.syncGenerators": [ - "config/tsconfig.json", - "@nx/js/typescript" - ], - "targets.typecheck.metadata": [ - "config/tsconfig.json", - "@nx/js/typescript" - ], - "targets.typecheck.executor": [ - "config/tsconfig.json", - "@nx/js/typescript" - ], - "targets.typecheck.options.cwd": [ - "config/tsconfig.json", - "@nx/js/typescript" - ], - "targets.typecheck.options.command": [ - "config/tsconfig.json", - "@nx/js/typescript" - ], - "targets.typecheck.metadata.technologies": [ - "config/tsconfig.json", - "@nx/js/typescript" - ], - "targets.typecheck.metadata.technologies.0": [ - "config/tsconfig.json", - "@nx/js/typescript" - ], - "targets.typecheck.metadata.description": [ - "config/tsconfig.json", - "@nx/js/typescript" - ], - "targets.typecheck.metadata.help": [ - "config/tsconfig.json", - "@nx/js/typescript" - ], - "targets.typecheck.metadata.help.command": [ - "config/tsconfig.json", - "@nx/js/typescript" - ], - "targets.typecheck.metadata.help.example": [ - "config/tsconfig.json", - "@nx/js/typescript" - ], - "targets.watch-deps": [ - "config/tsconfig.lib.json", - "@nx/js/typescript" - ], - "targets.watch-deps.continuous": [ - "config/tsconfig.lib.json", - "@nx/js/typescript" - ], - "targets.watch-deps.dependsOn": [ - "config/tsconfig.lib.json", - "@nx/js/typescript" - ], - "targets.watch-deps.executor": [ - "config/tsconfig.lib.json", - "@nx/js/typescript" - ], - "targets.watch-deps.options": [ - "config/tsconfig.lib.json", - "@nx/js/typescript" - ], - "targets.watch-deps.options.command": [ - "config/tsconfig.lib.json", - "@nx/js/typescript" - ], - "name": [ - "config/project.json", - "nx/core/project-json" - ], - "tags": [ - "config/package.json", - "nx/core/package-json" - ], - "tags.npm:public": [ - "config/package.json", - "nx/core/package-json" - ], - "metadata.targetGroups": [ - "config/package.json", - "nx/core/package-json" - ], - "metadata.description": [ - "config/package.json", - "nx/core/package-json" - ], - "metadata.js": [ - "config/package.json", - "nx/core/package-json" - ], - "metadata.js.packageName": [ - "config/package.json", - "nx/core/package-json" - ], - "metadata.js.packageExports": [ - "config/package.json", - "nx/core/package-json" - ], - "metadata.js.packageMain": [ - "config/package.json", - "nx/core/package-json" - ], - "metadata.js.isInPackageManagerWorkspaces": [ - "config/package.json", - "nx/core/package-json" - ], - "targets.nx-release-publish": [ - "config/package.json", - "nx/core/package-json" - ], - "targets.nx-release-publish.executor": [ - "config/package.json", - "nx/core/package-json" - ], - "targets.nx-release-publish.dependsOn": [ - "config/package.json", - "nx/core/package-json" - ], - "targets.nx-release-publish.options": [ - "config/package.json", - "nx/core/package-json" - ], - "$schema": [ - "config/project.json", - "nx/core/project-json" - ], - "sourceRoot": [ - "config/project.json", - "nx/core/project-json" - ], - "targets.build": [ - "config/project.json", - "nx/core/project-json" - ], - "targets.build.executor": [ - "config/project.json", - "nx/core/project-json" - ], - "targets.build.outputs": [ - "config/project.json", - "nx/core/project-json" - ], - "targets.build.cache": [ - "config/project.json", - "nx/core/project-json" - ], - "targets.build.options": [ - "config/project.json", - "nx/core/project-json" - ], - "targets.build.options.outputPath": [ - "config/project.json", - "nx/core/project-json" - ], - "targets.build.options.main": [ - "config/project.json", - "nx/core/project-json" - ], - "targets.build.options.tsConfig": [ - "config/project.json", - "nx/core/project-json" - ], - "targets.build.options.assets": [ - "config/project.json", - "nx/core/project-json" - ], - "targets.build.options.clean": [ - "config/project.json", - "nx/core/project-json" - ], - "targets.typecheck.parallelism": [ - "nx.json", - "nx/target-defaults" - ], - "targets.build.dependsOn": [ - "nx.json", - "nx/target-defaults" - ], - "targets.build.inputs": [ - "nx.json", - "nx/target-defaults" - ], - "targets.build.parallelism": [ - "nx.json", - "nx/target-defaults" - ] - }, - "packages/cli": { - "root": [ - "packages/cli/package.json", - "nx/core/package-json" - ], - "projectType": [ - "packages/cli/tsconfig.spec.json", - "@nx/js/typescript" - ], - "targets": [ - "packages/cli/tsconfig.json", - "@nx/js/typescript" - ], - "targets.typecheck": [ - "packages/cli/tsconfig.json", - "@nx/js/typescript" - ], - "targets.typecheck.dependsOn": [ - "packages/cli/tsconfig.json", - "@nx/js/typescript" - ], - "targets.typecheck.options": [ - "packages/cli/tsconfig.json", - "@nx/js/typescript" - ], - "targets.typecheck.cache": [ - "nx.json", - "nx/target-defaults" - ], - "targets.typecheck.inputs": [ - "packages/cli/tsconfig.json", - "@nx/js/typescript" - ], - "targets.typecheck.outputs": [ - "packages/cli/tsconfig.json", - "@nx/js/typescript" - ], - "targets.typecheck.syncGenerators": [ - "packages/cli/tsconfig.json", - "@nx/js/typescript" - ], - "targets.typecheck.metadata": [ - "packages/cli/tsconfig.json", - "@nx/js/typescript" - ], - "targets.typecheck.executor": [ - "packages/cli/tsconfig.json", - "@nx/js/typescript" - ], - "targets.typecheck.options.cwd": [ - "packages/cli/tsconfig.json", - "@nx/js/typescript" - ], - "targets.typecheck.options.command": [ - "packages/cli/tsconfig.json", - "@nx/js/typescript" - ], - "targets.typecheck.metadata.technologies": [ - "packages/cli/tsconfig.json", - "@nx/js/typescript" - ], - "targets.typecheck.metadata.technologies.0": [ - "packages/cli/tsconfig.json", - "@nx/js/typescript" - ], - "targets.typecheck.metadata.description": [ - "packages/cli/tsconfig.json", - "@nx/js/typescript" - ], - "targets.typecheck.metadata.help": [ - "packages/cli/tsconfig.json", - "@nx/js/typescript" - ], - "targets.typecheck.metadata.help.command": [ - "packages/cli/tsconfig.json", - "@nx/js/typescript" - ], - "targets.typecheck.metadata.help.example": [ - "packages/cli/tsconfig.json", - "@nx/js/typescript" - ], - "name": [ - "packages/cli/package.json", - "nx/core/package-json" - ], - "tags": [ - "packages/cli/package.json", - "nx/core/package-json" - ], - "tags.npm:public": [ - "packages/cli/package.json", - "nx/core/package-json" - ], - "metadata.targetGroups": [ - "packages/cli/package.json", - "nx/core/package-json" - ], - "metadata.targetGroups.NPM Scripts": [ - "packages/cli/package.json", - "nx/core/package-json" - ], - "metadata.targetGroups.NPM Scripts.0": [ - "packages/cli/package.json", - "nx/core/package-json" - ], - "metadata.targetGroups.NPM Scripts.1": [ - "packages/cli/package.json", - "nx/core/package-json" - ], - "metadata.description": [ - "packages/cli/package.json", - "nx/core/package-json" - ], - "metadata.js": [ - "packages/cli/package.json", - "nx/core/package-json" - ], - "metadata.js.packageName": [ - "packages/cli/package.json", - "nx/core/package-json" - ], - "metadata.js.packageMain": [ - "packages/cli/package.json", - "nx/core/package-json" - ], - "metadata.js.isInPackageManagerWorkspaces": [ - "packages/cli/package.json", - "nx/core/package-json" - ], - "targets.test": [ - "packages/cli/package.json", - "nx/core/package-json" - ], - "targets.test.executor": [ - "packages/cli/package.json", - "nx/core/package-json" - ], - "targets.test.options": [ - "packages/cli/package.json", - "nx/core/package-json" - ], - "targets.test.metadata": [ - "packages/cli/package.json", - "nx/core/package-json" - ], - "targets.test.options.script": [ - "packages/cli/package.json", - "nx/core/package-json" - ], - "targets.test.metadata.scriptContent": [ - "packages/cli/package.json", - "nx/core/package-json" - ], - "targets.test.metadata.runCommand": [ - "packages/cli/package.json", - "nx/core/package-json" - ], - "targets.build": [ - "packages/cli/package.json", - "nx/core/package-json" - ], - "targets.build.executor": [ - "packages/cli/package.json", - "nx/core/package-json" - ], - "targets.build.options": [ - "packages/cli/package.json", - "nx/core/package-json" - ], - "targets.build.metadata": [ - "packages/cli/package.json", - "nx/core/package-json" - ], - "targets.build.options.script": [ - "packages/cli/package.json", - "nx/core/package-json" - ], - "targets.build.metadata.scriptContent": [ - "packages/cli/package.json", - "nx/core/package-json" - ], - "targets.build.metadata.runCommand": [ - "packages/cli/package.json", - "nx/core/package-json" - ], - "targets.nx-release-publish": [ - "packages/cli/package.json", - "nx/core/package-json" - ], - "targets.nx-release-publish.executor": [ - "packages/cli/package.json", - "nx/core/package-json" - ], - "targets.nx-release-publish.dependsOn": [ - "packages/cli/package.json", - "nx/core/package-json" - ], - "targets.nx-release-publish.options": [ - "packages/cli/package.json", - "nx/core/package-json" - ], - "targets.typecheck.parallelism": [ - "nx.json", - "nx/target-defaults" - ], - "targets.build.dependsOn": [ - "nx.json", - "nx/target-defaults" - ], - "targets.build.cache": [ - "nx.json", - "nx/target-defaults" - ], - "targets.build.parallelism": [ - "nx.json", - "nx/target-defaults" - ] - }, - "packages/core": { - "root": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "name": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "tags": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "tags.npm:public": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "tags.npm:ssh": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "tags.npm:security": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "tags.npm:key-management": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "tags.npm:cli": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "tags.npm:terminal": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "metadata.targetGroups": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "metadata.targetGroups.NPM Scripts": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "metadata.targetGroups.NPM Scripts.0": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "metadata.targetGroups.NPM Scripts.1": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "metadata.targetGroups.NPM Scripts.2": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "metadata.targetGroups.NPM Scripts.3": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "metadata.targetGroups.NPM Scripts.4": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "metadata.targetGroups.NPM Scripts.5": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "metadata.description": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "metadata.js": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "metadata.js.packageName": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "metadata.js.packageMain": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "metadata.js.isInPackageManagerWorkspaces": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "targets": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "targets.build": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "targets.build.executor": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "targets.build.options": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "targets.build.metadata": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "targets.build.options.script": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "targets.build.metadata.scriptContent": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "targets.build.metadata.runCommand": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "targets.start": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "targets.start.executor": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "targets.start.options": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "targets.start.metadata": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "targets.start.options.script": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "targets.start.metadata.scriptContent": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "targets.start.metadata.runCommand": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "targets.dev": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "targets.dev.executor": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "targets.dev.options": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "targets.dev.metadata": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "targets.dev.options.script": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "targets.dev.metadata.scriptContent": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "targets.dev.metadata.runCommand": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "targets.lint": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "targets.lint.executor": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "targets.lint.options": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "targets.lint.metadata": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "targets.lint.options.script": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "targets.lint.metadata.scriptContent": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "targets.lint.metadata.runCommand": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "targets.test": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "targets.test.executor": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "targets.test.options": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "targets.test.metadata": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "targets.test.options.script": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "targets.test.metadata.scriptContent": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "targets.test.metadata.runCommand": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "targets.prepare": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "targets.prepare.executor": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "targets.prepare.options": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "targets.prepare.metadata": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "targets.prepare.options.script": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "targets.prepare.metadata.scriptContent": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "targets.prepare.metadata.runCommand": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "targets.nx-release-publish": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "targets.nx-release-publish.executor": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "targets.nx-release-publish.dependsOn": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "targets.nx-release-publish.options": [ - "packages/core/package.json", - "nx/core/package-json" - ], - "targets.build.dependsOn": [ - "nx.json", - "nx/target-defaults" - ], - "targets.build.cache": [ - "nx.json", - "nx/target-defaults" - ], - "targets.build.parallelism": [ - "nx.json", - "nx/target-defaults" - ], - "targets.lint.cache": [ - "nx.json", - "nx/target-defaults" - ], - "targets.lint.parallelism": [ - "nx.json", - "nx/target-defaults" - ] - } -} \ No newline at end of file diff --git a/.nx/workspace-data/tsc-2568428459166798129.hash b/.nx/workspace-data/tsc-2568428459166798129.hash deleted file mode 100644 index f12e545..0000000 --- a/.nx/workspace-data/tsc-2568428459166798129.hash +++ /dev/null @@ -1 +0,0 @@ -{"14215911474407449058_config/tsconfig.json":{"targets":{"typecheck":{"dependsOn":["build","^typecheck"],"command":"tsc --build --emitDeclarationOnly","options":{"cwd":"config"},"cache":true,"inputs":["production","!{workspaceRoot}/node_modules","^production",{"externalDependencies":["typescript"]}],"outputs":["{projectRoot}/**/*.js","{projectRoot}/**/*.cjs","{projectRoot}/**/*.mjs","{projectRoot}/**/*.jsx","{projectRoot}/**/*.js.map","{projectRoot}/**/*.jsx.map","{projectRoot}/**/*.d.ts","{projectRoot}/**/*.d.cts","{projectRoot}/**/*.d.mts","{projectRoot}/**/*.d.ts.map","{projectRoot}/**/*.d.cts.map","{projectRoot}/**/*.d.mts.map","{projectRoot}/tsconfig.tsbuildinfo"],"syncGenerators":["@nx/js:typescript-sync"],"metadata":{"technologies":["typescript"],"description":"Runs type-checking for the project.","help":{"command":"pnpm exec tsc --build --help","example":{"args":["--force"]}}}}}},"9081188322089978036_config/tsconfig.lib.json":{"targets":{"build":{"dependsOn":["^build"],"command":"tsc --build tsconfig.lib.json","options":{"cwd":"config"},"cache":true,"inputs":["{projectRoot}/package.json","{projectRoot}/tsconfig.json","{workspaceRoot}/tsconfig.json","{projectRoot}/tsconfig.lib.json","{projectRoot}/src/**/*.ts","{projectRoot}/src/**/*.json","{projectRoot}/src/static/testing/mocha/.mocharc.ts","!{workspaceRoot}/node_modules","^production",{"externalDependencies":["typescript"]}],"outputs":["{projectRoot}/dist","{projectRoot}/*.tsbuildinfo"],"syncGenerators":["@nx/js:typescript-sync"],"metadata":{"technologies":["typescript"],"description":"Builds the project with `tsc`.","help":{"command":"pnpm exec tsc --build --help","example":{"args":["--force"]}}}},"build-deps":{"dependsOn":["^build"]},"watch-deps":{"continuous":true,"dependsOn":["build-deps"],"command":"pnpm exec nx watch --projects @sshield/config --includeDependentProjects -- pnpm exec nx build-deps @sshield/config"}}},"14399619449410714007_packages/cli/tsconfig.json":{"targets":{"typecheck":{"dependsOn":["^typecheck"],"command":"tsc --build --emitDeclarationOnly","options":{"cwd":"packages/cli"},"cache":true,"inputs":["production","^production",{"externalDependencies":["typescript"]}],"outputs":["{projectRoot}/**/*.js","{projectRoot}/**/*.cjs","{projectRoot}/**/*.mjs","{projectRoot}/**/*.jsx","{projectRoot}/**/*.js.map","{projectRoot}/**/*.jsx.map","{projectRoot}/**/*.d.ts","{projectRoot}/**/*.d.cts","{projectRoot}/**/*.d.mts","{projectRoot}/**/*.d.ts.map","{projectRoot}/**/*.d.cts.map","{projectRoot}/**/*.d.mts.map","{projectRoot}/tsconfig.tsbuildinfo"],"syncGenerators":["@nx/js:typescript-sync"],"metadata":{"technologies":["typescript"],"description":"Runs type-checking for the project.","help":{"command":"pnpm exec tsc --build --help","example":{"args":["--force"]}}}}}},"13016764586386024838_packages/cli/tsconfig.spec.json":{"targets":{}}} \ No newline at end of file diff --git a/.nx/workspace-data/tsconfig-files.hash b/.nx/workspace-data/tsconfig-files.hash deleted file mode 100644 index 8420b14..0000000 --- a/.nx/workspace-data/tsconfig-files.hash +++ /dev/null @@ -1 +0,0 @@ -{"version":1,"data":{"config/src/typescript/tsconfig.base.json":{"data":{"options":{"rootDir":"config/src/typescript"},"raw":{"nx":{}},"extendedConfigFiles":[]},"extendedFilesHash":"","hash":"958439644612610957"},"config/src/typescript/tsconfig.lib.json":{"data":{"options":{},"raw":{"nx":{}},"extendedConfigFiles":[]},"extendedFilesHash":"","hash":"6416368863835015390"},"tsconfig.json":{"data":{"options":{"rootDir":"."},"raw":{"nx":{}},"extendedConfigFiles":[]},"extendedFilesHash":"","hash":"958439644612610957"},"config/tsconfig.json":{"data":{"options":{"rootDir":"."},"raw":{"nx":{}},"extendedConfigFiles":[{"filePath":"tsconfig.json"}],"projectReferences":[{"path":"config/src/typescript/tsconfig.lib.json","originalPath":"./src/typescript/tsconfig.lib.json"}]},"extendedFilesHash":"958439644612610957|","hash":"1446921181146405671"},"config/src/typescript/tsconfig.plugin.json":{"data":{"options":{"rootDir":"config/src/typescript/src","outDir":"config/src/typescript/dist"},"raw":{"nx":{}},"extendedConfigFiles":[{"filePath":"config/tsconfig.json"}]},"extendedFilesHash":"1446921181146405671|958439644612610957|","hash":"6003172674450689103"},"config/src/typescript/tsconfig.spec.json":{"data":{"options":{"noEmit":true,"rootDir":"."},"raw":{"nx":{}},"extendedConfigFiles":[{"filePath":"config/tsconfig.json"}]},"extendedFilesHash":"1446921181146405671|958439644612610957|","hash":"7646806037828520905"},"config/tsconfig.lib.json":{"data":{"options":{"rootDir":"config/src","outDir":"config/dist"},"raw":{"nx":{}},"extendedConfigFiles":[{"filePath":"config/tsconfig.json"}]},"extendedFilesHash":"1446921181146405671|958439644612610957|","hash":"13667883953235139808"},"packages/cli/tsconfig.json":{"data":{"options":{},"raw":{"nx":{}},"extendedConfigFiles":[{"filePath":"config/src/typescript/tsconfig.lib.json"}]},"extendedFilesHash":"6416368863835015390|","hash":"15074830859286175437"},"config/dist/typescript/tsconfig.spec.json":{"data":{"options":{"noEmit":true,"rootDir":"."},"raw":{"nx":{}},"extendedConfigFiles":[{"filePath":"config/tsconfig.json"}]},"extendedFilesHash":"1446921181146405671|958439644612610957|","hash":"17470495548887133607"},"packages/cli/tsconfig.spec.json":{"data":{"options":{"noEmit":true,"rootDir":"."},"raw":{"nx":{}},"extendedConfigFiles":[{"filePath":"config/dist/typescript/tsconfig.spec.json"}]},"extendedFilesHash":"17470495548887133607|1446921181146405671|958439644612610957|","hash":"4659607405352235400"}}} \ No newline at end of file diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..408b021 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,13 @@ +{ + "$schema": "https://json.schemastore.org/prettierrc", + "semi": true, + "trailingComma": "all", + "singleQuote": false, + "printWidth": 80, + "tabWidth": 2, + "useTabs": true, + "arrowParens": "always", + "endOfLine": "lf", + "bracketSpacing": true, + "quoteProps": "as-needed" +} diff --git a/.tool-versions b/.tool-versions new file mode 100644 index 0000000..668b21d --- /dev/null +++ b/.tool-versions @@ -0,0 +1 @@ +nodejs 22.21.1 diff --git a/ROADMAP.md b/ROADMAP.md new file mode 100644 index 0000000..15dfeb3 --- /dev/null +++ b/ROADMAP.md @@ -0,0 +1,270 @@ +# SSHield - July 2025 Roadmap + +## Release v1.2 + +**Goal**: Build a solid, working SSH management tool in July 2025 that provides immediate value without forcing users into specific tools. Plugins enhance the experience but core functionality works standalone. + +## 📊 Critical Feature Review + +### ✅ **CORE FEATURES** +*Must work without external dependencies* + +| Priority | Issue | Feature | Dependencies | Value | +|----------|-------|---------|--------------|-------| +| P0 | #41 | Basic Monorepo Structure | None | 🔥🔥🔥 | +| P0 | #29 | Build & Packaging | #41 | 🔥🔥🔥 | +| P0 | #43 | Simple Config Management | #41 | 🔥🔥🔥 | +| P0 | #19 | Basic Security Hardening | #43 | 🔥🔥🔥 | +| P0 | #20 | SSH Key Management | #43, #19 | 🔥🔥🔥 | +| P0 | #12 | Server Bootstrap | #20, #43 | 🔥🔥 | +| P1 | #5 | File Transfer & Sync | #20 | 🔥🔥 | +| P1 | #9 | Basic Log Monitoring | #20 | 🔥🔥 | + +### 🔌 **PLUGIN FEATURES** +*Optional but highly valuable* + +| Plugin | Issue | Feature | Dependencies | Value | +|--------|-------|---------|--------------|-------| +| tmux | #35 | tmux Integration Core | Core complete | 🔥🔥🔥 | +| zsh | #46 | ZSH Plugin Core | Core complete | 🔥🔥 | +| fzf | #47 | Interactive Selection | zsh plugin | 🔥🔥 | +| monitoring | #6 | Intelligent Monitoring | tmux plugin | 🔥 | + +### 📅 **NEXT RELEASE** (v1.3 - Future) +*Moved to maintain 2-week focus* + +- Advanced UI (Ink React migration) +- Plugin marketplace +- Advanced monitoring dashboards +- Team collaboration features +- 2FA/MFA +- Advanced security features +- Container orchestration +- Advanced tmux features + +### ❌ **REMOVED** (Over-engineering) +*Eliminated to focus on core value* + +- Plugin marketplace (too complex for v1) +- Advanced monitoring visualizations +- Custom component libraries +- Advanced configuration wizards +- Community features +- Documentation systems +- Testing frameworks (basic tests only) + +## 🗂️ Plugin Architecture + +### **Core Package** (`packages/core/`) +*Zero external dependencies - works standalone* + +``` +core/ +├── ssh/ # SSH connection management +├── keys/ # Key generation, rotation, management +├── servers/ # Server configuration and management +├── security/ # Security hardening and policies +├── config/ # Configuration management +├── files/ # File transfer and sync +└── monitoring/ # Basic health checks and logs +``` + +**Core Guarantees:** +- Works without tmux, zsh, fzf, or any external tools +- Basic SSH management and security +- File operations and server bootstrap +- Simple configuration management + +### **tmux Plugin** (`plugins/tmux/`) +*Enhances core with tmux integration* + +``` +tmux/ +├── sessions/ # Session management and persistence +├── layouts/ # Window and pane layouts +├── monitoring/ # Monitoring panes and windows +└── integration/ # tmux-resurrect, tmux-continuum hooks +``` + +**Dependencies:** Core + tmux installed +**Provides:** Session management, monitoring windows, layouts + +### **ZSH Plugin** (`plugins/zsh/`) +*Enhances core with shell integration* + +``` +zsh/ +├── completion/ # Tab completion +├── aliases/ # Shell functions and aliases +├── prompt/ # Prompt integration +└── integration/ # Framework compatibility +``` + +**Dependencies:** Core + zsh installed +**Provides:** Shell integration, tab completion, aliases + +### **Selection Plugin** (`plugins/selection/`) +*Enhances core with interactive selection* + +``` +selection/ +├── fzf/ # fzf integration +├── menus/ # Interactive menus +└── search/ # Search and filtering +``` + +**Dependencies:** Core + fzf installed (optional fallback to basic menus) +**Provides:** Interactive server/project selection + +## 📋 Sequential Implementation Plan + +### **Week 1: Core Foundation** (Days 1-7) + +#### **Day 1-2: Architecture Foundation** +``` +Day 1: #41 - Basic Monorepo Structure +├── packages/core/ +├── plugins/tmux/ +├── plugins/zsh/ +└── plugins/selection/ + +Day 2: #29 - Build & Packaging System +├── TypeScript compilation +├── Plugin loading system +└── Basic distribution +``` + +#### **Day 3-4: Core Configuration & Security** +``` +Day 3: #43 - Simple Config Management +├── JSON configuration system +├── Project management +└── Server management + +Day 4: #19 - Basic Security Hardening +├── SSH hardening automation +├── Key-only authentication +└── Firewall basics +``` + +#### **Day 5-6: Key & Server Management** +``` +Day 5: #20 - SSH Key Management +├── Key generation and rotation +├── Key deployment +└── Security policies + +Day 6: #12 - Server Bootstrap +├── Basic tool installation +├── Security application +└── Configuration deployment +``` + +#### **Day 7: File Operations & Basic Monitoring** +``` +Day 7: #5 + #9 - File Transfer & Basic Monitoring +├── Resumable file transfers +├── Basic log monitoring +└── Health checks +``` + +### **Week 2: Plugin Development** (Days 8-14) + +#### **Day 8-10: tmux Plugin** +``` +Day 8-9: #35 - tmux Integration Core +├── Session management +├── Basic layouts +└── tmux-resurrect integration + +Day 10: #6 - Intelligent Monitoring +├── Auto-discovery of services +├── Monitoring pane setup +└── Basic dashboards +``` + +#### **Day 11-12: ZSH Plugin** +``` +Day 11: #46 - ZSH Plugin Core +├── Shell functions +├── Basic completion +└── Aliases + +Day 12: #47 - FZF Integration +├── Interactive selection +├── Server/project browsing +└── Command history +``` + +#### **Day 13-14: Integration & Polish** +``` +Day 13: Plugin Integration Testing +├── Core + plugin compatibility +├── Dependency handling +└── Error handling + +Day 14: Documentation & Release +├── Basic documentation +├── Installation scripts +└── Release preparation +``` + +## 🎯 Success Criteria (2 Weeks) + +### **Core Must-Haves** +- ✅ Works without any external tools +- ✅ SSH key generation, rotation, and management +- ✅ Server bootstrap with security hardening +- ✅ File transfer and basic monitoring +- ✅ Simple but powerful configuration + +### **Plugin Must-Haves** +- ✅ tmux plugin with session management +- ✅ ZSH plugin with shell integration +- ✅ fzf plugin for interactive selection +- ✅ Basic monitoring integration + +### **Quality Gates** +- ✅ No external dependencies for core functionality +- ✅ Plugin system works and is extensible +- ✅ Can manage 10+ servers efficiently +- ✅ Security hardening works on fresh Ubuntu/CentOS +- ✅ Basic documentation exists + +## 🚀 Why This Works + +### **Immediate Value** +- Day 7: Users have a working SSH management tool +- Day 14: Users have enhanced experience with plugins +- No waiting months for basic functionality + +### **Progressive Enhancement** +- Core works for everyone +- Plugins enhance for specific workflows +- Users choose their level of integration + +### **Sustainable Development** +- Solid foundation for future features +- Plugin architecture allows community contributions +- Not over-engineered or overly complex + +### **Real-World Focus** +- Solves actual daily problems immediately +- No theoretical features that may never be used +- Focuses on the 80% use case first + +## 📈 Post-2-Week Roadmap + +### **Version 2.0 (Month 2)** +- Beautiful UI with Ink React +- Advanced monitoring dashboards +- Plugin marketplace +- Team collaboration + +### **Version 3.0 (Month 3)** +- Advanced security features +- Container orchestration +- Advanced tmux features +- Community contributions + +This roadmap delivers a **working, valuable tool in 2 weeks** that people will actually use, rather than an over-engineered solution that takes months to deliver basic value. \ No newline at end of file diff --git a/commitlint.config.mjs b/commitlint.config.mjs new file mode 100644 index 0000000..ce4ddc1 --- /dev/null +++ b/commitlint.config.mjs @@ -0,0 +1,85 @@ +/** @format */ + +import { readdirSync, existsSync } from "node:fs" +import { resolve, dirname } from "node:path" +import { fileURLToPath } from "node:url" +import _ from "lodash" + +const __filename = fileURLToPath(import.meta.url) +const __dirname = dirname(__filename) + +/** + * Commitlint configuration for SSHield monorepo + * Dynamically generates scopes from directory structure to match cz-git configuration + */ + +// Dynamically read scopes from directories +const readDirSafe = (path) => { + try { + return existsSync(path) ? readdirSync(path) : [] + } catch { + return [] + } +} + +const scopes = _.union( + readDirSafe(resolve(__dirname, "packages")), + readDirSafe(resolve(__dirname, "plugins")), + readDirSafe(resolve(__dirname, "tests")), + readDirSafe(resolve(__dirname, "config")), + readDirSafe(resolve(__dirname, "docs")), + readDirSafe(resolve(__dirname, "tools")) +) + +export default { + extends: ["@commitlint/config-conventional"], + + rules: { + // Type must be one of these - matches cz-git types + "type-enum": [ + 2, + "always", + [ + "feat", + "fix", + "docs", + "style", + "refactor", + "perf", + "test", + "build", + "ci", + "chore", + "maintenance", + "init", + "revert", + "release", + ], + ], + + // Scope must be one of the dynamically generated scopes + "scope-enum": [2, "always", [...scopes]], + + // Scope rules + "scope-empty": [1, "never"], + "scope-case": [2, "always", "lower-case"], + + // Subject rules + "subject-empty": [2, "never"], + "subject-full-stop": [2, "never", "."], + "subject-case": [2, "always", "lower-case"], + + // Header rules + "header-max-length": [2, "always", 100], + + // Body rules + "body-leading-blank": [2, "always"], + + // Footer rules + "footer-leading-blank": [2, "always"], + + // Type rules + "type-case": [2, "always", "lower-case"], + "type-empty": [2, "never"], + }, +} diff --git a/config/.eslintignore b/config/.eslintignore new file mode 100644 index 0000000..cf930d2 --- /dev/null +++ b/config/.eslintignore @@ -0,0 +1,10 @@ +# Dependencies +node_modules/ + +# Build output +dist/ +coverage/ + +# Config files that shouldn't be linted +*.config.js +*.config.mjs diff --git a/config/.prettierignore b/config/.prettierignore new file mode 100644 index 0000000..31743ed --- /dev/null +++ b/config/.prettierignore @@ -0,0 +1,15 @@ +# Dependencies +node_modules/ + +# Build output +dist/ +coverage/ + +# Package manager files +pnpm-lock.yaml +package-lock.json +yarn.lock + +# Generated files +*.log +.DS_Store diff --git a/config/.prettierrc.json b/config/.prettierrc.json new file mode 100644 index 0000000..94f293e --- /dev/null +++ b/config/.prettierrc.json @@ -0,0 +1,13 @@ +{ + "$schema": "https://json.schemastore.org/prettierrc", + "semi": true, + "trailingComma": "all", + "singleQuote": false, + "printWidth": 80, + "tabWidth": 2, + "useTabs": false, + "arrowParens": "always", + "endOfLine": "lf", + "bracketSpacing": true, + "quoteProps": "as-needed" +} diff --git a/config/eslint.config.mjs b/config/eslint.config.mjs new file mode 100644 index 0000000..0f24f7e --- /dev/null +++ b/config/eslint.config.mjs @@ -0,0 +1,19 @@ +/** @format */ + +import eslintConfig from "./dist/src/eslint/eslint.config.js"; + +export default [ + ...eslintConfig, + { + files: ["**/*.ts"], + languageOptions: { + parserOptions: { + project: "./tsconfig.json", + tsconfigRootDir: import.meta.dirname, + }, + }, + }, + { + ignores: ["dist/**", "node_modules/**", "coverage/**"], + }, +]; diff --git a/config/package.json b/config/package.json new file mode 100644 index 0000000..172be0b --- /dev/null +++ b/config/package.json @@ -0,0 +1,88 @@ +{ + "name": "@sshield/config", + "version": "1.0.0", + "description": "Shared configuration templates for SSHield monorepo", + "type": "module", + "main": "dist/src/index.js", + "scripts": { + "build": "tsc -p ./tsconfig.lib.json", + "lint": "eslint .", + "lint:fix": "eslint . --fix", + "format": "prettier --write \"**/*.{ts,tsx,js,jsx,json,md,yml,yaml}\"", + "format:check": "prettier --check \"**/*.{ts,tsx,js,jsx,json,md,yml,yaml}\"", + "typecheck": "tsc --noEmit" + }, + "devDependencies": { + "@commitlint/cli": "^19.6.1", + "@commitlint/config-conventional": "^19.6.0", + "@commitlint/types": "^19.6.0", + "@eslint/js": "^9.31.0", + "@release-it/conventional-changelog": "^10.0.1", + "@types/eslint-plugin-jsx-a11y": "^6.10.0", + "@types/mocha": "^10.0.10", + "@types/node": "^18.16.9", + "@types/react": "^18.3.0", + "@typescript-eslint/eslint-plugin": "^8.38.0", + "@typescript-eslint/parser": "^8.38.0", + "@typescript-eslint/utils": "^8.38.0", + "c8": "^10.1.2", + "eslint": "^9.31.0", + "eslint-config-prettier": "^10.0.0", + "eslint-plugin-eslint-comments": "^3.2.0", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-jsx-a11y": "^6.10.2", + "eslint-plugin-prettier": "^5.5.1", + "eslint-plugin-react": "^7.37.5", + "eslint-plugin-react-hooks": "^5.2.0", + "globals": "^16.3.0", + "knip": "^5.38.0", + "prettier": "^3.0.0", + "react-devtools-core": "^5.3.2", + "release-it": "^19.0.0", + "tslib": "^2.8.1", + "tsup": "^8.5.0", + "typedoc": "^0.28.0", + "typedoc-plugin-markdown": "^4.9.0", + "typescript": "^5.8.3", + "typescript-eslint": "^8.37.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^8.0.0", + "@typescript-eslint/parser": "^8.0.0", + "eslint": "^9.31.0", + "eslint-config-prettier": "^10.0.0", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-prettier": "^5.5.1", + "jest": "^29.0.0", + "prettier": "^3.0.0", + "typescript": "^5.0.0" + }, + "exports": { + ".": "./dist/src/index.js", + "./ts/base": "./ts/tsconfig.base.json", + "./ts/package": "./ts/package/tsconfig.json", + "./ts/package/lib": "./ts/package/tsconfig.lib.json", + "./ts/package/spec": "./ts/package/tsconfig.spec.json", + "./ts/ui": "./ts/ui/tsconfig.json", + "./ts/ui/lib": "./ts/ui/tsconfig.lib.json", + "./ts/ui/spec": "./ts/ui/tsconfig.spec.json", + "./ts/plugin": "./ts/plugin/tsconfig.json", + "./ts/plugin/lib": "./ts/plugin/tsconfig.lib.json", + "./ts/plugin/spec": "./ts/plugin/tsconfig.spec.json", + "./mocha": "./src/mocha/.mocharc.ts", + "./c8": "./src/c8/c8.config.ts", + "./tsup": "./src/tsup/tsup.config.ts", + "./pkg": "./src/pkg/pkg.config.ts", + "./eslint": "./src/eslint/eslint.config.ts", + "./prettier": "./src/prettier/prettier.config.ts", + "./release-it": "./src/release-it/release-it.config.ts", + "./commitlint": "./src/commitlint/commitlint.config.ts", + "./lefthook": "./src/lefthook/lefthook.config.ts", + "./knip": "./src/knip/knip.config.ts", + "./typedoc": "./src/typedoc/typedoc.config.ts", + "./devtools": "./src/devtools/devtools.config.ts", + "./testing": "./src/testing/ink-helpers.ts", + "./nfpm": "./src/nfpm/nfpm.config.ts", + "./aur": "./src/aur/pkgbuild.config.ts" + } +} diff --git a/config/project.json b/config/project.json new file mode 100644 index 0000000..3d99da9 --- /dev/null +++ b/config/project.json @@ -0,0 +1,31 @@ +{ + "name": "@sshield/config", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "config/src", + "projectType": "library", + "tags": [], + "targets": { + "build": { + "executor": "@nx/js:tsc", + "outputs": [ + "{options.outputPath}" + ], + "cache": true, + "options": { + "outputPath": "config/dist", + "main": "config/src/index.ts", + "tsConfig": "config/tsconfig.lib.json", + "assets": [ + "*.md" + ], + "clean": true + } + }, + "typecheck": { + "executor": "nx:run-commands", + "options": { + "command": "pnpm --filter @sshield/config exec tsc --noEmit --project tsconfig.json" + } + } + } +} \ No newline at end of file diff --git a/config/src/aur/pkgbuild.config.ts b/config/src/aur/pkgbuild.config.ts new file mode 100644 index 0000000..d83b760 --- /dev/null +++ b/config/src/aur/pkgbuild.config.ts @@ -0,0 +1,183 @@ +/** @format */ + +/** + * PKGBUILD template generator for Arch Linux AUR + * @see https://wiki.archlinux.org/title/PKGBUILD + */ + +interface PkgbuildConfig { + pkgname: string; + pkgver: string; + pkgrel: string; + pkgdesc: string; + arch: string[]; + url: string; + license: string[]; + depends?: string[]; + makedepends?: string[]; + optdepends?: string[]; + provides?: string[]; + conflicts?: string[]; + source: string[]; + sha256sums?: string[]; + maintainer: string; + contributors?: string[]; +} + +/** + * Generate PKGBUILD file for Arch Linux AUR + */ +export function generatePkgbuild(config: Partial): string { + const { + pkgname = "${PACKAGE_NAME}", + pkgver = "${VERSION}", + pkgrel = "1", + pkgdesc = "${DESCRIPTION}", + arch = ["x86_64", "aarch64"], + url = "https://github.com/shaiknoorullah/sshield", + license = ["MIT"], + depends = [], + makedepends = [], + optdepends = [], + provides = [], + conflicts = [], + source = [ + `\${pkgname}-\${pkgver}.tar.gz::https://github.com/shaiknoorullah/sshield/releases/download/v\${pkgver}/\${pkgname}-\${pkgver}.tar.gz`, + ], + sha256sums = ["SKIP"], + maintainer = "SSHield Team ", + contributors = [], + } = config; + + return `# Maintainer: ${maintainer} +${contributors.map((c) => `# Contributor: ${c}`).join("\n")}${contributors.length > 0 ? "\n" : ""} +pkgname=${pkgname} +pkgver=${pkgver} +pkgrel=${pkgrel} +pkgdesc='${pkgdesc}' +arch=(${arch.map((a) => `'${a}'`).join(" ")}) +url='${url}' +license=(${license.map((l) => `'${l}'`).join(" ")}) +${depends.length > 0 ? `depends=(${depends.map((d) => `'${d}'`).join(" ")})` : ""} +${makedepends.length > 0 ? `makedepends=(${makedepends.map((m) => `'${m}'`).join(" ")})` : ""} +${optdepends.length > 0 ? `optdepends=(${optdepends.map((o) => `'${o}'`).join("\n ")})` : ""} +${provides.length > 0 ? `provides=(${provides.map((p) => `'${p}'`).join(" ")})` : ""} +${conflicts.length > 0 ? `conflicts=(${conflicts.map((c) => `'${c}'`).join(" ")})` : ""} +source=(${source.map((s) => `'${s}'`).join("\n ")}) +sha256sums=(${sha256sums.map((s) => `'${s}'`).join("\n ")}) + +build() { + cd "\${srcdir}/\${pkgname}-\${pkgver}" + + # If building from source with Node.js + # npm install + # npm run build + + # If using pre-built binaries, skip build step + true +} + +check() { + cd "\${srcdir}/\${pkgname}-\${pkgver}" + + # Run tests if available + # npm test + + true +} + +package() { + cd "\${srcdir}/\${pkgname}-\${pkgver}" + + # Install binary + install -Dm755 "\${pkgname}" "\${pkgdir}/usr/bin/\${pkgname}" + + # Install documentation + install -Dm644 README.md "\${pkgdir}/usr/share/doc/\${pkgname}/README.md" + install -Dm644 LICENSE "\${pkgdir}/usr/share/licenses/\${pkgname}/LICENSE" + + # Install man pages if available + # install -Dm644 man/\${pkgname}.1 "\${pkgdir}/usr/share/man/man1/\${pkgname}.1" + + # Install shell completions if available + # install -Dm644 completions/bash/\${pkgname} "\${pkgdir}/usr/share/bash-completion/completions/\${pkgname}" + # install -Dm644 completions/zsh/_\${pkgname} "\${pkgdir}/usr/share/zsh/site-functions/_\${pkgname}" + # install -Dm644 completions/fish/\${pkgname}.fish "\${pkgdir}/usr/share/fish/vendor_completions.d/\${pkgname}.fish" +} +`; +} + +/** + * Generate PKGBUILD for binary distribution (pre-built binaries) + */ +export function generateBinaryPkgbuild( + config: Partial, +): string { + const { + pkgname = "${PACKAGE_NAME}", + pkgver = "${VERSION}", + pkgrel = "1", + pkgdesc = "${DESCRIPTION}", + arch = ["x86_64", "aarch64"], + url = "https://github.com/shaiknoorullah/sshield", + license = ["MIT"], + depends = [], + optdepends = [], + provides = [], + conflicts = [], + maintainer = "SSHield Team ", + contributors = [], + } = config; + + return `# Maintainer: ${maintainer} +${contributors.map((c) => `# Contributor: ${c}`).join("\n")}${contributors.length > 0 ? "\n" : ""} +pkgname=${pkgname}-bin +pkgver=${pkgver} +pkgrel=${pkgrel} +pkgdesc='${pkgdesc} (binary release)' +arch=(${arch.map((a) => `'${a}'`).join(" ")}) +url='${url}' +license=(${license.map((l) => `'${l}'`).join(" ")}) +${depends.length > 0 ? `depends=(${depends.map((d) => `'${d}'`).join(" ")})` : ""} +${optdepends.length > 0 ? `optdepends=(${optdepends.map((o) => `'${o}'`).join("\n ")})` : ""} +${provides.length > 0 ? `provides=('${pkgname}' ${provides.map((p) => `'${p}'`).join(" ")})` : `provides=('${pkgname}')`} +${conflicts.length > 0 ? `conflicts=('${pkgname}' ${conflicts.map((c) => `'${c}'`).join(" ")})` : `conflicts=('${pkgname}')`} +source_x86_64=("\${pkgname%-bin}-\${pkgver}-x86_64::https://github.com/shaiknoorullah/sshield/releases/download/v\${pkgver}/\${pkgname%-bin}-linux-x64") +source_aarch64=("\${pkgname%-bin}-\${pkgver}-aarch64::https://github.com/shaiknoorullah/sshield/releases/download/v\${pkgver}/\${pkgname%-bin}-linux-arm64") +sha256sums_x86_64=('SKIP') +sha256sums_aarch64=('SKIP') + +package() { + # Determine architecture + if [ "\${CARCH}" = "x86_64" ]; then + _binary="\${pkgname%-bin}-\${pkgver}-x86_64" + elif [ "\${CARCH}" = "aarch64" ]; then + _binary="\${pkgname%-bin}-\${pkgver}-aarch64" + fi + + # Install binary + install -Dm755 "\${srcdir}/\${_binary}" "\${pkgdir}/usr/bin/\${pkgname%-bin}" +} +`; +} + +/** + * Generate .SRCINFO file for AUR + * This is generated from PKGBUILD using: makepkg --printsrcinfo > .SRCINFO + */ +export function generateSrcinfo(_pkgbuild: string): string { + // In practice, this should be generated by makepkg + // This is just a placeholder + return `# Generated by makepkg +# Run: makepkg --printsrcinfo > .SRCINFO +`; +} + +const pkgbuildConfig = { + generatePkgbuild, + generateBinaryPkgbuild, + generateSrcinfo, +}; + +export default pkgbuildConfig; +export type { PkgbuildConfig }; diff --git a/config/src/c8/c8.config.ts b/config/src/c8/c8.config.ts new file mode 100644 index 0000000..3b94b65 --- /dev/null +++ b/config/src/c8/c8.config.ts @@ -0,0 +1,79 @@ +/** @format */ + +/** + * Base c8 configuration for SSHield packages + * c8 is the modern code coverage tool using V8's built-in coverage + */ +interface C8Config { + all?: boolean; + "check-coverage"?: boolean; + lines?: number; + functions?: number; + branches?: number; + statements?: number; + include?: string[]; + exclude?: string[]; + extension?: string[]; + reporter?: string[]; + "report-dir"?: string; + "temp-directory"?: string; + "skip-full"?: boolean; + clean?: boolean; + "100"?: boolean; + src?: string[]; + "exclude-after-remap"?: boolean; +} + +const c8Config: C8Config = { + // Include all files in coverage + all: true, + + // Enforce coverage thresholds + "check-coverage": true, + lines: 90, + functions: 90, + branches: 90, + statements: 90, + + // Files to include in coverage + include: ["src/**/*.ts", "src/**/*.tsx"], + + // Files to exclude from coverage + exclude: [ + "**/*.spec.ts", + "**/*.test.ts", + "**/*.test.tsx", + "**/*.d.ts", + "**/node_modules/**", + "**/dist/**", + "**/coverage/**", + "**/*.config.ts", + "**/*.config.js", + ], + + // File extensions to process + extension: [".ts", ".tsx"], + + // Coverage reporters + reporter: ["text", "lcov", "html", "json-summary"], + + // Output directory for coverage reports + "report-dir": "./coverage", + + // Temporary directory for coverage data + "temp-directory": "./.c8", + + // Clean coverage directory before running + clean: true, + + // Skip files with 100% coverage in reports + "skip-full": false, + + // Source directories + src: ["src"], + + // Exclude files after remapping + "exclude-after-remap": true, +}; + +export default c8Config; diff --git a/config/src/commitlint/commitlint.config.ts b/config/src/commitlint/commitlint.config.ts new file mode 100644 index 0000000..7715f79 --- /dev/null +++ b/config/src/commitlint/commitlint.config.ts @@ -0,0 +1,212 @@ +/** @format */ + +import type { UserConfig } from "@commitlint/types"; + +/** + * Base commitlint configuration for SSHield monorepo + * Enforces conventional commits with strict rules + */ +const commitlintConfig: UserConfig = { + extends: ["@commitlint/config-conventional"], + + // Strict rules for commit messages + rules: { + // Type must be one of these + "type-enum": [ + 2, + "always", + [ + "feat", // New feature + "fix", // Bug fix + "docs", // Documentation only changes + "style", // Changes that don't affect code meaning + "refactor", // Code change that neither fixes a bug nor adds a feature + "perf", // Performance improvement + "test", // Adding or updating tests + "build", // Changes to build system or dependencies + "ci", // Changes to CI configuration + "chore", // Other changes that don't modify src or test files + "maintenance", // Maintenance tasks + "init", // Initialize a new plugin or package + "revert", // Reverts a previous commit + "release", // Release commits + ], + ], + + // Scope must be one of these (optional) + "scope-enum": [ + 2, + "always", + [ + "config", + "core", + "cli", + "api", + "ui", + "docs", + "deps", + "test", + "ci", + "build", + "release", + ], + ], + + // Scope is optional but recommended + "scope-empty": [1, "never"], + + // Subject must not be empty + "subject-empty": [2, "never"], + + // Subject must not end with period + "subject-full-stop": [2, "never", "."], + + // Subject must be lowercase + "subject-case": [2, "always", "lower-case"], + + // Header must not be longer than 100 characters + "header-max-length": [2, "always", 100], + + // Body must have blank line after header + "body-leading-blank": [2, "always"], + + // Footer must have blank line before it + "footer-leading-blank": [2, "always"], + + // Type must be lowercase + "type-case": [2, "always", "lower-case"], + + // Type must not be empty + "type-empty": [2, "never"], + + // Scope must be lowercase + "scope-case": [2, "always", "lower-case"], + }, + + // Help URL for commit message format + helpUrl: + "https://github.com/conventional-changelog/commitlint/#what-is-commitlint", + + // Prompt configuration + prompt: { + messages: { + skip: ":skip", + max: "upper %d chars", + min: "%d chars at least", + emptyWarning: "can not be empty", + upperLimitWarning: "over limit", + lowerLimitWarning: "below limit", + }, + questions: { + type: { + description: "Select the type of change that you're committing:", + enum: { + feat: { + description: "A new feature", + title: "Features", + emoji: "✨", + }, + fix: { + description: "A bug fix", + title: "Bug Fixes", + emoji: "🐛", + }, + docs: { + description: "Documentation only changes", + title: "Documentation", + emoji: "📚", + }, + style: { + description: + "Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)", + title: "Styles", + emoji: "💎", + }, + refactor: { + description: + "A code change that neither fixes a bug nor adds a feature", + title: "Code Refactoring", + emoji: "📦", + }, + perf: { + description: "A code change that improves performance", + title: "Performance Improvements", + emoji: "🚀", + }, + test: { + description: "Adding missing tests or correcting existing tests", + title: "Tests", + emoji: "🚨", + }, + build: { + description: + "Changes that affect the build system or external dependencies (example scopes: gulp, broccoli, npm)", + title: "Builds", + emoji: "🛠", + }, + ci: { + description: + "Changes to our CI configuration files and scripts (example scopes: Travis, Circle, BrowserStack, SauceLabs)", + title: "Continuous Integrations", + emoji: "⚙️", + }, + chore: { + description: "Other changes that don't modify src or test files", + title: "Chores", + emoji: "♻️", + }, + maintenance: { + description: + "Maintenance tasks that do not modify src or test files", + title: "Maintenance", + emoji: "🔧", + }, + init: { + description: "Initialize a new plugin or package", + title: "Initialization", + emoji: "🎉", + }, + revert: { + description: "Reverts a previous commit", + title: "Reverts", + emoji: "🗑", + }, + }, + }, + scope: { + description: + "What is the scope of this change (e.g. component or file name)", + }, + subject: { + description: + "Write a short, imperative tense description of the change", + }, + body: { + description: "Provide a longer description of the change", + }, + isBreaking: { + description: "Are there any breaking changes?", + }, + breakingBody: { + description: + "A BREAKING CHANGE commit requires a body. Please enter a longer description of the commit itself", + }, + breaking: { + description: "Describe the breaking changes", + }, + isIssueAffected: { + description: "Does this change affect any open issues?", + }, + issuesBody: { + description: + "If issues are closed, the commit requires a body. Please enter a longer description of the commit itself", + }, + issues: { + description: 'Add issue references (e.g. "fix #123", "re #123".)', + }, + }, + }, +}; + +export default commitlintConfig; +export type { UserConfig }; diff --git a/config/src/devtools/devtools.config.ts b/config/src/devtools/devtools.config.ts new file mode 100644 index 0000000..2dc4d78 --- /dev/null +++ b/config/src/devtools/devtools.config.ts @@ -0,0 +1,72 @@ +/** @format */ + +/** + * React DevTools configuration for Ink CLI applications + * Enables debugging of Ink components with React DevTools + */ +interface DevToolsConfig { + enabled?: boolean; + host?: string; + port?: number; + useHttps?: boolean; + websocket?: boolean; +} + +const devtoolsConfig: DevToolsConfig = { + // Enable DevTools by default in development + enabled: process.env["NODE_ENV"] !== "production", + + // DevTools server host + host: "localhost", + + // DevTools server port + port: 8097, + + // Use HTTPS + useHttps: false, + + // Use WebSocket connection + websocket: true, +}; + +/** + * Initialize React DevTools for Ink + * Usage in your CLI entry point: + * + * import { initDevTools } from '@sshield/config/devtools' + * + * if (process.env.DEV) { + * await initDevTools() + * } + */ +export async function initDevTools( + config: Partial = {}, +): Promise { + const finalConfig = { ...devtoolsConfig, ...config }; + + if (!finalConfig.enabled) { + return; + } + + try { + // Dynamic import to avoid bundling in production + // @ts-ignore - react-devtools-core doesn't have types + const { default: DevTools } = await import("react-devtools-core"); + + DevTools.connectToDevTools({ + host: finalConfig.host, + port: finalConfig.port, + useHttps: finalConfig.useHttps, + websocket: finalConfig.websocket, + }); + + console.log( + `React DevTools connected on ${finalConfig.host}:${finalConfig.port}`, + ); + } catch (error) { + console.warn("Failed to initialize React DevTools:", error); + } +} + +export default devtoolsConfig; +export type { DevToolsConfig }; diff --git a/config/src/eslint/eslint.config.ts b/config/src/eslint/eslint.config.ts new file mode 100644 index 0000000..5dc3319 --- /dev/null +++ b/config/src/eslint/eslint.config.ts @@ -0,0 +1,48 @@ +/** @format */ + +import type { TSESLint } from "@typescript-eslint/utils"; + +import { default as eslint, default as js } from "@eslint/js"; +import prettierRecommended from "eslint-plugin-prettier/recommended"; +import tseslint from "typescript-eslint"; + +const eslintConfig: TSESLint.FlatConfig.ConfigArray = tseslint.config([ + { + ignores: [ + "**/node_modules/**", + "**/dist/**", + "**/build/**", + ".eslintrc.js", + ], + }, + js.configs.recommended, + eslint.configs.recommended, + tseslint.configs.recommended, + { + files: ["**/*.{ts,tsx,js}"], + languageOptions: { + ecmaVersion: "latest", + sourceType: "module", + }, + plugins: {}, + rules: { + // Reasonable defaults for CLI apps, packages, and plugins + "no-unused-vars": ["warn", { argsIgnorePattern: "^_" }], + "no-console": "off", // CLI apps often use console + "prefer-const": "warn", + eqeqeq: ["warn", "always"], + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/explicit-function-return-type": "off", + "@typescript-eslint/explicit-module-boundary-types": "off", + "@typescript-eslint/no-unused-vars": [ + "warn", + { argsIgnorePattern: "^_" }, + ], + "@typescript-eslint/member-ordering": "off", + "prettier/prettier": "warn", + }, + }, + prettierRecommended, +]); + +export default eslintConfig; diff --git a/config/src/index.ts b/config/src/index.ts new file mode 100644 index 0000000..7f9bd78 --- /dev/null +++ b/config/src/index.ts @@ -0,0 +1,36 @@ +/** @format */ + +// Testing +export * from "./mocha/.mocharc.js"; +export * from "./testing/ink-helpers.js"; + +// Linting and Formatting +export * from "./eslint/eslint.config.js"; +export * from "./prettier/prettier.config.js"; + +// Code Coverage +export * from "./c8/c8.config.js"; + +// Build and Bundle +export * from "./tsup/tsup.config.js"; +export * from "./pkg/pkg.config.js"; + +// Documentation +export * from "./typedoc/typedoc.config.js"; + +// Git and Commits +export * from "./commitlint/commitlint.config.js"; +export * from "./lefthook/lefthook.config.js"; + +// Release Management +export * from "./release-it/release-it.config.js"; + +// Code Quality +export * from "./knip/knip.config.js"; + +// Development Tools +export * from "./devtools/devtools.config.js"; + +// Package Distribution +export * from "./nfpm/nfpm.config.js"; +export * from "./aur/pkgbuild.config.js"; diff --git a/config/src/knip/knip.config.ts b/config/src/knip/knip.config.ts new file mode 100644 index 0000000..389b7cb --- /dev/null +++ b/config/src/knip/knip.config.ts @@ -0,0 +1,71 @@ +/** @format */ + +import type { KnipConfig } from "knip"; + +/** + * Base knip configuration for SSHield monorepo + * Finds unused files, dependencies, and exports + */ +const knipConfig: KnipConfig = { + // Include all workspaces + workspaces: { + ".": { + entry: ["src/index.ts", "src/cli.ts", "src/main.ts"], + project: ["src/**/*.ts", "src/**/*.tsx"], + }, + "packages/*": { + entry: ["src/index.ts", "src/index.tsx", "src/cli.ts", "src/main.ts"], + project: ["src/**/*.ts", "src/**/*.tsx"], + }, + config: { + entry: ["src/index.ts"], + project: ["src/**/*.ts"], + }, + }, + + // Ignore patterns + ignore: [ + "**/*.spec.ts", + "**/*.test.ts", + "**/*.test.tsx", + "**/*.config.ts", + "**/*.config.js", + "**/dist/**", + "**/coverage/**", + "**/.nx/**", + "**/node_modules/**", + ], + + // Ignore dependencies (these are commonly used implicitly) + ignoreDependencies: [ + "@types/*", // Type definitions + "typescript", // TypeScript compiler + "tslib", // TypeScript helpers + "@nx/*", // Nx packages + ], + + // Ignore exports (public API exports that might be unused internally) + ignoreExportsUsedInFile: true, + + // Include entry files + includeEntryExports: true, + + // Plugins + prettier: { + config: ["prettier.config.{js,mjs,cjs,ts}"], + }, + + eslint: { + config: ["eslint.config.{js,mjs,cjs,ts}"], + }, + + typescript: { + config: ["tsconfig.json", "tsconfig.*.json"], + }, + + // Include bin/executables + ignoreBinaries: [], +}; + +export default knipConfig; +export type { KnipConfig }; diff --git a/config/src/lefthook/lefthook.config.ts b/config/src/lefthook/lefthook.config.ts new file mode 100644 index 0000000..86f9ff8 --- /dev/null +++ b/config/src/lefthook/lefthook.config.ts @@ -0,0 +1,152 @@ +/** @format */ + +/** + * Base lefthook configuration for SSHield monorepo + * Git hooks management - faster alternative to Husky + */ +interface LefthookConfig { + "pre-commit"?: { + parallel?: boolean; + commands?: Record< + string, + { + glob?: string; + run?: string; + skip?: string | string[]; + tags?: string; + files?: string; + exclud?: string; + root?: string; + interactive?: boolean; + } + >; + }; + "commit-msg"?: { + parallel?: boolean; + commands?: Record< + string, + { + run?: string; + skip?: string | string[]; + } + >; + }; + "pre-push"?: { + parallel?: boolean; + commands?: Record< + string, + { + run?: string; + skip?: string | string[]; + } + >; + }; + "post-checkout"?: { + parallel?: boolean; + commands?: Record< + string, + { + run?: string; + skip?: string | string[]; + } + >; + }; + "post-merge"?: { + parallel?: boolean; + commands?: Record< + string, + { + run?: string; + skip?: string | string[]; + } + >; + }; +} + +const lefthookConfig: LefthookConfig = { + // Pre-commit hook - run before commit is created + "pre-commit": { + parallel: true, + commands: { + // Lint staged files + lint: { + glob: "*.{js,ts,tsx,jsx}", + run: "pnpm exec eslint --fix {staged_files}", + }, + + // Format staged files + format: { + glob: "*.{js,ts,tsx,jsx,json,md,yml,yaml}", + run: "pnpm exec prettier --write {staged_files}", + }, + + // Type check + typecheck: { + run: "pnpm exec tsc --noEmit", + }, + + // Run affected tests + test: { + run: "pnpm exec nx affected --target=test --parallel=3", + skip: "merge", + }, + }, + }, + + // Commit message hook - validate commit message + "commit-msg": { + parallel: false, + commands: { + commitlint: { + run: "pnpm exec commitlint --edit {1}", + }, + }, + }, + + // Pre-push hook - run before pushing to remote + "pre-push": { + parallel: false, + commands: { + // Run all affected tests + test: { + run: "pnpm exec nx affected --target=test --parallel=3", + }, + + // Build affected projects + build: { + run: "pnpm exec nx affected --target=build --parallel=3", + }, + + // Run knip to check for unused dependencies + knip: { + run: "pnpm exec knip --no-exit-code", + skip: "rebase", + }, + }, + }, + + // Post-checkout hook - run after checkout + "post-checkout": { + parallel: false, + commands: { + // Install dependencies if package.json or pnpm-lock.yaml changed + install: { + run: 'pnpm install --frozen-lockfile || echo "Skipping install - lockfile unchanged"', + }, + }, + }, + + // Post-merge hook - run after merge + "post-merge": { + parallel: false, + commands: { + // Install dependencies if package.json or pnpm-lock.yaml changed + install: { + run: 'pnpm install --frozen-lockfile || echo "Skipping install - lockfile unchanged"', + }, + }, + }, +}; + +export default lefthookConfig; +export type { LefthookConfig }; diff --git a/config/src/mocha/.mocharc.ts b/config/src/mocha/.mocharc.ts new file mode 100644 index 0000000..aa4ed35 --- /dev/null +++ b/config/src/mocha/.mocharc.ts @@ -0,0 +1,58 @@ +/** @format */ + +/** + * Base Mocha configuration for SSHield packages + * Includes ts-node, chai, and source-map support + */ +const mochaConfig = { + // Required modules + require: [ + "ts-node/register", + "source-map-support/register", + ], + + // File extensions to process + extensions: ["ts"], + + // Test file patterns + spec: ["src/**/*.spec.ts", "src/**/*.test.ts"], + + // Recursively look for tests + recursive: true, + + // Test timeout (5 seconds) + timeout: 5000, + + // Reporter style + reporter: "spec", + + // Colorize output + color: true, + + // Exit after tests complete + exit: true, + + // Node options for ESM support + "node-option": ["loader=ts-node/esm"], + + // ts-node configuration + "ts-node": { + project: "tsconfig.spec.json", + transpileOnly: true, + files: true, + }, + + // Watch mode file patterns + watchFiles: ["src/**/*.ts", "src/**/*.spec.ts", "src/**/*.test.ts"], + + // Fail fast on first error + bail: false, + + // Enable full stack traces + fullTrace: false, + + // Check for global leaks + checkLeaks: false, +} + +export default mochaConfig diff --git a/config/src/nfpm/nfpm.config.ts b/config/src/nfpm/nfpm.config.ts new file mode 100644 index 0000000..90aacc1 --- /dev/null +++ b/config/src/nfpm/nfpm.config.ts @@ -0,0 +1,283 @@ +/** @format */ + +/** + * nfpm configuration for creating .deb, .rpm, and .apk packages + * @see https://nfpm.goreleaser.com/configuration/ + */ + +interface NfpmPackage { + name: string; + arch: string; + platform: string; + version: string; + section?: string; + priority?: string; + maintainer: string; + description: string; + vendor?: string; + homepage: string; + license: string; + bindir?: string; + contents?: Array<{ + src: string; + dst: string; + type?: string; + file_info?: { + mode?: number; + }; + }>; + overrides?: { + deb?: Partial; + rpm?: Partial; + apk?: Partial; + }; +} + +interface NfpmConfig { + name: string; + arch: string; + platform: string; + version_schema?: string; + section: string; + priority: string; + maintainer: string; + description: string; + vendor: string; + homepage: string; + license: string; + bindir: string; + contents: Array<{ + src: string; + dst: string; + type?: string; + file_info?: { + mode?: number; + }; + }>; + overrides?: { + deb?: { + scripts?: { + postinstall?: string; + preremove?: string; + }; + dependencies?: string[]; + recommends?: string[]; + }; + rpm?: { + scripts?: { + postinstall?: string; + preremove?: string; + }; + dependencies?: string[]; + }; + apk?: { + scripts?: { + postinstall?: string; + preremove?: string; + }; + dependencies?: string[]; + }; + }; +} + +/** + * Default nfpm configuration + * Customize per package by extending this config + */ +const nfpmConfig: NfpmConfig = { + // Package metadata + name: "${PACKAGE_NAME}", + arch: "amd64", + platform: "linux", + version_schema: "semver", + + // Debian-specific metadata + section: "utils", + priority: "optional", + + // Maintainer information + maintainer: "SSHield Team ", + description: "${PACKAGE_DESCRIPTION}", + vendor: "SSHield", + homepage: "https://github.com/shaiknoorullah/sshield", + license: "MIT", + + // Installation paths + bindir: "/usr/bin", + + // Files to include in the package + contents: [ + { + src: "./dist/${BINARY_NAME}", + dst: "/usr/bin/${BINARY_NAME}", + type: "file", + file_info: { + mode: 0o755, + }, + }, + { + src: "./README.md", + dst: "/usr/share/doc/${PACKAGE_NAME}/README.md", + type: "doc", + }, + { + src: "./LICENSE", + dst: "/usr/share/doc/${PACKAGE_NAME}/LICENSE", + type: "license", + }, + ], + + // Platform-specific overrides + overrides: { + // Debian/Ubuntu (.deb) + deb: { + scripts: { + postinstall: `#!/bin/sh +echo "SSHield has been installed successfully!" +echo "Run '\${BINARY_NAME} --help' to get started." +`, + preremove: `#!/bin/sh +echo "Removing SSHield..." +`, + }, + dependencies: [], + recommends: ["openssh-client"], + }, + + // Fedora/RHEL (.rpm) + rpm: { + scripts: { + postinstall: `#!/bin/sh +echo "SSHield has been installed successfully!" +echo "Run '\${BINARY_NAME} --help' to get started." +`, + preremove: `#!/bin/sh +echo "Removing SSHield..." +`, + }, + dependencies: [], + }, + + // Alpine (.apk) + apk: { + scripts: { + postinstall: `#!/bin/sh +echo "SSHield has been installed successfully!" +echo "Run '\${BINARY_NAME} --help' to get started." +`, + preremove: `#!/bin/sh +echo "Removing SSHield..." +`, + }, + dependencies: [], + }, + }, +}; + +/** + * Generate nfpm YAML configuration + * This is used by the nfpm CLI tool + */ +export function generateNfpmYaml( + packageName: string, + packageDescription: string, + binaryName: string, + version: string, +): string { + const config = JSON.parse(JSON.stringify(nfpmConfig)); + + // Replace placeholders + const yaml = `# Generated nfpm configuration +# https://nfpm.goreleaser.com/configuration/ + +name: ${packageName} +arch: ${config.arch} +platform: ${config.platform} +version: ${version} +version_schema: ${config.version_schema} + +section: ${config.section} +priority: ${config.priority} + +maintainer: ${config.maintainer} +description: ${packageDescription} +vendor: ${config.vendor} +homepage: ${config.homepage} +license: ${config.license} + +bindir: ${config.bindir} + +contents: +${config.contents + .map( + (c: { + src: string; + dst: string; + type?: string; + file_info?: { mode?: number }; + }) => + ` - src: ${c.src.replace("${PACKAGE_NAME}", packageName).replace("${BINARY_NAME}", binaryName)} + dst: ${c.dst.replace("${PACKAGE_NAME}", packageName).replace("${BINARY_NAME}", binaryName)} + type: ${c.type || "file"} + file_info: + mode: ${c.file_info?.mode || 0o644}`, + ) + .join("\n")} + +overrides: + deb: + scripts: + postinstall: | +${config.overrides?.deb?.scripts?.postinstall + ?.split("\n") + .map((line: string) => ` ${line}`) + .join("\n") + .replace(/\$\{BINARY_NAME\}/g, binaryName)} + preremove: | +${config.overrides?.deb?.scripts?.preremove + ?.split("\n") + .map((line: string) => ` ${line}`) + .join("\n")} + dependencies: +${config.overrides?.deb?.dependencies?.map((d: string) => ` - ${d}`).join("\n") || " []"} + recommends: +${config.overrides?.deb?.recommends?.map((r: string) => ` - ${r}`).join("\n") || " []"} + + rpm: + scripts: + postinstall: | +${config.overrides?.rpm?.scripts?.postinstall + ?.split("\n") + .map((line: string) => ` ${line}`) + .join("\n") + .replace(/\$\{BINARY_NAME\}/g, binaryName)} + preremove: | +${config.overrides?.rpm?.scripts?.preremove + ?.split("\n") + .map((line: string) => ` ${line}`) + .join("\n")} + dependencies: +${config.overrides?.rpm?.dependencies?.map((d: string) => ` - ${d}`).join("\n") || " []"} + + apk: + scripts: + postinstall: | +${config.overrides?.apk?.scripts?.postinstall + ?.split("\n") + .map((line: string) => ` ${line}`) + .join("\n") + .replace(/\$\{BINARY_NAME\}/g, binaryName)} + preremove: | +${config.overrides?.apk?.scripts?.preremove + ?.split("\n") + .map((line: string) => ` ${line}`) + .join("\n")} + dependencies: +${config.overrides?.apk?.dependencies?.map((d: string) => ` - ${d}`).join("\n") || " []"} +`; + + return yaml; +} + +export default nfpmConfig; +export type { NfpmConfig, NfpmPackage }; diff --git a/config/src/nyc/nyc.config.ts b/config/src/nyc/nyc.config.ts new file mode 100644 index 0000000..686c865 --- /dev/null +++ b/config/src/nyc/nyc.config.ts @@ -0,0 +1,47 @@ +/** @format */ + +interface INycConfig { + extends?: string + include?: string[] + exclude?: string[] + reporter?: string[] + "report-dir"?: string + "check-coverage"?: Record | boolean + all?: boolean + extension?: string[] + lines?: number + functions?: number + branches?: number + statements?: number + watermarks?: { + lines?: number[] + functions?: number[] + branches?: number[] + statements?: number[] + } + "ignore-class-method"?: string[] + "skip-full"?: boolean + "temp-dir"?: string +} + +const nycConfig: INycConfig = { + extends: "@istanbuljs/nyc-config-typescript", + include: ["src/**/*.ts"], + exclude: ["**/*.spec.ts", "**/*.test.ts", "**/dist/**", "**/node_modules/**"], + reporter: ["text", "html", "lcov"], + extension: [".js", ".ts"], + "check-coverage": true, + lines: 90, + functions: 80, + branches: 80, + statements: 80, + watermarks: { + lines: [80, 95], + functions: [80, 95], + branches: [80, 95], + statements: [80, 95], + }, + all: true, +} + +export default nycConfig diff --git a/config/src/pkg/pkg.config.ts b/config/src/pkg/pkg.config.ts new file mode 100644 index 0000000..899dcbd --- /dev/null +++ b/config/src/pkg/pkg.config.ts @@ -0,0 +1,48 @@ +/** @format */ + +/** + * pkg configuration for building standalone binaries + * Using @yao-pkg/pkg - active fork with Node 20+ support + * @see https://github.com/yao-pkg/pkg + */ +interface PkgConfig { + scripts?: string[]; + assets?: string[]; + targets?: string[]; + outputPath?: string; + compress?: "Brotli" | "GZip" | "None"; + name?: string; + output?: string; +} + +const pkgConfig: PkgConfig = { + // Scripts to include in the binary + scripts: ["dist/**/*.js"], + + // Assets to include (configs, templates, etc.) + assets: ["package.json", "dist/**/*.json", "dist/**/*.md"], + + // Target platforms and Node versions + // Format: node-- + // Supports Node 20+ with @yao-pkg/pkg + targets: [ + // Linux + "node20-linux-x64", + "node20-linux-arm64", + // macOS + "node20-macos-x64", + "node20-macos-arm64", + // Windows + "node20-win-x64", + "node20-win-arm64", + // Alpine Linux (musl) + "node20-alpine-x64", + "node20-alpine-arm64", + ], + + // Compression (Brotli for best compression) + compress: "Brotli", +}; + +export default pkgConfig; +export type { PkgConfig }; diff --git a/config/src/prettier/prettier.config.ts b/config/src/prettier/prettier.config.ts new file mode 100644 index 0000000..0ce3958 --- /dev/null +++ b/config/src/prettier/prettier.config.ts @@ -0,0 +1,63 @@ +import type { Config } from 'prettier'; + +const prettierConfig: Config = { + // Basic formatting + semi: true, + singleQuote: true, + quoteProps: 'as-needed', + trailingComma: 'es5', + bracketSpacing: true, + bracketSameLine: false, + + // Indentation + tabWidth: 2, + useTabs: false, + + // Line length + printWidth: 80, + + // Arrow functions + arrowParens: 'avoid', + + // End of line + endOfLine: 'lf', + + // Embedded languages + embeddedLanguageFormatting: 'auto', + + // JSON + insertPragma: false, + requirePragma: false, + + // Prose + proseWrap: 'preserve', + + // Override for different file types + overrides: [ + { + files: '*.json', + options: { + tabWidth: 2, + singleQuote: false, + }, + }, + { + files: '*.md', + options: { + printWidth: 100, + proseWrap: 'always', + }, + }, + { + files: '*.{js,ts}', + options: { + singleQuote: true, + trailingComma: 'es5', + bracketSpacing: true, + bracketSameLine: false, + }, + }, + ], +}; + +export default prettierConfig; \ No newline at end of file diff --git a/config/src/release-it/release-it.config.ts b/config/src/release-it/release-it.config.ts new file mode 100644 index 0000000..0fcb123 --- /dev/null +++ b/config/src/release-it/release-it.config.ts @@ -0,0 +1,129 @@ +/** @format */ + +/** + * Base release-it configuration for SSHield packages + * Handles versioning, changelog, and publishing in monorepo + */ +interface ReleaseItConfig { + git?: { + commit?: boolean; + tag?: boolean; + push?: boolean; + commitMessage?: string; + tagName?: string; + requireBranch?: string | string[]; + requireCleanWorkingDir?: boolean; + requireUpstream?: boolean; + addUntrackedFiles?: boolean; + }; + npm?: { + publish?: boolean; + publishPath?: string; + skipChecks?: boolean; + ignoreVersion?: boolean; + }; + github?: { + release?: boolean; + releaseName?: string; + draft?: boolean; + preRelease?: boolean; + assets?: string[]; + releaseNotes?: string; + }; + gitlab?: { + release?: boolean; + }; + plugins?: Record; + hooks?: { + "before:init"?: string | string[]; + "after:bump"?: string | string[]; + "after:release"?: string | string[]; + }; +} + +const releaseItConfig: ReleaseItConfig = { + git: { + commit: true, + tag: true, + push: true, + commitMessage: "release: ${name}@${version}", + tagName: "${name}@${version}", + requireCleanWorkingDir: false, // Allow release with uncommitted changes + requireUpstream: true, + addUntrackedFiles: false, + }, + + npm: { + publish: true, + publishPath: ".", + skipChecks: false, + ignoreVersion: false, + }, + + github: { + release: true, // Enable GitHub releases + releaseName: "${name} v${version}", + draft: false, + preRelease: false, + // Assets to upload to GitHub releases + // Customize this per package to include binaries + assets: [ + "dist/*.tar.gz", + "dist/*.deb", + "dist/*.rpm", + "dist/*-linux-*", + "dist/*-macos-*", + "dist/*-win-*.exe", + ], + }, + + gitlab: { + release: false, + }, + + plugins: { + "@release-it/conventional-changelog": { + preset: { + name: "conventionalcommits", + types: [ + { type: "feat", section: "Features" }, + { type: "fix", section: "Bug Fixes" }, + { type: "perf", section: "Performance Improvements" }, + { type: "revert", section: "Reverts" }, + { type: "docs", section: "Documentation" }, + { type: "style", section: "Styles" }, + { type: "refactor", section: "Code Refactoring" }, + { type: "test", section: "Tests" }, + { type: "build", section: "Build System" }, + { type: "ci", section: "CI" }, + { type: "maintenance", section: "Maintenance" }, + { type: "init", section: "Initialization" }, + { type: "chore", hidden: true }, + ], + }, + infile: "CHANGELOG.md", + header: "# Changelog", + gitRawCommitsOpts: { + path: ".", + }, + }, + }, + + hooks: { + "before:init": ["pnpm run build", "pnpm run test"], + "after:bump": [ + "echo Successfully bumped version to ${version}", + // Build binaries with pkg + "pnpm run bundle", + // Package binaries with nfpm (if available) + "pnpm run package || true", + ], + "after:release": [ + "echo Successfully released ${name}@${version} to ${repo.repository}", + // Clean up build artifacts + "rimraf dist/*.tar.gz dist/*.deb dist/*.rpm", + ], + }, +}; + +export default releaseItConfig; diff --git a/config/src/testing/ink-helpers.ts b/config/src/testing/ink-helpers.ts new file mode 100644 index 0000000..07bdeca --- /dev/null +++ b/config/src/testing/ink-helpers.ts @@ -0,0 +1,201 @@ +/** @format */ + +/** + * Ink testing library helpers for SSHield packages + * Provides utilities for testing Ink/React CLI components + */ + +import type { ReactElement } from "react"; + +/** + * Custom matchers for Ink component testing + */ +export const inkMatchers = { + /** + * Assert that the output contains a specific text + */ + toContainText: (received: string, expected: string): boolean => { + return received.includes(expected); + }, + + /** + * Assert that the output matches a regex pattern + */ + toMatchPattern: (received: string, pattern: RegExp): boolean => { + return pattern.test(received); + }, + + /** + * Assert that the output contains ANSI color codes + */ + toHaveColor: (received: string): boolean => { + // ANSI escape code pattern + const ansiPattern = /\u001b\[\d+m/; + return ansiPattern.test(received); + }, + + /** + * Assert that the output is empty + */ + toBeEmpty: (received: string): boolean => { + return received.trim() === ""; + }, +}; + +/** + * Wait for a specific output in Ink component + */ +export async function waitForText( + lastFrame: () => string, + text: string, + timeout = 5000, +): Promise { + const startTime = Date.now(); + + return new Promise((resolve, reject) => { + const interval = setInterval(() => { + const output = lastFrame(); + + if (output.includes(text)) { + clearInterval(interval); + resolve(); + } + + if (Date.now() - startTime > timeout) { + clearInterval(interval); + reject( + new Error( + `Timeout waiting for text "${text}". Last output: ${output}`, + ), + ); + } + }, 100); + }); +} + +/** + * Strip ANSI codes from string for easier testing + */ +export function stripAnsi(str: string): string { + // eslint-disable-next-line no-control-regex + return str.replace(/\u001b\[\d+m/g, ""); +} + +/** + * Get the last N lines from output + */ +export function getLastLines(output: string, count: number): string { + const lines = output.split("\n"); + return lines.slice(-count).join("\n"); +} + +/** + * Get the first N lines from output + */ +export function getFirstLines(output: string, count: number): string { + const lines = output.split("\n"); + return lines.slice(0, count).join("\n"); +} + +/** + * Count occurrences of text in output + */ +export function countOccurrences(output: string, text: string): number { + const regex = new RegExp(text, "g"); + const matches = output.match(regex); + return matches ? matches.length : 0; +} + +/** + * Type for render result from ink-testing-library + */ +export interface RenderResult { + lastFrame: () => string; + frames: string[]; + stdin: { + write: (data: string) => void; + }; + rerender: (element: ReactElement) => void; + unmount: () => void; + cleanup: () => void; +} + +/** + * Mock stdin for testing interactive components + */ +export class MockStdin { + private listeners: Array<(data: string) => void> = []; + + on(event: string, listener: (data: string) => void): this { + if (event === "data") { + this.listeners.push(listener); + } + return this; + } + + write(data: string): void { + this.listeners.forEach((listener) => listener(data)); + } + + clear(): void { + this.listeners = []; + } +} + +/** + * Simulate user input + */ +export function simulateInput( + stdin: { write: (data: string) => void }, + keys: string[], + delay = 100, +): Promise { + return new Promise((resolve) => { + let index = 0; + + const interval = setInterval(() => { + if (index < keys.length) { + stdin.write(keys[index]); + index++; + } else { + clearInterval(interval); + resolve(); + } + }, delay); + }); +} + +/** + * Common key codes for testing + */ +export const Keys = { + ENTER: "\r", + ESCAPE: "\x1B", + UP: "\x1B[A", + DOWN: "\x1B[B", + LEFT: "\x1B[D", + RIGHT: "\x1B[C", + BACKSPACE: "\x7F", + DELETE: "\x1B[3~", + TAB: "\t", + SPACE: " ", + CTRL_C: "\x03", + CTRL_D: "\x04", +}; + +/** + * Example test setup + * + * import { render } from 'ink-testing-library' + * import { expect } from 'chai' + * import { waitForText, stripAnsi, Keys } from '@sshield/config/testing' + * + * describe('MyComponent', () => { + * it('renders welcome message', async () => { + * const { lastFrame } = render() + * await waitForText(lastFrame, 'Welcome') + * const output = stripAnsi(lastFrame()) + * expect(output).to.include('Welcome') + * }) + * }) + */ diff --git a/config/src/tsup/tsup.config.ts b/config/src/tsup/tsup.config.ts new file mode 100644 index 0000000..5242d15 --- /dev/null +++ b/config/src/tsup/tsup.config.ts @@ -0,0 +1,61 @@ +/** @format */ + +import { defineConfig, type Options } from "tsup" + +/** + * Base tsup configuration for SSHield packages + * This can be extended/overridden in individual packages + */ +const baseTsupConfig: Options = { + // Entry points - should be overridden in package + entry: ["src/index.ts"], + + // Output formats + format: ["cjs", "esm"], + + // Output directory + outDir: "dist", + + // TypeScript declarations + dts: true, + + // Source maps for debugging + sourcemap: true, + + // Clean output directory before build + clean: true, + + // Split output into chunks + splitting: false, + + // Tree shaking + treeshake: true, + + // Minification for production + minify: false, + + // Target environment + target: "es2015", + + // Platform + platform: "node", + + // External dependencies (don't bundle) + external: [], + + // Skip node_modules bundling + skipNodeModulesBundle: true, + + // Keep names for better debugging + keepNames: true, + + // Banner to add to output files + banner: { + js: "/** @format */", + }, +} + +export default baseTsupConfig + +// Also export defineConfig for convenience +export { defineConfig } diff --git a/config/src/typedoc/typedoc.config.ts b/config/src/typedoc/typedoc.config.ts new file mode 100644 index 0000000..c849a91 --- /dev/null +++ b/config/src/typedoc/typedoc.config.ts @@ -0,0 +1,107 @@ +/** @format */ + +/** + * Base TypeDoc configuration for SSHield packages + * Generates API documentation in Markdown format compatible with Fuma-docs + */ +interface TypeDocConfig { + entryPoints?: string[]; + out?: string; + plugin?: string[]; + readme?: string; + includeVersion?: boolean; + categorizeByGroup?: boolean; + defaultCategory?: string; + categoryOrder?: string[]; + sort?: string[]; + exclude?: string[]; + excludePrivate?: boolean; + excludeProtected?: boolean; + excludeInternal?: boolean; + name?: string; + hideGenerator?: boolean; + cleanOutputDir?: boolean; + gitRevision?: string; + sourceLinkTemplate?: string; + basePath?: string; + excludeExternals?: boolean; + excludeNotDocumented?: boolean; + validation?: { + notExported?: boolean; + invalidLink?: boolean; + notDocumented?: boolean; + }; +} + +const typedocConfig: TypeDocConfig = { + // Entry points - should be overridden per package + entryPoints: ["src/index.ts"], + + // Output directory for generated documentation + out: "../../docs/content/docs/api", + + // Plugins for markdown generation + plugin: ["typedoc-plugin-markdown"], + + // README file to include + readme: "README.md", + + // Include version in documentation + includeVersion: true, + + // Categorization + categorizeByGroup: true, + defaultCategory: "Other", + categoryOrder: [ + "Classes", + "Interfaces", + "Type Aliases", + "Functions", + "Variables", + "*", + ], + + // Sorting + sort: ["source-order", "required-first", "kind"], + + // Exclude patterns + exclude: [ + "**/*.spec.ts", + "**/*.test.ts", + "**/*.test.tsx", + "**/node_modules/**", + "**/dist/**", + ], + + // Visibility filters + excludePrivate: true, + excludeProtected: false, + excludeInternal: true, + + // Hide "Generated by TypeDoc" message + hideGenerator: true, + + // Clean output directory before generation + cleanOutputDir: true, + + // Git integration + gitRevision: "main", + + // Base path for source links + basePath: ".", + + // Exclude external modules + excludeExternals: true, + + // Exclude undocumented items + excludeNotDocumented: false, + + // Validation + validation: { + notExported: true, + invalidLink: true, + notDocumented: false, + }, +}; + +export default typedocConfig; diff --git a/config/ts/package/tsconfig.json b/config/ts/package/tsconfig.json new file mode 100644 index 0000000..0cdf564 --- /dev/null +++ b/config/ts/package/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../tsconfig.base.json", + "compilerOptions": { + "module": "nodenext", + "moduleResolution": "nodenext", + "resolveJsonModule": true + } +} diff --git a/config/ts/package/tsconfig.lib.json b/config/ts/package/tsconfig.lib.json new file mode 100644 index 0000000..36cfcb7 --- /dev/null +++ b/config/ts/package/tsconfig.lib.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "composite": true, + "incremental": true, + "sourceMap": true, + "declaration": true, + "declarationMap": true, + "types": ["node"] + }, + "exclude": ["node_modules", "dist", "**/*.spec.ts", "**/*.test.ts"] +} diff --git a/config/ts/package/tsconfig.spec.json b/config/ts/package/tsconfig.spec.json new file mode 100644 index 0000000..763c9bb --- /dev/null +++ b/config/ts/package/tsconfig.spec.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "composite": false, + "sourceMap": true, + "types": ["node", "mocha", "chai"] + }, + "include": ["src/**/*.ts", "src/**/*.spec.ts", "src/**/*.test.ts"] +} diff --git a/config/ts/plugin/tsconfig.json b/config/ts/plugin/tsconfig.json new file mode 100644 index 0000000..0cdf564 --- /dev/null +++ b/config/ts/plugin/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../tsconfig.base.json", + "compilerOptions": { + "module": "nodenext", + "moduleResolution": "nodenext", + "resolveJsonModule": true + } +} diff --git a/config/ts/plugin/tsconfig.lib.json b/config/ts/plugin/tsconfig.lib.json new file mode 100644 index 0000000..36cfcb7 --- /dev/null +++ b/config/ts/plugin/tsconfig.lib.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "composite": true, + "incremental": true, + "sourceMap": true, + "declaration": true, + "declarationMap": true, + "types": ["node"] + }, + "exclude": ["node_modules", "dist", "**/*.spec.ts", "**/*.test.ts"] +} diff --git a/config/ts/plugin/tsconfig.spec.json b/config/ts/plugin/tsconfig.spec.json new file mode 100644 index 0000000..763c9bb --- /dev/null +++ b/config/ts/plugin/tsconfig.spec.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "composite": false, + "sourceMap": true, + "types": ["node", "mocha", "chai"] + }, + "include": ["src/**/*.ts", "src/**/*.spec.ts", "src/**/*.test.ts"] +} diff --git a/config/ts/tsconfig.base.json b/config/ts/tsconfig.base.json new file mode 100644 index 0000000..8488276 --- /dev/null +++ b/config/ts/tsconfig.base.json @@ -0,0 +1,28 @@ +{ + "compilerOptions": { + "target": "es2015", + "module": "commonjs", + "lib": ["ES2020"], + "baseUrl": ".", + "moduleResolution": "node", + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "importHelpers": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "forceConsistentCasingInFileNames": true, + "skipLibCheck": true, + "skipDefaultLibCheck": true, + "paths": { + "@sshield/config/*": ["../../config/*"], + "@sshield/*": ["../../packages/*/src"], + "@plugins/*": ["../../plugins/*/src"], + "@tools/*": ["../../tools/*"], + "@tests/*": ["../../tests/*"] + } + }, + "exclude": ["node_modules"] +} diff --git a/config/ts/tsconfig.lib.json b/config/ts/tsconfig.lib.json new file mode 100644 index 0000000..8ba6dac --- /dev/null +++ b/config/ts/tsconfig.lib.json @@ -0,0 +1,11 @@ +/** @format */ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "composite": true, + "incremental": true, + "sourceMap": true, + "declaration": true, + "declarationMap": true + } +} diff --git a/config/ts/tsconfig.plugin.json b/config/ts/tsconfig.plugin.json new file mode 100644 index 0000000..15cbe5c --- /dev/null +++ b/config/ts/tsconfig.plugin.json @@ -0,0 +1,16 @@ +/** @format */ + +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "./dist", + "rootDir": "./src", + "composite": true, + "incremental": true, + "moduleResolution": "node", + "declaration": true, + "declarationMap": true + }, + "include": ["src/**/*"], + "exclude": ["dist", "node_modules", "**/*.test.ts", "**/*.spec.ts", "tests"] +} diff --git a/config/ts/tsconfig.spec.json b/config/ts/tsconfig.spec.json new file mode 100644 index 0000000..9d33fb9 --- /dev/null +++ b/config/ts/tsconfig.spec.json @@ -0,0 +1,11 @@ +/** @format */ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "noEmit": true, + "types": ["mocha", "chai", "node"], + "sourceMap": true + }, + "include": ["src/**/*", "src/**/*.spec.ts"], + "exclude": ["node_modules", "dist"] +} diff --git a/config/ts/ui/tsconfig.json b/config/ts/ui/tsconfig.json new file mode 100644 index 0000000..32211f5 --- /dev/null +++ b/config/ts/ui/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../tsconfig.base.json", + "compilerOptions": { + "module": "nodenext", + "moduleResolution": "nodenext", + "resolveJsonModule": true, + "jsx": "react", + "lib": ["ES2020", "DOM"] + } +} diff --git a/config/ts/ui/tsconfig.lib.json b/config/ts/ui/tsconfig.lib.json new file mode 100644 index 0000000..424d75f --- /dev/null +++ b/config/ts/ui/tsconfig.lib.json @@ -0,0 +1,19 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "composite": true, + "incremental": true, + "sourceMap": true, + "declaration": true, + "declarationMap": true, + "types": ["node"] + }, + "exclude": [ + "node_modules", + "dist", + "**/*.spec.ts", + "**/*.test.ts", + "**/*.spec.tsx", + "**/*.test.tsx" + ] +} diff --git a/config/ts/ui/tsconfig.spec.json b/config/ts/ui/tsconfig.spec.json new file mode 100644 index 0000000..15d5f9f --- /dev/null +++ b/config/ts/ui/tsconfig.spec.json @@ -0,0 +1,16 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "composite": false, + "sourceMap": true, + "types": ["node", "react", "mocha", "chai"] + }, + "include": [ + "src/**/*.ts", + "src/**/*.tsx", + "src/**/*.spec.ts", + "src/**/*.test.ts", + "src/**/*.spec.tsx", + "src/**/*.test.tsx" + ] +} diff --git a/config/tsconfig.json b/config/tsconfig.json new file mode 100644 index 0000000..c1c178c --- /dev/null +++ b/config/tsconfig.json @@ -0,0 +1,23 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "module": "commonjs", + "forceConsistentCasingInFileNames": true, + "strict": true, + "importHelpers": true, + "noImplicitOverride": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "noPropertyAccessFromIndexSignature": true, + "resolveJsonModule": true, + "esModuleInterop": true, + "paths": {} + }, + "files": [], + "include": ["src/**/*.ts", "src/**/*.json"], + "references": [ + { + "path": "./ts/tsconfig.lib.json" + } + ] +} diff --git a/config/tsconfig.lib.json b/config/tsconfig.lib.json new file mode 100644 index 0000000..4a99f74 --- /dev/null +++ b/config/tsconfig.lib.json @@ -0,0 +1,19 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "module": "nodenext", + "moduleResolution": "nodenext", + "outDir": "./dist", + "rootDir": "./src", + "declaration": true, + "types": ["node"], + "resolveJsonModule": true, + "resolvePackageJsonImports": true, + "resolvePackageJsonExports": true + }, + "include": [ + "src/**/*.ts", + "src/**/*.json", + "src/static/testing/mocha/.mocharc.ts" + ] +} diff --git a/cz.config.mjs b/cz.config.mjs new file mode 100644 index 0000000..74ffbab --- /dev/null +++ b/cz.config.mjs @@ -0,0 +1,169 @@ +/** @format */ + +import { defineConfig } from "cz-git" +import { readdirSync, existsSync } from "node:fs" +import { resolve, dirname } from "node:path" +import { fileURLToPath } from "node:url" +import _ from "lodash" + +/** + * cz.config.mjs + * This file configures the commitizen prompt for generating commit messages. + * It defines the structure and options available to users when making commits. + */ + +// Get __dirname equivalent in ES modules +const __filename = fileURLToPath(import.meta.url) +const __dirname = dirname(__filename) + +// Safely read directory, return empty array if directory doesn't exist +const readDirSafe = (path) => { + try { + return existsSync(path) ? readdirSync(path) : [] + } catch { + return [] + } +} + +const scopes = _.union( + readDirSafe(resolve(__dirname, "packages")), + readDirSafe(resolve(__dirname, "plugins")), + readDirSafe(resolve(__dirname, "tests")), + readDirSafe(resolve(__dirname, "config")), + readDirSafe(resolve(__dirname, "docs")), + readDirSafe(resolve(__dirname, "tools")) +) + +const czConfig = { + rules: { + // @see: https://commitlint.js.org/#/reference-rules + "body-leading-blank": [2, "always"], + "body-empty": [2, "always"], + "body-max-line-length": [2, "always", 10], + "body-max-length": [2, "always", 250], + "body-min-length": [2, "always", 25], + "references-empty": [2, "always"], + "scope-case": [2, "always", "kebab-case"], + "scope-enum": [2, "always", [...scopes]], + "subject-case": [2, "always", "lower-case"], + "header-case": [2, "always", "lower-case"], + "subject-empty": [2, "always"], + "header-min-length": [2, "always", 10], + "header-max-length": [2, "always", 100], + "type-case": [2, "always", "kebab-case"], + "type-empty": [2, "always"], + "type-enum": [2, "always", []], + "type-max-length": [2, "always", 10], + }, + prompt: { + alias: { fd: "docs: fix typos" }, + messages: { + type: "Select the type of change that you're committing:", + scope: "Denote the SCOPE of this change (optional):", + customScope: "Denote the SCOPE of this change:", + subject: "Write a SHORT, IMPERATIVE tense description of the change:\n", + body: 'Provide a LONGER description of the change (optional). Use "|" to break new line:\n', + breaking: + 'List any BREAKING CHANGES (optional). Use "|" to break new line:\n', + footerPrefixsSelect: + "Select the ISSUES type of changeList by this change (optional):", + customFooterPrefix: "Input ISSUES prefix:", + footer: "List any ISSUES by this change. E.g.: #31, #34:\n", + generatingByAI: "Generating your AI commit subject...", + generatedSelectByAI: "Select suitable subject by AI generated:", + confirmCommit: "Are you sure you want to proceed with the commit above?", + }, + types: [ + { value: "feat", name: "feat: A new feature", emoji: ":sparkles:" }, + { value: "fix", name: "fix: A bug fix", emoji: ":bug:" }, + { + value: "docs", + name: "docs: Documentation only changes", + emoji: ":memo:", + }, + { + value: "style", + name: "style: Changes that do not affect the meaning of the code", + emoji: ":lipstick:", + }, + { + value: "refactor", + name: "refactor: A code change that neither fixes a bug nor adds a feature", + emoji: ":recycle:", + }, + { + value: "perf", + name: "perf: A code change that improves performance", + emoji: ":zap:", + }, + { + value: "test", + name: "test: Adding missing tests or correcting existing tests", + emoji: ":white_check_mark:", + }, + { + value: "build", + name: "build: Changes that affect the build system or external dependencies", + emoji: ":package:", + }, + { + value: "ci", + name: "ci: Changes to our CI configuration files and scripts", + emoji: ":ferris_wheel:", + }, + { + value: "chore", + name: "chore: Other changes that don't modify src or test files", + emoji: ":hammer:", + }, + { + value: "maintenance", + name: "maintenance: Maintenance tasks that do not modify src or test files", + emoji: ":screwdriver:", + }, + { + value: "init", + name: "init: Initialize a new plugin or package", + emoji: ":rocket:", + }, + { + value: "revert", + name: "revert: Reverts a previous commit", + emoji: ":rewind:", + }, + ], + useEmoji: false, + emojiAlign: "center", + useAI: false, + aiNumber: 1, + themeColorCode: "", + scopes: [...scopes], + allowCustomScopes: false, + allowEmptyScopes: false, + enableMultipleScopes: true, + scopeEnumSeparator: ",", + upperCaseSubject: null, + markBreakingChangeMode: false, + allowBreakingChanges: ["feat", "fix"], + breaklineNumber: 100, + breaklineChar: "|", + skipQuestions: [], + issuePrefixes: [ + { value: "closed", name: "closed: ISSUES has been processed" }, + { value: "fixes", name: "fixes: ISSUES has been fixed" }, + ], + customIssuePrefixAlign: "top", + emptyIssuePrefixAlias: "skip", + customIssuePrefixAlias: "custom", + allowCustomIssuePrefix: false, + allowEmptyIssuePrefix: false, + confirmColorize: true, + scopeOverrides: undefined, + defaultBody: "", + defaultIssues: "", + defaultScope: "", + defaultSubject: "", + }, +} + +export default defineConfig(czConfig) diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 0000000..9e429e4 --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1,26 @@ +# deps +/node_modules + +# generated content +.source + +# test & build +/coverage +/.next/ +/out/ +/build +*.tsbuildinfo + +# misc +.DS_Store +*.pem +/.pnp +.pnp.js +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# others +.env*.local +.vercel +next-env.d.ts \ No newline at end of file diff --git a/docs/PACKAGING.md b/docs/PACKAGING.md new file mode 100644 index 0000000..eb79d7c --- /dev/null +++ b/docs/PACKAGING.md @@ -0,0 +1,388 @@ +# Package Distribution Guide + +This guide explains how to build and distribute SSHield packages across different package managers and platforms. + +## Overview + +SSHield supports distribution through multiple channels: + +- **npm** - Node.js package registry +- **GitHub Releases** - Binary downloads for all platforms +- **Arch Linux AUR** - pacman/yay/paru (via PKGBUILD) +- **Debian/Ubuntu** - apt (via .deb packages) +- **Fedora/RHEL** - dnf/yum (via .rpm packages) +- **Alpine Linux** - apk (via .apk packages) +- **Direct Download** - Standalone binaries (Linux, macOS, Windows) + +## Quick Start + +### Build Everything + +```bash +# Build TypeScript code +pnpm run build + +# Build standalone binaries +pnpm run build:binary + +# Create distribution packages (.deb, .rpm, .apk, PKGBUILD) +pnpm run build:package +``` + +### Release + +```bash +# Create a new release (builds, tests, packages, and publishes) +pnpm run release +``` + +## Tools + +### @yao-pkg/pkg +Creates standalone binaries for multiple platforms from Node.js applications. + +**Configuration**: `config/src/pkg/pkg.config.ts` + +**Supported platforms**: +- Linux: x64, arm64, Alpine (musl) +- macOS: x64, arm64 +- Windows: x64, arm64 + +**Usage**: +```bash +pnpm run build:binary +``` + +### nfpm +Creates .deb, .rpm, and .apk packages from a single configuration file. + +**Configuration**: `config/src/nfpm/nfpm.config.ts` + +**Installation**: +```bash +# macOS +brew install nfpm + +# Linux (Arch) +yay -S nfpm-bin + +# Linux (Debian/Ubuntu) +echo 'deb [trusted=yes] https://repo.goreleaser.com/apt/ /' | sudo tee /etc/apt/sources.list.d/goreleaser.list +sudo apt update +sudo apt install nfpm + +# Docker +docker pull goreleaser/nfpm +``` + +**Usage**: +```bash +# Generate nfpm.yaml and build packages +node tools/scripts/package-dist.mjs +``` + +### release-it +Automates the release process including versioning, changelog generation, and publishing. + +**Configuration**: `config/src/release-it/release-it.config.ts` + +**Features**: +- Conventional commit changelog generation +- Git tagging and pushing +- npm publishing +- GitHub releases with binary uploads +- Automatic version bumping + +**Usage**: +```bash +pnpm run release +``` + +## Package Types + +### npm Package + +Published to npm registry for Node.js users. + +**Install**: +```bash +npm install -g @sshield/core +# or +pnpm add @sshield/core +``` + +### Standalone Binaries + +Pre-built binaries for each platform, no Node.js required. + +**Download from GitHub Releases**: +- `sshield-linux-x64` +- `sshield-linux-arm64` +- `sshield-macos-x64` +- `sshield-macos-arm64` +- `sshield-win-x64.exe` +- `sshield-win-arm64.exe` + +**Install**: +```bash +# Linux/macOS +chmod +x sshield-linux-x64 +sudo mv sshield-linux-x64 /usr/local/bin/sshield + +# Windows +# Move sshield-win-x64.exe to a directory in your PATH +``` + +### Debian/Ubuntu (.deb) + +For Debian, Ubuntu, and derivatives. + +**Install from .deb**: +```bash +# Download from GitHub Releases +curl -LO https://github.com/shaiknoorullah/sshield/releases/download/v1.0.0/sshield_1.0.0_amd64.deb + +# Install +sudo dpkg -i sshield_1.0.0_amd64.deb + +# Or use apt +sudo apt install ./sshield_1.0.0_amd64.deb +``` + +**Build .deb**: +```bash +pnpm run build:package +# Output: dist/*.deb +``` + +### Fedora/RHEL (.rpm) + +For Fedora, RHEL, CentOS, and derivatives. + +**Install from .rpm**: +```bash +# Download from GitHub Releases +curl -LO https://github.com/shaiknoorullah/sshield/releases/download/v1.0.0/sshield-1.0.0.x86_64.rpm + +# Install +sudo dnf install sshield-1.0.0.x86_64.rpm + +# Or use rpm +sudo rpm -i sshield-1.0.0.x86_64.rpm +``` + +**Build .rpm**: +```bash +pnpm run build:package +# Output: dist/*.rpm +``` + +### Alpine Linux (.apk) + +For Alpine Linux and derivatives. + +**Install from .apk**: +```bash +# Download from GitHub Releases +curl -LO https://github.com/shaiknoorullah/sshield/releases/download/v1.0.0/sshield_1.0.0_x86_64.apk + +# Install +sudo apk add --allow-untrusted sshield_1.0.0_x86_64.apk +``` + +**Build .apk**: +```bash +pnpm run build:package +# Output: dist/*.apk +``` + +### Arch Linux AUR + +For Arch Linux and derivatives (via AUR). + +**PKGBUILD Files**: +- `PKGBUILD` - Source package (builds from source) +- `PKGBUILD.bin` - Binary package (uses pre-built binaries) + +**Install from AUR** (once published): +```bash +# Using yay +yay -S sshield + +# Using paru +paru -S sshield + +# Using plain makepkg +git clone https://aur.archlinux.org/sshield.git +cd sshield +makepkg -si +``` + +**Submit to AUR**: +1. Generate PKGBUILD: + ```bash + pnpm run build:package + ``` + +2. Update checksums: + ```bash + cd dist + makepkg --printsrcinfo > .SRCINFO + ``` + +3. Submit to AUR: + ```bash + # Clone AUR repository + git clone ssh://aur@aur.archlinux.org/sshield.git aur-sshield + cd aur-sshield + + # Copy files + cp ../PKGBUILD . + cp ../.SRCINFO . + + # Commit and push + git add PKGBUILD .SRCINFO + git commit -m "Update to version X.Y.Z" + git push + ``` + +## Release Process + +### 1. Prepare Release + +```bash +# Ensure working directory is clean +git status + +# Run tests +pnpm test + +# Build everything +pnpm run build +``` + +### 2. Create Release + +```bash +# Interactive release (will prompt for version) +pnpm run release + +# Or specify version +pnpm run release -- --increment minor +pnpm run release -- --increment patch +pnpm run release -- --release-version 2.0.0 +``` + +### 3. Post-Release + +The release process automatically: +- ✅ Bumps version in package.json +- ✅ Generates CHANGELOG.md +- ✅ Creates Git tag +- ✅ Builds binaries +- ✅ Creates distribution packages +- ✅ Creates GitHub release with assets +- ✅ Publishes to npm + +Manual steps: +- Update AUR PKGBUILD (if applicable) +- Update Homebrew formula (if applicable) +- Announce release on social media/blog + +## Distribution Checklist + +Before releasing a new version: + +- [ ] All tests pass (`pnpm test`) +- [ ] Documentation is up to date +- [ ] CHANGELOG.md is reviewed +- [ ] Version follows semver +- [ ] Binaries build successfully (`pnpm run build:binary`) +- [ ] Packages build successfully (`pnpm run build:package`) +- [ ] GitHub release notes are prepared +- [ ] npm credentials are configured +- [ ] GitHub token is configured (for releases) + +## Configuration + +### pkg Configuration + +Edit `config/src/pkg/pkg.config.ts` to customize binary targets: + +```typescript +targets: [ + "node20-linux-x64", + "node20-linux-arm64", + "node20-macos-x64", + "node20-macos-arm64", + "node20-win-x64", + "node20-win-arm64", + "node20-alpine-x64", + "node20-alpine-arm64", +] +``` + +### nfpm Configuration + +Edit `config/src/nfpm/nfpm.config.ts` to customize package metadata: + +```typescript +const nfpmConfig = { + maintainer: "Your Name ", + description: "Your package description", + homepage: "https://your-homepage.com", + license: "MIT", + // ... +} +``` + +### release-it Configuration + +Edit `config/src/release-it/release-it.config.ts` to customize release behavior: + +```typescript +const releaseItConfig = { + github: { + release: true, + assets: [ + "dist/*.tar.gz", + "dist/*.deb", + "dist/*.rpm", + // ... + ], + }, + // ... +} +``` + +## Troubleshooting + +### nfpm not found + +Install nfpm: https://nfpm.goreleaser.com/install/ + +### pkg fails to build + +- Ensure you have the latest @yao-pkg/pkg: `pnpm add -D @yao-pkg/pkg@latest` +- Check Node.js version compatibility +- Verify all dependencies are installed + +### GitHub release fails + +- Ensure `GITHUB_TOKEN` is set: `export GITHUB_TOKEN=your_token` +- Or configure in `.env`: `GITHUB_TOKEN=your_token` + +### AUR submission fails + +- Ensure PKGBUILD follows AUR guidelines +- Update .SRCINFO: `makepkg --printsrcinfo > .SRCINFO` +- Check SSH key is configured for AUR + +## Resources + +- [nfpm Documentation](https://nfpm.goreleaser.com/) +- [@yao-pkg/pkg Documentation](https://github.com/yao-pkg/pkg) +- [release-it Documentation](https://github.com/release-it/release-it) +- [AUR Submission Guidelines](https://wiki.archlinux.org/title/AUR_submission_guidelines) +- [Debian Packaging Guide](https://www.debian.org/doc/manuals/debmake-doc/) +- [RPM Packaging Guide](https://rpm-packaging-guide.github.io/) diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..9b7bba9 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,45 @@ +# docs + +This is a Next.js application generated with +[Create Fumadocs](https://github.com/fuma-nama/fumadocs). + +Run development server: + +```bash +npm run dev +# or +pnpm dev +# or +yarn dev +``` + +Open http://localhost:3000 with your browser to see the result. + +## Explore + +In the project, you can see: + +- `lib/source.ts`: Code for content source adapter, [`loader()`](https://fumadocs.dev/docs/headless/source-api) provides the interface to access your content. +- `lib/layout.shared.tsx`: Shared options for layouts, optional but preferred to keep. + +| Route | Description | +| ------------------------- | ------------------------------------------------------ | +| `app/(home)` | The route group for your landing page and other pages. | +| `app/docs` | The documentation layout and pages. | +| `app/api/search/route.ts` | The Route Handler for search. | + +### Fumadocs MDX + +A `source.config.ts` config file has been included, you can customise different options like frontmatter schema. + +Read the [Introduction](https://fumadocs.dev/docs/mdx) for further details. + +## Learn More + +To learn more about Next.js and Fumadocs, take a look at the following +resources: + +- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js + features and API. +- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. +- [Fumadocs](https://fumadocs.dev) - learn about Fumadocs diff --git a/docs/content/docs/index.mdx b/docs/content/docs/index.mdx new file mode 100644 index 0000000..1ede18e --- /dev/null +++ b/docs/content/docs/index.mdx @@ -0,0 +1,13 @@ +--- +title: Hello World +description: Your first document +--- + +Welcome to the docs! You can start writing documents in `/content/docs`. + +## What is Next? + + + + + diff --git a/docs/content/docs/test.mdx b/docs/content/docs/test.mdx new file mode 100644 index 0000000..f475f4a --- /dev/null +++ b/docs/content/docs/test.mdx @@ -0,0 +1,17 @@ +--- +title: Components +description: Components +--- + +## Code Block + +```js +console.log('Hello World'); +``` + +## Cards + + + + + diff --git a/docs/eslint.config.mjs b/docs/eslint.config.mjs new file mode 100644 index 0000000..5c73f39 --- /dev/null +++ b/docs/eslint.config.mjs @@ -0,0 +1,26 @@ +import { dirname } from 'path'; +import { fileURLToPath } from 'url'; +import { FlatCompat } from '@eslint/eslintrc'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +const compat = new FlatCompat({ + baseDirectory: __dirname, +}); + +const eslintConfig = [ + ...compat.extends('next/core-web-vitals', 'next/typescript'), + { + ignores: [ + 'node_modules/**', + '.next/**', + 'out/**', + 'build/**', + '.source/**', + 'next-env.d.ts', + ], + }, +]; + +export default eslintConfig; \ No newline at end of file diff --git a/docs/next.config.mjs b/docs/next.config.mjs new file mode 100644 index 0000000..457dcf2 --- /dev/null +++ b/docs/next.config.mjs @@ -0,0 +1,10 @@ +import { createMDX } from 'fumadocs-mdx/next'; + +const withMDX = createMDX(); + +/** @type {import('next').NextConfig} */ +const config = { + reactStrictMode: true, +}; + +export default withMDX(config); diff --git a/docs/package.json b/docs/package.json new file mode 100644 index 0000000..3aabaa5 --- /dev/null +++ b/docs/package.json @@ -0,0 +1,34 @@ +{ + "name": "docs", + "version": "0.0.0", + "private": true, + "scripts": { + "build": "next build", + "dev": "next dev", + "start": "next start", + "postinstall": "fumadocs-mdx", + "lint": "eslint" + }, + "dependencies": { + "fumadocs-core": "16.0.11", + "fumadocs-mdx": "13.0.8", + "fumadocs-ui": "16.0.11", + "lucide-react": "^0.552.0", + "next": "16.0.1", + "react": "^19.2.0", + "react-dom": "^19.2.0" + }, + "devDependencies": { + "@tailwindcss/postcss": "^4.1.16", + "@types/mdx": "^2.0.13", + "@types/node": "^24.10.0", + "@types/react": "^19.2.2", + "@types/react-dom": "^19.2.2", + "postcss": "^8.5.6", + "tailwindcss": "^4.1.16", + "typescript": "^5.9.3", + "eslint-config-next": "16.0.1", + "eslint": "^9.39.1", + "@eslint/eslintrc": "^3.3.1" + } +} \ No newline at end of file diff --git a/docs/postcss.config.mjs b/docs/postcss.config.mjs new file mode 100644 index 0000000..a34a3d5 --- /dev/null +++ b/docs/postcss.config.mjs @@ -0,0 +1,5 @@ +export default { + plugins: { + '@tailwindcss/postcss': {}, + }, +}; diff --git a/docs/source.config.ts b/docs/source.config.ts new file mode 100644 index 0000000..b5ffa0a --- /dev/null +++ b/docs/source.config.ts @@ -0,0 +1,27 @@ +import { + defineConfig, + defineDocs, + frontmatterSchema, + metaSchema, +} from 'fumadocs-mdx/config'; + +// You can customise Zod schemas for frontmatter and `meta.json` here +// see https://fumadocs.dev/docs/mdx/collections +export const docs = defineDocs({ + dir: 'content/docs', + docs: { + schema: frontmatterSchema, + postprocess: { + includeProcessedMarkdown: true, + }, + }, + meta: { + schema: metaSchema, + }, +}); + +export default defineConfig({ + mdxOptions: { + // MDX options + }, +}); diff --git a/docs/src/app/(home)/layout.tsx b/docs/src/app/(home)/layout.tsx new file mode 100644 index 0000000..77379fa --- /dev/null +++ b/docs/src/app/(home)/layout.tsx @@ -0,0 +1,6 @@ +import { HomeLayout } from 'fumadocs-ui/layouts/home'; +import { baseOptions } from '@/lib/layout.shared'; + +export default function Layout({ children }: LayoutProps<'/'>) { + return {children}; +} diff --git a/docs/src/app/(home)/page.tsx b/docs/src/app/(home)/page.tsx new file mode 100644 index 0000000..c936084 --- /dev/null +++ b/docs/src/app/(home)/page.tsx @@ -0,0 +1,16 @@ +import Link from 'next/link'; + +export default function HomePage() { + return ( +
+

Hello World

+

+ You can open{' '} + + /docs + {' '} + and see the documentation. +

+
+ ); +} diff --git a/docs/src/app/api/search/route.ts b/docs/src/app/api/search/route.ts new file mode 100644 index 0000000..7ba7e82 --- /dev/null +++ b/docs/src/app/api/search/route.ts @@ -0,0 +1,7 @@ +import { source } from '@/lib/source'; +import { createFromSource } from 'fumadocs-core/search/server'; + +export const { GET } = createFromSource(source, { + // https://docs.orama.com/docs/orama-js/supported-languages + language: 'english', +}); diff --git a/docs/src/app/docs/[[...slug]]/page.tsx b/docs/src/app/docs/[[...slug]]/page.tsx new file mode 100644 index 0000000..9b6d208 --- /dev/null +++ b/docs/src/app/docs/[[...slug]]/page.tsx @@ -0,0 +1,54 @@ +import { getPageImage, source } from '@/lib/source'; +import { + DocsBody, + DocsDescription, + DocsPage, + DocsTitle, +} from 'fumadocs-ui/page'; +import { notFound } from 'next/navigation'; +import { getMDXComponents } from '@/mdx-components'; +import type { Metadata } from 'next'; +import { createRelativeLink } from 'fumadocs-ui/mdx'; + +export default async function Page(props: PageProps<'/docs/[[...slug]]'>) { + const params = await props.params; + const page = source.getPage(params.slug); + if (!page) notFound(); + + const MDX = page.data.body; + + return ( + + {page.data.title} + {page.data.description} + + + + + ); +} + +export async function generateStaticParams() { + return source.generateParams(); +} + +export async function generateMetadata( + props: PageProps<'/docs/[[...slug]]'>, +): Promise { + const params = await props.params; + const page = source.getPage(params.slug); + if (!page) notFound(); + + return { + title: page.data.title, + description: page.data.description, + openGraph: { + images: getPageImage(page).url, + }, + }; +} diff --git a/docs/src/app/docs/layout.tsx b/docs/src/app/docs/layout.tsx new file mode 100644 index 0000000..299d2e2 --- /dev/null +++ b/docs/src/app/docs/layout.tsx @@ -0,0 +1,11 @@ +import { source } from '@/lib/source'; +import { DocsLayout } from 'fumadocs-ui/layouts/docs'; +import { baseOptions } from '@/lib/layout.shared'; + +export default function Layout({ children }: LayoutProps<'/docs'>) { + return ( + + {children} + + ); +} diff --git a/docs/src/app/global.css b/docs/src/app/global.css new file mode 100644 index 0000000..50b3bc2 --- /dev/null +++ b/docs/src/app/global.css @@ -0,0 +1,3 @@ +@import 'tailwindcss'; +@import 'fumadocs-ui/css/neutral.css'; +@import 'fumadocs-ui/css/preset.css'; diff --git a/docs/src/app/layout.tsx b/docs/src/app/layout.tsx new file mode 100644 index 0000000..22fdca3 --- /dev/null +++ b/docs/src/app/layout.tsx @@ -0,0 +1,17 @@ +import { RootProvider } from 'fumadocs-ui/provider/next'; +import './global.css'; +import { Inter } from 'next/font/google'; + +const inter = Inter({ + subsets: ['latin'], +}); + +export default function Layout({ children }: LayoutProps<'/'>) { + return ( + + + {children} + + + ); +} diff --git a/docs/src/app/llms-full.txt/route.ts b/docs/src/app/llms-full.txt/route.ts new file mode 100644 index 0000000..d494d2c --- /dev/null +++ b/docs/src/app/llms-full.txt/route.ts @@ -0,0 +1,10 @@ +import { getLLMText, source } from '@/lib/source'; + +export const revalidate = false; + +export async function GET() { + const scan = source.getPages().map(getLLMText); + const scanned = await Promise.all(scan); + + return new Response(scanned.join('\n\n')); +} diff --git a/docs/src/app/og/docs/[...slug]/route.tsx b/docs/src/app/og/docs/[...slug]/route.tsx new file mode 100644 index 0000000..f5df96d --- /dev/null +++ b/docs/src/app/og/docs/[...slug]/route.tsx @@ -0,0 +1,36 @@ +import { getPageImage, source } from '@/lib/source'; +import { notFound } from 'next/navigation'; +import { ImageResponse } from 'next/og'; +import { generate as DefaultImage } from 'fumadocs-ui/og'; + +export const revalidate = false; + +export async function GET( + _req: Request, + { params }: RouteContext<'/og/docs/[...slug]'>, +) { + const { slug } = await params; + const page = source.getPage(slug.slice(0, -1)); + if (!page) notFound(); + + return new ImageResponse( + ( + + ), + { + width: 1200, + height: 630, + }, + ); +} + +export function generateStaticParams() { + return source.getPages().map((page) => ({ + lang: page.locale, + slug: getPageImage(page).segments, + })); +} diff --git a/docs/src/lib/layout.shared.tsx b/docs/src/lib/layout.shared.tsx new file mode 100644 index 0000000..7e961b6 --- /dev/null +++ b/docs/src/lib/layout.shared.tsx @@ -0,0 +1,9 @@ +import type { BaseLayoutProps } from 'fumadocs-ui/layouts/shared'; + +export function baseOptions(): BaseLayoutProps { + return { + nav: { + title: 'My App', + }, + }; +} diff --git a/docs/src/lib/source.ts b/docs/src/lib/source.ts new file mode 100644 index 0000000..c829e38 --- /dev/null +++ b/docs/src/lib/source.ts @@ -0,0 +1,27 @@ +import { docs } from '@/.source'; +import { type InferPageType, loader } from 'fumadocs-core/source'; +import { lucideIconsPlugin } from 'fumadocs-core/source/lucide-icons'; + +// See https://fumadocs.dev/docs/headless/source-api for more info +export const source = loader({ + baseUrl: '/docs', + source: docs.toFumadocsSource(), + plugins: [lucideIconsPlugin()], +}); + +export function getPageImage(page: InferPageType) { + const segments = [...page.slugs, 'image.png']; + + return { + segments, + url: `/og/docs/${segments.join('/')}`, + }; +} + +export async function getLLMText(page: InferPageType) { + const processed = await page.data.getText('processed'); + + return `# ${page.data.title} + +${processed}`; +} diff --git a/docs/src/mdx-components.tsx b/docs/src/mdx-components.tsx new file mode 100644 index 0000000..20beb4c --- /dev/null +++ b/docs/src/mdx-components.tsx @@ -0,0 +1,9 @@ +import defaultMdxComponents from 'fumadocs-ui/mdx'; +import type { MDXComponents } from 'mdx/types'; + +export function getMDXComponents(components?: MDXComponents): MDXComponents { + return { + ...defaultMdxComponents, + ...components, + }; +} diff --git a/docs/tsconfig.json b/docs/tsconfig.json new file mode 100644 index 0000000..3b247d2 --- /dev/null +++ b/docs/tsconfig.json @@ -0,0 +1,46 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "target": "ESNext", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "react-jsx", + "incremental": true, + "paths": { + "@/*": [ + "./src/*" + ], + "@/.source": [ + ".source" + ] + }, + "plugins": [ + { + "name": "next" + } + ] + }, + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + ".next/types/**/*.ts", + ".next/dev/types/**/*.ts" + ], + "exclude": [ + "node_modules" + ] +} \ No newline at end of file diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000..44cd778 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,16 @@ +/** @format */ + +// Temporary minimal ESLint config until dependencies are installed +// Run `pnpm install` then replace this with the full config + +export default [ + { + ignores: [ + "**/dist/**", + "**/node_modules/**", + "**/coverage/**", + "**/.nx/**", + "**/bin/**", + ], + }, +]; diff --git a/knip.config.mjs b/knip.config.mjs new file mode 100644 index 0000000..7f685f5 --- /dev/null +++ b/knip.config.mjs @@ -0,0 +1,61 @@ +/** @format */ + +/** + * Knip configuration for SSHield monorepo + * Finds unused files, dependencies, and exports + */ +const config = { + workspaces: { + ".": { + entry: ["src/index.ts", "src/cli.ts", "src/main.ts"], + project: ["src/**/*.ts", "src/**/*.tsx"], + }, + "packages/*": { + entry: ["src/index.ts", "src/index.tsx", "src/cli.ts", "src/main.ts"], + project: ["src/**/*.ts", "src/**/*.tsx"], + }, + config: { + entry: ["src/index.ts"], + project: ["src/**/*.ts"], + }, + }, + + ignore: [ + "**/*.spec.ts", + "**/*.test.ts", + "**/*.test.tsx", + "**/*.config.ts", + "**/*.config.js", + "**/dist/**", + "**/coverage/**", + "**/.nx/**", + "**/node_modules/**", + ], + + ignoreDependencies: [ + "@types/*", + "typescript", + "tslib", + "@nx/*", + "lefthook", // Used via CLI + ], + + ignoreExportsUsedInFile: true, + includeEntryExports: true, + + prettier: { + config: ["prettier.config.{js,mjs,cjs,ts}"], + }, + + eslint: { + config: ["eslint.config.{js,mjs,cjs,ts}"], + }, + + typescript: { + config: ["tsconfig.json", "tsconfig.*.json"], + }, + + ignoreBinaries: [], +}; + +export default config; diff --git a/nx.json b/nx.json new file mode 100644 index 0000000..75629e5 --- /dev/null +++ b/nx.json @@ -0,0 +1,121 @@ +{ + "$schema": "./node_modules/nx/schemas/nx-schema.json", + "parallel": 4, + "targetDefaults": { + "build": { + "dependsOn": [ + "^build" + ], + "cache": true + }, + "typecheck": { + "cache": true + }, + "lint": { + "cache": true + }, + "@nx/js:tsc": { + "cache": true, + "dependsOn": [ + "^build" + ], + "inputs": [ + "production", + "^production" + ] + }, + "@nx/eslint:lint": { + "cache": true, + "inputs": [ + "default", + "{workspaceRoot}/.eslintrc.json", + "{workspaceRoot}/.eslintignore", + "{workspaceRoot}/eslint.config.mjs" + ] + } + }, + "defaultBase": "feat-monorepo-init", + "namedInputs": { + "production": [ + "default", + "!{projectRoot}/src/**/*.spec.ts", + "!{projectRoot}/src/**/*.test.ts", + "!{projectRoot}/src/**/*.e2e.ts", + "!{projectRoot}/.eslintrc.json", + "!{projectRoot}/eslint.config.mjs", + "!{projectRoot}/**/?(*.)+(spec|test).[jt]s?(x)?(.snap)", + "!{projectRoot}/tsconfig.spec.json", + "!{projectRoot}/src/test-setup.[jt]s", + "!{projectRoot}/test-setup.[jt]s" + ] + }, + "tui": { + "enabled": true + }, + "plugins": [ + { + "plugin": "@nx/workspace", + "options": {} + }, + { + "plugin": "@nx/js", + "options": {} + }, + { + "plugin": "@nx/js/typescript", + "options": { + "typecheck": { + "targetName": "typecheck" + }, + "build": { + "targetName": "build", + "configName": "tsconfig.lib.json", + "buildDepsName": "build-deps", + "watchDepsName": "watch-deps" + } + } + }, + { + "plugin": "@nx/rollup/plugin", + "options": { + "buildTargetName": "build", + "buildDepsTargetName": "build-deps", + "watchDepsTargetName": "watch-deps", + "generateExportsField": true, + "outputPath": "./dist", + "main": "src/index.ts" + } + }, + { + "plugin": "@nx/eslint/plugin", + "options": { + "targetName": "lint" + } + }, + { + "plugin": "@nx/plugin", + "options": { + "buildTargetName": "build", + "e2eTestTargetName": "e2e" + } + }, + { + "plugin": "@nx/conformance", + "options": { + "conformanceTargetName": "conform" + } + } + ], + "generators": { + "@nx/js:library": { + "bundler": "rollup", + "linter": "eslint", + "useProjectJson": true + } + }, + "release": { + "version": { + "preVersionCommand": "pnpm dlx nx run-many -t build" + } + } +} \ No newline at end of file diff --git a/package.json b/package.json index e3bab39..9984cae 100644 --- a/package.json +++ b/package.json @@ -1,59 +1,75 @@ { - "name": "sshield", - "version": "1.0.0", - "description": "Secure SSH key management with project-based namespaces", - "main": "dist/index.js", - "bin": { - "sshield": "dist/index.js" - }, - "scripts": { - "build": "tsc", - "start": "node dist/index.js", - "dev": "ts-node src/index.ts", - "lint": "eslint --ext .ts src/", - "test": "jest", - "prepare": "pnpm run build" - }, - "keywords": [ - "ssh", - "security", - "key-management", - "cli", - "terminal" - ], - "author": "shaik noorullah ", - "license": "MIT", - "dependencies": { - "blessed": "^0.1.81", - "boxen": "^8.0.1", - "chalk": "^5.4.1", - "commander": "^13.1.0", - "crypto-js": "^4.2.0", - "date-fns": "^4.1.0", - "expandenv": "^1.0.0", - "figlet": "^1.8.1", - "fs-extra": "^11.3.0", - "gradient-string": "^3.0.0", - "inquirer": "^12.6.0", - "node-notifier": "^10.0.1", - "node-ssh": "^13.2.1", - "ora": "^8.2.0", - "uuid": "^11.1.0" - }, - "devDependencies": { - "@types/blessed": "^0.1.25", - "@types/boxen": "^3.0.5", - "@types/crypto-js": "^4.2.2", - "@types/figlet": "^1.7.0", - "@types/fs-extra": "^11.0.4", - "@types/gradient-string": "^1.1.6", - "@types/inquirer": "^9.0.7", - "@types/node": "^22.15.2", - "@types/node-notifier": "^8.0.5", - "ts-node": "^10.9.2", - "typescript": "^5.8.3" - }, - "engines": { - "node": ">=14.0.0" - } -} \ No newline at end of file + "name": "sshield", + "version": "1.0.0", + "description": "The ultimate SSH security and management toolkit", + "main": "dist/index.js", + "bin": { + "sshield": "dist/index.js" + }, + "packageManager": "pnpm@10.10.0", + "keywords": [ + "ssh", + "security", + "key-management", + "cli", + "terminal" + ], + "author": "shaik noorullah ", + "contributors": [ + "Prathik Shetty " + ], + "license": "MIT", + "scripts": { + "prepare": "lefthook install", + "commit": "git-cz", + "scaffold": "node tools/scripts/scaffold-package.mjs", + "build": "nx run-many --target=build", + "dev": "nx run-many --target=dev", + "lint": "nx run-many --target=lint", + "test": "nx run-many --target=test", + "docs": "nx run-many --target=docs", + "knip": "knip", + "knip:fix": "knip --fix", + "clean": "nx reset && rimraf dist coverage .c8 .nyc_output" + }, + "devDependencies": { + "@commitlint/cli": "^19.6.1", + "@commitlint/config-conventional": "^19.6.0", + "@nx/conformance": "^3.0.0", + "@nx/devkit": "^22.0.3", + "@nx/eslint": "^21.3.7", + "@nx/js": "^21.3.7", + "@nx/plugin": "^21.3.7", + "@nx/rollup": "^21.3.7", + "@nx/workspace": "^21.3.7", + "@sshield/config": "workspace:^", + "@types/lodash": "^4.17.20", + "@types/node": "^18.19.120", + "@typescript-eslint/eslint-plugin": "^8.38.0", + "@typescript-eslint/parser": "^8.38.0", + "commitizen": "^4.3.1", + "cz-conventional-commit": "1.0.6", + "cz-git": "^1.12.0", + "eslint": "^9.31.0", + "eslint-config-prettier": "^10.0.0", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-prettier": "^5.5.1", + "knip": "^5.38.0", + "lefthook": "^1.10.0", + "lodash": "^4.17.21", + "nx": "^21.3.7", + "prettier": "^3.0.0", + "rimraf": "^6.0.1", + "tslib": "^2.8.1", + "typescript": "^5.8.3" + }, + "engines": { + "node": ">=22.11.0", + "pnpm": ">=10.10.0" + }, + "config": { + "commitizen": { + "path": "node_modules/cz-git" + } + } +} diff --git a/packages/example-cli/.c8rc.json b/packages/example-cli/.c8rc.json new file mode 100644 index 0000000..efd7ca7 --- /dev/null +++ b/packages/example-cli/.c8rc.json @@ -0,0 +1,28 @@ +{ + "all": true, + "check-coverage": true, + "lines": 65, + "functions": 65, + "branches": 75, + "statements": 65, + "include": ["src/**/*.ts", "src/**/*.tsx"], + "exclude": [ + "**/*.spec.ts", + "**/*.test.ts", + "**/*.test.tsx", + "**/*.d.ts", + "**/node_modules/**", + "**/dist/**", + "**/coverage/**", + "**/*.config.ts", + "**/*.config.js" + ], + "extension": [".ts", ".tsx"], + "reporter": ["text", "lcov", "html", "json-summary"], + "report-dir": "./coverage", + "temp-directory": "./.c8", + "clean": true, + "skip-full": false, + "src": ["src"], + "exclude-after-remap": true +} diff --git a/packages/example-cli/.mocharc.json b/packages/example-cli/.mocharc.json new file mode 100644 index 0000000..3a6568d --- /dev/null +++ b/packages/example-cli/.mocharc.json @@ -0,0 +1,16 @@ +{ + "extensions": ["ts", "tsx"], + "spec": ["src/**/*.spec.ts", "src/**/*.spec.tsx", "src/**/*.test.ts", "src/**/*.test.tsx"], + "require": ["ts-node/register"], + "loader": "ts-node/esm", + "node-option": ["experimental-specifier-resolution=node", "loader=ts-node/esm"], + "recursive": true, + "timeout": 5000, + "reporter": "spec", + "color": true, + "exit": true, + "watchFiles": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.spec.ts", "src/**/*.spec.tsx", "src/**/*.test.ts", "src/**/*.test.tsx"], + "bail": false, + "fullTrace": false, + "checkLeaks": false +} diff --git a/packages/example-cli/.prettierrc.json b/packages/example-cli/.prettierrc.json new file mode 100644 index 0000000..0130798 --- /dev/null +++ b/packages/example-cli/.prettierrc.json @@ -0,0 +1,3 @@ +{ + "extends": "@sshield/config/prettier" +} diff --git a/packages/example-cli/.release-it.json b/packages/example-cli/.release-it.json new file mode 100644 index 0000000..5a56608 --- /dev/null +++ b/packages/example-cli/.release-it.json @@ -0,0 +1,34 @@ +{ + "git": { + "commit": true, + "tag": true, + "push": true, + "commitMessage": "release: @sshield/example-cli@${version}", + "tagName": "@sshield/example-cli@${version}", + "requireCleanWorkingDir": false, + "requireUpstream": true, + "addUntrackedFiles": false + }, + "npm": { + "publish": true, + "publishPath": ".", + "skipChecks": false, + "ignoreVersion": false + }, + "github": { + "release": false + }, + "plugins": { + "@release-it/conventional-changelog": { + "preset": { + "name": "conventionalcommits" + }, + "infile": "CHANGELOG.md", + "header": "# Changelog" + } + }, + "hooks": { + "before:init": ["pnpm run build", "pnpm run test"], + "after:bump": "echo Successfully bumped version to ${version}" + } +} diff --git a/packages/example-cli/PACKAGING.md b/packages/example-cli/PACKAGING.md new file mode 100644 index 0000000..fd5048c --- /dev/null +++ b/packages/example-cli/PACKAGING.md @@ -0,0 +1,303 @@ +# Packaging Guide for example-cli + +This document describes the various packaging and distribution methods available for the example-cli package. + +## ⚠️ Important Notice + +**The `bundle` and `pkg` binary targets DO NOT WORK with Ink-based CLIs** due to React's use of top-level await in ESM modules. These targets will fail with the error: "Module format 'cjs' does not support top-level await." + +**Working Targets:** +- ✅ `pnpm build` - TypeScript compilation +- ✅ `pnpm test` - Run tests +- ✅ `pnpm typecheck` - Type checking +- ✅ `pnpm test:coverage` - Coverage reports +- ✅ `pnpm build:package` - System packages (.deb, .rpm, .apk, PKGBUILD) + +**Non-Working Targets (Ink Limitation):** +- ❌ `pnpm build:bundle` - Fails due to top-level await +- ❌ `pnpm build:binary` - Depends on bundle, also fails + +## Table of Contents + +- [Testing & Coverage](#testing--coverage) +- [System Packages with nfpm](#system-packages-with-nfpm) +- [Binary Packaging Alternatives](#binary-packaging-alternatives) +- [Requirements](#requirements) +- [Known Limitations](#known-limitations) + +## Testing & Coverage + +### Running Tests + +```bash +# Run all tests +pnpm nx test @sshield/example-cli + +# Run tests with coverage +pnpm nx coverage @sshield/example-cli +``` + +### Coverage Reports + +Code coverage is generated using `c8` with the following outputs: + +- **HTML Report**: `packages/example-cli/coverage/index.html` +- **LCOV Report**: `packages/example-cli/coverage/lcov.info` +- **JSON Summary**: `packages/example-cli/coverage/coverage-summary.json` + +**Coverage Thresholds**: +- Lines: 65% +- Functions: 65% +- Branches: 75% +- Statements: 65% + +Current coverage focuses on testable utilities and components. CLI entry points and command handlers would typically be covered by integration tests rather than unit tests. + +## Binary Packaging Alternatives + +Since `pkg` does not work with Ink-based CLIs due to top-level await limitations, here are the recommended alternatives: + +### Option 1: NPM Distribution (Recommended) + +The simplest and most effective way to distribute the CLI: + +```bash +# Install globally from npm +npm install -g @sshield/example-cli + +# Or run directly with npx +npx @sshield/example-cli hello --name "World" +``` + +**Pros:** +- Works perfectly with Ink/React +- Automatic dependency management +- Easy updates via npm +- Cross-platform support + +**Cons:** +- Requires Node.js installed on target system + +### Option 2: System Packages (nfpm) + +Create native packages for Linux distributions (see below for details): + +```bash +pnpm build:package +``` + +This generates: +- `.deb` for Debian/Ubuntu +- `.rpm` for Fedora/RHEL/SUSE +- `.apk` for Alpine Linux +- `PKGBUILD` for Arch Linux + +### Option 3: Docker Container + +Package the CLI in a Docker container: + +```dockerfile +FROM node:18-alpine +WORKDIR /app +COPY package.json pnpm-lock.yaml ./ +RUN npm install -g pnpm && pnpm install --frozen-lockfile +COPY . . +RUN pnpm build +ENTRYPOINT ["node", "dist/src/cli.js"] +``` + +**Why pkg Doesn't Work**: +- Ink uses React with top-level await +- CommonJS format (required by pkg) doesn't support top-level await +- Attempting to bundle results in: `RollupError: Module format "cjs" does not support top-level await` + +## System Packages with nfpm + +nfpm creates native packages (.deb, .rpm) for Linux distributions. + +### Prerequisites + +Install nfpm: + +```bash +# On macOS +brew install nfpm + +# On Linux (using go) +go install github.com/goreleaser/nfpm/v2/cmd/nfpm@latest + +# Using Docker +docker pull goreleaser/nfpm +``` + +### Building Packages + +```bash +# Build all packages (recommended - uses package-dist.mjs) +pnpm build:package + +# The script generates: +# - nfpm.yaml (package configuration) +# - PKGBUILD (Arch Linux source) +# - PKGBUILD.bin (Arch Linux binary) +# - Builds .deb, .rpm, and .apk packages if nfpm is installed +``` + +### Output + +Packages are created in the current directory: + +- `example-cli_1.0.0_amd64.deb` (Debian/Ubuntu) +- `example-cli-1.0.0-1.x86_64.rpm` (RHEL/Fedora/SUSE) +- `example-cli_1.0.0_x86_64.apk` (Alpine Linux) +- `PKGBUILD` (Arch Linux source) +- `PKGBUILD.bin` (Arch Linux binary) + +**Note**: The generated `nfpm.yaml` expects a binary at `./dist/example-cli`. For Node.js CLIs, you may need to customize this to install the full application directory instead. + +### Package Installation + +```bash +# Debian/Ubuntu +sudo dpkg -i sshield-example-cli_1.0.0_amd64.deb +sudo apt-get install -f # Install dependencies + +# RHEL/Fedora +sudo rpm -i sshield-example-cli-1.0.0.x86_64.rpm +``` + +### Package Contents + +- **Application**: `/usr/lib/sshield-example-cli/` +- **Executable**: `/usr/bin/example-cli` +- **Dependencies**: Automatically installs production dependencies during post-install + +### Usage After Installation + +```bash +# From anywhere in the system +example-cli hello --name "System Package" +example-cli --help +``` + +### Configuration + +See `packages/example-cli/nfpm.yaml` for package configuration. + +## Requirements + +### For Development + +- Node.js >= 18.0.0 +- pnpm >= 8.0.0 +- TypeScript >= 5.0.0 + +### For Testing + +- Mocha (ts-mocha for TypeScript) +- Chai (assertions) +- c8 (coverage) +- ink-testing-library (Ink component testing) + +### For Binary Packaging + +- @yao-pkg/pkg (installed as devDependency) +- Node.js build toolchain + +### For System Packaging + +- nfpm (must be installed separately) +- rpm tools (for .rpm packages) +- dpkg tools (for .deb packages) + +## Known Limitations + +### pkg Limitations + +1. **Ink/React Limitations**: Complex React-based terminal UIs may not bundle correctly due to: + - Top-level await in ESM modules + - Dynamic imports + - Complex dependency trees + +2. **Bundle Size**: Binaries are large (30-50MB) because they include: + - Complete Node.js runtime + - All dependencies + - Application code + +3. **Platform Support**: + - macOS binaries require code signing + - Some native modules may not work in all environments + +### nfpm Considerations + +1. **Node.js Dependency**: System packages require Node.js to be pre-installed on the target system +2. **npm Installation**: Post-install script runs `npm install --production`, which requires internet connectivity +3. **Platform Specific**: Must build separate packages for each target distribution + +## Recommendations + +### For Development & Testing +- ✅ Use `pnpm test` and `pnpm test:coverage` for local development +- ✅ Run the CLI directly with `node dist/src/cli.js` (after `pnpm build`) +- ✅ Use `pnpm typecheck` before committing + +### For Distribution + +| Method | Status | Best For | Limitations | +|--------|--------|----------|-------------| +| **npm/npx** | ✅ **Works** | All users, simplest method | Requires Node.js 18+ | +| **System Packages** | ✅ **Works** | Linux production servers | Platform-specific | +| **Docker** | ✅ **Works** | Containerized deployments | Requires Docker | +| **pkg Binaries** | ❌ **Broken** | N/A - Doesn't work with Ink | Top-level await incompatibility | +| **tsup Bundle** | ❌ **Broken** | N/A - Doesn't work with Ink | Top-level await incompatibility | + +### Recommended Approach for Production + +For this Ink-based CLI: + +1. **Primary (Recommended)**: Distribute via npm registry + ```bash + # Install globally + npm install -g @sshield/example-cli + + # Or use without installing + npx @sshield/example-cli hello --name "World" + ``` + - ✅ Simplest for users + - ✅ Cross-platform + - ✅ Automatic updates + - ✅ Works perfectly with Ink/React + +2. **Alternative**: System packages for enterprise Linux + ```bash + pnpm build:package + sudo dpkg -i example-cli_1.0.0_amd64.deb + ``` + - ✅ Native package manager integration + - ✅ System-wide installation + - ⚠️ Requires customization for Node.js CLIs + +3. **Development**: Direct execution from repository + ```bash + pnpm install + pnpm build + node dist/src/cli.js hello + ``` + +### Why Not Standalone Binaries? + +Ink-based CLIs cannot be packaged with `pkg` or similar tools because: +- React/Ink uses ESM with top-level await +- CommonJS bundling (required by pkg) doesn't support top-level await +- Attempting to bundle fails with rollup errors + +For standalone binaries, consider: +- Rewriting the CLI without Ink (use a different terminal UI library) +- Or accept that npm/system packages are the distribution methods + +## Additional Resources + +- [pkg Documentation](https://github.com/yao-pkg/pkg) +- [nfpm Documentation](https://nfpm.goreleaser.com/) +- [Ink Documentation](https://github.com/vadimdemedes/ink) +- [Commander.js Documentation](https://github.com/tj/commander.js) diff --git a/packages/example-cli/README.md b/packages/example-cli/README.md new file mode 100644 index 0000000..79375d5 --- /dev/null +++ b/packages/example-cli/README.md @@ -0,0 +1,228 @@ +# @sshield/example-cli + +Example CLI application demonstrating the complete SSHield monorepo tooling setup. + +## Features + +This package demonstrates all the tooling configured in the SSHield monorepo: + +- **TypeScript** with strict mode compilation +- **Ink** for React-based CLI UIs +- **Commander.js** for CLI argument parsing +- **Chalk** for terminal colors +- **Mocha + Chai** for unit testing +- **ink-testing-library** for component testing +- **c8** for code coverage +- **tsup** for bundling +- **@yao-pkg/pkg** for standalone binary creation +- **TypeDoc** for API documentation generation +- **release-it** for release automation +- **nfpm** for package creation (.deb, .rpm, .apk) +- **ESLint** for linting +- **Prettier** for code formatting + +## Installation + +```bash +pnpm add @sshield/example-cli +``` + +## Usage + +### CLI Commands + +```bash +# Simple greeting +example-cli greet --name Alice + +# Interactive Ink UI +example-cli greet --name Alice --interactive + +# Show package information +example-cli info + +# Show version +example-cli --version + +# Show help +example-cli --help +``` + +### Programmatic API + +```typescript +import { formatMessage, capitalize, createBanner } from "@sshield/example-cli"; + +// Format a greeting message +const message = formatMessage("World"); +console.log(message); // "Hello, World! 👋" + +// Capitalize a string +const capitalized = capitalize("hello"); +console.log(capitalized); // "Hello" + +// Create a banner +const banner = createBanner("Welcome"); +console.log(banner); +// ============= +// Welcome +// ============= +``` + +## Development + +### Build + +```bash +# Build the package +pnpm nx build @sshield/example-cli + +# Build in watch mode +pnpm nx dev @sshield/example-cli +``` + +### Testing + +```bash +# Run tests +pnpm nx test @sshield/example-cli + +# Run tests with coverage +pnpm nx coverage @sshield/example-cli + +# Run tests in watch mode +pnpm nx test:watch @sshield/example-cli +``` + +### Linting and Formatting + +```bash +# Lint the code +pnpm nx lint @sshield/example-cli + +# Format the code +pnpm nx format @sshield/example-cli +``` + +### Documentation + +```bash +# Generate API documentation +pnpm nx docs @sshield/example-cli +``` + +### Bundling + +```bash +# Create optimized bundle +pnpm nx bundle @sshield/example-cli +``` + +### Binary Creation + +```bash +# Create standalone binaries for all platforms +pnpm nx pkg @sshield/example-cli +``` + +### Package Creation + +```bash +# Create .deb, .rpm, and .apk packages +pnpm nx package @sshield/example-cli +``` + +### Release + +```bash +# Create a new release +pnpm nx release @sshield/example-cli +``` + +## Project Structure + +``` +example-cli/ +├── src/ +│ ├── cli.ts # Main CLI entry point +│ ├── index.ts # Public API exports +│ ├── components/ +│ │ ├── App.tsx # Ink React component +│ │ └── App.test.tsx # Component tests +│ └── utils/ +│ ├── formatter.ts # Utility functions +│ └── formatter.spec.ts # Unit tests +├── dist/ # Compiled output +├── coverage/ # Test coverage reports +├── docs/ # Generated API documentation +├── bundle/ # Bundled output +├── bin/ # Standalone binaries +└── pkg/ # Distribution packages +``` + +## Testing Strategy + +### Unit Tests + +Unit tests are written using Mocha and Chai. They test individual functions in isolation: + +- `formatter.spec.ts`: Tests for utility functions like `formatMessage`, `capitalize`, and `createBanner` + +### Component Tests + +Component tests use `ink-testing-library` to test React components: + +- `App.test.tsx`: Tests for the Ink React component, including rendering and state updates + +### Coverage + +Code coverage is measured using c8 (V8 coverage). Aim for at least 80% coverage across all metrics. + +## Build Outputs + +### Compiled Output (`dist/`) + +TypeScript files compiled to JavaScript with type declarations: + +- `*.js` - Compiled JavaScript (CommonJS) +- `*.d.ts` - TypeScript type declarations +- `*.map` - Source maps for debugging + +### Bundled Output (`bundle/`) + +Optimized bundle created by tsup: + +- Single-file bundle with tree-shaking +- Minified for production +- Ready for distribution + +### Binaries (`bin/`) + +Standalone executables created by @yao-pkg/pkg: + +- `example-cli-linux` - Linux binary +- `example-cli-macos` - macOS binary +- `example-cli-win.exe` - Windows binary + +### Packages (`pkg/`) + +Distribution packages created by nfpm: + +- `*.deb` - Debian/Ubuntu package +- `*.rpm` - RedHat/Fedora package +- `*.apk` - Alpine Linux package + +## Configuration Files + +- `project.json` - NX project configuration +- `tsconfig.json` - TypeScript configuration +- `tsconfig.lib.json` - TypeScript library configuration +- `tsconfig.spec.json` - TypeScript test configuration +- `tsup.config.ts` - tsup bundler configuration +- `pkg.config.json` - @yao-pkg/pkg binary configuration +- `nfpm.yaml` - nfpm package configuration +- `.release-it.json` - release-it configuration + +## License + +MIT diff --git a/packages/example-cli/nfpm.yaml b/packages/example-cli/nfpm.yaml new file mode 100644 index 0000000..e4fe20b --- /dev/null +++ b/packages/example-cli/nfpm.yaml @@ -0,0 +1,73 @@ +name: "example-cli" +arch: "amd64" +platform: "linux" +version: "1.0.0" +version_schema: semver + +section: utils +priority: optional + +maintainer: "SSHield Team " +description: | + Example CLI application demonstrating SSHield monorepo tooling. + Built with TypeScript, Ink, and Commander.js. +vendor: "SSHield" +homepage: "https://github.com/shaiknoorullah/SSHield" +license: "MIT" + +# Dependencies - require Node.js +depends: + - nodejs + +# Files to include in the package +contents: + # Compiled JavaScript files + - src: ./dist/ + dst: /usr/lib/example-cli/ + type: tree + + # Package metadata + - src: ./package.json + dst: /usr/lib/example-cli/package.json + type: file + + # README + - src: ./README.md + dst: /usr/share/doc/example-cli/README.md + type: doc + + # Executable wrapper + - src: ./scripts/example-cli.sh + dst: /usr/bin/example-cli + type: file + file_info: + mode: 0755 + +# Scripts +scripts: + postinstall: | + #!/bin/sh + cd /usr/lib/example-cli + echo "Installing Node.js dependencies..." + npm install --production --ignore-scripts || true + echo "example-cli installed successfully!" + echo "Run 'example-cli --help' to get started." + + preremove: | + #!/bin/sh + echo "Removing example-cli..." + + postremove: | + #!/bin/sh + rm -rf /usr/lib/example-cli/node_modules + echo "example-cli removed successfully!" + +# Package format specific settings +deb: + fields: + Recommends: nodejs (>= 18.0.0) + Bugs: https://github.com/shaiknoorullah/SSHield/issues + +rpm: + group: Development/Tools + compression: xz diff --git a/packages/example-cli/package.json b/packages/example-cli/package.json new file mode 100644 index 0000000..6bbfb87 --- /dev/null +++ b/packages/example-cli/package.json @@ -0,0 +1,51 @@ +{ + "name": "@sshield/example-cli", + "version": "1.0.0", + "description": "Example CLI application demonstrating all SSHield tooling", + "type": "module", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "bin": { + "example-cli": "dist/cli.js" + }, + "scripts": { + "build": "nx build", + "build:bundle": "nx bundle", + "build:binary": "nx pkg", + "build:package": "nx package", + "test": "nx test", + "test:coverage": "nx coverage", + "docs": "nx docs", + "release": "nx release", + "lint": "nx lint", + "typecheck": "nx typecheck" + }, + "dependencies": { + "chalk": "^4.1.2", + "commander": "^12.1.0", + "ink": "^4.4.1", + "react": "^18.3.1" + }, + "devDependencies": { + "@sshield/config": "workspace:^", + "@types/chai": "^4.3.20", + "@types/mocha": "^10.0.10", + "@types/node": "^18.19.120", + "@types/react": "^18.3.0", + "@yao-pkg/pkg": "^6.0.0", + "c8": "^10.1.2", + "chai": "^4.5.0", + "ink-testing-library": "^4.0.0", + "mocha": "^10.8.2", + "react-devtools-core": "^5.3.2", + "release-it": "^19.0.0", + "ts-mocha": "^10.0.0", + "ts-node": "^10.9.2", + "tsup": "^8.5.0", + "typedoc": "^0.28.0", + "typedoc-plugin-markdown": "^4.9.0" + }, + "publishConfig": { + "access": "public" + } +} diff --git a/packages/example-cli/pkg.config.json b/packages/example-cli/pkg.config.json new file mode 100644 index 0000000..06ed528 --- /dev/null +++ b/packages/example-cli/pkg.config.json @@ -0,0 +1,14 @@ +{ + "scripts": ["dist/**/*.js"], + "assets": ["package.json", "dist/**/*.json", "dist/**/*.md"], + "targets": [ + "node18-linux-x64", + "node18-linux-arm64", + "node18-macos-x64", + "node18-macos-arm64", + "node18-win-x64", + "node18-win-arm64" + ], + "outputPath": "bin", + "compress": "Brotli" +} diff --git a/packages/example-cli/project.json b/packages/example-cli/project.json new file mode 100644 index 0000000..b278dd3 --- /dev/null +++ b/packages/example-cli/project.json @@ -0,0 +1,119 @@ +{ + "name": "@sshield/example-cli", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "packages/example-cli/src", + "projectType": "library", + "tags": [], + "targets": { + "build": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "cache": true, + "options": { + "outputPath": "packages/example-cli/dist", + "main": "packages/example-cli/src/index.ts", + "tsConfig": "packages/example-cli/tsconfig.lib.json", + "assets": ["*.md"], + "clean": true + } + }, + "bundle": { + "executor": "nx:run-commands", + "outputs": ["{projectRoot}/dist-bundle"], + "options": { + "command": "pnpm --filter @sshield/example-cli exec tsup --config tsup.config.ts" + } + }, + "lint": { + "executor": "@nx/eslint:lint", + "outputs": ["{options.outputFile}"], + "options": { + "lintFilePatterns": [ + "packages/example-cli/**/*.ts", + "packages/example-cli/**/*.tsx" + ] + } + }, + "typecheck": { + "executor": "nx:run-commands", + "options": { + "command": "pnpm --filter @sshield/example-cli exec tsc --noEmit --project tsconfig.spec.json" + } + }, + "test": { + "executor": "nx:run-commands", + "outputs": [], + "options": { + "command": "pnpm --filter @sshield/example-cli exec ts-mocha" + } + }, + "coverage": { + "executor": "nx:run-commands", + "outputs": ["{projectRoot}/coverage"], + "options": { + "command": "pnpm --filter @sshield/example-cli exec c8 --config .c8rc.json ts-mocha" + } + }, + "docs": { + "executor": "nx:run-commands", + "options": { + "command": "pnpm --filter @sshield/example-cli exec typedoc --options typedoc.json" + } + }, + "release": { + "executor": "nx:run-commands", + "options": { + "command": "pnpm --filter @sshield/example-cli exec release-it" + } + }, + "pkg": { + "executor": "nx:run-commands", + "dependsOn": ["bundle"], + "outputs": ["{projectRoot}/bin"], + "options": { + "command": "pnpm --filter @sshield/example-cli exec pkg dist-bundle/cli.js --config pkg.config.json --output bin/example-cli" + } + }, + "nfpm:deb": { + "executor": "nx:run-commands", + "dependsOn": ["build"], + "outputs": ["{projectRoot}/*.deb"], + "options": { + "command": "nfpm package --packager deb --config nfpm.yaml", + "cwd": "packages/example-cli" + } + }, + "nfpm:rpm": { + "executor": "nx:run-commands", + "dependsOn": ["build"], + "outputs": ["{projectRoot}/*.rpm"], + "options": { + "command": "nfpm package --packager rpm --config nfpm.yaml", + "cwd": "packages/example-cli" + } + }, + "nfpm:apk": { + "executor": "nx:run-commands", + "dependsOn": ["build"], + "outputs": ["{projectRoot}/*.apk"], + "options": { + "command": "nfpm package --packager apk --config nfpm.yaml", + "cwd": "packages/example-cli" + } + }, + "nfpm:all": { + "executor": "nx:run-commands", + "dependsOn": ["nfpm:deb", "nfpm:rpm", "nfpm:apk"], + "outputs": ["{projectRoot}/*.deb", "{projectRoot}/*.rpm", "{projectRoot}/*.apk"] + }, + "package": { + "executor": "nx:run-commands", + "dependsOn": ["build"], + "outputs": ["{projectRoot}/dist-packages"], + "options": { + "command": "node ../../tools/scripts/package-dist.mjs", + "cwd": "packages/example-cli" + } + } + } +} diff --git a/packages/example-cli/scripts/example-cli.sh b/packages/example-cli/scripts/example-cli.sh new file mode 100644 index 0000000..8bf3a3f --- /dev/null +++ b/packages/example-cli/scripts/example-cli.sh @@ -0,0 +1,4 @@ +#!/bin/sh +# Wrapper script for example-cli + +NODE_PATH=/usr/lib/example-cli/node_modules node /usr/lib/example-cli/src/cli.js "$@" diff --git a/packages/example-cli/src/cli.ts b/packages/example-cli/src/cli.ts new file mode 100644 index 0000000..d0da55a --- /dev/null +++ b/packages/example-cli/src/cli.ts @@ -0,0 +1,18 @@ +#!/usr/bin/env node +/** @format */ + +import { Command } from "commander"; +import { helloCommand } from "./commands/hello.js"; + +const program = new Command(); + +program + .name("example-cli") + .description("Example CLI demonstrating SSHield monorepo tooling") + .version("1.0.0"); + +// Register commands +program.addCommand(helloCommand); + +// Parse arguments +program.parse(process.argv); diff --git a/packages/example-cli/src/commands/hello.tsx b/packages/example-cli/src/commands/hello.tsx new file mode 100644 index 0000000..2d5c8d2 --- /dev/null +++ b/packages/example-cli/src/commands/hello.tsx @@ -0,0 +1,22 @@ +/** @format */ + +import { Command } from "commander"; +import { render } from "ink"; +import React from "react"; +import { HelloWorld } from "../components/HelloWorld.js"; +import { logger } from "../utils/logger.js"; + +export const helloCommand = new Command("hello") + .description("Display a friendly hello message with Ink UI") + .option("-n, --name ", "Name to greet", "World") + .action((options) => { + logger.info(`Starting hello command for: ${options.name}`); + + const { unmount } = render(); + + // Auto-unmount after displaying the message + setTimeout(() => { + unmount(); + logger.success("Hello command completed"); + }, 2000); + }); diff --git a/packages/example-cli/src/components/HelloWorld.spec.tsx b/packages/example-cli/src/components/HelloWorld.spec.tsx new file mode 100644 index 0000000..e8d2337 --- /dev/null +++ b/packages/example-cli/src/components/HelloWorld.spec.tsx @@ -0,0 +1,38 @@ +/** @format */ + +import { render } from "ink-testing-library"; +import { expect } from "chai"; +import React from "react"; +import { HelloWorld } from "./HelloWorld.js"; + +describe("HelloWorld Component", () => { + it("should render with default name", () => { + const { lastFrame } = render(); + const output = lastFrame(); + + expect(output).to.include("Hello, World!"); + }); + + it("should render with custom name", () => { + const { lastFrame } = render(); + const output = lastFrame(); + + expect(output).to.include("Hello, SSHield!"); + }); + + it("should display monorepo tooling features", () => { + const { lastFrame } = render(); + const output = lastFrame(); + + expect(output).to.include("TypeScript"); + expect(output).to.include("Ink"); + expect(output).to.include("Commander.js"); + }); + + it("should include emoji in greeting", () => { + const { lastFrame } = render(); + const output = lastFrame(); + + expect(output).to.include("👋"); + }); +}); diff --git a/packages/example-cli/src/components/HelloWorld.tsx b/packages/example-cli/src/components/HelloWorld.tsx new file mode 100644 index 0000000..59fc542 --- /dev/null +++ b/packages/example-cli/src/components/HelloWorld.tsx @@ -0,0 +1,41 @@ +/** @format */ + +import { Box, Text } from "ink"; +import React from "react"; + +export interface HelloWorldProps { + name: string; +} + +export const HelloWorld: React.FC = ({ name }) => { + return ( + + + Hello, {name}! 👋 + + + This is an example CLI built with SSHield monorepo tooling. + + + + ✓ TypeScript for type safety + + + + + ✓ Ink for beautiful terminal UIs + + + + + ✓ Commander.js for CLI parsing + + + + ); +}; diff --git a/packages/example-cli/src/index.ts b/packages/example-cli/src/index.ts new file mode 100644 index 0000000..2ba8a03 --- /dev/null +++ b/packages/example-cli/src/index.ts @@ -0,0 +1,10 @@ +/** @format */ + +/** + * Example CLI Package + * Demonstrates SSHield monorepo tooling with TypeScript, Ink, and Commander.js + */ + +export * from "./commands/hello.js"; +export * from "./components/HelloWorld.js"; +export * from "./utils/logger.js"; diff --git a/packages/example-cli/src/utils/logger.spec.ts b/packages/example-cli/src/utils/logger.spec.ts new file mode 100644 index 0000000..2669bfa --- /dev/null +++ b/packages/example-cli/src/utils/logger.spec.ts @@ -0,0 +1,58 @@ +/** @format */ + +import { expect } from "chai"; +import { logger } from "./logger.js"; + +describe("logger", () => { + describe("info", () => { + it("should log info messages without throwing", () => { + expect(() => logger.info("test message")).to.not.throw(); + }); + }); + + describe("success", () => { + it("should log success messages without throwing", () => { + expect(() => logger.success("test success")).to.not.throw(); + }); + }); + + describe("warn", () => { + it("should log warning messages without throwing", () => { + expect(() => logger.warn("test warning")).to.not.throw(); + }); + }); + + describe("error", () => { + it("should log error messages without throwing", () => { + expect(() => logger.error("test error")).to.not.throw(); + }); + }); + + describe("debug", () => { + it("should log debug messages when DEBUG is set", () => { + const originalDebug = process.env.DEBUG; + process.env.DEBUG = "true"; + + expect(() => logger.debug("test debug")).to.not.throw(); + + // Restore original value + if (originalDebug === undefined) { + delete process.env.DEBUG; + } else { + process.env.DEBUG = originalDebug; + } + }); + + it("should not log debug messages when DEBUG is not set", () => { + const originalDebug = process.env.DEBUG; + delete process.env.DEBUG; + + expect(() => logger.debug("test debug")).to.not.throw(); + + // Restore original value + if (originalDebug !== undefined) { + process.env.DEBUG = originalDebug; + } + }); + }); +}); diff --git a/packages/example-cli/src/utils/logger.ts b/packages/example-cli/src/utils/logger.ts new file mode 100644 index 0000000..c624ee5 --- /dev/null +++ b/packages/example-cli/src/utils/logger.ts @@ -0,0 +1,30 @@ +/** @format */ + +import chalk from "chalk"; + +/** + * Simple logger utility for CLI applications + */ +export const logger = { + info: (message: string): void => { + console.log(chalk.blue("ℹ"), message); + }, + + success: (message: string): void => { + console.log(chalk.green("✓"), message); + }, + + warn: (message: string): void => { + console.log(chalk.yellow("⚠"), message); + }, + + error: (message: string): void => { + console.error(chalk.red("✖"), message); + }, + + debug: (message: string): void => { + if (process.env.DEBUG) { + console.log(chalk.gray("🐛"), message); + } + }, +}; diff --git a/packages/example-cli/tsconfig.json b/packages/example-cli/tsconfig.json new file mode 100644 index 0000000..dbac6bd --- /dev/null +++ b/packages/example-cli/tsconfig.json @@ -0,0 +1,15 @@ +{ + "extends": "@sshield/config/ts/ui", + "compilerOptions": { + "rootDir": "." + }, + "exclude": ["node_modules", "dist"], + "ts-node": { + "esm": true, + "experimentalSpecifierResolution": "node", + "compilerOptions": { + "module": "ESNext", + "jsx": "react" + } + } +} diff --git a/packages/example-cli/tsconfig.lib.json b/packages/example-cli/tsconfig.lib.json new file mode 100644 index 0000000..ec24118 --- /dev/null +++ b/packages/example-cli/tsconfig.lib.json @@ -0,0 +1,16 @@ +{ + "extends": "@sshield/config/ts/ui/lib", + "compilerOptions": { + "outDir": "./dist", + "rootDir": "./src" + }, + "include": ["src/**/*.ts", "src/**/*.tsx", "package.json"], + "exclude": [ + "node_modules", + "dist", + "**/*.spec.ts", + "**/*.test.ts", + "**/*.spec.tsx", + "**/*.test.tsx" + ] +} diff --git a/packages/example-cli/tsconfig.spec.json b/packages/example-cli/tsconfig.spec.json new file mode 100644 index 0000000..a4e79a3 --- /dev/null +++ b/packages/example-cli/tsconfig.spec.json @@ -0,0 +1,16 @@ +{ + "extends": "@sshield/config/ts/ui/spec", + "compilerOptions": { + "outDir": "./dist-spec", + "rootDir": "./src" + }, + "include": [ + "src/**/*.ts", + "src/**/*.tsx", + "src/**/*.spec.ts", + "src/**/*.test.ts", + "src/**/*.spec.tsx", + "src/**/*.test.tsx" + ], + "exclude": ["node_modules", "dist"] +} diff --git a/packages/example-cli/tsup.config.ts b/packages/example-cli/tsup.config.ts new file mode 100644 index 0000000..ff3d039 --- /dev/null +++ b/packages/example-cli/tsup.config.ts @@ -0,0 +1,24 @@ +/** @format */ + +import { defineConfig } from "tsup"; + +export default defineConfig({ + entry: ["src/cli.ts"], + format: ["esm"], // Use ESM - top-level await compatible + target: "node18", + outDir: "dist-bundle", + clean: true, + minify: false, + sourcemap: true, + bundle: true, + noExternal: [/.*/], // Bundle all dependencies + platform: "node", + treeshake: true, + splitting: false, + dts: false, // No need for types in bundled output + shims: true, // Add __dirname and __filename shims for ESM + banner: { + js: "#!/usr/bin/env node", + }, + onSuccess: "echo 'ESM bundle created successfully'", +}); diff --git a/packages/example-cli/typedoc.json b/packages/example-cli/typedoc.json new file mode 100644 index 0000000..d0dc79a --- /dev/null +++ b/packages/example-cli/typedoc.json @@ -0,0 +1,34 @@ +{ + "entryPoints": ["src/index.ts"], + "out": "../../docs/content/docs/api/example-cli", + "plugin": ["typedoc-plugin-markdown"], + "readme": "README.md", + "includeVersion": true, + "categorizeByGroup": true, + "defaultCategory": "Other", + "categoryOrder": [ + "Classes", + "Interfaces", + "Type Aliases", + "Functions", + "Variables", + "*" + ], + "sort": ["source-order", "required-first", "kind"], + "exclude": [ + "**/*.spec.ts", + "**/*.test.ts", + "**/*.test.tsx", + "**/node_modules/**", + "**/dist/**" + ], + "excludePrivate": true, + "excludeProtected": false, + "excludeInternal": true, + "hideGenerator": true, + "cleanOutputDir": true, + "gitRevision": "main", + "basePath": ".", + "excludeExternals": true, + "excludeNotDocumented": false +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e890399..bdc5394 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,1188 +1,24302 @@ -lockfileVersion: '9.0' +lockfileVersion: "9.0" settings: autoInstallPeers: true excludeLinksFromLockfile: false importers: + .: + devDependencies: + "@commitlint/cli": + specifier: ^19.6.1 + version: 19.8.1(@types/node@18.19.120)(typescript@5.9.3) + "@commitlint/config-conventional": + specifier: ^19.6.0 + version: 19.8.1 + "@nx/conformance": + specifier: ^3.0.0 + version: 3.0.0(@nx/js@21.3.7(@babel/traverse@7.28.0)(nx@21.3.7))(nx@21.3.7) + "@nx/devkit": + specifier: ^22.0.3 + version: 22.0.3(nx@21.3.7) + "@nx/eslint": + specifier: ^21.3.7 + version: 21.3.7(@babel/traverse@7.28.0)(@zkochan/js-yaml@0.0.7)(eslint@9.39.1(jiti@2.6.1))(nx@21.3.7) + "@nx/js": + specifier: ^21.3.7 + version: 21.3.7(@babel/traverse@7.28.0)(nx@21.3.7) + "@nx/plugin": + specifier: ^21.3.7 + version: 21.3.7(@babel/traverse@7.28.0)(@types/node@18.19.120)(@zkochan/js-yaml@0.0.7)(babel-plugin-macros@3.1.0)(eslint@9.39.1(jiti@2.6.1))(node-notifier@10.0.1)(nx@21.3.7)(ts-node@10.9.2(@types/node@18.19.120)(typescript@5.9.3))(typescript@5.9.3) + "@nx/rollup": + specifier: ^21.3.7 + version: 21.3.7(@babel/core@7.28.0)(@babel/traverse@7.28.0)(@types/babel__core@7.20.5)(nx@21.3.7)(ts-node@10.9.2(@types/node@18.19.120)(typescript@5.9.3))(typescript@5.9.3) + "@nx/workspace": + specifier: ^21.3.7 + version: 21.3.7 + "@sshield/config": + specifier: workspace:^ + version: link:config + "@types/lodash": + specifier: ^4.17.20 + version: 4.17.20 + "@types/node": + specifier: ^18.19.120 + version: 18.19.120 + "@typescript-eslint/eslint-plugin": + specifier: ^8.38.0 + version: 8.46.4(@typescript-eslint/parser@8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + "@typescript-eslint/parser": + specifier: ^8.38.0 + version: 8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + commitizen: + specifier: ^4.3.1 + version: 4.3.1(@types/node@18.19.120)(typescript@5.9.3) + cz-conventional-commit: + specifier: 1.0.6 + version: 1.0.6(@types/node@18.19.120)(typescript@5.9.3) + cz-git: + specifier: ^1.12.0 + version: 1.12.0 + eslint: + specifier: ^9.31.0 + version: 9.39.1(jiti@2.6.1) + eslint-config-prettier: + specifier: ^10.0.0 + version: 10.1.8(eslint@9.39.1(jiti@2.6.1)) + eslint-plugin-import: + specifier: ^2.32.0 + version: 2.32.0(@typescript-eslint/parser@8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@2.6.1)) + eslint-plugin-prettier: + specifier: ^5.5.1 + version: 5.5.3(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1))(prettier@3.6.2) + knip: + specifier: ^5.38.0 + version: 5.69.1(@types/node@18.19.120)(typescript@5.9.3) + lefthook: + specifier: ^1.10.0 + version: 1.13.6 + lodash: + specifier: ^4.17.21 + version: 4.17.21 + nx: + specifier: ^21.3.7 + version: 21.3.7 + prettier: + specifier: ^3.0.0 + version: 3.6.2 + rimraf: + specifier: ^6.0.1 + version: 6.0.1 + tslib: + specifier: ^2.8.1 + version: 2.8.1 + typescript: + specifier: ^5.8.3 + version: 5.9.3 + + config: + dependencies: + jest: + specifier: ^29.0.0 + version: 29.7.0(@types/node@18.19.120)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@types/node@18.19.120)(typescript@5.9.3)) + devDependencies: + "@commitlint/cli": + specifier: ^19.6.1 + version: 19.8.1(@types/node@18.19.120)(typescript@5.9.3) + "@commitlint/config-conventional": + specifier: ^19.6.0 + version: 19.8.1 + "@commitlint/types": + specifier: ^19.6.0 + version: 19.8.1 + "@eslint/js": + specifier: ^9.31.0 + version: 9.39.1 + "@release-it/conventional-changelog": + specifier: ^10.0.1 + version: 10.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.2.1)(release-it@19.0.6(@types/node@18.19.120)) + "@types/eslint-plugin-jsx-a11y": + specifier: ^6.10.0 + version: 6.10.0 + "@types/mocha": + specifier: ^10.0.10 + version: 10.0.10 + "@types/node": + specifier: ^18.16.9 + version: 18.19.120 + "@types/react": + specifier: ^18.3.0 + version: 18.3.26 + "@typescript-eslint/eslint-plugin": + specifier: ^8.38.0 + version: 8.46.4(@typescript-eslint/parser@8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + "@typescript-eslint/parser": + specifier: ^8.38.0 + version: 8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + "@typescript-eslint/utils": + specifier: ^8.38.0 + version: 8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + c8: + specifier: ^10.1.2 + version: 10.1.3 + eslint: + specifier: ^9.31.0 + version: 9.39.1(jiti@2.6.1) + eslint-config-prettier: + specifier: ^10.0.0 + version: 10.1.8(eslint@9.39.1(jiti@2.6.1)) + eslint-plugin-eslint-comments: + specifier: ^3.2.0 + version: 3.2.0(eslint@9.39.1(jiti@2.6.1)) + eslint-plugin-import: + specifier: ^2.32.0 + version: 2.32.0(@typescript-eslint/parser@8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@2.6.1)) + eslint-plugin-jsx-a11y: + specifier: ^6.10.2 + version: 6.10.2(eslint@9.39.1(jiti@2.6.1)) + eslint-plugin-prettier: + specifier: ^5.5.1 + version: 5.5.3(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1))(prettier@3.6.2) + eslint-plugin-react: + specifier: ^7.37.5 + version: 7.37.5(eslint@9.39.1(jiti@2.6.1)) + eslint-plugin-react-hooks: + specifier: ^5.2.0 + version: 5.2.0(eslint@9.39.1(jiti@2.6.1)) + globals: + specifier: ^16.3.0 + version: 16.4.0 + knip: + specifier: ^5.38.0 + version: 5.69.1(@types/node@18.19.120)(typescript@5.9.3) + prettier: + specifier: ^3.0.0 + version: 3.6.2 + react-devtools-core: + specifier: ^5.3.2 + version: 5.3.2 + release-it: + specifier: ^19.0.0 + version: 19.0.6(@types/node@18.19.120) + tslib: + specifier: ^2.8.1 + version: 2.8.1 + tsup: + specifier: ^8.5.0 + version: 8.5.0(jiti@2.6.1)(postcss@8.5.6)(typescript@5.9.3)(yaml@2.8.1) + typedoc: + specifier: ^0.28.0 + version: 0.28.14(typescript@5.9.3) + typedoc-plugin-markdown: + specifier: ^4.9.0 + version: 4.9.0(typedoc@0.28.14(typescript@5.9.3)) + typescript: + specifier: ^5.8.3 + version: 5.9.3 + typescript-eslint: + specifier: ^8.37.0 + version: 8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + + docs: + dependencies: + fumadocs-core: + specifier: 16.0.11 + version: 16.0.11(@types/react@19.2.5)(lucide-react@0.552.0(react@19.2.0))(next@16.0.1(@babel/core@7.28.0)(babel-plugin-macros@3.1.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + fumadocs-mdx: + specifier: 13.0.8 + version: 13.0.8(fumadocs-core@16.0.11(@types/react@19.2.5)(lucide-react@0.552.0(react@19.2.0))(next@16.0.1(@babel/core@7.28.0)(babel-plugin-macros@3.1.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(next@16.0.1(@babel/core@7.28.0)(babel-plugin-macros@3.1.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0) + fumadocs-ui: + specifier: 16.0.11 + version: 16.0.11(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(lucide-react@0.552.0(react@19.2.0))(next@16.0.1(@babel/core@7.28.0)(babel-plugin-macros@3.1.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(tailwindcss@4.1.17) + lucide-react: + specifier: ^0.552.0 + version: 0.552.0(react@19.2.0) + next: + specifier: 16.0.1 + version: 16.0.1(@babel/core@7.28.0)(babel-plugin-macros@3.1.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + react: + specifier: ^19.2.0 + version: 19.2.0 + react-dom: + specifier: ^19.2.0 + version: 19.2.0(react@19.2.0) + devDependencies: + "@eslint/eslintrc": + specifier: ^3.3.1 + version: 3.3.1 + "@tailwindcss/postcss": + specifier: ^4.1.16 + version: 4.1.17 + "@types/mdx": + specifier: ^2.0.13 + version: 2.0.13 + "@types/node": + specifier: ^24.10.0 + version: 24.10.1 + "@types/react": + specifier: ^19.2.2 + version: 19.2.5 + "@types/react-dom": + specifier: ^19.2.2 + version: 19.2.3(@types/react@19.2.5) + eslint: + specifier: ^9.39.1 + version: 9.39.1(jiti@2.6.1) + eslint-config-next: + specifier: 16.0.1 + version: 16.0.1(@typescript-eslint/parser@8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + postcss: + specifier: ^8.5.6 + version: 8.5.6 + tailwindcss: + specifier: ^4.1.16 + version: 4.1.17 + typescript: + specifier: ^5.9.3 + version: 5.9.3 + + packages/example-cli: + dependencies: + chalk: + specifier: ^4.1.2 + version: 4.1.2 + commander: + specifier: ^12.1.0 + version: 12.1.0 + ink: + specifier: ^4.4.1 + version: 4.4.1(@types/react@18.3.26)(react-devtools-core@5.3.2)(react@18.3.1) + react: + specifier: ^18.3.1 + version: 18.3.1 + devDependencies: + "@sshield/config": + specifier: workspace:^ + version: link:../../config + "@types/chai": + specifier: ^4.3.20 + version: 4.3.20 + "@types/mocha": + specifier: ^10.0.10 + version: 10.0.10 + "@types/node": + specifier: ^18.19.120 + version: 18.19.120 + "@types/react": + specifier: ^18.3.0 + version: 18.3.26 + "@yao-pkg/pkg": + specifier: ^6.0.0 + version: 6.10.1 + c8: + specifier: ^10.1.2 + version: 10.1.3 + chai: + specifier: ^4.5.0 + version: 4.5.0 + ink-testing-library: + specifier: ^4.0.0 + version: 4.0.0(@types/react@18.3.26) + mocha: + specifier: ^10.8.2 + version: 10.8.2 + react-devtools-core: + specifier: ^5.3.2 + version: 5.3.2 + release-it: + specifier: ^19.0.0 + version: 19.0.6(@types/node@18.19.120) + ts-mocha: + specifier: ^10.0.0 + version: 10.1.0(mocha@10.8.2) + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@types/node@18.19.120)(typescript@5.9.3) + tsup: + specifier: ^8.5.0 + version: 8.5.0(jiti@2.6.1)(postcss@8.5.6)(typescript@5.9.3)(yaml@2.8.1) + typedoc: + specifier: ^0.28.0 + version: 0.28.14(typescript@5.9.3) + typedoc-plugin-markdown: + specifier: ^4.9.0 + version: 4.9.0(typedoc@0.28.14(typescript@5.9.3)) + +packages: + "@alcalzone/ansi-tokenize@0.1.3": + resolution: + { + integrity: sha512-3yWxPTq3UQ/FY9p1ErPxIyfT64elWaMvM9lIHnaqpyft63tkxodF5aUElYHrdisWve5cETkh1+KBw1yJuW0aRw==, + } + engines: { node: ">=14.13.1" } + + "@alloc/quick-lru@5.2.0": + resolution: + { + integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==, + } + engines: { node: ">=10" } + + "@ampproject/remapping@2.3.0": + resolution: + { + integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==, + } + engines: { node: ">=6.0.0" } + + "@babel/code-frame@7.27.1": + resolution: + { + integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==, + } + engines: { node: ">=6.9.0" } + + "@babel/compat-data@7.28.0": + resolution: + { + integrity: sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==, + } + engines: { node: ">=6.9.0" } + + "@babel/core@7.28.0": + resolution: + { + integrity: sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==, + } + engines: { node: ">=6.9.0" } + + "@babel/generator@7.28.0": + resolution: + { + integrity: sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==, + } + engines: { node: ">=6.9.0" } + + "@babel/helper-annotate-as-pure@7.27.3": + resolution: + { + integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==, + } + engines: { node: ">=6.9.0" } + + "@babel/helper-compilation-targets@7.27.2": + resolution: + { + integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==, + } + engines: { node: ">=6.9.0" } + + "@babel/helper-create-class-features-plugin@7.27.1": + resolution: + { + integrity: sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0 + + "@babel/helper-create-regexp-features-plugin@7.27.1": + resolution: + { + integrity: sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0 + + "@babel/helper-define-polyfill-provider@0.6.5": + resolution: + { + integrity: sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==, + } + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + + "@babel/helper-globals@7.28.0": + resolution: + { + integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==, + } + engines: { node: ">=6.9.0" } + + "@babel/helper-member-expression-to-functions@7.27.1": + resolution: + { + integrity: sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==, + } + engines: { node: ">=6.9.0" } + + "@babel/helper-module-imports@7.27.1": + resolution: + { + integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==, + } + engines: { node: ">=6.9.0" } + + "@babel/helper-module-transforms@7.27.3": + resolution: + { + integrity: sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0 + + "@babel/helper-optimise-call-expression@7.27.1": + resolution: + { + integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==, + } + engines: { node: ">=6.9.0" } + + "@babel/helper-plugin-utils@7.27.1": + resolution: + { + integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==, + } + engines: { node: ">=6.9.0" } + + "@babel/helper-remap-async-to-generator@7.27.1": + resolution: + { + integrity: sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0 + + "@babel/helper-replace-supers@7.27.1": + resolution: + { + integrity: sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0 + + "@babel/helper-skip-transparent-expression-wrappers@7.27.1": + resolution: + { + integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==, + } + engines: { node: ">=6.9.0" } + + "@babel/helper-string-parser@7.27.1": + resolution: + { + integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==, + } + engines: { node: ">=6.9.0" } + + "@babel/helper-validator-identifier@7.27.1": + resolution: + { + integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==, + } + engines: { node: ">=6.9.0" } + + "@babel/helper-validator-option@7.27.1": + resolution: + { + integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==, + } + engines: { node: ">=6.9.0" } + + "@babel/helper-wrap-function@7.27.1": + resolution: + { + integrity: sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ==, + } + engines: { node: ">=6.9.0" } + + "@babel/helpers@7.28.2": + resolution: + { + integrity: sha512-/V9771t+EgXz62aCcyofnQhGM8DQACbRhvzKFsXKC9QM+5MadF8ZmIm0crDMaz3+o0h0zXfJnd4EhbYbxsrcFw==, + } + engines: { node: ">=6.9.0" } + + "@babel/parser@7.28.0": + resolution: + { + integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==, + } + engines: { node: ">=6.0.0" } + hasBin: true + + "@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1": + resolution: + { + integrity: sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0 + + "@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1": + resolution: + { + integrity: sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0 + + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1": + resolution: + { + integrity: sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0 + + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1": + resolution: + { + integrity: sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.13.0 + + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.27.1": + resolution: + { + integrity: sha512-6BpaYGDavZqkI6yT+KSPdpZFfpnd68UKXbcjI9pJ13pvHhPrCKWOOLp+ysvMeA+DxnhuPpgIaRpxRxo5A9t5jw==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0 + + "@babel/plugin-proposal-decorators@7.28.0": + resolution: + { + integrity: sha512-zOiZqvANjWDUaUS9xMxbMcK/Zccztbe/6ikvUXaG9nsPH3w6qh5UaPGAnirI/WhIbZ8m3OHU0ReyPrknG+ZKeg==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": + resolution: + { + integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-syntax-async-generators@7.8.4": + resolution: + { + integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==, + } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-syntax-bigint@7.8.3": + resolution: + { + integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==, + } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-syntax-class-properties@7.12.13": + resolution: + { + integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==, + } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-syntax-class-static-block@7.14.5": + resolution: + { + integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-syntax-decorators@7.27.1": + resolution: + { + integrity: sha512-YMq8Z87Lhl8EGkmb0MwYkt36QnxC+fzCgrl66ereamPlYToRpIk5nUjKUY3QKLWq8mwUB1BgbeXcTJhZOCDg5A==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-syntax-import-assertions@7.27.1": + resolution: + { + integrity: sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-syntax-import-attributes@7.27.1": + resolution: + { + integrity: sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-syntax-import-meta@7.10.4": + resolution: + { + integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==, + } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-syntax-json-strings@7.8.3": + resolution: + { + integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==, + } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-syntax-jsx@7.27.1": + resolution: + { + integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-syntax-logical-assignment-operators@7.10.4": + resolution: + { + integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==, + } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-syntax-nullish-coalescing-operator@7.8.3": + resolution: + { + integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==, + } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-syntax-numeric-separator@7.10.4": + resolution: + { + integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==, + } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-syntax-object-rest-spread@7.8.3": + resolution: + { + integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==, + } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-syntax-optional-catch-binding@7.8.3": + resolution: + { + integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==, + } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-syntax-optional-chaining@7.8.3": + resolution: + { + integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==, + } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-syntax-private-property-in-object@7.14.5": + resolution: + { + integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-syntax-top-level-await@7.14.5": + resolution: + { + integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-syntax-typescript@7.27.1": + resolution: + { + integrity: sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-syntax-unicode-sets-regex@7.18.6": + resolution: + { + integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0 + + "@babel/plugin-transform-arrow-functions@7.27.1": + resolution: + { + integrity: sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-async-generator-functions@7.28.0": + resolution: + { + integrity: sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-async-to-generator@7.27.1": + resolution: + { + integrity: sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-block-scoped-functions@7.27.1": + resolution: + { + integrity: sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-block-scoping@7.28.0": + resolution: + { + integrity: sha512-gKKnwjpdx5sER/wl0WN0efUBFzF/56YZO0RJrSYP4CljXnP31ByY7fol89AzomdlLNzI36AvOTmYHsnZTCkq8Q==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-class-properties@7.27.1": + resolution: + { + integrity: sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-class-static-block@7.27.1": + resolution: + { + integrity: sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.12.0 + + "@babel/plugin-transform-classes@7.28.0": + resolution: + { + integrity: sha512-IjM1IoJNw72AZFlj33Cu8X0q2XK/6AaVC3jQu+cgQ5lThWD5ajnuUAml80dqRmOhmPkTH8uAwnpMu9Rvj0LTRA==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-computed-properties@7.27.1": + resolution: + { + integrity: sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-destructuring@7.28.0": + resolution: + { + integrity: sha512-v1nrSMBiKcodhsyJ4Gf+Z0U/yawmJDBOTpEB3mcQY52r9RIyPneGyAS/yM6seP/8I+mWI3elOMtT5dB8GJVs+A==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-dotall-regex@7.27.1": + resolution: + { + integrity: sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-duplicate-keys@7.27.1": + resolution: + { + integrity: sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1": + resolution: + { + integrity: sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0 + + "@babel/plugin-transform-dynamic-import@7.27.1": + resolution: + { + integrity: sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-explicit-resource-management@7.28.0": + resolution: + { + integrity: sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-exponentiation-operator@7.27.1": + resolution: + { + integrity: sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-export-namespace-from@7.27.1": + resolution: + { + integrity: sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-for-of@7.27.1": + resolution: + { + integrity: sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-function-name@7.27.1": + resolution: + { + integrity: sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-json-strings@7.27.1": + resolution: + { + integrity: sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-literals@7.27.1": + resolution: + { + integrity: sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-logical-assignment-operators@7.27.1": + resolution: + { + integrity: sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-member-expression-literals@7.27.1": + resolution: + { + integrity: sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-modules-amd@7.27.1": + resolution: + { + integrity: sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-modules-commonjs@7.27.1": + resolution: + { + integrity: sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-modules-systemjs@7.27.1": + resolution: + { + integrity: sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-modules-umd@7.27.1": + resolution: + { + integrity: sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-named-capturing-groups-regex@7.27.1": + resolution: + { + integrity: sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0 + + "@babel/plugin-transform-new-target@7.27.1": + resolution: + { + integrity: sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-nullish-coalescing-operator@7.27.1": + resolution: + { + integrity: sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-numeric-separator@7.27.1": + resolution: + { + integrity: sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-object-rest-spread@7.28.0": + resolution: + { + integrity: sha512-9VNGikXxzu5eCiQjdE4IZn8sb9q7Xsk5EXLDBKUYg1e/Tve8/05+KJEtcxGxAgCY5t/BpKQM+JEL/yT4tvgiUA==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-object-super@7.27.1": + resolution: + { + integrity: sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-optional-catch-binding@7.27.1": + resolution: + { + integrity: sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-optional-chaining@7.27.1": + resolution: + { + integrity: sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-parameters@7.27.7": + resolution: + { + integrity: sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-private-methods@7.27.1": + resolution: + { + integrity: sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-private-property-in-object@7.27.1": + resolution: + { + integrity: sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-property-literals@7.27.1": + resolution: + { + integrity: sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-regenerator@7.28.1": + resolution: + { + integrity: sha512-P0QiV/taaa3kXpLY+sXla5zec4E+4t4Aqc9ggHlfZ7a2cp8/x/Gv08jfwEtn9gnnYIMvHx6aoOZ8XJL8eU71Dg==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-regexp-modifiers@7.27.1": + resolution: + { + integrity: sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0 + + "@babel/plugin-transform-reserved-words@7.27.1": + resolution: + { + integrity: sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-runtime@7.28.0": + resolution: + { + integrity: sha512-dGopk9nZrtCs2+nfIem25UuHyt5moSJamArzIoh9/vezUQPmYDOzjaHDCkAzuGJibCIkPup8rMT2+wYB6S73cA==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-shorthand-properties@7.27.1": + resolution: + { + integrity: sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-spread@7.27.1": + resolution: + { + integrity: sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-sticky-regex@7.27.1": + resolution: + { + integrity: sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-template-literals@7.27.1": + resolution: + { + integrity: sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-typeof-symbol@7.27.1": + resolution: + { + integrity: sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-typescript@7.28.0": + resolution: + { + integrity: sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-unicode-escapes@7.27.1": + resolution: + { + integrity: sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-unicode-property-regex@7.27.1": + resolution: + { + integrity: sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-unicode-regex@7.27.1": + resolution: + { + integrity: sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/plugin-transform-unicode-sets-regex@7.27.1": + resolution: + { + integrity: sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0 + + "@babel/preset-env@7.28.0": + resolution: + { + integrity: sha512-VmaxeGOwuDqzLl5JUkIRM1X2Qu2uKGxHEQWh+cvvbl7JuJRgKGJSfsEF/bUaxFhJl/XAyxBe7q7qSuTbKFuCyg==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/preset-modules@0.1.6-no-external-plugins": + resolution: + { + integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==, + } + peerDependencies: + "@babel/core": ^7.0.0-0 || ^8.0.0-0 <8.0.0 + + "@babel/preset-typescript@7.27.1": + resolution: + { + integrity: sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ==, + } + engines: { node: ">=6.9.0" } + peerDependencies: + "@babel/core": ^7.0.0-0 + + "@babel/runtime@7.28.2": + resolution: + { + integrity: sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA==, + } + engines: { node: ">=6.9.0" } + + "@babel/template@7.27.2": + resolution: + { + integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==, + } + engines: { node: ">=6.9.0" } + + "@babel/traverse@7.28.0": + resolution: + { + integrity: sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==, + } + engines: { node: ">=6.9.0" } + + "@babel/types@7.28.2": + resolution: + { + integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==, + } + engines: { node: ">=6.9.0" } + + "@bcoe/v8-coverage@0.2.3": + resolution: + { + integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==, + } + + "@bcoe/v8-coverage@1.0.2": + resolution: + { + integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==, + } + engines: { node: ">=18" } + + "@commitlint/cli@19.8.1": + resolution: + { + integrity: sha512-LXUdNIkspyxrlV6VDHWBmCZRtkEVRpBKxi2Gtw3J54cGWhLCTouVD/Q6ZSaSvd2YaDObWK8mDjrz3TIKtaQMAA==, + } + engines: { node: ">=v18" } + hasBin: true + + "@commitlint/config-conventional@19.8.1": + resolution: + { + integrity: sha512-/AZHJL6F6B/G959CsMAzrPKKZjeEiAVifRyEwXxcT6qtqbPwGw+iQxmNS+Bu+i09OCtdNRW6pNpBvgPrtMr9EQ==, + } + engines: { node: ">=v18" } + + "@commitlint/config-validator@19.8.1": + resolution: + { + integrity: sha512-0jvJ4u+eqGPBIzzSdqKNX1rvdbSU1lPNYlfQQRIFnBgLy26BtC0cFnr7c/AyuzExMxWsMOte6MkTi9I3SQ3iGQ==, + } + engines: { node: ">=v18" } + + "@commitlint/ensure@19.8.1": + resolution: + { + integrity: sha512-mXDnlJdvDzSObafjYrOSvZBwkD01cqB4gbnnFuVyNpGUM5ijwU/r/6uqUmBXAAOKRfyEjpkGVZxaDsCVnHAgyw==, + } + engines: { node: ">=v18" } + + "@commitlint/execute-rule@19.8.1": + resolution: + { + integrity: sha512-YfJyIqIKWI64Mgvn/sE7FXvVMQER/Cd+s3hZke6cI1xgNT/f6ZAz5heND0QtffH+KbcqAwXDEE1/5niYayYaQA==, + } + engines: { node: ">=v18" } + + "@commitlint/format@19.8.1": + resolution: + { + integrity: sha512-kSJj34Rp10ItP+Eh9oCItiuN/HwGQMXBnIRk69jdOwEW9llW9FlyqcWYbHPSGofmjsqeoxa38UaEA5tsbm2JWw==, + } + engines: { node: ">=v18" } + + "@commitlint/is-ignored@19.8.1": + resolution: + { + integrity: sha512-AceOhEhekBUQ5dzrVhDDsbMaY5LqtN8s1mqSnT2Kz1ERvVZkNihrs3Sfk1Je/rxRNbXYFzKZSHaPsEJJDJV8dg==, + } + engines: { node: ">=v18" } + + "@commitlint/lint@19.8.1": + resolution: + { + integrity: sha512-52PFbsl+1EvMuokZXLRlOsdcLHf10isTPlWwoY1FQIidTsTvjKXVXYb7AvtpWkDzRO2ZsqIgPK7bI98x8LRUEw==, + } + engines: { node: ">=v18" } + + "@commitlint/load@19.8.1": + resolution: + { + integrity: sha512-9V99EKG3u7z+FEoe4ikgq7YGRCSukAcvmKQuTtUyiYPnOd9a2/H9Ak1J9nJA1HChRQp9OA/sIKPugGS+FK/k1A==, + } + engines: { node: ">=v18" } + + "@commitlint/message@19.8.1": + resolution: + { + integrity: sha512-+PMLQvjRXiU+Ae0Wc+p99EoGEutzSXFVwQfa3jRNUZLNW5odZAyseb92OSBTKCu+9gGZiJASt76Cj3dLTtcTdg==, + } + engines: { node: ">=v18" } + + "@commitlint/parse@19.8.1": + resolution: + { + integrity: sha512-mmAHYcMBmAgJDKWdkjIGq50X4yB0pSGpxyOODwYmoexxxiUCy5JJT99t1+PEMK7KtsCtzuWYIAXYAiKR+k+/Jw==, + } + engines: { node: ">=v18" } + + "@commitlint/read@19.8.1": + resolution: + { + integrity: sha512-03Jbjb1MqluaVXKHKRuGhcKWtSgh3Jizqy2lJCRbRrnWpcM06MYm8th59Xcns8EqBYvo0Xqb+2DoZFlga97uXQ==, + } + engines: { node: ">=v18" } + + "@commitlint/resolve-extends@19.8.1": + resolution: + { + integrity: sha512-GM0mAhFk49I+T/5UCYns5ayGStkTt4XFFrjjf0L4S26xoMTSkdCf9ZRO8en1kuopC4isDFuEm7ZOm/WRVeElVg==, + } + engines: { node: ">=v18" } + + "@commitlint/rules@19.8.1": + resolution: + { + integrity: sha512-Hnlhd9DyvGiGwjfjfToMi1dsnw1EXKGJNLTcsuGORHz6SS9swRgkBsou33MQ2n51/boIDrbsg4tIBbRpEWK2kw==, + } + engines: { node: ">=v18" } + + "@commitlint/to-lines@19.8.1": + resolution: + { + integrity: sha512-98Mm5inzbWTKuZQr2aW4SReY6WUukdWXuZhrqf1QdKPZBCCsXuG87c+iP0bwtD6DBnmVVQjgp4whoHRVixyPBg==, + } + engines: { node: ">=v18" } + + "@commitlint/top-level@19.8.1": + resolution: + { + integrity: sha512-Ph8IN1IOHPSDhURCSXBz44+CIu+60duFwRsg6HqaISFHQHbmBtxVw4ZrFNIYUzEP7WwrNPxa2/5qJ//NK1FGcw==, + } + engines: { node: ">=v18" } + + "@commitlint/types@19.8.1": + resolution: + { + integrity: sha512-/yCrWGCoA1SVKOks25EGadP9Pnj0oAIHGpl2wH2M2Y46dPM2ueb8wyCVOD7O3WCTkaJ0IkKvzhl1JY7+uCT2Dw==, + } + engines: { node: ">=v18" } + + "@conventional-changelog/git-client@1.0.1": + resolution: + { + integrity: sha512-PJEqBwAleffCMETaVm/fUgHldzBE35JFk3/9LL6NUA5EXa3qednu+UT6M7E5iBu3zIQZCULYIiZ90fBYHt6xUw==, + } + engines: { node: ">=18" } + peerDependencies: + conventional-commits-filter: ^5.0.0 + conventional-commits-parser: ^6.0.0 + peerDependenciesMeta: + conventional-commits-filter: + optional: true + conventional-commits-parser: + optional: true + + "@cspotcode/source-map-support@0.8.1": + resolution: + { + integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==, + } + engines: { node: ">=12" } + + "@emnapi/core@1.4.3": + resolution: + { + integrity: sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==, + } + + "@emnapi/core@1.7.1": + resolution: + { + integrity: sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==, + } + + "@emnapi/runtime@1.4.3": + resolution: + { + integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==, + } + + "@emnapi/runtime@1.7.1": + resolution: + { + integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==, + } + + "@emnapi/wasi-threads@1.0.2": + resolution: + { + integrity: sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==, + } + + "@emnapi/wasi-threads@1.1.0": + resolution: + { + integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==, + } + + "@esbuild/aix-ppc64@0.21.5": + resolution: + { + integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==, + } + engines: { node: ">=12" } + cpu: [ppc64] + os: [aix] + + "@esbuild/aix-ppc64@0.25.12": + resolution: + { + integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==, + } + engines: { node: ">=18" } + cpu: [ppc64] + os: [aix] + + "@esbuild/aix-ppc64@0.25.8": + resolution: + { + integrity: sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==, + } + engines: { node: ">=18" } + cpu: [ppc64] + os: [aix] + + "@esbuild/android-arm64@0.21.5": + resolution: + { + integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==, + } + engines: { node: ">=12" } + cpu: [arm64] + os: [android] + + "@esbuild/android-arm64@0.25.12": + resolution: + { + integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [android] + + "@esbuild/android-arm64@0.25.8": + resolution: + { + integrity: sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [android] + + "@esbuild/android-arm@0.21.5": + resolution: + { + integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==, + } + engines: { node: ">=12" } + cpu: [arm] + os: [android] + + "@esbuild/android-arm@0.25.12": + resolution: + { + integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==, + } + engines: { node: ">=18" } + cpu: [arm] + os: [android] + + "@esbuild/android-arm@0.25.8": + resolution: + { + integrity: sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==, + } + engines: { node: ">=18" } + cpu: [arm] + os: [android] + + "@esbuild/android-x64@0.21.5": + resolution: + { + integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==, + } + engines: { node: ">=12" } + cpu: [x64] + os: [android] + + "@esbuild/android-x64@0.25.12": + resolution: + { + integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [android] + + "@esbuild/android-x64@0.25.8": + resolution: + { + integrity: sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [android] + + "@esbuild/darwin-arm64@0.21.5": + resolution: + { + integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==, + } + engines: { node: ">=12" } + cpu: [arm64] + os: [darwin] + + "@esbuild/darwin-arm64@0.25.12": + resolution: + { + integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [darwin] + + "@esbuild/darwin-arm64@0.25.8": + resolution: + { + integrity: sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [darwin] + + "@esbuild/darwin-x64@0.21.5": + resolution: + { + integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==, + } + engines: { node: ">=12" } + cpu: [x64] + os: [darwin] + + "@esbuild/darwin-x64@0.25.12": + resolution: + { + integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [darwin] + + "@esbuild/darwin-x64@0.25.8": + resolution: + { + integrity: sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [darwin] + + "@esbuild/freebsd-arm64@0.21.5": + resolution: + { + integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==, + } + engines: { node: ">=12" } + cpu: [arm64] + os: [freebsd] + + "@esbuild/freebsd-arm64@0.25.12": + resolution: + { + integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [freebsd] + + "@esbuild/freebsd-arm64@0.25.8": + resolution: + { + integrity: sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [freebsd] + + "@esbuild/freebsd-x64@0.21.5": + resolution: + { + integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==, + } + engines: { node: ">=12" } + cpu: [x64] + os: [freebsd] + + "@esbuild/freebsd-x64@0.25.12": + resolution: + { + integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [freebsd] + + "@esbuild/freebsd-x64@0.25.8": + resolution: + { + integrity: sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [freebsd] + + "@esbuild/linux-arm64@0.21.5": + resolution: + { + integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==, + } + engines: { node: ">=12" } + cpu: [arm64] + os: [linux] + + "@esbuild/linux-arm64@0.25.12": + resolution: + { + integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [linux] + + "@esbuild/linux-arm64@0.25.8": + resolution: + { + integrity: sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [linux] + + "@esbuild/linux-arm@0.21.5": + resolution: + { + integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==, + } + engines: { node: ">=12" } + cpu: [arm] + os: [linux] + + "@esbuild/linux-arm@0.25.12": + resolution: + { + integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==, + } + engines: { node: ">=18" } + cpu: [arm] + os: [linux] + + "@esbuild/linux-arm@0.25.8": + resolution: + { + integrity: sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==, + } + engines: { node: ">=18" } + cpu: [arm] + os: [linux] + + "@esbuild/linux-ia32@0.21.5": + resolution: + { + integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==, + } + engines: { node: ">=12" } + cpu: [ia32] + os: [linux] + + "@esbuild/linux-ia32@0.25.12": + resolution: + { + integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==, + } + engines: { node: ">=18" } + cpu: [ia32] + os: [linux] + + "@esbuild/linux-ia32@0.25.8": + resolution: + { + integrity: sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==, + } + engines: { node: ">=18" } + cpu: [ia32] + os: [linux] + + "@esbuild/linux-loong64@0.21.5": + resolution: + { + integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==, + } + engines: { node: ">=12" } + cpu: [loong64] + os: [linux] + + "@esbuild/linux-loong64@0.25.12": + resolution: + { + integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==, + } + engines: { node: ">=18" } + cpu: [loong64] + os: [linux] + + "@esbuild/linux-loong64@0.25.8": + resolution: + { + integrity: sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==, + } + engines: { node: ">=18" } + cpu: [loong64] + os: [linux] + + "@esbuild/linux-mips64el@0.21.5": + resolution: + { + integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==, + } + engines: { node: ">=12" } + cpu: [mips64el] + os: [linux] + + "@esbuild/linux-mips64el@0.25.12": + resolution: + { + integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==, + } + engines: { node: ">=18" } + cpu: [mips64el] + os: [linux] + + "@esbuild/linux-mips64el@0.25.8": + resolution: + { + integrity: sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==, + } + engines: { node: ">=18" } + cpu: [mips64el] + os: [linux] + + "@esbuild/linux-ppc64@0.21.5": + resolution: + { + integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==, + } + engines: { node: ">=12" } + cpu: [ppc64] + os: [linux] + + "@esbuild/linux-ppc64@0.25.12": + resolution: + { + integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==, + } + engines: { node: ">=18" } + cpu: [ppc64] + os: [linux] + + "@esbuild/linux-ppc64@0.25.8": + resolution: + { + integrity: sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==, + } + engines: { node: ">=18" } + cpu: [ppc64] + os: [linux] + + "@esbuild/linux-riscv64@0.21.5": + resolution: + { + integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==, + } + engines: { node: ">=12" } + cpu: [riscv64] + os: [linux] + + "@esbuild/linux-riscv64@0.25.12": + resolution: + { + integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==, + } + engines: { node: ">=18" } + cpu: [riscv64] + os: [linux] + + "@esbuild/linux-riscv64@0.25.8": + resolution: + { + integrity: sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==, + } + engines: { node: ">=18" } + cpu: [riscv64] + os: [linux] + + "@esbuild/linux-s390x@0.21.5": + resolution: + { + integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==, + } + engines: { node: ">=12" } + cpu: [s390x] + os: [linux] + + "@esbuild/linux-s390x@0.25.12": + resolution: + { + integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==, + } + engines: { node: ">=18" } + cpu: [s390x] + os: [linux] + + "@esbuild/linux-s390x@0.25.8": + resolution: + { + integrity: sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==, + } + engines: { node: ">=18" } + cpu: [s390x] + os: [linux] + + "@esbuild/linux-x64@0.21.5": + resolution: + { + integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==, + } + engines: { node: ">=12" } + cpu: [x64] + os: [linux] + + "@esbuild/linux-x64@0.25.12": + resolution: + { + integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [linux] + + "@esbuild/linux-x64@0.25.8": + resolution: + { + integrity: sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [linux] + + "@esbuild/netbsd-arm64@0.25.12": + resolution: + { + integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [netbsd] + + "@esbuild/netbsd-arm64@0.25.8": + resolution: + { + integrity: sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [netbsd] + + "@esbuild/netbsd-x64@0.21.5": + resolution: + { + integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==, + } + engines: { node: ">=12" } + cpu: [x64] + os: [netbsd] + + "@esbuild/netbsd-x64@0.25.12": + resolution: + { + integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [netbsd] + + "@esbuild/netbsd-x64@0.25.8": + resolution: + { + integrity: sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [netbsd] + + "@esbuild/openbsd-arm64@0.25.12": + resolution: + { + integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [openbsd] + + "@esbuild/openbsd-arm64@0.25.8": + resolution: + { + integrity: sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [openbsd] + + "@esbuild/openbsd-x64@0.21.5": + resolution: + { + integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==, + } + engines: { node: ">=12" } + cpu: [x64] + os: [openbsd] + + "@esbuild/openbsd-x64@0.25.12": + resolution: + { + integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [openbsd] + + "@esbuild/openbsd-x64@0.25.8": + resolution: + { + integrity: sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [openbsd] + + "@esbuild/openharmony-arm64@0.25.12": + resolution: + { + integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [openharmony] + + "@esbuild/openharmony-arm64@0.25.8": + resolution: + { + integrity: sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [openharmony] + + "@esbuild/sunos-x64@0.21.5": + resolution: + { + integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==, + } + engines: { node: ">=12" } + cpu: [x64] + os: [sunos] + + "@esbuild/sunos-x64@0.25.12": + resolution: + { + integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [sunos] + + "@esbuild/sunos-x64@0.25.8": + resolution: + { + integrity: sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [sunos] + + "@esbuild/win32-arm64@0.21.5": + resolution: + { + integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==, + } + engines: { node: ">=12" } + cpu: [arm64] + os: [win32] + + "@esbuild/win32-arm64@0.25.12": + resolution: + { + integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [win32] + + "@esbuild/win32-arm64@0.25.8": + resolution: + { + integrity: sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [win32] + + "@esbuild/win32-ia32@0.21.5": + resolution: + { + integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==, + } + engines: { node: ">=12" } + cpu: [ia32] + os: [win32] + + "@esbuild/win32-ia32@0.25.12": + resolution: + { + integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==, + } + engines: { node: ">=18" } + cpu: [ia32] + os: [win32] + + "@esbuild/win32-ia32@0.25.8": + resolution: + { + integrity: sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==, + } + engines: { node: ">=18" } + cpu: [ia32] + os: [win32] + + "@esbuild/win32-x64@0.21.5": + resolution: + { + integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==, + } + engines: { node: ">=12" } + cpu: [x64] + os: [win32] + + "@esbuild/win32-x64@0.25.12": + resolution: + { + integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [win32] + + "@esbuild/win32-x64@0.25.8": + resolution: + { + integrity: sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [win32] + + "@eslint-community/eslint-utils@4.7.0": + resolution: + { + integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==, + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + "@eslint-community/eslint-utils@4.9.0": + resolution: + { + integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==, + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + "@eslint-community/regexpp@4.12.1": + resolution: + { + integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==, + } + engines: { node: ^12.0.0 || ^14.0.0 || >=16.0.0 } + + "@eslint/config-array@0.21.1": + resolution: + { + integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + "@eslint/config-helpers@0.4.2": + resolution: + { + integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + "@eslint/core@0.17.0": + resolution: + { + integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + "@eslint/eslintrc@3.3.1": + resolution: + { + integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + "@eslint/js@9.39.1": + resolution: + { + integrity: sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + "@eslint/object-schema@2.1.7": + resolution: + { + integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + "@eslint/plugin-kit@0.4.1": + resolution: + { + integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + "@floating-ui/core@1.7.3": + resolution: + { + integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==, + } + + "@floating-ui/dom@1.7.4": + resolution: + { + integrity: sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==, + } + + "@floating-ui/react-dom@2.1.6": + resolution: + { + integrity: sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==, + } + peerDependencies: + react: ">=16.8.0" + react-dom: ">=16.8.0" + + "@floating-ui/utils@0.2.10": + resolution: + { + integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==, + } + + "@formatjs/intl-localematcher@0.6.2": + resolution: + { + integrity: sha512-XOMO2Hupl0wdd172Y06h6kLpBz6Dv+J4okPLl4LPtzbr8f66WbIoy4ev98EBuZ6ZK4h5ydTN6XneT4QVpD7cdA==, + } + + "@gerrit0/mini-shiki@3.15.0": + resolution: + { + integrity: sha512-L5IHdZIDa4bG4yJaOzfasOH/o22MCesY0mx+n6VATbaiCtMeR59pdRqYk4bEiQkIHfxsHPNgdi7VJlZb2FhdMQ==, + } + + "@humanfs/core@0.19.1": + resolution: + { + integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==, + } + engines: { node: ">=18.18.0" } + + "@humanfs/node@0.16.6": + resolution: + { + integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==, + } + engines: { node: ">=18.18.0" } + + "@humanwhocodes/module-importer@1.0.1": + resolution: + { + integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==, + } + engines: { node: ">=12.22" } + + "@humanwhocodes/retry@0.3.1": + resolution: + { + integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==, + } + engines: { node: ">=18.18" } + + "@humanwhocodes/retry@0.4.3": + resolution: + { + integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==, + } + engines: { node: ">=18.18" } + + "@hutson/parse-repository-url@5.0.0": + resolution: + { + integrity: sha512-e5+YUKENATs1JgYHMzTr2MW/NDcXGfYFAuOQU8gJgF/kEh4EqKgfGrfLI67bMD4tbhZVlkigz/9YYwWcbOFthg==, + } + engines: { node: ">=10.13.0" } + + "@img/colour@1.0.0": + resolution: + { + integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==, + } + engines: { node: ">=18" } + + "@img/sharp-darwin-arm64@0.34.5": + resolution: + { + integrity: sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [arm64] + os: [darwin] + + "@img/sharp-darwin-x64@0.34.5": + resolution: + { + integrity: sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [x64] + os: [darwin] + + "@img/sharp-libvips-darwin-arm64@1.2.4": + resolution: + { + integrity: sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==, + } + cpu: [arm64] + os: [darwin] + + "@img/sharp-libvips-darwin-x64@1.2.4": + resolution: + { + integrity: sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==, + } + cpu: [x64] + os: [darwin] + + "@img/sharp-libvips-linux-arm64@1.2.4": + resolution: + { + integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==, + } + cpu: [arm64] + os: [linux] + + "@img/sharp-libvips-linux-arm@1.2.4": + resolution: + { + integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==, + } + cpu: [arm] + os: [linux] + + "@img/sharp-libvips-linux-ppc64@1.2.4": + resolution: + { + integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==, + } + cpu: [ppc64] + os: [linux] + + "@img/sharp-libvips-linux-riscv64@1.2.4": + resolution: + { + integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==, + } + cpu: [riscv64] + os: [linux] + + "@img/sharp-libvips-linux-s390x@1.2.4": + resolution: + { + integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==, + } + cpu: [s390x] + os: [linux] + + "@img/sharp-libvips-linux-x64@1.2.4": + resolution: + { + integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==, + } + cpu: [x64] + os: [linux] + + "@img/sharp-libvips-linuxmusl-arm64@1.2.4": + resolution: + { + integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==, + } + cpu: [arm64] + os: [linux] + + "@img/sharp-libvips-linuxmusl-x64@1.2.4": + resolution: + { + integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==, + } + cpu: [x64] + os: [linux] + + "@img/sharp-linux-arm64@0.34.5": + resolution: + { + integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [arm64] + os: [linux] + + "@img/sharp-linux-arm@0.34.5": + resolution: + { + integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [arm] + os: [linux] + + "@img/sharp-linux-ppc64@0.34.5": + resolution: + { + integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [ppc64] + os: [linux] + + "@img/sharp-linux-riscv64@0.34.5": + resolution: + { + integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [riscv64] + os: [linux] + + "@img/sharp-linux-s390x@0.34.5": + resolution: + { + integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [s390x] + os: [linux] + + "@img/sharp-linux-x64@0.34.5": + resolution: + { + integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [x64] + os: [linux] + + "@img/sharp-linuxmusl-arm64@0.34.5": + resolution: + { + integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [arm64] + os: [linux] + + "@img/sharp-linuxmusl-x64@0.34.5": + resolution: + { + integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [x64] + os: [linux] + + "@img/sharp-wasm32@0.34.5": + resolution: + { + integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [wasm32] + + "@img/sharp-win32-arm64@0.34.5": + resolution: + { + integrity: sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [arm64] + os: [win32] + + "@img/sharp-win32-ia32@0.34.5": + resolution: + { + integrity: sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [ia32] + os: [win32] + + "@img/sharp-win32-x64@0.34.5": + resolution: + { + integrity: sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [x64] + os: [win32] + + "@inquirer/ansi@1.0.2": + resolution: + { + integrity: sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==, + } + engines: { node: ">=18" } + + "@inquirer/checkbox@4.3.2": + resolution: + { + integrity: sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA==, + } + engines: { node: ">=18" } + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + + "@inquirer/confirm@5.1.21": + resolution: + { + integrity: sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==, + } + engines: { node: ">=18" } + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + + "@inquirer/core@10.3.2": + resolution: + { + integrity: sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==, + } + engines: { node: ">=18" } + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + + "@inquirer/editor@4.2.23": + resolution: + { + integrity: sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ==, + } + engines: { node: ">=18" } + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + + "@inquirer/expand@4.0.23": + resolution: + { + integrity: sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew==, + } + engines: { node: ">=18" } + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + + "@inquirer/external-editor@1.0.3": + resolution: + { + integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==, + } + engines: { node: ">=18" } + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + + "@inquirer/figures@1.0.15": + resolution: + { + integrity: sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==, + } + engines: { node: ">=18" } + + "@inquirer/input@4.3.1": + resolution: + { + integrity: sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g==, + } + engines: { node: ">=18" } + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + + "@inquirer/number@3.0.23": + resolution: + { + integrity: sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg==, + } + engines: { node: ">=18" } + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + + "@inquirer/password@4.0.23": + resolution: + { + integrity: sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA==, + } + engines: { node: ">=18" } + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + + "@inquirer/prompts@7.10.1": + resolution: + { + integrity: sha512-Dx/y9bCQcXLI5ooQ5KyvA4FTgeo2jYj/7plWfV5Ak5wDPKQZgudKez2ixyfz7tKXzcJciTxqLeK7R9HItwiByg==, + } + engines: { node: ">=18" } + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + + "@inquirer/rawlist@4.1.11": + resolution: + { + integrity: sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw==, + } + engines: { node: ">=18" } + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + + "@inquirer/search@3.2.2": + resolution: + { + integrity: sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA==, + } + engines: { node: ">=18" } + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + + "@inquirer/select@4.4.2": + resolution: + { + integrity: sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w==, + } + engines: { node: ">=18" } + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + + "@inquirer/type@3.0.10": + resolution: + { + integrity: sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==, + } + engines: { node: ">=18" } + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + + "@isaacs/balanced-match@4.0.1": + resolution: + { + integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==, + } + engines: { node: 20 || >=22 } + + "@isaacs/brace-expansion@5.0.0": + resolution: + { + integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==, + } + engines: { node: 20 || >=22 } + + "@isaacs/cliui@8.0.2": + resolution: + { + integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==, + } + engines: { node: ">=12" } + + "@isaacs/fs-minipass@4.0.1": + resolution: + { + integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==, + } + engines: { node: ">=18.0.0" } + + "@istanbuljs/load-nyc-config@1.1.0": + resolution: + { + integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==, + } + engines: { node: ">=8" } + + "@istanbuljs/schema@0.1.3": + resolution: + { + integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==, + } + engines: { node: ">=8" } + + "@jest/console@29.7.0": + resolution: + { + integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + "@jest/console@30.0.5": + resolution: + { + integrity: sha512-xY6b0XiL0Nav3ReresUarwl2oIz1gTnxGbGpho9/rbUWsLH0f1OD/VT84xs8c7VmH7MChnLb0pag6PhZhAdDiA==, + } + engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 } + + "@jest/core@29.7.0": + resolution: + { + integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + "@jest/diff-sequences@30.0.1": + resolution: + { + integrity: sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==, + } + engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 } + + "@jest/environment@29.7.0": + resolution: + { + integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + "@jest/environment@30.0.5": + resolution: + { + integrity: sha512-aRX7WoaWx1oaOkDQvCWImVQ8XNtdv5sEWgk4gxR6NXb7WBUnL5sRak4WRzIQRZ1VTWPvV4VI4mgGjNL9TeKMYA==, + } + engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 } + + "@jest/expect-utils@29.7.0": + resolution: + { + integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + "@jest/expect-utils@30.0.5": + resolution: + { + integrity: sha512-F3lmTT7CXWYywoVUGTCmom0vXq3HTTkaZyTAzIy+bXSBizB7o5qzlC9VCtq0arOa8GqmNsbg/cE9C6HLn7Szew==, + } + engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 } + + "@jest/expect@29.7.0": + resolution: + { + integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + "@jest/expect@30.0.5": + resolution: + { + integrity: sha512-6udac8KKrtTtC+AXZ2iUN/R7dp7Ydry+Fo6FPFnDG54wjVMnb6vW/XNlf7Xj8UDjAE3aAVAsR4KFyKk3TCXmTA==, + } + engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 } + + "@jest/fake-timers@29.7.0": + resolution: + { + integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + "@jest/fake-timers@30.0.5": + resolution: + { + integrity: sha512-ZO5DHfNV+kgEAeP3gK3XlpJLL4U3Sz6ebl/n68Uwt64qFFs5bv4bfEEjyRGK5uM0C90ewooNgFuKMdkbEoMEXw==, + } + engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 } + + "@jest/get-type@30.0.1": + resolution: + { + integrity: sha512-AyYdemXCptSRFirI5EPazNxyPwAL0jXt3zceFjaj8NFiKP9pOi0bfXonf6qkf82z2t3QWPeLCWWw4stPBzctLw==, + } + engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 } + + "@jest/globals@29.7.0": + resolution: + { + integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + "@jest/globals@30.0.5": + resolution: + { + integrity: sha512-7oEJT19WW4oe6HR7oLRvHxwlJk2gev0U9px3ufs8sX9PoD1Eza68KF0/tlN7X0dq/WVsBScXQGgCldA1V9Y/jA==, + } + engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 } + + "@jest/pattern@30.0.1": + resolution: + { + integrity: sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==, + } + engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 } + + "@jest/reporters@29.7.0": + resolution: + { + integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + "@jest/reporters@30.0.5": + resolution: + { + integrity: sha512-mafft7VBX4jzED1FwGC1o/9QUM2xebzavImZMeqnsklgcyxBto8mV4HzNSzUrryJ+8R9MFOM3HgYuDradWR+4g==, + } + engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 } + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + "@jest/schemas@29.6.3": + resolution: + { + integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + "@jest/schemas@30.0.5": + resolution: + { + integrity: sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==, + } + engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 } + + "@jest/snapshot-utils@30.0.5": + resolution: + { + integrity: sha512-XcCQ5qWHLvi29UUrowgDFvV4t7ETxX91CbDczMnoqXPOIcZOxyNdSjm6kV5XMc8+HkxfRegU/MUmnTbJRzGrUQ==, + } + engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 } + + "@jest/source-map@29.6.3": + resolution: + { + integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + "@jest/source-map@30.0.1": + resolution: + { + integrity: sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==, + } + engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 } + + "@jest/test-result@29.7.0": + resolution: + { + integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + "@jest/test-result@30.0.5": + resolution: + { + integrity: sha512-wPyztnK0gbDMQAJZ43tdMro+qblDHH1Ru/ylzUo21TBKqt88ZqnKKK2m30LKmLLoKtR2lxdpCC/P3g1vfKcawQ==, + } + engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 } + + "@jest/test-sequencer@29.7.0": + resolution: + { + integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + "@jest/test-sequencer@30.0.5": + resolution: + { + integrity: sha512-Aea/G1egWoIIozmDD7PBXUOxkekXl7ueGzrsGGi1SbeKgQqCYCIf+wfbflEbf2LiPxL8j2JZGLyrzZagjvW4YQ==, + } + engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 } + + "@jest/transform@29.7.0": + resolution: + { + integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + "@jest/transform@30.0.5": + resolution: + { + integrity: sha512-Vk8amLQCmuZyy6GbBht1Jfo9RSdBtg7Lks+B0PecnjI8J+PCLQPGh7uI8Q/2wwpW2gLdiAfiHNsmekKlywULqg==, + } + engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 } + + "@jest/types@29.6.3": + resolution: + { + integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + "@jest/types@30.0.5": + resolution: + { + integrity: sha512-aREYa3aku9SSnea4aX6bhKn4bgv3AXkgijoQgbYV3yvbiGt6z+MQ85+6mIhx9DsKW2BuB/cLR/A+tcMThx+KLQ==, + } + engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 } + + "@jridgewell/gen-mapping@0.3.12": + resolution: + { + integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==, + } + + "@jridgewell/remapping@2.3.5": + resolution: + { + integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==, + } + + "@jridgewell/resolve-uri@3.1.2": + resolution: + { + integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==, + } + engines: { node: ">=6.0.0" } + + "@jridgewell/sourcemap-codec@1.5.4": + resolution: + { + integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==, + } + + "@jridgewell/sourcemap-codec@1.5.5": + resolution: + { + integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==, + } + + "@jridgewell/trace-mapping@0.3.29": + resolution: + { + integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==, + } + + "@jridgewell/trace-mapping@0.3.9": + resolution: + { + integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==, + } + + "@mdx-js/mdx@3.1.1": + resolution: + { + integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==, + } + + "@napi-rs/wasm-runtime@0.2.12": + resolution: + { + integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==, + } + + "@napi-rs/wasm-runtime@0.2.4": + resolution: + { + integrity: sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ==, + } + + "@napi-rs/wasm-runtime@1.0.7": + resolution: + { + integrity: sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==, + } + + "@next/env@16.0.1": + resolution: + { + integrity: sha512-LFvlK0TG2L3fEOX77OC35KowL8D7DlFF45C0OvKMC4hy8c/md1RC4UMNDlUGJqfCoCS2VWrZ4dSE6OjaX5+8mw==, + } + + "@next/eslint-plugin-next@16.0.1": + resolution: + { + integrity: sha512-g4Cqmv/gyFEXNeVB2HkqDlYKfy+YrlM2k8AVIO/YQVEPfhVruH1VA99uT1zELLnPLIeOnx8IZ6Ddso0asfTIdw==, + } + + "@next/swc-darwin-arm64@16.0.1": + resolution: + { + integrity: sha512-R0YxRp6/4W7yG1nKbfu41bp3d96a0EalonQXiMe+1H9GTHfKxGNCGFNWUho18avRBPsO8T3RmdWuzmfurlQPbg==, + } + engines: { node: ">= 10" } + cpu: [arm64] + os: [darwin] + + "@next/swc-darwin-x64@16.0.1": + resolution: + { + integrity: sha512-kETZBocRux3xITiZtOtVoVvXyQLB7VBxN7L6EPqgI5paZiUlnsgYv4q8diTNYeHmF9EiehydOBo20lTttCbHAg==, + } + engines: { node: ">= 10" } + cpu: [x64] + os: [darwin] + + "@next/swc-linux-arm64-gnu@16.0.1": + resolution: + { + integrity: sha512-hWg3BtsxQuSKhfe0LunJoqxjO4NEpBmKkE+P2Sroos7yB//OOX3jD5ISP2wv8QdUwtRehMdwYz6VB50mY6hqAg==, + } + engines: { node: ">= 10" } + cpu: [arm64] + os: [linux] + + "@next/swc-linux-arm64-musl@16.0.1": + resolution: + { + integrity: sha512-UPnOvYg+fjAhP3b1iQStcYPWeBFRLrugEyK/lDKGk7kLNua8t5/DvDbAEFotfV1YfcOY6bru76qN9qnjLoyHCQ==, + } + engines: { node: ">= 10" } + cpu: [arm64] + os: [linux] + + "@next/swc-linux-x64-gnu@16.0.1": + resolution: + { + integrity: sha512-Et81SdWkcRqAJziIgFtsFyJizHoWne4fzJkvjd6V4wEkWTB4MX6J0uByUb0peiJQ4WeAt6GGmMszE5KrXK6WKg==, + } + engines: { node: ">= 10" } + cpu: [x64] + os: [linux] + + "@next/swc-linux-x64-musl@16.0.1": + resolution: + { + integrity: sha512-qBbgYEBRrC1egcG03FZaVfVxrJm8wBl7vr8UFKplnxNRprctdP26xEv9nJ07Ggq4y1adwa0nz2mz83CELY7N6Q==, + } + engines: { node: ">= 10" } + cpu: [x64] + os: [linux] + + "@next/swc-win32-arm64-msvc@16.0.1": + resolution: + { + integrity: sha512-cPuBjYP6I699/RdbHJonb3BiRNEDm5CKEBuJ6SD8k3oLam2fDRMKAvmrli4QMDgT2ixyRJ0+DTkiODbIQhRkeQ==, + } + engines: { node: ">= 10" } + cpu: [arm64] + os: [win32] + + "@next/swc-win32-x64-msvc@16.0.1": + resolution: + { + integrity: sha512-XeEUJsE4JYtfrXe/LaJn3z1pD19fK0Q6Er8Qoufi+HqvdO4LEPyCxLUt4rxA+4RfYo6S9gMlmzCMU2F+AatFqQ==, + } + engines: { node: ">= 10" } + cpu: [x64] + os: [win32] + + "@nodelib/fs.scandir@2.1.5": + resolution: + { + integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, + } + engines: { node: ">= 8" } + + "@nodelib/fs.stat@2.0.5": + resolution: + { + integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, + } + engines: { node: ">= 8" } + + "@nodelib/fs.walk@1.2.8": + resolution: + { + integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, + } + engines: { node: ">= 8" } + + "@nodeutils/defaults-deep@1.1.0": + resolution: + { + integrity: sha512-gG44cwQovaOFdSR02jR9IhVRpnDP64VN6JdjYJTfNz4J4fWn7TQnmrf22nSjRqlwlxPcW8PL/L3KbJg3tdwvpg==, + } + + "@nolyfill/is-core-module@1.0.39": + resolution: + { + integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==, + } + engines: { node: ">=12.4.0" } + + "@nx/conformance@3.0.0": + resolution: + { + integrity: sha512-GojZtOwWjojqIM9oAmvsPRhbprtlOFgY0/fbjdjymuJJ3SBl5eY9LGFHavGoIvyCPOsQeG3mGo+qxw3rlaXZQg==, + } + hasBin: true + peerDependencies: + "@nx/js": ">= 18 < 22" + nx: ">= 18 < 22" + + "@nx/devkit@21.0.0": + resolution: + { + integrity: sha512-1Pg3lLTXYYY1CUOcUpJZc5+IdBSvOF8fKlYAwidiUJMG3jrd1/x4twiR5msZHUZpCNq3+EaqhdEx5eR75Ra15Q==, + } + peerDependencies: + nx: 21.0.0 + + "@nx/devkit@21.3.7": + resolution: + { + integrity: sha512-clqOhLHvGXelJDq0blfrPMvJ88TTMhlxKvbuj+mxpfXCcHIYlhuHeH63u99eO4wEbVtSopOG4szpABSjRXJESw==, + } + peerDependencies: + nx: 21.3.7 + + "@nx/devkit@22.0.3": + resolution: + { + integrity: sha512-98Iq6+FIrAEv7ZK3n86Nr8zUZ20394fpyJBBhvQJiywH+JRonk7JWY5tUaSuL8kfY8vM+WCnFoWHJ+2Hsgw9EA==, + } + peerDependencies: + nx: ">= 21 <= 23 || ^22.0.0-0" + + "@nx/eslint@21.3.7": + resolution: + { + integrity: sha512-YYxPkohOjUYpbYXgDbrgbgoyA7DlxK8pDYasVYcyEGwf9M5H5KIacgkK2EdBBcIfEzFiASKbVm817tjhKT5ndQ==, + } + peerDependencies: + "@zkochan/js-yaml": 0.0.7 + eslint: ^8.0.0 || ^9.0.0 + peerDependenciesMeta: + "@zkochan/js-yaml": + optional: true + + "@nx/jest@21.3.7": + resolution: + { + integrity: sha512-77r1cV2AYzxkEsa4qKrMn5TuijfSR52Lwu7t8aSj7rdi1MYQoWhkW6sEgoh9+XnJ+yoksYjc3K9vKyco6R488w==, + } + + "@nx/js@21.3.7": + resolution: + { + integrity: sha512-oy+WcZqfYvOzhO+cefgwYVRIBULfVQk8J8prgw9kMuFcJRgOYXkkfB1HLdkxx+OrHGDPqs7Oe0+8KS1lilnumA==, + } + peerDependencies: + verdaccio: ^6.0.5 + peerDependenciesMeta: + verdaccio: + optional: true + + "@nx/key-darwin-arm64@3.0.0": + resolution: + { + integrity: sha512-oVb9RqCqtrUXmPxKrum8FwW5GHv/DgxE1MXOBQUt8eEsO9NOBN3t80SyIvrlUPrd5hNIxXPz4IRA9Fl5+9ZMAA==, + } + engines: { node: ">= 10" } + cpu: [arm64] + os: [darwin] + + "@nx/key-darwin-x64@3.0.0": + resolution: + { + integrity: sha512-eMV1Nkb4+/k7/qjPuLFjgQriSyupphWHrf+Wc5nD41G8j+Nf7SVYliiQ8Bl4/pgxr7TxCXw0vFa5FsYcIHdOzQ==, + } + engines: { node: ">= 10" } + cpu: [x64] + os: [darwin] + + "@nx/key-linux-arm-gnueabihf@3.0.0": + resolution: + { + integrity: sha512-Ra8dsogoCyxM8W/QrLuRR4O4gU/bcFPnnzhIeQ6mTfnEtGQlqZFBDVWSjjJKVoRzwtAnruJX1liDtnUaNUg5yQ==, + } + engines: { node: ">= 10" } + cpu: [arm] + os: [linux] + + "@nx/key-linux-arm64-gnu@3.0.0": + resolution: + { + integrity: sha512-Wrg4CYfLIQB8wmfX15lDVNeg1ivrh9B+m0eEHq1BjXAVwKuT74B5l8kquKa0GihMY0SdkGCrNCttC3Dgtm/vaQ==, + } + engines: { node: ">= 10" } + cpu: [arm64] + os: [linux] + + "@nx/key-linux-arm64-musl@3.0.0": + resolution: + { + integrity: sha512-vAlICrMMY5LjzoAN6elAKbkqhfKVki2uqjTF9IPULBX4BZGH8qY0VAhXjwprKkrA4044ND5TI2MIWs3OWQetMA==, + } + engines: { node: ">= 10" } + cpu: [arm64] + os: [linux] + + "@nx/key-linux-x64-gnu@3.0.0": + resolution: + { + integrity: sha512-51gwUYJP3SzTMwVioIXSERs63gaKg7Avlhr84dHPLcM7sABHzHaDfpiD7xl5dlKLn1+2cGETdiShUllBdC/Xvg==, + } + engines: { node: ">= 10" } + cpu: [x64] + os: [linux] + + "@nx/key-linux-x64-musl@3.0.0": + resolution: + { + integrity: sha512-DG3ecD1gNzEQmE0kSRZcLE7SFY0hFVKgtuNBxuui/OJRgk0HG0yNTqxoNBEfEFKbHIZvKY0Ga2xq3+ELq7tAcQ==, + } + engines: { node: ">= 10" } + cpu: [x64] + os: [linux] + + "@nx/key-win32-arm64-msvc@3.0.0": + resolution: + { + integrity: sha512-4KHAnabcyyewMpXEp+SfV/Lwn4pmHZu1idg6vipIpI+wiUHPNS2tEx8cLloVEM08/Bf6O+WW8bqveyz6uNhvNw==, + } + engines: { node: ">= 10" } + cpu: [arm64] + os: [win32] + + "@nx/key-win32-x64-msvc@3.0.0": + resolution: + { + integrity: sha512-Ym5ZEphBiYyDnESgMfAG99jYWqXghPTeOxAp6+FhZ5IB00+sAkIbGqOEx6sMxa+BOyDst8XlUoFsn8+14csi5w==, + } + engines: { node: ">= 10" } + cpu: [x64] + os: [win32] + + "@nx/key@3.0.0": + resolution: + { + integrity: sha512-Lz1oDkih4bXVnuXp2vzL4MM5Ep6m+5yyftvB5qD9IAS2cCpqVEDLDwnTkqdOpdz681jtXUCJ5UlZy9yRuGPaww==, + } + engines: { node: ">= 10" } + + "@nx/nx-darwin-arm64@21.3.7": + resolution: + { + integrity: sha512-/I8tpxDNZ3Xq9DnC5Y0q7II0e+1dV+vWwGTj/hxTM6oVo9wv9hBVkzA5F+UL2AJ20BrlPe34EKtIxaRfkd7SHQ==, + } + cpu: [arm64] + os: [darwin] + + "@nx/nx-darwin-x64@21.3.7": + resolution: + { + integrity: sha512-l5P6wmrnFz3zY+AnDCf2PqqlrDnDMULl5E58KC3ax49kqkWc/1umauJJeP/tzWRYGd4yHL4/SbtKU0HRT91l7Q==, + } + cpu: [x64] + os: [darwin] + + "@nx/nx-freebsd-x64@21.3.7": + resolution: + { + integrity: sha512-JJq4t8mcR1t5WyX8RvAthGlkun+Uyx3c4WA8hemLbqNCHnR/oQ5tIapRldp1FPBYJEzRzTgtk8Ov+rAjLuXqqQ==, + } + cpu: [x64] + os: [freebsd] + + "@nx/nx-linux-arm-gnueabihf@21.3.7": + resolution: + { + integrity: sha512-9F5YVjJH/N8bqfVySTL8UY8PwdEGv4tjax6LSz5wByM6ThQtGqZreDqBectmgz4Uj1q1P+7zu5ra9hrBAr3Mww==, + } + cpu: [arm] + os: [linux] + + "@nx/nx-linux-arm64-gnu@21.3.7": + resolution: + { + integrity: sha512-+YnuF9lwffzCsLrP0sCuDZKhbb5nFSV6hSwd8rCCZmzU35mqs0X4Mo8vjwHDZTCzIuDxzLK7Nl7ZeWQuAMxcJQ==, + } + cpu: [arm64] + os: [linux] + + "@nx/nx-linux-arm64-musl@21.3.7": + resolution: + { + integrity: sha512-g1SmaC4uHkaLS58FMYnxLKkecASdM+B/G3GH3vPS9LDYdHuFukqwLBvVlvueno6CuIAHc+7bW+TH3xVadnUOvw==, + } + cpu: [arm64] + os: [linux] + + "@nx/nx-linux-x64-gnu@21.3.7": + resolution: + { + integrity: sha512-zupCkCiH2KKqdy/XcFwwQdyck2foX8H6W1mXfTPV94LqEOjfz8j0nfVuTT4WlZAaWcfwzszzdgKy6Rls65i9HA==, + } + cpu: [x64] + os: [linux] + + "@nx/nx-linux-x64-musl@21.3.7": + resolution: + { + integrity: sha512-Lhk/q/qb4HFaESR5KLCDPfGWh3Vp0x4bYTILIQ1mBTyqe3zJl1CMtAZp2L43gT7Zt41mz4ZiohavdDyFhIaUgA==, + } + cpu: [x64] + os: [linux] + + "@nx/nx-win32-arm64-msvc@21.3.7": + resolution: + { + integrity: sha512-fk1edw6PNfUiKHDCHqe0WHVJgWiDUU1DoWDhJji5ZY0w8nT89AfTDDxt4YZptcFwAuuwPA/98K0fjQYcenlgTg==, + } + cpu: [arm64] + os: [win32] + + "@nx/nx-win32-x64-msvc@21.3.7": + resolution: + { + integrity: sha512-riVFPTcYseYpzONDvlO/RbdYp/q8R0NGD9J2f/N8/ucqmZcoa3ABx6BvGIStMgmUVxNnIkHNPNnm8Hor+BHFYA==, + } + cpu: [x64] + os: [win32] + + "@nx/plugin@21.3.7": + resolution: + { + integrity: sha512-49D/z285hIoWi3Eo2zWlWAuD4Cxi035bpFKypYW7WwL/ex93jo0a4NI9eO7oTD0Z9JaZny1M+H8cFzikvzM36A==, + } + + "@nx/rollup@21.3.7": + resolution: + { + integrity: sha512-wW9BQBs7GtLKD44i3zBrQK8w5ARlS9zyLX9LBntgkGAG2xjge9AGCjIoTwiF+hYbmYeX7ac1+2JO2uyGE1W3Vg==, + } + + "@nx/workspace@21.3.7": + resolution: + { + integrity: sha512-DIMb9Ts6w0FtKIglNEkAQ22w+b/4kx97MJDdK3tU1t0o0hG64XbYZ9xyVjnENVEkSKnSInAid/dBg+pMTgwxhA==, + } + + "@octokit/auth-token@6.0.0": + resolution: + { + integrity: sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w==, + } + engines: { node: ">= 20" } + + "@octokit/core@7.0.6": + resolution: + { + integrity: sha512-DhGl4xMVFGVIyMwswXeyzdL4uXD5OGILGX5N8Y+f6W7LhC1Ze2poSNrkF/fedpVDHEEZ+PHFW0vL14I+mm8K3Q==, + } + engines: { node: ">= 20" } + + "@octokit/endpoint@11.0.2": + resolution: + { + integrity: sha512-4zCpzP1fWc7QlqunZ5bSEjxc6yLAlRTnDwKtgXfcI/FxxGoqedDG8V2+xJ60bV2kODqcGB+nATdtap/XYq2NZQ==, + } + engines: { node: ">= 20" } + + "@octokit/graphql@9.0.3": + resolution: + { + integrity: sha512-grAEuupr/C1rALFnXTv6ZQhFuL1D8G5y8CN04RgrO4FIPMrtm+mcZzFG7dcBm+nq+1ppNixu+Jd78aeJOYxlGA==, + } + engines: { node: ">= 20" } + + "@octokit/openapi-types@26.0.0": + resolution: + { + integrity: sha512-7AtcfKtpo77j7Ts73b4OWhOZHTKo/gGY8bB3bNBQz4H+GRSWqx2yvj8TXRsbdTE0eRmYmXOEY66jM7mJ7LzfsA==, + } + + "@octokit/openapi-types@27.0.0": + resolution: + { + integrity: sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA==, + } + + "@octokit/plugin-paginate-rest@13.2.1": + resolution: + { + integrity: sha512-Tj4PkZyIL6eBMYcG/76QGsedF0+dWVeLhYprTmuFVVxzDW7PQh23tM0TP0z+1MvSkxB29YFZwnUX+cXfTiSdyw==, + } + engines: { node: ">= 20" } + peerDependencies: + "@octokit/core": ">=6" + + "@octokit/plugin-request-log@6.0.0": + resolution: + { + integrity: sha512-UkOzeEN3W91/eBq9sPZNQ7sUBvYCqYbrrD8gTbBuGtHEuycE4/awMXcYvx6sVYo7LypPhmQwwpUe4Yyu4QZN5Q==, + } + engines: { node: ">= 20" } + peerDependencies: + "@octokit/core": ">=6" + + "@octokit/plugin-rest-endpoint-methods@16.1.1": + resolution: + { + integrity: sha512-VztDkhM0ketQYSh5Im3IcKWFZl7VIrrsCaHbDINkdYeiiAsJzjhS2xRFCSJgfN6VOcsoW4laMtsmf3HcNqIimg==, + } + engines: { node: ">= 20" } + peerDependencies: + "@octokit/core": ">=6" + + "@octokit/request-error@7.1.0": + resolution: + { + integrity: sha512-KMQIfq5sOPpkQYajXHwnhjCC0slzCNScLHs9JafXc4RAJI+9f+jNDlBNaIMTvazOPLgb4BnlhGJOTbnN0wIjPw==, + } + engines: { node: ">= 20" } + + "@octokit/request@10.0.7": + resolution: + { + integrity: sha512-v93h0i1yu4idj8qFPZwjehoJx4j3Ntn+JhXsdJrG9pYaX6j/XRz2RmasMUHtNgQD39nrv/VwTWSqK0RNXR8upA==, + } + engines: { node: ">= 20" } + + "@octokit/rest@22.0.0": + resolution: + { + integrity: sha512-z6tmTu9BTnw51jYGulxrlernpsQYXpui1RK21vmXn8yF5bp6iX16yfTtJYGK5Mh1qDkvDOmp2n8sRMcQmR8jiA==, + } + engines: { node: ">= 20" } + + "@octokit/types@15.0.2": + resolution: + { + integrity: sha512-rR+5VRjhYSer7sC51krfCctQhVTmjyUMAaShfPB8mscVa8tSoLyon3coxQmXu0ahJoLVWl8dSGD/3OGZlFV44Q==, + } + + "@octokit/types@16.0.0": + resolution: + { + integrity: sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg==, + } + + "@orama/orama@3.1.16": + resolution: + { + integrity: sha512-scSmQBD8eANlMUOglxHrN1JdSW8tDghsPuS83otqealBiIeMukCQMOf/wc0JJjDXomqwNdEQFLXLGHrU6PGxuA==, + } + engines: { node: ">= 20.0.0" } + + "@oxc-resolver/binding-android-arm-eabi@11.13.2": + resolution: + { + integrity: sha512-vWd1NEaclg/t2DtEmYzRRBNQOueMI8tixw/fSNZ9XETXLRJiAjQMYpYeflQdRASloGze6ZelHE/wIBNt4S+pkw==, + } + cpu: [arm] + os: [android] + + "@oxc-resolver/binding-android-arm64@11.13.2": + resolution: + { + integrity: sha512-jxZrYcxgpI6IuQpguQVAQNrZfUyiYfMVqR4pKVU3PRLCM7AsfXNKp0TIgcvp+l6dYVdoZ1MMMMa5Ayjd09rNOw==, + } + cpu: [arm64] + os: [android] + + "@oxc-resolver/binding-darwin-arm64@11.13.2": + resolution: + { + integrity: sha512-RDS3HUe1FvgjNS1xfBUqiEJ8938Zb5r7iKABwxEblp3K4ufZZNAtoaHjdUH2TJ0THDmuf0OxxVUO/Y+4Ep4QfQ==, + } + cpu: [arm64] + os: [darwin] + + "@oxc-resolver/binding-darwin-x64@11.13.2": + resolution: + { + integrity: sha512-tDcyWtkUzkt6auJLP2dOjL84BxqHkKW4mz2lNRIGPTq7b+HBraB+m8RdRH6BgqTvbnNECOxR3XAMaKBKC8J51g==, + } + cpu: [x64] + os: [darwin] + + "@oxc-resolver/binding-freebsd-x64@11.13.2": + resolution: + { + integrity: sha512-fpaeN8Q0kWvKns9uSMg6CcKo7cdgmWt6J91stPf8sdM+EKXzZ0YcRnWWyWF8SM16QcLUPCy5Iwt5Z8aYBGaZYA==, + } + cpu: [x64] + os: [freebsd] + + "@oxc-resolver/binding-linux-arm-gnueabihf@11.13.2": + resolution: + { + integrity: sha512-idBgJU5AvSsGOeaIWiFBKbNBjpuduHsJmrG4CBbEUNW/Ykx+ISzcuj1PHayiYX6R9stVsRhj3d2PyymfC5KWRg==, + } + cpu: [arm] + os: [linux] + + "@oxc-resolver/binding-linux-arm-musleabihf@11.13.2": + resolution: + { + integrity: sha512-BlBvQUhvvIM/7s96KlKhMk0duR2sj8T7Hyii46/5QnwfN/pHwobvOL5czZ6/SKrHNB/F/qDY4hGsBuB1y7xgTg==, + } + cpu: [arm] + os: [linux] + + "@oxc-resolver/binding-linux-arm64-gnu@11.13.2": + resolution: + { + integrity: sha512-lUmDTmYOGpbIK+FBfZ0ySaQTo7g1Ia/WnDnQR2wi/0AtehZIg/ZZIgiT/fD0iRvKEKma612/0PVo8dXdAKaAGA==, + } + cpu: [arm64] + os: [linux] + + "@oxc-resolver/binding-linux-arm64-musl@11.13.2": + resolution: + { + integrity: sha512-dkGzOxo+I9lA4Er6qzFgkFevl3JvwyI9i0T/PkOJHva04rb1p9dz8GPogTO9uMK4lrwLWzm/piAu+tHYC7v7+w==, + } + cpu: [arm64] + os: [linux] + + "@oxc-resolver/binding-linux-ppc64-gnu@11.13.2": + resolution: + { + integrity: sha512-53kWsjLkVFnoSA7COdps38pBssN48zI8LfsOvupsmQ0/4VeMYb+0Ao9O6r52PtmFZsGB3S1Qjqbjl/Pswj1a3g==, + } + cpu: [ppc64] + os: [linux] + + "@oxc-resolver/binding-linux-riscv64-gnu@11.13.2": + resolution: + { + integrity: sha512-MfxN6DMpvmdCbGlheJ+ihy11oTcipqDfcEIQV9ah3FGXBRCZtBOHJpQDk8qI2Y+nCXVr3Nln7OSsOzoC4+rSYQ==, + } + cpu: [riscv64] + os: [linux] + + "@oxc-resolver/binding-linux-riscv64-musl@11.13.2": + resolution: + { + integrity: sha512-WXrm4YiRU0ijqb72WHSjmfYaQZ7t6/kkQrFc4JtU+pUE4DZA/DEdxOuQEd4Q43VqmLvICTJWSaZMlCGQ4PSRUg==, + } + cpu: [riscv64] + os: [linux] + + "@oxc-resolver/binding-linux-s390x-gnu@11.13.2": + resolution: + { + integrity: sha512-4pISWIlOFRUhWyvGCB3XUhtcwyvwGGhlXhHz7IXCXuGufaQtvR05trvw8U1ZnaPhsdPBkRhOMIedX11ayi5uXw==, + } + cpu: [s390x] + os: [linux] + + "@oxc-resolver/binding-linux-x64-gnu@11.13.2": + resolution: + { + integrity: sha512-DVo6jS8n73yNAmCsUOOk2vBeC60j2RauDXQM8p7RDl0afsEaA2le22vD8tky7iNoM5tsxfBmE4sOJXEKgpwWRw==, + } + cpu: [x64] + os: [linux] + + "@oxc-resolver/binding-linux-x64-musl@11.13.2": + resolution: + { + integrity: sha512-6WqrE+hQBFP35KdwQjWcZpldbTq6yJmuTVThISu+rY3+j6MaDp2ciLHTr1X68r2H/7ocOIl4k3NnOVIzeRJE3w==, + } + cpu: [x64] + os: [linux] + + "@oxc-resolver/binding-wasm32-wasi@11.13.2": + resolution: + { + integrity: sha512-YpxvQmP2D+mNUkLQZbBjGz20g/pY8XoOBdPPoWMl9X68liFFjXxkPQTrZxWw4zzG/UkTM5z6dPRTyTePRsMcjw==, + } + engines: { node: ">=14.0.0" } + cpu: [wasm32] + + "@oxc-resolver/binding-win32-arm64-msvc@11.13.2": + resolution: + { + integrity: sha512-1SKBw6KcCmvPBdEw1/Qdpv6eSDf23lCXTWz9VxTe6QUQ/1wR+HZR2uS4q6C8W6jnIswMTQbxpTvVwdRXl+ufeA==, + } + cpu: [arm64] + os: [win32] + + "@oxc-resolver/binding-win32-ia32-msvc@11.13.2": + resolution: + { + integrity: sha512-KEVV7wggDucxRn3vvyHnmTCPXoCT7vWpH18UVLTygibHJvNRP2zl5lBaQcCIdIaYYZjKt1aGI/yZqxZvHoiCdg==, + } + cpu: [ia32] + os: [win32] + + "@oxc-resolver/binding-win32-x64-msvc@11.13.2": + resolution: + { + integrity: sha512-6AAdN9v/wO5c3td1yidgNLKYlzuNgfOtEqBq60WE469bJWR7gHgG/S5aLR2pH6/gyPLs9UXtItxi934D+0Estg==, + } + cpu: [x64] + os: [win32] + + "@phenomnomnominal/tsquery@5.0.1": + resolution: + { + integrity: sha512-3nVv+e2FQwsW8Aw6qTU6f+1rfcJ3hrcnvH/mu9i8YhxO+9sqbOfpL8m6PbET5+xKOlz/VSbp0RoYWYCtIsnmuA==, + } + peerDependencies: + typescript: ^3 || ^4 || ^5 + + "@phun-ky/typeof@2.0.3": + resolution: + { + integrity: sha512-oeQJs1aa8Ghke8JIK9yuq/+KjMiaYeDZ38jx7MhkXncXlUKjqQ3wEm2X3qCKyjo+ZZofZj+WsEEiqkTtRuE2xQ==, + } + engines: { node: ^20.9.0 || >=22.0.0, npm: ">=10.8.2" } + + "@pkgjs/parseargs@0.11.0": + resolution: + { + integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==, + } + engines: { node: ">=14" } + + "@pkgr/core@0.2.9": + resolution: + { + integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==, + } + engines: { node: ^12.20.0 || ^14.18.0 || >=16.0.0 } + + "@radix-ui/number@1.1.1": + resolution: + { + integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==, + } + + "@radix-ui/primitive@1.1.3": + resolution: + { + integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==, + } + + "@radix-ui/react-accordion@1.2.12": + resolution: + { + integrity: sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==, + } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + + "@radix-ui/react-arrow@1.1.7": + resolution: + { + integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==, + } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + + "@radix-ui/react-collapsible@1.1.12": + resolution: + { + integrity: sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==, + } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + + "@radix-ui/react-collection@1.1.7": + resolution: + { + integrity: sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==, + } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + + "@radix-ui/react-compose-refs@1.1.2": + resolution: + { + integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==, + } + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + + "@radix-ui/react-context@1.1.2": + resolution: + { + integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==, + } + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + + "@radix-ui/react-dialog@1.1.15": + resolution: + { + integrity: sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==, + } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + + "@radix-ui/react-direction@1.1.1": + resolution: + { + integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==, + } + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + + "@radix-ui/react-dismissable-layer@1.1.11": + resolution: + { + integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==, + } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + + "@radix-ui/react-focus-guards@1.1.3": + resolution: + { + integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==, + } + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + + "@radix-ui/react-focus-scope@1.1.7": + resolution: + { + integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==, + } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + + "@radix-ui/react-id@1.1.1": + resolution: + { + integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==, + } + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + + "@radix-ui/react-navigation-menu@1.2.14": + resolution: + { + integrity: sha512-YB9mTFQvCOAQMHU+C/jVl96WmuWeltyUEpRJJky51huhds5W2FQr1J8D/16sQlf0ozxkPK8uF3niQMdUwZPv5w==, + } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + + "@radix-ui/react-popover@1.1.15": + resolution: + { + integrity: sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==, + } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + + "@radix-ui/react-popper@1.2.8": + resolution: + { + integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==, + } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + + "@radix-ui/react-portal@1.1.9": + resolution: + { + integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==, + } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + + "@radix-ui/react-presence@1.1.5": + resolution: + { + integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==, + } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + + "@radix-ui/react-primitive@2.1.3": + resolution: + { + integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==, + } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + + "@radix-ui/react-roving-focus@1.1.11": + resolution: + { + integrity: sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==, + } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + + "@radix-ui/react-scroll-area@1.2.10": + resolution: + { + integrity: sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==, + } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + + "@radix-ui/react-slot@1.2.3": + resolution: + { + integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==, + } + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + + "@radix-ui/react-slot@1.2.4": + resolution: + { + integrity: sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==, + } + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + + "@radix-ui/react-tabs@1.1.13": + resolution: + { + integrity: sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A==, + } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + + "@radix-ui/react-use-callback-ref@1.1.1": + resolution: + { + integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==, + } + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + + "@radix-ui/react-use-controllable-state@1.2.2": + resolution: + { + integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==, + } + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + + "@radix-ui/react-use-effect-event@0.0.2": + resolution: + { + integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==, + } + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + + "@radix-ui/react-use-escape-keydown@1.1.1": + resolution: + { + integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==, + } + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + + "@radix-ui/react-use-layout-effect@1.1.1": + resolution: + { + integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==, + } + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + + "@radix-ui/react-use-previous@1.1.1": + resolution: + { + integrity: sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==, + } + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + + "@radix-ui/react-use-rect@1.1.1": + resolution: + { + integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==, + } + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + + "@radix-ui/react-use-size@1.1.1": + resolution: + { + integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==, + } + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + + "@radix-ui/react-visually-hidden@1.2.3": + resolution: + { + integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==, + } + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + + "@radix-ui/rect@1.1.1": + resolution: + { + integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==, + } + + "@release-it/conventional-changelog@10.0.1": + resolution: + { + integrity: sha512-Qp+eyMGCPyq5xiWoNK91cWVIR/6HD1QAUNeG6pV2G4kxotWl81k/KDQqDNvrNVmr9+zDp53jI7pVVYQp6mi4zA==, + } + engines: { node: ^20.9.0 || >=22.0.0 } + peerDependencies: + release-it: ^18.0.0 || ^19.0.0 + + "@rollup/plugin-babel@6.0.4": + resolution: + { + integrity: sha512-YF7Y52kFdFT/xVSuVdjkV5ZdX/3YtmX0QulG+x0taQOtJdHYzVU61aSSkAgVJ7NOv6qPkIYiJSgSWWN/DM5sGw==, + } + engines: { node: ">=14.0.0" } + peerDependencies: + "@babel/core": ^7.0.0 + "@types/babel__core": ^7.1.9 + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + "@types/babel__core": + optional: true + rollup: + optional: true + + "@rollup/plugin-commonjs@25.0.8": + resolution: + { + integrity: sha512-ZEZWTK5n6Qde0to4vS9Mr5x/0UZoqCxPVR9KRUjU4kA2sO7GEUn1fop0DAwpO6z0Nw/kJON9bDmSxdWxO/TT1A==, + } + engines: { node: ">=14.0.0" } + peerDependencies: + rollup: ^2.68.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + "@rollup/plugin-image@3.0.3": + resolution: + { + integrity: sha512-qXWQwsXpvD4trSb8PeFPFajp8JLpRtqqOeNYRUKnEQNHm7e5UP7fuSRcbjQAJ7wDZBbnJvSdY5ujNBQd9B1iFg==, + } + engines: { node: ">=14.0.0" } + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + "@rollup/plugin-json@6.1.0": + resolution: + { + integrity: sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==, + } + engines: { node: ">=14.0.0" } + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + "@rollup/plugin-node-resolve@15.3.1": + resolution: + { + integrity: sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA==, + } + engines: { node: ">=14.0.0" } + peerDependencies: + rollup: ^2.78.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + "@rollup/plugin-typescript@12.1.4": + resolution: + { + integrity: sha512-s5Hx+EtN60LMlDBvl5f04bEiFZmAepk27Q+mr85L/00zPDn1jtzlTV6FWn81MaIwqfWzKxmOJrBWHU6vtQyedQ==, + } + engines: { node: ">=14.0.0" } + peerDependencies: + rollup: ^2.14.0||^3.0.0||^4.0.0 + tslib: "*" + typescript: ">=3.7.0" + peerDependenciesMeta: + rollup: + optional: true + tslib: + optional: true + + "@rollup/pluginutils@4.2.1": + resolution: + { + integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==, + } + engines: { node: ">= 8.0.0" } + + "@rollup/pluginutils@5.2.0": + resolution: + { + integrity: sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==, + } + engines: { node: ">=14.0.0" } + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + "@rollup/rollup-android-arm-eabi@4.46.0": + resolution: + { + integrity: sha512-9f3nSTFI2ivfxc7/tHBHcJ8pRnp8ROrELvsVprlQPVvcZ+j5zztYd+PTJGpyIOAdTvNwNrpCXswKSeoQcyGjMQ==, + } + cpu: [arm] + os: [android] + + "@rollup/rollup-android-arm64@4.46.0": + resolution: + { + integrity: sha512-tFZSEhqJ8Yrpe50TzOdeoYi72gi/jsnT7y8Qrozf3cNu28WX+s6I3XzEPUAqoaT9SAS8Xz9AzGTFlxxCH/w20w==, + } + cpu: [arm64] + os: [android] + + "@rollup/rollup-darwin-arm64@4.46.0": + resolution: + { + integrity: sha512-+DikIIs+p6yU2hF51UaWG8BnHbq90X0QIOt5zqSKSZxY+G3qqdLih214e9InJal21af2PuuxkDectetGfbVPJw==, + } + cpu: [arm64] + os: [darwin] + + "@rollup/rollup-darwin-x64@4.46.0": + resolution: + { + integrity: sha512-5a+NofhdEB/WimSlFMskbFQn1vqz1FWryYpA99trmZGO6qEmiS0IsX6w4B3d91U878Q2ZQdiaFF1gxX4P147og==, + } + cpu: [x64] + os: [darwin] + + "@rollup/rollup-freebsd-arm64@4.46.0": + resolution: + { + integrity: sha512-igr/RlKPS3OCy4jD3XBmAmo3UAcNZkJSubRsw1JeM8bAbwf15k/3eMZXD91bnjheijJiOJcga3kfCLKjV8IXNg==, + } + cpu: [arm64] + os: [freebsd] + + "@rollup/rollup-freebsd-x64@4.46.0": + resolution: + { + integrity: sha512-MdigWzPSHlQzB1xZ+MdFDWTAH+kcn7UxjEBoOKuaso7z1DRlnAnrknB1mTtNOQ+GdPI8xgExAGwHeqQjntR0Cg==, + } + cpu: [x64] + os: [freebsd] + + "@rollup/rollup-linux-arm-gnueabihf@4.46.0": + resolution: + { + integrity: sha512-dmZseE0ZwA/4yy1+BwFrDqFTjjNg24GO9xSrb1weVbt6AFkhp5pz1gVS7IMtfIvoWy8yp6q/zN0bKnefRUImvQ==, + } + cpu: [arm] + os: [linux] + + "@rollup/rollup-linux-arm-musleabihf@4.46.0": + resolution: + { + integrity: sha512-fzhfn6p9Cfm3W8UrWKIa4l7Wfjs/KGdgaswMBBE3KY3Ta43jg2XsPrAtfezHpsRk0Nx+TFuS3hZk/To2N5kFPQ==, + } + cpu: [arm] + os: [linux] + + "@rollup/rollup-linux-arm64-gnu@4.46.0": + resolution: + { + integrity: sha512-vVDD+iPDPmJQ5nAQ5Tifq3ywdv60FartglFI8VOCK+hcU9aoG0qlQTsDJP97O5yiTaTqlneZWoARMcVC5nyUoQ==, + } + cpu: [arm64] + os: [linux] + + "@rollup/rollup-linux-arm64-musl@4.46.0": + resolution: + { + integrity: sha512-0d0jx08fzDHCzXqrtCMEEyxKU0SvJrWmUjUDE2/KDQ2UDJql0tfiwYvEx1oHELClKO8CNdE+AGJj+RqXscZpdQ==, + } + cpu: [arm64] + os: [linux] + + "@rollup/rollup-linux-loongarch64-gnu@4.46.0": + resolution: + { + integrity: sha512-XBYu9oW9eKJadWn8M7hkTZsD4yG+RrsTrVEgyKwb4L72cpJjRbRboTG9Lg9fec8MxJp/cfTHAocg4mnismQR8A==, + } + cpu: [loong64] + os: [linux] + + "@rollup/rollup-linux-ppc64-gnu@4.46.0": + resolution: + { + integrity: sha512-wJaRvcT17PoOK6Ggcfo3nouFlybHvARBS4jzT0PC/lg17fIJHcDS2fZz3sD+iA4nRlho2zE6OGbU0HvwATdokQ==, + } + cpu: [ppc64] + os: [linux] + + "@rollup/rollup-linux-riscv64-gnu@4.46.0": + resolution: + { + integrity: sha512-GZ5bkMFteAGkcmh8x0Ok4LSa+L62Ez0tMsHPX6JtR0wl4Xc3bQcrFHDiR5DGLEDFtGrXih4Nd/UDaFqs968/wA==, + } + cpu: [riscv64] + os: [linux] + + "@rollup/rollup-linux-riscv64-musl@4.46.0": + resolution: + { + integrity: sha512-7CjPw6FflFsVOUfWOrVrREiV3IYXG4RzZ1ZQUaT3BtSK8YXN6x286o+sruPZJESIaPebYuFowmg54ZdrkVBYog==, + } + cpu: [riscv64] + os: [linux] + + "@rollup/rollup-linux-s390x-gnu@4.46.0": + resolution: + { + integrity: sha512-nmvnl0ZiuysltcB/cKjUh40Rx4FbSyueERDsl2FLvLYr6pCgSsvGr3SocUT84svSpmloS7f1DRWqtRha74Gi1w==, + } + cpu: [s390x] + os: [linux] + + "@rollup/rollup-linux-x64-gnu@4.46.0": + resolution: + { + integrity: sha512-Cv+moII5C8RM6gZbR3cb21o6rquVDZrN2o81maROg1LFzBz2dZUwIQSxFA8GtGZ/F2KtsqQ2z3eFPBb6akvQNg==, + } + cpu: [x64] + os: [linux] + + "@rollup/rollup-linux-x64-musl@4.46.0": + resolution: + { + integrity: sha512-PHcMG8DZTM9RCIjp8QIfN0VYtX0TtBPnWOTRurFhoCDoi9zptUZL2k7pCs+5rgut7JAiUsYy+huyhVKPcmxoog==, + } + cpu: [x64] + os: [linux] + + "@rollup/rollup-win32-arm64-msvc@4.46.0": + resolution: + { + integrity: sha512-1SI/Rd47e8aQJeFWMDg16ET+fjvCcD/CzeaRmIEPmb05hx+3cCcwIF4ebUag4yTt/D1peE+Mgp0+Po3M358cAA==, + } + cpu: [arm64] + os: [win32] + + "@rollup/rollup-win32-ia32-msvc@4.46.0": + resolution: + { + integrity: sha512-JwOCYxmumFDfDhx4kNyz6kTVK3gWzBIvVdMNzQMRDubcoGRDniOOmo6DDNP42qwZx3Bp9/6vWJ+kNzNqXoHmeA==, + } + cpu: [ia32] + os: [win32] + + "@rollup/rollup-win32-x64-msvc@4.46.0": + resolution: + { + integrity: sha512-IPMIfrfkG1GaEXi+JSsQEx8x9b4b+hRZXO7KYc2pKio3zO2/VDXDs6B9Ts/nnO+25Fk1tdAVtUn60HKKPPzDig==, + } + cpu: [x64] + os: [win32] + + "@rtsao/scc@1.1.0": + resolution: + { + integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==, + } + + "@shikijs/core@3.15.0": + resolution: + { + integrity: sha512-8TOG6yG557q+fMsSVa8nkEDOZNTSxjbbR8l6lF2gyr6Np+jrPlslqDxQkN6rMXCECQ3isNPZAGszAfYoJOPGlg==, + } + + "@shikijs/engine-javascript@3.15.0": + resolution: + { + integrity: sha512-ZedbOFpopibdLmvTz2sJPJgns8Xvyabe2QbmqMTz07kt1pTzfEvKZc5IqPVO/XFiEbbNyaOpjPBkkr1vlwS+qg==, + } + + "@shikijs/engine-oniguruma@3.15.0": + resolution: + { + integrity: sha512-HnqFsV11skAHvOArMZdLBZZApRSYS4LSztk2K3016Y9VCyZISnlYUYsL2hzlS7tPqKHvNqmI5JSUJZprXloMvA==, + } + + "@shikijs/langs@3.15.0": + resolution: + { + integrity: sha512-WpRvEFvkVvO65uKYW4Rzxs+IG0gToyM8SARQMtGGsH4GDMNZrr60qdggXrFOsdfOVssG/QQGEl3FnJ3EZ+8w8A==, + } + + "@shikijs/rehype@3.15.0": + resolution: + { + integrity: sha512-U+tqD1oxL+85N8FaW5XYIlMZ8KAa2g9IdplEZxPWflGRJf2gQRiBMMrpdG1USz3PN350YnMUHWcz9Twt3wJjXQ==, + } + + "@shikijs/themes@3.15.0": + resolution: + { + integrity: sha512-8ow2zWb1IDvCKjYb0KiLNrK4offFdkfNVPXb1OZykpLCzRU6j+efkY+Y7VQjNlNFXonSw+4AOdGYtmqykDbRiQ==, + } + + "@shikijs/transformers@3.15.0": + resolution: + { + integrity: sha512-Hmwip5ovvSkg+Kc41JTvSHHVfCYF+C8Cp1omb5AJj4Xvd+y9IXz2rKJwmFRGsuN0vpHxywcXJ1+Y4B9S7EG1/A==, + } + + "@shikijs/types@3.15.0": + resolution: + { + integrity: sha512-BnP+y/EQnhihgHy4oIAN+6FFtmfTekwOLsQbRw9hOKwqgNy8Bdsjq8B05oAt/ZgvIWWFrshV71ytOrlPfYjIJw==, + } + + "@shikijs/vscode-textmate@10.0.2": + resolution: + { + integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==, + } + + "@sinclair/typebox@0.27.8": + resolution: + { + integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==, + } + + "@sinclair/typebox@0.34.38": + resolution: + { + integrity: sha512-HpkxMmc2XmZKhvaKIZZThlHmx1L0I/V1hWK1NubtlFnr6ZqdiOpV72TKudZUNQjZNsyDBay72qFEhEvb+bcwcA==, + } + + "@sinonjs/commons@3.0.1": + resolution: + { + integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==, + } + + "@sinonjs/fake-timers@10.3.0": + resolution: + { + integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==, + } + + "@sinonjs/fake-timers@13.0.5": + resolution: + { + integrity: sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==, + } + + "@standard-schema/spec@1.0.0": + resolution: + { + integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==, + } + + "@swc/helpers@0.5.15": + resolution: + { + integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==, + } + + "@tailwindcss/node@4.1.17": + resolution: + { + integrity: sha512-csIkHIgLb3JisEFQ0vxr2Y57GUNYh447C8xzwj89U/8fdW8LhProdxvnVH6U8M2Y73QKiTIH+LWbK3V2BBZsAg==, + } + + "@tailwindcss/oxide-android-arm64@4.1.17": + resolution: + { + integrity: sha512-BMqpkJHgOZ5z78qqiGE6ZIRExyaHyuxjgrJ6eBO5+hfrfGkuya0lYfw8fRHG77gdTjWkNWEEm+qeG2cDMxArLQ==, + } + engines: { node: ">= 10" } + cpu: [arm64] + os: [android] + + "@tailwindcss/oxide-darwin-arm64@4.1.17": + resolution: + { + integrity: sha512-EquyumkQweUBNk1zGEU/wfZo2qkp/nQKRZM8bUYO0J+Lums5+wl2CcG1f9BgAjn/u9pJzdYddHWBiFXJTcxmOg==, + } + engines: { node: ">= 10" } + cpu: [arm64] + os: [darwin] + + "@tailwindcss/oxide-darwin-x64@4.1.17": + resolution: + { + integrity: sha512-gdhEPLzke2Pog8s12oADwYu0IAw04Y2tlmgVzIN0+046ytcgx8uZmCzEg4VcQh+AHKiS7xaL8kGo/QTiNEGRog==, + } + engines: { node: ">= 10" } + cpu: [x64] + os: [darwin] + + "@tailwindcss/oxide-freebsd-x64@4.1.17": + resolution: + { + integrity: sha512-hxGS81KskMxML9DXsaXT1H0DyA+ZBIbyG/sSAjWNe2EDl7TkPOBI42GBV3u38itzGUOmFfCzk1iAjDXds8Oh0g==, + } + engines: { node: ">= 10" } + cpu: [x64] + os: [freebsd] + + "@tailwindcss/oxide-linux-arm-gnueabihf@4.1.17": + resolution: + { + integrity: sha512-k7jWk5E3ldAdw0cNglhjSgv501u7yrMf8oeZ0cElhxU6Y2o7f8yqelOp3fhf7evjIS6ujTI3U8pKUXV2I4iXHQ==, + } + engines: { node: ">= 10" } + cpu: [arm] + os: [linux] + + "@tailwindcss/oxide-linux-arm64-gnu@4.1.17": + resolution: + { + integrity: sha512-HVDOm/mxK6+TbARwdW17WrgDYEGzmoYayrCgmLEw7FxTPLcp/glBisuyWkFz/jb7ZfiAXAXUACfyItn+nTgsdQ==, + } + engines: { node: ">= 10" } + cpu: [arm64] + os: [linux] + + "@tailwindcss/oxide-linux-arm64-musl@4.1.17": + resolution: + { + integrity: sha512-HvZLfGr42i5anKtIeQzxdkw/wPqIbpeZqe7vd3V9vI3RQxe3xU1fLjss0TjyhxWcBaipk7NYwSrwTwK1hJARMg==, + } + engines: { node: ">= 10" } + cpu: [arm64] + os: [linux] + + "@tailwindcss/oxide-linux-x64-gnu@4.1.17": + resolution: + { + integrity: sha512-M3XZuORCGB7VPOEDH+nzpJ21XPvK5PyjlkSFkFziNHGLc5d6g3di2McAAblmaSUNl8IOmzYwLx9NsE7bplNkwQ==, + } + engines: { node: ">= 10" } + cpu: [x64] + os: [linux] + + "@tailwindcss/oxide-linux-x64-musl@4.1.17": + resolution: + { + integrity: sha512-k7f+pf9eXLEey4pBlw+8dgfJHY4PZ5qOUFDyNf7SI6lHjQ9Zt7+NcscjpwdCEbYi6FI5c2KDTDWyf2iHcCSyyQ==, + } + engines: { node: ">= 10" } + cpu: [x64] + os: [linux] + + "@tailwindcss/oxide-wasm32-wasi@4.1.17": + resolution: + { + integrity: sha512-cEytGqSSoy7zK4JRWiTCx43FsKP/zGr0CsuMawhH67ONlH+T79VteQeJQRO/X7L0juEUA8ZyuYikcRBf0vsxhg==, + } + engines: { node: ">=14.0.0" } + cpu: [wasm32] + bundledDependencies: + - "@napi-rs/wasm-runtime" + - "@emnapi/core" + - "@emnapi/runtime" + - "@tybys/wasm-util" + - "@emnapi/wasi-threads" + - tslib + + "@tailwindcss/oxide-win32-arm64-msvc@4.1.17": + resolution: + { + integrity: sha512-JU5AHr7gKbZlOGvMdb4722/0aYbU+tN6lv1kONx0JK2cGsh7g148zVWLM0IKR3NeKLv+L90chBVYcJ8uJWbC9A==, + } + engines: { node: ">= 10" } + cpu: [arm64] + os: [win32] + + "@tailwindcss/oxide-win32-x64-msvc@4.1.17": + resolution: + { + integrity: sha512-SKWM4waLuqx0IH+FMDUw6R66Hu4OuTALFgnleKbqhgGU30DY20NORZMZUKgLRjQXNN2TLzKvh48QXTig4h4bGw==, + } + engines: { node: ">= 10" } + cpu: [x64] + os: [win32] + + "@tailwindcss/oxide@4.1.17": + resolution: + { + integrity: sha512-F0F7d01fmkQhsTjXezGBLdrl1KresJTcI3DB8EkScCldyKp3Msz4hub4uyYaVnk88BAS1g5DQjjF6F5qczheLA==, + } + engines: { node: ">= 10" } + + "@tailwindcss/postcss@4.1.17": + resolution: + { + integrity: sha512-+nKl9N9mN5uJ+M7dBOOCzINw94MPstNR/GtIhz1fpZysxL/4a+No64jCBD6CPN+bIHWFx3KWuu8XJRrj/572Dw==, + } + + "@tootallnate/quickjs-emscripten@0.23.0": + resolution: + { + integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==, + } + + "@trysound/sax@0.2.0": + resolution: + { + integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==, + } + engines: { node: ">=10.13.0" } + + "@tsconfig/node10@1.0.11": + resolution: + { + integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==, + } + + "@tsconfig/node12@1.0.11": + resolution: + { + integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==, + } + + "@tsconfig/node14@1.0.3": + resolution: + { + integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==, + } + + "@tsconfig/node16@1.0.4": + resolution: + { + integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==, + } + + "@tybys/wasm-util@0.10.0": + resolution: + { + integrity: sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==, + } + + "@tybys/wasm-util@0.10.1": + resolution: + { + integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==, + } + + "@tybys/wasm-util@0.9.0": + resolution: + { + integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==, + } + + "@types/babel__core@7.20.5": + resolution: + { + integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==, + } + + "@types/babel__generator@7.27.0": + resolution: + { + integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==, + } + + "@types/babel__template@7.4.4": + resolution: + { + integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==, + } + + "@types/babel__traverse@7.20.7": + resolution: + { + integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==, + } + + "@types/chai@4.3.20": + resolution: + { + integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==, + } + + "@types/conventional-commits-parser@5.0.1": + resolution: + { + integrity: sha512-7uz5EHdzz2TqoMfV7ee61Egf5y6NkcO4FB/1iCCQnbeiI1F3xzv3vK5dBCXUCLQgGYS+mUeigK1iKQzvED+QnQ==, + } + + "@types/debug@4.1.12": + resolution: + { + integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==, + } + + "@types/eslint-plugin-jsx-a11y@6.10.0": + resolution: + { + integrity: sha512-TGKmk2gO6DrvTVADNOGQMqn3SzqcFcJILFnXNllQA34us9uClS3/AsL/cERPz6jS9ePI3bx+1q8/d2GZsxPVYw==, + } + + "@types/eslint@9.6.1": + resolution: + { + integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==, + } + + "@types/estree-jsx@1.0.5": + resolution: + { + integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==, + } + + "@types/estree@1.0.8": + resolution: + { + integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==, + } + + "@types/fs-extra@8.1.5": + resolution: + { + integrity: sha512-0dzKcwO+S8s2kuF5Z9oUWatQJj5Uq/iqphEtE3GQJVRRYm/tD1LglU2UnXi2A8jLq5umkGouOXOR9y0n613ZwQ==, + } + + "@types/glob@7.2.0": + resolution: + { + integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==, + } + + "@types/graceful-fs@4.1.9": + resolution: + { + integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==, + } + + "@types/hast@3.0.4": + resolution: + { + integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==, + } + + "@types/istanbul-lib-coverage@2.0.6": + resolution: + { + integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==, + } + + "@types/istanbul-lib-report@3.0.3": + resolution: + { + integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==, + } + + "@types/istanbul-reports@3.0.4": + resolution: + { + integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==, + } + + "@types/json-schema@7.0.15": + resolution: + { + integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==, + } + + "@types/json5@0.0.29": + resolution: + { + integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==, + } + + "@types/lodash@4.17.20": + resolution: + { + integrity: sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==, + } + + "@types/mdast@4.0.4": + resolution: + { + integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==, + } + + "@types/mdx@2.0.13": + resolution: + { + integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==, + } + + "@types/minimatch@6.0.0": + resolution: + { + integrity: sha512-zmPitbQ8+6zNutpwgcQuLcsEpn/Cj54Kbn7L5pX0Os5kdWplB7xPgEh/g+SWOB/qmows2gpuCaPyduq8ZZRnxA==, + } + deprecated: This is a stub types definition. minimatch provides its own type definitions, so you do not need this installed. + + "@types/mocha@10.0.10": + resolution: + { + integrity: sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==, + } + + "@types/ms@2.1.0": + resolution: + { + integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==, + } + + "@types/node@18.19.120": + resolution: + { + integrity: sha512-WtCGHFXnVI8WHLxDAt5TbnCM4eSE+nI0QN2NJtwzcgMhht2eNz6V9evJrk+lwC8bCY8OWV5Ym8Jz7ZEyGnKnMA==, + } + + "@types/node@24.10.1": + resolution: + { + integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==, + } + + "@types/normalize-package-data@2.4.4": + resolution: + { + integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==, + } + + "@types/parse-json@4.0.2": + resolution: + { + integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==, + } + + "@types/parse-path@7.1.0": + resolution: + { + integrity: sha512-EULJ8LApcVEPbrfND0cRQqutIOdiIgJ1Mgrhpy755r14xMohPTEpkV/k28SJvuOs9bHRFW8x+KeDAEPiGQPB9Q==, + } + deprecated: This is a stub types definition. parse-path provides its own type definitions, so you do not need this installed. + + "@types/prop-types@15.7.15": + resolution: + { + integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==, + } + + "@types/react-dom@19.2.3": + resolution: + { + integrity: sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==, + } + peerDependencies: + "@types/react": ^19.2.0 + + "@types/react@18.3.26": + resolution: + { + integrity: sha512-RFA/bURkcKzx/X9oumPG9Vp3D3JUgus/d0b67KB0t5S/raciymilkOa66olh78MUI92QLbEJevO7rvqU/kjwKA==, + } + + "@types/react@19.2.5": + resolution: + { + integrity: sha512-keKxkZMqnDicuvFoJbzrhbtdLSPhj/rZThDlKWCDbgXmUg0rEUFtRssDXKYmtXluZlIqiC5VqkCgRwzuyLHKHw==, + } + + "@types/resolve@1.20.2": + resolution: + { + integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==, + } + + "@types/semver@7.7.1": + resolution: + { + integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==, + } + + "@types/stack-utils@2.0.3": + resolution: + { + integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==, + } + + "@types/unist@2.0.11": + resolution: + { + integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==, + } + + "@types/unist@3.0.3": + resolution: + { + integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==, + } + + "@types/yargs-parser@21.0.3": + resolution: + { + integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==, + } + + "@types/yargs@17.0.33": + resolution: + { + integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==, + } + + "@typescript-eslint/eslint-plugin@8.46.4": + resolution: + { + integrity: sha512-R48VhmTJqplNyDxCyqqVkFSZIx1qX6PzwqgcXn1olLrzxcSBDlOsbtcnQuQhNtnNiJ4Xe5gREI1foajYaYU2Vg==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + "@typescript-eslint/parser": ^8.46.4 + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <6.0.0" + + "@typescript-eslint/parser@8.46.4": + resolution: + { + integrity: sha512-tK3GPFWbirvNgsNKto+UmB/cRtn6TZfyw0D6IKrW55n6Vbs7KJoZtI//kpTKzE/DUmmnAFD8/Ca46s7Obs92/w==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <6.0.0" + + "@typescript-eslint/project-service@8.46.4": + resolution: + { + integrity: sha512-nPiRSKuvtTN+no/2N1kt2tUh/HoFzeEgOm9fQ6XQk4/ApGqjx0zFIIaLJ6wooR1HIoozvj2j6vTi/1fgAz7UYQ==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + typescript: ">=4.8.4 <6.0.0" + + "@typescript-eslint/scope-manager@8.46.4": + resolution: + { + integrity: sha512-tMDbLGXb1wC+McN1M6QeDx7P7c0UWO5z9CXqp7J8E+xGcJuUuevWKxuG8j41FoweS3+L41SkyKKkia16jpX7CA==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + "@typescript-eslint/tsconfig-utils@8.46.4": + resolution: + { + integrity: sha512-+/XqaZPIAk6Cjg7NWgSGe27X4zMGqrFqZ8atJsX3CWxH/jACqWnrWI68h7nHQld0y+k9eTTjb9r+KU4twLoo9A==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + typescript: ">=4.8.4 <6.0.0" + + "@typescript-eslint/type-utils@8.46.4": + resolution: + { + integrity: sha512-V4QC8h3fdT5Wro6vANk6eojqfbv5bpwHuMsBcJUJkqs2z5XnYhJzyz9Y02eUmF9u3PgXEUiOt4w4KHR3P+z0PQ==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <6.0.0" + + "@typescript-eslint/types@8.46.4": + resolution: + { + integrity: sha512-USjyxm3gQEePdUwJBFjjGNG18xY9A2grDVGuk7/9AkjIF1L+ZrVnwR5VAU5JXtUnBL/Nwt3H31KlRDaksnM7/w==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + "@typescript-eslint/typescript-estree@8.46.4": + resolution: + { + integrity: sha512-7oV2qEOr1d4NWNmpXLR35LvCfOkTNymY9oyW+lUHkmCno7aOmIf/hMaydnJBUTBMRCOGZh8YjkFOc8dadEoNGA==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + typescript: ">=4.8.4 <6.0.0" + + "@typescript-eslint/utils@8.46.4": + resolution: + { + integrity: sha512-AbSv11fklGXV6T28dp2Me04Uw90R2iJ30g2bgLz529Koehrmkbs1r7paFqr1vPCZi7hHwYxYtxfyQMRC8QaVSg==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <6.0.0" + + "@typescript-eslint/visitor-keys@8.46.4": + resolution: + { + integrity: sha512-/++5CYLQqsO9HFGLI7APrxBJYo+5OCMpViuhV8q5/Qa3o5mMrF//eQHks+PXcsAVaLdn817fMuS7zqoXNNZGaw==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + "@ungap/structured-clone@1.3.0": + resolution: + { + integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==, + } + + "@unrs/resolver-binding-android-arm-eabi@1.11.1": + resolution: + { + integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==, + } + cpu: [arm] + os: [android] + + "@unrs/resolver-binding-android-arm64@1.11.1": + resolution: + { + integrity: sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==, + } + cpu: [arm64] + os: [android] + + "@unrs/resolver-binding-darwin-arm64@1.11.1": + resolution: + { + integrity: sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==, + } + cpu: [arm64] + os: [darwin] + + "@unrs/resolver-binding-darwin-x64@1.11.1": + resolution: + { + integrity: sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==, + } + cpu: [x64] + os: [darwin] + + "@unrs/resolver-binding-freebsd-x64@1.11.1": + resolution: + { + integrity: sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==, + } + cpu: [x64] + os: [freebsd] + + "@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1": + resolution: + { + integrity: sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==, + } + cpu: [arm] + os: [linux] + + "@unrs/resolver-binding-linux-arm-musleabihf@1.11.1": + resolution: + { + integrity: sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==, + } + cpu: [arm] + os: [linux] + + "@unrs/resolver-binding-linux-arm64-gnu@1.11.1": + resolution: + { + integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==, + } + cpu: [arm64] + os: [linux] + + "@unrs/resolver-binding-linux-arm64-musl@1.11.1": + resolution: + { + integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==, + } + cpu: [arm64] + os: [linux] + + "@unrs/resolver-binding-linux-ppc64-gnu@1.11.1": + resolution: + { + integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==, + } + cpu: [ppc64] + os: [linux] + + "@unrs/resolver-binding-linux-riscv64-gnu@1.11.1": + resolution: + { + integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==, + } + cpu: [riscv64] + os: [linux] + + "@unrs/resolver-binding-linux-riscv64-musl@1.11.1": + resolution: + { + integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==, + } + cpu: [riscv64] + os: [linux] + + "@unrs/resolver-binding-linux-s390x-gnu@1.11.1": + resolution: + { + integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==, + } + cpu: [s390x] + os: [linux] + + "@unrs/resolver-binding-linux-x64-gnu@1.11.1": + resolution: + { + integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==, + } + cpu: [x64] + os: [linux] + + "@unrs/resolver-binding-linux-x64-musl@1.11.1": + resolution: + { + integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==, + } + cpu: [x64] + os: [linux] + + "@unrs/resolver-binding-wasm32-wasi@1.11.1": + resolution: + { + integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==, + } + engines: { node: ">=14.0.0" } + cpu: [wasm32] + + "@unrs/resolver-binding-win32-arm64-msvc@1.11.1": + resolution: + { + integrity: sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==, + } + cpu: [arm64] + os: [win32] + + "@unrs/resolver-binding-win32-ia32-msvc@1.11.1": + resolution: + { + integrity: sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==, + } + cpu: [ia32] + os: [win32] + + "@unrs/resolver-binding-win32-x64-msvc@1.11.1": + resolution: + { + integrity: sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==, + } + cpu: [x64] + os: [win32] + + "@yao-pkg/pkg-fetch@3.5.30": + resolution: + { + integrity: sha512-OrXQlsR3vE/IvwXSk8R5ETYbcxAFtUPmLkeepbG+ArN82TvlIwcUJ65tEWxLG3Tl89VRbmOupuhkXfmuaO05+Q==, + } + hasBin: true + + "@yao-pkg/pkg@6.10.1": + resolution: + { + integrity: sha512-M/eqDg0Iir2nmyZ06Q9ospIPv1Yk7K1du5iLiaYrfMogQcI6bqf82A026MVYngyLH8jZsquZvjNAbvgbW4Uwkw==, + } + engines: { node: ">=18.0.0" } + hasBin: true + + "@yarnpkg/lockfile@1.1.0": + resolution: + { + integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==, + } + + "@yarnpkg/parsers@3.0.2": + resolution: + { + integrity: sha512-/HcYgtUSiJiot/XWGLOlGxPYUG65+/31V8oqk17vZLW1xlCoR4PampyePljOxY2n8/3jz9+tIFzICsyGujJZoA==, + } + engines: { node: ">=18.12.0" } + + "@zkochan/js-yaml@0.0.7": + resolution: + { + integrity: sha512-nrUSn7hzt7J6JWgWGz78ZYI8wj+gdIJdk0Ynjpp8l+trkn58Uqsf6RYrYkEK+3X18EX+TNdtJI0WxAtc+L84SQ==, + } + hasBin: true + + JSONStream@1.3.5: + resolution: + { + integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==, + } + hasBin: true + + acorn-jsx@5.3.2: + resolution: + { + integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==, + } + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn-walk@8.3.4: + resolution: + { + integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==, + } + engines: { node: ">=0.4.0" } + + acorn@8.15.0: + resolution: + { + integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==, + } + engines: { node: ">=0.4.0" } + hasBin: true + + add-stream@1.0.0: + resolution: + { + integrity: sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==, + } + + address@1.2.2: + resolution: + { + integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==, + } + engines: { node: ">= 10.0.0" } + + agent-base@6.0.2: + resolution: + { + integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==, + } + engines: { node: ">= 6.0.0" } + + agent-base@7.1.4: + resolution: + { + integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==, + } + engines: { node: ">= 14" } + + ajv@6.12.6: + resolution: + { + integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==, + } + + ajv@8.17.1: + resolution: + { + integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==, + } + + ansi-colors@4.1.3: + resolution: + { + integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==, + } + engines: { node: ">=6" } + + ansi-escapes@4.3.2: + resolution: + { + integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==, + } + engines: { node: ">=8" } + + ansi-escapes@6.2.1: + resolution: + { + integrity: sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==, + } + engines: { node: ">=14.16" } + + ansi-regex@5.0.1: + resolution: + { + integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==, + } + engines: { node: ">=8" } + + ansi-regex@6.1.0: + resolution: + { + integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==, + } + engines: { node: ">=12" } + + ansi-styles@3.2.1: + resolution: + { + integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==, + } + engines: { node: ">=4" } + + ansi-styles@4.3.0: + resolution: + { + integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==, + } + engines: { node: ">=8" } + + ansi-styles@5.2.0: + resolution: + { + integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==, + } + engines: { node: ">=10" } + + ansi-styles@6.2.1: + resolution: + { + integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==, + } + engines: { node: ">=12" } + + any-promise@1.3.0: + resolution: + { + integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==, + } + + anymatch@3.1.3: + resolution: + { + integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==, + } + engines: { node: ">= 8" } + + arg@4.1.3: + resolution: + { + integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==, + } + + argparse@1.0.10: + resolution: + { + integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==, + } + + argparse@2.0.1: + resolution: + { + integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==, + } + + aria-hidden@1.2.6: + resolution: + { + integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==, + } + engines: { node: ">=10" } + + aria-query@5.3.2: + resolution: + { + integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==, + } + engines: { node: ">= 0.4" } + + array-buffer-byte-length@1.0.2: + resolution: + { + integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==, + } + engines: { node: ">= 0.4" } + + array-ify@1.0.0: + resolution: + { + integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==, + } + + array-includes@3.1.9: + resolution: + { + integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==, + } + engines: { node: ">= 0.4" } + + array-union@2.1.0: + resolution: + { + integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==, + } + engines: { node: ">=8" } + + array.prototype.findlast@1.2.5: + resolution: + { + integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==, + } + engines: { node: ">= 0.4" } + + array.prototype.findlastindex@1.2.6: + resolution: + { + integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==, + } + engines: { node: ">= 0.4" } + + array.prototype.flat@1.3.3: + resolution: + { + integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==, + } + engines: { node: ">= 0.4" } + + array.prototype.flatmap@1.3.3: + resolution: + { + integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==, + } + engines: { node: ">= 0.4" } + + array.prototype.tosorted@1.1.4: + resolution: + { + integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==, + } + engines: { node: ">= 0.4" } + + arraybuffer.prototype.slice@1.0.4: + resolution: + { + integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==, + } + engines: { node: ">= 0.4" } + + arrify@1.0.1: + resolution: + { + integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==, + } + engines: { node: ">=0.10.0" } + + assertion-error@1.1.0: + resolution: + { + integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==, + } + + ast-types-flow@0.0.8: + resolution: + { + integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==, + } + + ast-types@0.13.4: + resolution: + { + integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==, + } + engines: { node: ">=4" } + + astring@1.9.0: + resolution: + { + integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==, + } + hasBin: true + + async-function@1.0.0: + resolution: + { + integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==, + } + engines: { node: ">= 0.4" } + + async-retry@1.3.3: + resolution: + { + integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==, + } + + async@3.2.6: + resolution: + { + integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==, + } + + asynckit@0.4.0: + resolution: + { + integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==, + } + + at-least-node@1.0.0: + resolution: + { + integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==, + } + engines: { node: ">= 4.0.0" } + + auto-bind@5.0.1: + resolution: + { + integrity: sha512-ooviqdwwgfIfNmDwo94wlshcdzfO64XV0Cg6oDsDYBJfITDz1EngD2z7DkbvCWn+XIMsIqW27sEVF6qcpJrRcg==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + + autoprefixer@10.4.21: + resolution: + { + integrity: sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==, + } + engines: { node: ^10 || ^12 || >=14 } + hasBin: true + peerDependencies: + postcss: ^8.1.0 + + available-typed-arrays@1.0.7: + resolution: + { + integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==, + } + engines: { node: ">= 0.4" } + + axe-core@4.10.3: + resolution: + { + integrity: sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==, + } + engines: { node: ">=4" } + + axios-retry@4.5.0: + resolution: + { + integrity: sha512-aR99oXhpEDGo0UuAlYcn2iGRds30k366Zfa05XWScR9QaQD4JYiP3/1Qt1u7YlefUOK+cn0CcwoL1oefavQUlQ==, + } + peerDependencies: + axios: 0.x || 1.x + + axios@1.10.0: + resolution: + { + integrity: sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==, + } + + axobject-query@4.1.0: + resolution: + { + integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==, + } + engines: { node: ">= 0.4" } + + b4a@1.7.3: + resolution: + { + integrity: sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==, + } + peerDependencies: + react-native-b4a: "*" + peerDependenciesMeta: + react-native-b4a: + optional: true + + babel-jest@29.7.0: + resolution: + { + integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + peerDependencies: + "@babel/core": ^7.8.0 + + babel-jest@30.0.5: + resolution: + { + integrity: sha512-mRijnKimhGDMsizTvBTWotwNpzrkHr+VvZUQBof2AufXKB8NXrL1W69TG20EvOz7aevx6FTJIaBuBkYxS8zolg==, + } + engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 } + peerDependencies: + "@babel/core": ^7.11.0 + + babel-plugin-const-enum@1.2.0: + resolution: + { + integrity: sha512-o1m/6iyyFnp9MRsK1dHF3bneqyf3AlM2q3A/YbgQr2pCat6B6XJVDv2TXqzfY2RYUi4mak6WAksSBPlyYGx9dg==, + } + peerDependencies: + "@babel/core": ^7.0.0-0 + + babel-plugin-istanbul@6.1.1: + resolution: + { + integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==, + } + engines: { node: ">=8" } + + babel-plugin-istanbul@7.0.0: + resolution: + { + integrity: sha512-C5OzENSx/A+gt7t4VH1I2XsflxyPUmXRFPKBxt33xncdOmq7oROVM3bZv9Ysjjkv8OJYDMa+tKuKMvqU/H3xdw==, + } + engines: { node: ">=12" } + + babel-plugin-jest-hoist@29.6.3: + resolution: + { + integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + babel-plugin-jest-hoist@30.0.1: + resolution: + { + integrity: sha512-zTPME3pI50NsFW8ZBaVIOeAxzEY7XHlmWeXXu9srI+9kNfzCUTy8MFan46xOGZY8NZThMqq+e3qZUKsvXbasnQ==, + } + engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 } + + babel-plugin-macros@3.1.0: + resolution: + { + integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==, + } + engines: { node: ">=10", npm: ">=6" } + + babel-plugin-polyfill-corejs2@0.4.14: + resolution: + { + integrity: sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==, + } + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-corejs3@0.13.0: + resolution: + { + integrity: sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==, + } + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-regenerator@0.6.5: + resolution: + { + integrity: sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==, + } + peerDependencies: + "@babel/core": ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-transform-typescript-metadata@0.3.2: + resolution: + { + integrity: sha512-mWEvCQTgXQf48yDqgN7CH50waTyYBeP2Lpqx4nNWab9sxEpdXVeKgfj1qYI2/TgUPQtNFZ85i3PemRtnXVYYJg==, + } + peerDependencies: + "@babel/core": ^7 + "@babel/traverse": ^7 + peerDependenciesMeta: + "@babel/traverse": + optional: true + + babel-preset-current-node-syntax@1.1.0: + resolution: + { + integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==, + } + peerDependencies: + "@babel/core": ^7.0.0 + + babel-preset-jest@29.6.3: + resolution: + { + integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + peerDependencies: + "@babel/core": ^7.0.0 + + babel-preset-jest@30.0.1: + resolution: + { + integrity: sha512-+YHejD5iTWI46cZmcc/YtX4gaKBtdqCHCVfuVinizVpbmyjO3zYmeuyFdfA8duRqQZfgCAMlsfmkVbJ+e2MAJw==, + } + engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 } + peerDependencies: + "@babel/core": ^7.11.0 + + bail@2.0.2: + resolution: + { + integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==, + } + + balanced-match@1.0.2: + resolution: + { + integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, + } + + bare-events@2.8.2: + resolution: + { + integrity: sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==, + } + peerDependencies: + bare-abort-controller: "*" + peerDependenciesMeta: + bare-abort-controller: + optional: true + + bare-fs@4.5.1: + resolution: + { + integrity: sha512-zGUCsm3yv/ePt2PHNbVxjjn0nNB1MkIaR4wOCxJ2ig5pCf5cCVAYJXVhQg/3OhhJV6DB1ts7Hv0oUaElc2TPQg==, + } + engines: { bare: ">=1.16.0" } + peerDependencies: + bare-buffer: "*" + peerDependenciesMeta: + bare-buffer: + optional: true + + bare-os@3.6.2: + resolution: + { + integrity: sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==, + } + engines: { bare: ">=1.14.0" } + + bare-path@3.0.0: + resolution: + { + integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==, + } + + bare-stream@2.7.0: + resolution: + { + integrity: sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A==, + } + peerDependencies: + bare-buffer: "*" + bare-events: "*" + peerDependenciesMeta: + bare-buffer: + optional: true + bare-events: + optional: true + + bare-url@2.3.2: + resolution: + { + integrity: sha512-ZMq4gd9ngV5aTMa5p9+UfY0b3skwhHELaDkhEHetMdX0LRkW9kzaym4oo/Eh+Ghm0CCDuMTsRIGM/ytUc1ZYmw==, + } + + base64-js@1.5.1: + resolution: + { + integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==, + } + + basic-ftp@5.0.5: + resolution: + { + integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==, + } + engines: { node: ">=10.0.0" } + + before-after-hook@4.0.0: + resolution: + { + integrity: sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ==, + } + + binary-extensions@2.3.0: + resolution: + { + integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==, + } + engines: { node: ">=8" } + + bl@4.1.0: + resolution: + { + integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==, + } + + bluebird@3.7.2: + resolution: + { + integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==, + } + + boolbase@1.0.0: + resolution: + { + integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==, + } + + brace-expansion@1.1.12: + resolution: + { + integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==, + } + + brace-expansion@2.0.2: + resolution: + { + integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==, + } + + braces@3.0.3: + resolution: + { + integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==, + } + engines: { node: ">=8" } + + browser-stdout@1.3.1: + resolution: + { + integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==, + } + + browserslist@4.25.1: + resolution: + { + integrity: sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==, + } + engines: { node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 } + hasBin: true + + bser@2.1.1: + resolution: + { + integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==, + } + + buffer-from@1.1.2: + resolution: + { + integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==, + } + + buffer@5.7.1: + resolution: + { + integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==, + } + + bundle-name@4.1.0: + resolution: + { + integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==, + } + engines: { node: ">=18" } + + bundle-require@5.1.0: + resolution: + { + integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + peerDependencies: + esbuild: ">=0.18" + + c12@3.3.1: + resolution: + { + integrity: sha512-LcWQ01LT9tkoUINHgpIOv3mMs+Abv7oVCrtpMRi1PaapVEpWoMga5WuT7/DqFTu7URP9ftbOmimNw1KNIGh9DQ==, + } + peerDependencies: + magicast: ^0.3.5 + peerDependenciesMeta: + magicast: + optional: true + + c8@10.1.3: + resolution: + { + integrity: sha512-LvcyrOAaOnrrlMpW22n690PUvxiq4Uf9WMhQwNJ9vgagkL/ph1+D4uvjvDA5XCbykrc0sx+ay6pVi9YZ1GnhyA==, + } + engines: { node: ">=18" } + hasBin: true + peerDependencies: + monocart-coverage-reports: ^2 + peerDependenciesMeta: + monocart-coverage-reports: + optional: true + + cac@6.7.14: + resolution: + { + integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==, + } + engines: { node: ">=8" } + + cachedir@2.3.0: + resolution: + { + integrity: sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==, + } + engines: { node: ">=6" } + + call-bind-apply-helpers@1.0.2: + resolution: + { + integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==, + } + engines: { node: ">= 0.4" } + + call-bind@1.0.8: + resolution: + { + integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==, + } + engines: { node: ">= 0.4" } + + call-bound@1.0.4: + resolution: + { + integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==, + } + engines: { node: ">= 0.4" } + + callsites@3.1.0: + resolution: + { + integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==, + } + engines: { node: ">=6" } + + camelcase@5.3.1: + resolution: + { + integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==, + } + engines: { node: ">=6" } + + camelcase@6.3.0: + resolution: + { + integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==, + } + engines: { node: ">=10" } + + caniuse-api@3.0.0: + resolution: + { + integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==, + } + + caniuse-lite@1.0.30001727: + resolution: + { + integrity: sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==, + } + + ccount@2.0.1: + resolution: + { + integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==, + } + + chai@4.5.0: + resolution: + { + integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==, + } + engines: { node: ">=4" } + + chalk@2.4.2: + resolution: + { + integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==, + } + engines: { node: ">=4" } + + chalk@4.1.2: + resolution: + { + integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==, + } + engines: { node: ">=10" } + + chalk@5.4.1: + resolution: + { + integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==, + } + engines: { node: ^12.17.0 || ^14.13 || >=16.0.0 } + + chalk@5.6.2: + resolution: + { + integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==, + } + engines: { node: ^12.17.0 || ^14.13 || >=16.0.0 } + + char-regex@1.0.2: + resolution: + { + integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==, + } + engines: { node: ">=10" } + + character-entities-html4@2.1.0: + resolution: + { + integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==, + } + + character-entities-legacy@3.0.0: + resolution: + { + integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==, + } + + character-entities@2.0.2: + resolution: + { + integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==, + } + + character-reference-invalid@2.0.1: + resolution: + { + integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==, + } + + chardet@0.7.0: + resolution: + { + integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==, + } + + chardet@2.1.1: + resolution: + { + integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==, + } + + check-error@1.0.3: + resolution: + { + integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==, + } + + chokidar@3.6.0: + resolution: + { + integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==, + } + engines: { node: ">= 8.10.0" } + + chokidar@4.0.3: + resolution: + { + integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==, + } + engines: { node: ">= 14.16.0" } + + chownr@1.1.4: + resolution: + { + integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==, + } + + chownr@3.0.0: + resolution: + { + integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==, + } + engines: { node: ">=18" } + + ci-info@3.9.0: + resolution: + { + integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==, + } + engines: { node: ">=8" } + + ci-info@4.3.0: + resolution: + { + integrity: sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==, + } + engines: { node: ">=8" } + + citty@0.1.6: + resolution: + { + integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==, + } + + cjs-module-lexer@1.4.3: + resolution: + { + integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==, + } + + cjs-module-lexer@2.1.0: + resolution: + { + integrity: sha512-UX0OwmYRYQQetfrLEZeewIFFI+wSTofC+pMBLNuH3RUuu/xzG1oz84UCEDOSoQlN3fZ4+AzmV50ZYvGqkMh9yA==, + } + + class-variance-authority@0.7.1: + resolution: + { + integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==, + } + + cli-boxes@3.0.0: + resolution: + { + integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==, + } + engines: { node: ">=10" } + + cli-cursor@3.1.0: + resolution: + { + integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==, + } + engines: { node: ">=8" } + + cli-cursor@4.0.0: + resolution: + { + integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + + cli-cursor@5.0.0: + resolution: + { + integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==, + } + engines: { node: ">=18" } + + cli-spinners@2.6.1: + resolution: + { + integrity: sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==, + } + engines: { node: ">=6" } + + cli-spinners@3.3.0: + resolution: + { + integrity: sha512-/+40ljC3ONVnYIttjMWrlL51nItDAbBrq2upN8BPyvGU/2n5Oxw3tbNwORCaNuNqLJnxGqOfjUuhsv7l5Q4IsQ==, + } + engines: { node: ">=18.20" } + + cli-truncate@3.1.0: + resolution: + { + integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + + cli-width@3.0.0: + resolution: + { + integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==, + } + engines: { node: ">= 10" } + + cli-width@4.1.0: + resolution: + { + integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==, + } + engines: { node: ">= 12" } + + client-only@0.0.1: + resolution: + { + integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==, + } + + cliui@7.0.4: + resolution: + { + integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==, + } + + cliui@8.0.1: + resolution: + { + integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==, + } + engines: { node: ">=12" } + + clone@1.0.4: + resolution: + { + integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==, + } + engines: { node: ">=0.8" } + + clsx@2.1.1: + resolution: + { + integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==, + } + engines: { node: ">=6" } + + co@4.6.0: + resolution: + { + integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==, + } + engines: { iojs: ">= 1.0.0", node: ">= 0.12.0" } + + code-excerpt@4.0.0: + resolution: + { + integrity: sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + + collapse-white-space@2.1.0: + resolution: + { + integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==, + } + + collect-v8-coverage@1.0.2: + resolution: + { + integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==, + } + + color-convert@1.9.3: + resolution: + { + integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==, + } + + color-convert@2.0.1: + resolution: + { + integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==, + } + engines: { node: ">=7.0.0" } + + color-name@1.1.3: + resolution: + { + integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==, + } + + color-name@1.1.4: + resolution: + { + integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==, + } + + colord@2.9.3: + resolution: + { + integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==, + } + + colorette@1.4.0: + resolution: + { + integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==, + } + + columnify@1.6.0: + resolution: + { + integrity: sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==, + } + engines: { node: ">=8.0.0" } + + combined-stream@1.0.8: + resolution: + { + integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==, + } + engines: { node: ">= 0.8" } + + comma-separated-tokens@2.0.3: + resolution: + { + integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==, + } + + commander@12.1.0: + resolution: + { + integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==, + } + engines: { node: ">=18" } + + commander@4.1.1: + resolution: + { + integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==, + } + engines: { node: ">= 6" } + + commander@7.2.0: + resolution: + { + integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==, + } + engines: { node: ">= 10" } + + commitizen@4.3.1: + resolution: + { + integrity: sha512-gwAPAVTy/j5YcOOebcCRIijn+mSjWJC+IYKivTu6aG8Ei/scoXgfsMRnuAk6b0GRste2J4NGxVdMN3ZpfNaVaw==, + } + engines: { node: ">= 12" } + hasBin: true + + commondir@1.0.1: + resolution: + { + integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==, + } + + compare-func@2.0.0: + resolution: + { + integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==, + } + + compute-scroll-into-view@3.1.1: + resolution: + { + integrity: sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==, + } + + concat-map@0.0.1: + resolution: + { + integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==, + } + + concat-stream@2.0.0: + resolution: + { + integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==, + } + engines: { "0": node >= 6.0 } + + concat-with-sourcemaps@1.1.0: + resolution: + { + integrity: sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==, + } + + confbox@0.1.8: + resolution: + { + integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==, + } + + confbox@0.2.2: + resolution: + { + integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==, + } + + consola@3.4.2: + resolution: + { + integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==, + } + engines: { node: ^14.18.0 || >=16.10.0 } + + conventional-changelog-angular@7.0.0: + resolution: + { + integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==, + } + engines: { node: ">=16" } + + conventional-changelog-angular@8.1.0: + resolution: + { + integrity: sha512-GGf2Nipn1RUCAktxuVauVr1e3r8QrLP/B0lEUsFktmGqc3ddbQkhoJZHJctVU829U1c6mTSWftrVOCHaL85Q3w==, + } + engines: { node: ">=18" } + + conventional-changelog-atom@5.0.0: + resolution: + { + integrity: sha512-WfzCaAvSCFPkznnLgLnfacRAzjgqjLUjvf3MftfsJzQdDICqkOOpcMtdJF3wTerxSpv2IAAjX8doM3Vozqle3g==, + } + engines: { node: ">=18" } + + conventional-changelog-codemirror@5.0.0: + resolution: + { + integrity: sha512-8gsBDI5Y3vrKUCxN6Ue8xr6occZ5nsDEc4C7jO/EovFGozx8uttCAyfhRrvoUAWi2WMm3OmYs+0mPJU7kQdYWQ==, + } + engines: { node: ">=18" } + + conventional-changelog-conventionalcommits@7.0.2: + resolution: + { + integrity: sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==, + } + engines: { node: ">=16" } + + conventional-changelog-conventionalcommits@8.0.0: + resolution: + { + integrity: sha512-eOvlTO6OcySPyyyk8pKz2dP4jjElYunj9hn9/s0OB+gapTO8zwS9UQWrZ1pmF2hFs3vw1xhonOLGcGjy/zgsuA==, + } + engines: { node: ">=18" } + + conventional-changelog-core@8.0.0: + resolution: + { + integrity: sha512-EATUx5y9xewpEe10UEGNpbSHRC6cVZgO+hXQjofMqpy+gFIrcGvH3Fl6yk2VFKh7m+ffenup2N7SZJYpyD9evw==, + } + engines: { node: ">=18" } + + conventional-changelog-ember@5.0.0: + resolution: + { + integrity: sha512-RPflVfm5s4cSO33GH/Ey26oxhiC67akcxSKL8CLRT3kQX2W3dbE19sSOM56iFqUJYEwv9mD9r6k79weWe1urfg==, + } + engines: { node: ">=18" } + + conventional-changelog-eslint@6.0.0: + resolution: + { + integrity: sha512-eiUyULWjzq+ybPjXwU6NNRflApDWlPEQEHvI8UAItYW/h22RKkMnOAtfCZxMmrcMO1OKUWtcf2MxKYMWe9zJuw==, + } + engines: { node: ">=18" } + + conventional-changelog-express@5.0.0: + resolution: + { + integrity: sha512-D8Q6WctPkQpvr2HNCCmwU5GkX22BVHM0r4EW8vN0230TSyS/d6VQJDAxGb84lbg0dFjpO22MwmsikKL++Oo/oQ==, + } + engines: { node: ">=18" } + + conventional-changelog-jquery@6.0.0: + resolution: + { + integrity: sha512-2kxmVakyehgyrho2ZHBi90v4AHswkGzHuTaoH40bmeNqUt20yEkDOSpw8HlPBfvEQBwGtbE+5HpRwzj6ac2UfA==, + } + engines: { node: ">=18" } + + conventional-changelog-jshint@5.0.0: + resolution: + { + integrity: sha512-gGNphSb/opc76n2eWaO6ma4/Wqu3tpa2w7i9WYqI6Cs2fncDSI2/ihOfMvXveeTTeld0oFvwMVNV+IYQIk3F3g==, + } + engines: { node: ">=18" } + + conventional-changelog-preset-loader@5.0.0: + resolution: + { + integrity: sha512-SetDSntXLk8Jh1NOAl1Gu5uLiCNSYenB5tm0YVeZKePRIgDW9lQImromTwLa3c/Gae298tsgOM+/CYT9XAl0NA==, + } + engines: { node: ">=18" } + + conventional-changelog-writer@8.2.0: + resolution: + { + integrity: sha512-Y2aW4596l9AEvFJRwFGJGiQjt2sBYTjPD18DdvxX9Vpz0Z7HQ+g1Z+6iYDAm1vR3QOJrDBkRHixHK/+FhkR6Pw==, + } + engines: { node: ">=18" } + hasBin: true + + conventional-changelog@6.0.0: + resolution: + { + integrity: sha512-tuUH8H/19VjtD9Ig7l6TQRh+Z0Yt0NZ6w/cCkkyzUbGQTnUEmKfGtkC9gGfVgCfOL1Rzno5NgNF4KY8vR+Jo3w==, + } + engines: { node: ">=18" } + + conventional-commit-types@3.0.0: + resolution: + { + integrity: sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg==, + } + + conventional-commits-filter@5.0.0: + resolution: + { + integrity: sha512-tQMagCOC59EVgNZcC5zl7XqO30Wki9i9J3acbUvkaosCT6JX3EeFwJD7Qqp4MCikRnzS18WXV3BLIQ66ytu6+Q==, + } + engines: { node: ">=18" } + + conventional-commits-parser@5.0.0: + resolution: + { + integrity: sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==, + } + engines: { node: ">=16" } + hasBin: true + + conventional-commits-parser@6.2.1: + resolution: + { + integrity: sha512-20pyHgnO40rvfI0NGF/xiEoFMkXDtkF8FwHvk5BokoFoCuTQRI8vrNCNFWUOfuolKJMm1tPCHc8GgYEtr1XRNA==, + } + engines: { node: ">=18" } + hasBin: true + + conventional-recommended-bump@10.0.0: + resolution: + { + integrity: sha512-RK/fUnc2btot0oEVtrj3p2doImDSs7iiz/bftFCDzels0Qs1mxLghp+DFHMaOC0qiCI6sWzlTDyBFSYuot6pRA==, + } + engines: { node: ">=18" } + hasBin: true + + convert-source-map@2.0.0: + resolution: + { + integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==, + } + + convert-to-spaces@2.0.1: + resolution: + { + integrity: sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + + core-js-compat@3.44.0: + resolution: + { + integrity: sha512-JepmAj2zfl6ogy34qfWtcE7nHKAJnKsQFRn++scjVS2bZFllwptzw61BZcZFYBPpUznLfAvh0LGhxKppk04ClA==, + } + + core-util-is@1.0.3: + resolution: + { + integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==, + } + + cosmiconfig-typescript-loader@6.1.0: + resolution: + { + integrity: sha512-tJ1w35ZRUiM5FeTzT7DtYWAFFv37ZLqSRkGi2oeCK1gPhvaWjkAtfXvLmvE1pRfxxp9aQo6ba/Pvg1dKj05D4g==, + } + engines: { node: ">=v18" } + peerDependencies: + "@types/node": "*" + cosmiconfig: ">=9" + typescript: ">=5" + + cosmiconfig@7.1.0: + resolution: + { + integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==, + } + engines: { node: ">=10" } + + cosmiconfig@9.0.0: + resolution: + { + integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==, + } + engines: { node: ">=14" } + peerDependencies: + typescript: ">=4.9.5" + peerDependenciesMeta: + typescript: + optional: true + + create-jest@29.7.0: + resolution: + { + integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + hasBin: true + + create-require@1.1.1: + resolution: + { + integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==, + } + + cross-spawn@7.0.6: + resolution: + { + integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==, + } + engines: { node: ">= 8" } + + css-declaration-sorter@6.4.1: + resolution: + { + integrity: sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==, + } + engines: { node: ^10 || ^12 || >=14 } + peerDependencies: + postcss: ^8.0.9 + + css-select@4.3.0: + resolution: + { + integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==, + } + + css-tree@1.1.3: + resolution: + { + integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==, + } + engines: { node: ">=8.0.0" } + + css-what@6.2.2: + resolution: + { + integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==, + } + engines: { node: ">= 6" } + + cssesc@3.0.0: + resolution: + { + integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==, + } + engines: { node: ">=4" } + hasBin: true + + cssnano-preset-default@5.2.14: + resolution: + { + integrity: sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==, + } + engines: { node: ^10 || ^12 || >=14.0 } + peerDependencies: + postcss: ^8.2.15 + + cssnano-utils@3.1.0: + resolution: + { + integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==, + } + engines: { node: ^10 || ^12 || >=14.0 } + peerDependencies: + postcss: ^8.2.15 + + cssnano@5.1.15: + resolution: + { + integrity: sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==, + } + engines: { node: ^10 || ^12 || >=14.0 } + peerDependencies: + postcss: ^8.2.15 + + csso@4.2.0: + resolution: + { + integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==, + } + engines: { node: ">=8.0.0" } + + csstype@3.2.1: + resolution: + { + integrity: sha512-98XGutrXoh75MlgLihlNxAGbUuFQc7l1cqcnEZlLNKc0UrVdPndgmaDmYTDDh929VS/eqTZV0rozmhu2qqT1/g==, + } + + cz-conventional-changelog@3.3.0: + resolution: + { + integrity: sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==, + } + engines: { node: ">= 10" } + + cz-conventional-commit@1.0.6: + resolution: + { + integrity: sha512-E/mzC3hHGQo36oyFlGfOTI01S1Cq9Zg2Y5kcZvMN+w6Uv3ZlACaTk8Z3iXCnxoT2i2KB7wEGDZpgPIAkNQNF8Q==, + } + engines: { node: ">= 10" } + + cz-git@1.12.0: + resolution: + { + integrity: sha512-LaZ+8whPPUOo6Y0Zy4nIbf6JOleV3ejp41sT6N4RPKiKKA+ICWf4ueeIlxIO8b6JtdlDxRzHH/EcRji07nDxcg==, + } + engines: { node: ">=v12.20.0" } + + damerau-levenshtein@1.0.8: + resolution: + { + integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==, + } + + dargs@8.1.0: + resolution: + { + integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==, + } + engines: { node: ">=12" } + + data-uri-to-buffer@6.0.2: + resolution: + { + integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==, + } + engines: { node: ">= 14" } + + data-view-buffer@1.0.2: + resolution: + { + integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==, + } + engines: { node: ">= 0.4" } + + data-view-byte-length@1.0.2: + resolution: + { + integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==, + } + engines: { node: ">= 0.4" } + + data-view-byte-offset@1.0.1: + resolution: + { + integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==, + } + engines: { node: ">= 0.4" } + + debug@3.2.7: + resolution: + { + integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==, + } + peerDependencies: + supports-color: "*" + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.1: + resolution: + { + integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==, + } + engines: { node: ">=6.0" } + peerDependencies: + supports-color: "*" + peerDependenciesMeta: + supports-color: + optional: true + + decamelize@4.0.0: + resolution: + { + integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==, + } + engines: { node: ">=10" } + + decode-named-character-reference@1.2.0: + resolution: + { + integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==, + } + + decompress-response@6.0.0: + resolution: + { + integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==, + } + engines: { node: ">=10" } + + dedent@0.7.0: + resolution: + { + integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==, + } + + dedent@1.6.0: + resolution: + { + integrity: sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==, + } + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + + deep-eql@4.1.4: + resolution: + { + integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==, + } + engines: { node: ">=6" } + + deep-extend@0.6.0: + resolution: + { + integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==, + } + engines: { node: ">=4.0.0" } + + deep-is@0.1.4: + resolution: + { + integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==, + } + + deepmerge@4.3.1: + resolution: + { + integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==, + } + engines: { node: ">=0.10.0" } + + default-browser-id@5.0.1: + resolution: + { + integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==, + } + engines: { node: ">=18" } + + default-browser@5.4.0: + resolution: + { + integrity: sha512-XDuvSq38Hr1MdN47EDvYtx3U0MTqpCEn+F6ft8z2vYDzMrvQhVp0ui9oQdqW3MvK3vqUETglt1tVGgjLuJ5izg==, + } + engines: { node: ">=18" } + + defaults@1.0.4: + resolution: + { + integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==, + } + + define-data-property@1.1.4: + resolution: + { + integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==, + } + engines: { node: ">= 0.4" } + + define-lazy-prop@2.0.0: + resolution: + { + integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==, + } + engines: { node: ">=8" } + + define-lazy-prop@3.0.0: + resolution: + { + integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==, + } + engines: { node: ">=12" } + + define-properties@1.2.1: + resolution: + { + integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==, + } + engines: { node: ">= 0.4" } + + defu@6.1.4: + resolution: + { + integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==, + } + + degenerator@5.0.1: + resolution: + { + integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==, + } + engines: { node: ">= 14" } + + delayed-stream@1.0.0: + resolution: + { + integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==, + } + engines: { node: ">=0.4.0" } + + dequal@2.0.3: + resolution: + { + integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==, + } + engines: { node: ">=6" } + + destr@2.0.5: + resolution: + { + integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==, + } + + detect-file@1.0.0: + resolution: + { + integrity: sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==, + } + engines: { node: ">=0.10.0" } + + detect-indent@6.1.0: + resolution: + { + integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==, + } + engines: { node: ">=8" } + + detect-libc@2.1.2: + resolution: + { + integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==, + } + engines: { node: ">=8" } + + detect-newline@3.1.0: + resolution: + { + integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==, + } + engines: { node: ">=8" } + + detect-node-es@1.1.0: + resolution: + { + integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==, + } + + detect-port@1.6.1: + resolution: + { + integrity: sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q==, + } + engines: { node: ">= 4.0.0" } + hasBin: true + + devlop@1.1.0: + resolution: + { + integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==, + } + + diff-sequences@29.6.3: + resolution: + { + integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + diff@3.5.0: + resolution: + { + integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==, + } + engines: { node: ">=0.3.1" } + + diff@4.0.2: + resolution: + { + integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==, + } + engines: { node: ">=0.3.1" } + + diff@5.2.0: + resolution: + { + integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==, + } + engines: { node: ">=0.3.1" } + + dir-glob@3.0.1: + resolution: + { + integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==, + } + engines: { node: ">=8" } + + doctrine@2.1.0: + resolution: + { + integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==, + } + engines: { node: ">=0.10.0" } + + dom-serializer@1.4.1: + resolution: + { + integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==, + } + + domelementtype@2.3.0: + resolution: + { + integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==, + } + + domhandler@4.3.1: + resolution: + { + integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==, + } + engines: { node: ">= 4" } + + domutils@2.8.0: + resolution: + { + integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==, + } + + dot-prop@5.3.0: + resolution: + { + integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==, + } + engines: { node: ">=8" } + + dotenv-expand@11.0.7: + resolution: + { + integrity: sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==, + } + engines: { node: ">=12" } + + dotenv@16.4.7: + resolution: + { + integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==, + } + engines: { node: ">=12" } + + dotenv@17.2.3: + resolution: + { + integrity: sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==, + } + engines: { node: ">=12" } + + dunder-proto@1.0.1: + resolution: + { + integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==, + } + engines: { node: ">= 0.4" } + + duplexer2@0.1.4: + resolution: + { + integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==, + } + + eastasianwidth@0.2.0: + resolution: + { + integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==, + } + + ejs@3.1.10: + resolution: + { + integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==, + } + engines: { node: ">=0.10.0" } + hasBin: true + + electron-to-chromium@1.5.191: + resolution: + { + integrity: sha512-xcwe9ELcuxYLUFqZZxL19Z6HVKcvNkIwhbHUz7L3us6u12yR+7uY89dSl570f/IqNthx8dAw3tojG7i4Ni4tDA==, + } + + emittery@0.13.1: + resolution: + { + integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==, + } + engines: { node: ">=12" } + + emoji-regex@8.0.0: + resolution: + { + integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==, + } + + emoji-regex@9.2.2: + resolution: + { + integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==, + } + + end-of-stream@1.4.5: + resolution: + { + integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==, + } + + enhanced-resolve@5.18.3: + resolution: + { + integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==, + } + engines: { node: ">=10.13.0" } + + enquirer@2.3.6: + resolution: + { + integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==, + } + engines: { node: ">=8.6" } + + enquirer@2.4.1: + resolution: + { + integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==, + } + engines: { node: ">=8.6" } + + entities@2.2.0: + resolution: + { + integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==, + } + + entities@4.5.0: + resolution: + { + integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==, + } + engines: { node: ">=0.12" } + + env-paths@2.2.1: + resolution: + { + integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==, + } + engines: { node: ">=6" } + + error-ex@1.3.2: + resolution: + { + integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==, + } + + es-abstract@1.24.0: + resolution: + { + integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==, + } + engines: { node: ">= 0.4" } + + es-define-property@1.0.1: + resolution: + { + integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==, + } + engines: { node: ">= 0.4" } + + es-errors@1.3.0: + resolution: + { + integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==, + } + engines: { node: ">= 0.4" } + + es-iterator-helpers@1.2.1: + resolution: + { + integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==, + } + engines: { node: ">= 0.4" } + + es-object-atoms@1.1.1: + resolution: + { + integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==, + } + engines: { node: ">= 0.4" } + + es-set-tostringtag@2.1.0: + resolution: + { + integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==, + } + engines: { node: ">= 0.4" } + + es-shim-unscopables@1.1.0: + resolution: + { + integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==, + } + engines: { node: ">= 0.4" } + + es-to-primitive@1.3.0: + resolution: + { + integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==, + } + engines: { node: ">= 0.4" } + + esast-util-from-estree@2.0.0: + resolution: + { + integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==, + } + + esast-util-from-js@2.0.1: + resolution: + { + integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==, + } + + esbuild@0.21.5: + resolution: + { + integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==, + } + engines: { node: ">=12" } + hasBin: true + + esbuild@0.25.12: + resolution: + { + integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==, + } + engines: { node: ">=18" } + hasBin: true + + esbuild@0.25.8: + resolution: + { + integrity: sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==, + } + engines: { node: ">=18" } + hasBin: true + + escalade@3.2.0: + resolution: + { + integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==, + } + engines: { node: ">=6" } + + escape-string-regexp@1.0.5: + resolution: + { + integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==, + } + engines: { node: ">=0.8.0" } + + escape-string-regexp@2.0.0: + resolution: + { + integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==, + } + engines: { node: ">=8" } + + escape-string-regexp@4.0.0: + resolution: + { + integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==, + } + engines: { node: ">=10" } + + escape-string-regexp@5.0.0: + resolution: + { + integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==, + } + engines: { node: ">=12" } + + escodegen@2.1.0: + resolution: + { + integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==, + } + engines: { node: ">=6.0" } + hasBin: true + + eslint-config-next@16.0.1: + resolution: + { + integrity: sha512-wNuHw5gNOxwLUvpg0cu6IL0crrVC9hAwdS/7UwleNkwyaMiWIOAwf8yzXVqBBzL3c9A7jVRngJxjoSpPP1aEhg==, + } + peerDependencies: + eslint: ">=9.0.0" + typescript: ">=3.3.1" + peerDependenciesMeta: + typescript: + optional: true + + eslint-config-prettier@10.1.8: + resolution: + { + integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==, + } + hasBin: true + peerDependencies: + eslint: ">=7.0.0" + + eslint-import-resolver-node@0.3.9: + resolution: + { + integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==, + } + + eslint-import-resolver-typescript@3.10.1: + resolution: + { + integrity: sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==, + } + engines: { node: ^14.18.0 || >=16.0.0 } + peerDependencies: + eslint: "*" + eslint-plugin-import: "*" + eslint-plugin-import-x: "*" + peerDependenciesMeta: + eslint-plugin-import: + optional: true + eslint-plugin-import-x: + optional: true + + eslint-module-utils@2.12.1: + resolution: + { + integrity: sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==, + } + engines: { node: ">=4" } + peerDependencies: + "@typescript-eslint/parser": "*" + eslint: "*" + eslint-import-resolver-node: "*" + eslint-import-resolver-typescript: "*" + eslint-import-resolver-webpack: "*" + peerDependenciesMeta: + "@typescript-eslint/parser": + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + + eslint-plugin-eslint-comments@3.2.0: + resolution: + { + integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==, + } + engines: { node: ">=6.5.0" } + peerDependencies: + eslint: ">=4.19.1" + + eslint-plugin-import@2.32.0: + resolution: + { + integrity: sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==, + } + engines: { node: ">=4" } + peerDependencies: + "@typescript-eslint/parser": "*" + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 + peerDependenciesMeta: + "@typescript-eslint/parser": + optional: true + + eslint-plugin-jsx-a11y@6.10.2: + resolution: + { + integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==, + } + engines: { node: ">=4.0" } + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 + + eslint-plugin-prettier@5.5.3: + resolution: + { + integrity: sha512-NAdMYww51ehKfDyDhv59/eIItUVzU0Io9H2E8nHNGKEeeqlnci+1gCvrHib6EmZdf6GxF+LCV5K7UC65Ezvw7w==, + } + engines: { node: ^14.18.0 || >=16.0.0 } + peerDependencies: + "@types/eslint": ">=8.0.0" + eslint: ">=8.0.0" + eslint-config-prettier: ">= 7.0.0 <10.0.0 || >=10.1.0" + prettier: ">=3.0.0" + peerDependenciesMeta: + "@types/eslint": + optional: true + eslint-config-prettier: + optional: true + + eslint-plugin-react-hooks@5.2.0: + resolution: + { + integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==, + } + engines: { node: ">=10" } + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 + + eslint-plugin-react-hooks@7.0.1: + resolution: + { + integrity: sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==, + } + engines: { node: ">=18" } + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 + + eslint-plugin-react@7.37.5: + resolution: + { + integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==, + } + engines: { node: ">=4" } + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + + eslint-scope@8.4.0: + resolution: + { + integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + eslint-visitor-keys@3.4.3: + resolution: + { + integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==, + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + + eslint-visitor-keys@4.2.1: + resolution: + { + integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + eslint@9.39.1: + resolution: + { + integrity: sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + hasBin: true + peerDependencies: + jiti: "*" + peerDependenciesMeta: + jiti: + optional: true + + espree@10.4.0: + resolution: + { + integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + esprima@4.0.1: + resolution: + { + integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==, + } + engines: { node: ">=4" } + hasBin: true + + esquery@1.6.0: + resolution: + { + integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==, + } + engines: { node: ">=0.10" } + + esrecurse@4.3.0: + resolution: + { + integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==, + } + engines: { node: ">=4.0" } + + estraverse@5.3.0: + resolution: + { + integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==, + } + engines: { node: ">=4.0" } + + estree-util-attach-comments@3.0.0: + resolution: + { + integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==, + } + + estree-util-build-jsx@3.0.1: + resolution: + { + integrity: sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==, + } + + estree-util-is-identifier-name@3.0.0: + resolution: + { + integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==, + } + + estree-util-scope@1.0.0: + resolution: + { + integrity: sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==, + } + + estree-util-to-js@2.0.0: + resolution: + { + integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==, + } + + estree-util-value-to-estree@3.5.0: + resolution: + { + integrity: sha512-aMV56R27Gv3QmfmF1MY12GWkGzzeAezAX+UplqHVASfjc9wNzI/X6hC0S9oxq61WT4aQesLGslWP9tKk6ghRZQ==, + } + + estree-util-visit@2.0.0: + resolution: + { + integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==, + } + + estree-walker@0.6.1: + resolution: + { + integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==, + } + + estree-walker@2.0.2: + resolution: + { + integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==, + } + + estree-walker@3.0.3: + resolution: + { + integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==, + } + + esutils@2.0.3: + resolution: + { + integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==, + } + engines: { node: ">=0.10.0" } + + eta@4.0.1: + resolution: + { + integrity: sha512-0h0oBEsF6qAJU7eu9ztvJoTo8D2PAq/4FvXVIQA1fek3WOTe6KPsVJycekG1+g1N6mfpblkheoGwaUhMtnlH4A==, + } + engines: { node: ">=20" } + + eventemitter3@4.0.7: + resolution: + { + integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==, + } + + events-universal@1.0.1: + resolution: + { + integrity: sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==, + } + + execa@5.1.1: + resolution: + { + integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==, + } + engines: { node: ">=10" } + + execa@8.0.1: + resolution: + { + integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==, + } + engines: { node: ">=16.17" } + + exit-x@0.2.2: + resolution: + { + integrity: sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==, + } + engines: { node: ">= 0.8.0" } + + exit@0.1.2: + resolution: + { + integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==, + } + engines: { node: ">= 0.8.0" } + + expand-template@2.0.3: + resolution: + { + integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==, + } + engines: { node: ">=6" } + + expand-tilde@2.0.2: + resolution: + { + integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==, + } + engines: { node: ">=0.10.0" } + + expect@29.7.0: + resolution: + { + integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + expect@30.0.5: + resolution: + { + integrity: sha512-P0te2pt+hHI5qLJkIR+iMvS+lYUZml8rKKsohVHAGY+uClp9XVbdyYNJOIjSRpHVp8s8YqxJCiHUkSYZGr8rtQ==, + } + engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 } + + exsolve@1.0.8: + resolution: + { + integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==, + } + + extend@3.0.2: + resolution: + { + integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==, + } + + external-editor@3.1.0: + resolution: + { + integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==, + } + engines: { node: ">=4" } + + fast-content-type-parse@3.0.0: + resolution: + { + integrity: sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg==, + } + + fast-deep-equal@3.1.3: + resolution: + { + integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, + } + + fast-diff@1.3.0: + resolution: + { + integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==, + } + + fast-fifo@1.3.2: + resolution: + { + integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==, + } + + fast-glob@3.3.1: + resolution: + { + integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==, + } + engines: { node: ">=8.6.0" } + + fast-glob@3.3.3: + resolution: + { + integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==, + } + engines: { node: ">=8.6.0" } + + fast-json-stable-stringify@2.1.0: + resolution: + { + integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==, + } + + fast-levenshtein@2.0.6: + resolution: + { + integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==, + } + + fast-uri@3.0.6: + resolution: + { + integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==, + } + + fastq@1.19.1: + resolution: + { + integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==, + } + + fb-watchman@2.0.2: + resolution: + { + integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==, + } + + fd-package-json@2.0.0: + resolution: + { + integrity: sha512-jKmm9YtsNXN789RS/0mSzOC1NUq9mkVd65vbSSVsKdjGvYXBuE4oWe2QOEoFeRmJg+lPuZxpmrfFclNhoRMneQ==, + } + + fdir@6.4.6: + resolution: + { + integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==, + } + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + fdir@6.5.0: + resolution: + { + integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==, + } + engines: { node: ">=12.0.0" } + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + figures@3.2.0: + resolution: + { + integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==, + } + engines: { node: ">=8" } + + file-entry-cache@8.0.0: + resolution: + { + integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==, + } + engines: { node: ">=16.0.0" } + + filelist@1.0.4: + resolution: + { + integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==, + } + + fill-range@7.1.1: + resolution: + { + integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==, + } + engines: { node: ">=8" } + + find-cache-dir@3.3.2: + resolution: + { + integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==, + } + engines: { node: ">=8" } + + find-node-modules@2.1.3: + resolution: + { + integrity: sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg==, + } + + find-root@1.1.0: + resolution: + { + integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==, + } + + find-up-simple@1.0.1: + resolution: + { + integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==, + } + engines: { node: ">=18" } + + find-up@4.1.0: + resolution: + { + integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==, + } + engines: { node: ">=8" } + + find-up@5.0.0: + resolution: + { + integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==, + } + engines: { node: ">=10" } + + find-up@7.0.0: + resolution: + { + integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==, + } + engines: { node: ">=18" } + + findup-sync@4.0.0: + resolution: + { + integrity: sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==, + } + engines: { node: ">= 8" } + + fix-dts-default-cjs-exports@1.0.1: + resolution: + { + integrity: sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg==, + } + + flat-cache@4.0.1: + resolution: + { + integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==, + } + engines: { node: ">=16" } + + flat@5.0.2: + resolution: + { + integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==, + } + hasBin: true + + flatted@3.3.3: + resolution: + { + integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==, + } + + follow-redirects@1.15.9: + resolution: + { + integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==, + } + engines: { node: ">=4.0" } + peerDependencies: + debug: "*" + peerDependenciesMeta: + debug: + optional: true + + for-each@0.3.5: + resolution: + { + integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==, + } + engines: { node: ">= 0.4" } + + foreground-child@3.3.1: + resolution: + { + integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==, + } + engines: { node: ">=14" } + + form-data@4.0.3: + resolution: + { + integrity: sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==, + } + engines: { node: ">= 6" } + + formatly@0.3.0: + resolution: + { + integrity: sha512-9XNj/o4wrRFyhSMJOvsuyMwy8aUfBaZ1VrqHVfohyXf0Sw0e+yfKG+xZaY3arGCOMdwFsqObtzVOc1gU9KiT9w==, + } + engines: { node: ">=18.3.0" } + hasBin: true + + fraction.js@4.3.7: + resolution: + { + integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==, + } + + from2@2.3.0: + resolution: + { + integrity: sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==, + } + + front-matter@4.0.2: + resolution: + { + integrity: sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==, + } + + fs-constants@1.0.0: + resolution: + { + integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==, + } + + fs-extra@10.1.0: + resolution: + { + integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==, + } + engines: { node: ">=12" } + + fs-extra@11.3.2: + resolution: + { + integrity: sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==, + } + engines: { node: ">=14.14" } + + fs-extra@8.1.0: + resolution: + { + integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==, + } + engines: { node: ">=6 <7 || >=8" } + + fs-extra@9.1.0: + resolution: + { + integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==, + } + engines: { node: ">=10" } + + fs.realpath@1.0.0: + resolution: + { + integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==, + } + + fsevents@2.3.3: + resolution: + { + integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==, + } + engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } + os: [darwin] + + fumadocs-core@16.0.11: + resolution: + { + integrity: sha512-F+Pq/0Kri2QRO9qCLcFczrSJs2bCXuzsC7IgAN4zN9C00W0kSuSrjveRsZw7G94DiqZl6kWldpI5kToA1UwrPg==, + } + peerDependencies: + "@mixedbread/sdk": ^0.19.0 + "@orama/core": 1.x.x + "@tanstack/react-router": 1.x.x + "@types/react": "*" + algoliasearch: 5.x.x + lucide-react: "*" + next: 16.x.x + react: ^19.2.0 + react-dom: ^19.2.0 + react-router: 7.x.x + waku: ^0.26.0 + peerDependenciesMeta: + "@mixedbread/sdk": + optional: true + "@orama/core": + optional: true + "@tanstack/react-router": + optional: true + "@types/react": + optional: true + algoliasearch: + optional: true + lucide-react: + optional: true + next: + optional: true + react: + optional: true + react-dom: + optional: true + react-router: + optional: true + waku: + optional: true + + fumadocs-mdx@13.0.8: + resolution: + { + integrity: sha512-UbUwH0iGvYbytnxhmfd7tWJKFK8L0mrbTAmrQYnpg6Wi/h8afNMJmbHBOzVcaEWJKeFipZ1CGDAsNA2fztwXNg==, + } + hasBin: true + peerDependencies: + "@fumadocs/mdx-remote": ^1.4.0 + fumadocs-core: ^15.0.0 || ^16.0.0 + next: ^15.3.0 || ^16.0.0 + react: "*" + vite: 6.x.x || 7.x.x + peerDependenciesMeta: + "@fumadocs/mdx-remote": + optional: true + next: + optional: true + react: + optional: true + vite: + optional: true + + fumadocs-ui@16.0.11: + resolution: + { + integrity: sha512-GyuDm4G2t8RJyfzUUOYhQL1mA0i6yE51dEnvtBTGtkZQ1RWIGqLqoNLkIA6gp82mHfvQsbgmIJdfUQ3tDVH1NA==, + } + peerDependencies: + "@types/react": "*" + next: 16.x.x + react: ^19.2.0 + react-dom: ^19.2.0 + tailwindcss: ^4.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + next: + optional: true + tailwindcss: + optional: true + + function-bind@1.1.2: + resolution: + { + integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==, + } + + function.prototype.name@1.1.8: + resolution: + { + integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==, + } + engines: { node: ">= 0.4" } + + functions-have-names@1.2.3: + resolution: + { + integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==, + } + + generic-names@4.0.0: + resolution: + { + integrity: sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==, + } + + gensync@1.0.0-beta.2: + resolution: + { + integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==, + } + engines: { node: ">=6.9.0" } + + get-caller-file@2.0.5: + resolution: + { + integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==, + } + engines: { node: 6.* || 8.* || >= 10.* } + + get-east-asian-width@1.4.0: + resolution: + { + integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==, + } + engines: { node: ">=18" } + + get-func-name@2.0.2: + resolution: + { + integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==, + } + + get-intrinsic@1.3.0: + resolution: + { + integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==, + } + engines: { node: ">= 0.4" } + + get-nonce@1.0.1: + resolution: + { + integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==, + } + engines: { node: ">=6" } + + get-package-type@0.1.0: + resolution: + { + integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==, + } + engines: { node: ">=8.0.0" } + + get-proto@1.0.1: + resolution: + { + integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==, + } + engines: { node: ">= 0.4" } + + get-stream@6.0.1: + resolution: + { + integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==, + } + engines: { node: ">=10" } + + get-stream@8.0.1: + resolution: + { + integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==, + } + engines: { node: ">=16" } + + get-symbol-description@1.1.0: + resolution: + { + integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==, + } + engines: { node: ">= 0.4" } + + get-tsconfig@4.13.0: + resolution: + { + integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==, + } + + get-uri@6.0.5: + resolution: + { + integrity: sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==, + } + engines: { node: ">= 14" } + + giget@2.0.0: + resolution: + { + integrity: sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==, + } + hasBin: true + + git-raw-commits@4.0.0: + resolution: + { + integrity: sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==, + } + engines: { node: ">=16" } + hasBin: true + + git-raw-commits@5.0.0: + resolution: + { + integrity: sha512-I2ZXrXeOc0KrCvC7swqtIFXFN+rbjnC7b2T943tvemIOVNl+XP8YnA9UVwqFhzzLClnSA60KR/qEjLpXzs73Qg==, + } + engines: { node: ">=18" } + hasBin: true + + git-semver-tags@8.0.0: + resolution: + { + integrity: sha512-N7YRIklvPH3wYWAR2vysaqGLPRcpwQ0GKdlqTiVN5w1UmCdaeY3K8s6DMKRCh54DDdzyt/OAB6C8jgVtb7Y2Fg==, + } + engines: { node: ">=18" } + hasBin: true + + git-up@8.1.1: + resolution: + { + integrity: sha512-FDenSF3fVqBYSaJoYy1KSc2wosx0gCvKP+c+PRBht7cAaiCeQlBtfBDX9vgnNOHmdePlSFITVcn4pFfcgNvx3g==, + } + + git-url-parse@16.1.0: + resolution: + { + integrity: sha512-cPLz4HuK86wClEW7iDdeAKcCVlWXmrLpb2L+G9goW0Z1dtpNS6BXXSOckUTlJT/LDQViE1QZKstNORzHsLnobw==, + } + + github-from-package@0.0.0: + resolution: + { + integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==, + } + + github-slugger@2.0.0: + resolution: + { + integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==, + } + + glob-parent@5.1.2: + resolution: + { + integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==, + } + engines: { node: ">= 6" } + + glob-parent@6.0.2: + resolution: + { + integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==, + } + engines: { node: ">=10.13.0" } + + glob@10.4.5: + resolution: + { + integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==, + } + hasBin: true + + glob@11.0.3: + resolution: + { + integrity: sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==, + } + engines: { node: 20 || >=22 } + hasBin: true + + glob@7.2.3: + resolution: + { + integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==, + } + deprecated: Glob versions prior to v9 are no longer supported + + glob@8.1.0: + resolution: + { + integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==, + } + engines: { node: ">=12" } + deprecated: Glob versions prior to v9 are no longer supported + + global-directory@4.0.1: + resolution: + { + integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==, + } + engines: { node: ">=18" } + + global-modules@1.0.0: + resolution: + { + integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==, + } + engines: { node: ">=0.10.0" } + + global-prefix@1.0.2: + resolution: + { + integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==, + } + engines: { node: ">=0.10.0" } + + globals@14.0.0: + resolution: + { + integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==, + } + engines: { node: ">=18" } + + globals@16.4.0: + resolution: + { + integrity: sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==, + } + engines: { node: ">=18" } + + globalthis@1.0.4: + resolution: + { + integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==, + } + engines: { node: ">= 0.4" } + + globby@10.0.1: + resolution: + { + integrity: sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==, + } + engines: { node: ">=8" } + + gopd@1.2.0: + resolution: + { + integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==, + } + engines: { node: ">= 0.4" } + + graceful-fs@4.2.11: + resolution: + { + integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==, + } + + graphemer@1.4.0: + resolution: + { + integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==, + } + + growly@1.3.0: + resolution: + { + integrity: sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==, + } + + handlebars@4.7.8: + resolution: + { + integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==, + } + engines: { node: ">=0.4.7" } + hasBin: true + + harmony-reflect@1.6.2: + resolution: + { + integrity: sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==, + } + + has-bigints@1.1.0: + resolution: + { + integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==, + } + engines: { node: ">= 0.4" } + + has-flag@3.0.0: + resolution: + { + integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==, + } + engines: { node: ">=4" } + + has-flag@4.0.0: + resolution: + { + integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==, + } + engines: { node: ">=8" } + + has-property-descriptors@1.0.2: + resolution: + { + integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==, + } + + has-proto@1.2.0: + resolution: + { + integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==, + } + engines: { node: ">= 0.4" } + + has-symbols@1.1.0: + resolution: + { + integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==, + } + engines: { node: ">= 0.4" } + + has-tostringtag@1.0.2: + resolution: + { + integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==, + } + engines: { node: ">= 0.4" } + + hasown@2.0.2: + resolution: + { + integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==, + } + engines: { node: ">= 0.4" } + + hast-util-to-estree@3.1.3: + resolution: + { + integrity: sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==, + } + + hast-util-to-html@9.0.5: + resolution: + { + integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==, + } + + hast-util-to-jsx-runtime@2.3.6: + resolution: + { + integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==, + } + + hast-util-to-string@3.0.1: + resolution: + { + integrity: sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==, + } + + hast-util-whitespace@3.0.0: + resolution: + { + integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==, + } + + he@1.2.0: + resolution: + { + integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==, + } + hasBin: true + + hermes-estree@0.25.1: + resolution: + { + integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==, + } + + hermes-parser@0.25.1: + resolution: + { + integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==, + } + + homedir-polyfill@1.0.3: + resolution: + { + integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==, + } + engines: { node: ">=0.10.0" } + + hosted-git-info@7.0.2: + resolution: + { + integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==, + } + engines: { node: ^16.14.0 || >=18.0.0 } + + html-escaper@2.0.2: + resolution: + { + integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==, + } + + html-void-elements@3.0.0: + resolution: + { + integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==, + } + + http-proxy-agent@7.0.2: + resolution: + { + integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==, + } + engines: { node: ">= 14" } + + https-proxy-agent@5.0.1: + resolution: + { + integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==, + } + engines: { node: ">= 6" } + + https-proxy-agent@7.0.6: + resolution: + { + integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==, + } + engines: { node: ">= 14" } + + human-signals@2.1.0: + resolution: + { + integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==, + } + engines: { node: ">=10.17.0" } + + human-signals@5.0.0: + resolution: + { + integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==, + } + engines: { node: ">=16.17.0" } + + iconv-lite@0.4.24: + resolution: + { + integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==, + } + engines: { node: ">=0.10.0" } + + iconv-lite@0.7.0: + resolution: + { + integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==, + } + engines: { node: ">=0.10.0" } + + icss-replace-symbols@1.1.0: + resolution: + { + integrity: sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==, + } + + icss-utils@5.1.0: + resolution: + { + integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==, + } + engines: { node: ^10 || ^12 || >= 14 } + peerDependencies: + postcss: ^8.1.0 + + identity-obj-proxy@3.0.0: + resolution: + { + integrity: sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==, + } + engines: { node: ">=4" } + + ieee754@1.2.1: + resolution: + { + integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==, + } + + ignore@5.3.2: + resolution: + { + integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==, + } + engines: { node: ">= 4" } + + ignore@7.0.5: + resolution: + { + integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==, + } + engines: { node: ">= 4" } + + image-size@2.0.2: + resolution: + { + integrity: sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w==, + } + engines: { node: ">=16.x" } + hasBin: true + + import-cwd@3.0.0: + resolution: + { + integrity: sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==, + } + engines: { node: ">=8" } + + import-fresh@3.3.1: + resolution: + { + integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==, + } + engines: { node: ">=6" } + + import-from@3.0.0: + resolution: + { + integrity: sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==, + } + engines: { node: ">=8" } + + import-local@3.2.0: + resolution: + { + integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==, + } + engines: { node: ">=8" } + hasBin: true + + import-meta-resolve@4.1.0: + resolution: + { + integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==, + } + + imurmurhash@0.1.4: + resolution: + { + integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==, + } + engines: { node: ">=0.8.19" } + + indent-string@5.0.0: + resolution: + { + integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==, + } + engines: { node: ">=12" } + + index-to-position@1.2.0: + resolution: + { + integrity: sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==, + } + engines: { node: ">=18" } + + inflight@1.0.6: + resolution: + { + integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==, + } + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: + { + integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==, + } + + ini@1.3.8: + resolution: + { + integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==, + } + + ini@4.1.1: + resolution: + { + integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==, + } + engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 } + + ink-testing-library@4.0.0: + resolution: + { + integrity: sha512-yF92kj3pmBvk7oKbSq5vEALO//o7Z9Ck/OaLNlkzXNeYdwfpxMQkSowGTFUCS5MSu9bWfSZMewGpp7bFc66D7Q==, + } + engines: { node: ">=18" } + peerDependencies: + "@types/react": ">=18.0.0" + peerDependenciesMeta: + "@types/react": + optional: true + + ink@4.4.1: + resolution: + { + integrity: sha512-rXckvqPBB0Krifk5rn/5LvQGmyXwCUpBfmTwbkQNBY9JY8RSl3b8OftBNEYxg4+SWUhEKcPifgope28uL9inlA==, + } + engines: { node: ">=14.16" } + peerDependencies: + "@types/react": ">=18.0.0" + react: ">=18.0.0" + react-devtools-core: ^4.19.1 + peerDependenciesMeta: + "@types/react": + optional: true + react-devtools-core: + optional: true + + inline-style-parser@0.2.6: + resolution: + { + integrity: sha512-gtGXVaBdl5mAes3rPcMedEBm12ibjt1kDMFfheul1wUAOVEJW60voNdMVzVkfLN06O7ZaD/rxhfKgtlgtTbMjg==, + } + + inquirer@12.9.6: + resolution: + { + integrity: sha512-603xXOgyfxhuis4nfnWaZrMaotNT0Km9XwwBNWUKbIDqeCY89jGr2F9YPEMiNhU6XjIP4VoWISMBFfcc5NgrTw==, + } + engines: { node: ">=18" } + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + + inquirer@8.2.5: + resolution: + { + integrity: sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==, + } + engines: { node: ">=12.0.0" } + + internal-slot@1.1.0: + resolution: + { + integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==, + } + engines: { node: ">= 0.4" } + + into-stream@6.0.0: + resolution: + { + integrity: sha512-XHbaOAvP+uFKUFsOgoNPRjLkwB+I22JFPFe5OjTkQ0nwgj6+pSjb4NmB6VMxaPshLiOf+zcpOCBQuLwC1KHhZA==, + } + engines: { node: ">=10" } + + ip-address@10.1.0: + resolution: + { + integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==, + } + engines: { node: ">= 12" } + + is-alphabetical@2.0.1: + resolution: + { + integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==, + } + + is-alphanumerical@2.0.1: + resolution: + { + integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==, + } + + is-array-buffer@3.0.5: + resolution: + { + integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==, + } + engines: { node: ">= 0.4" } + + is-arrayish@0.2.1: + resolution: + { + integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==, + } + + is-async-function@2.1.1: + resolution: + { + integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==, + } + engines: { node: ">= 0.4" } + + is-bigint@1.1.0: + resolution: + { + integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==, + } + engines: { node: ">= 0.4" } + + is-binary-path@2.1.0: + resolution: + { + integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==, + } + engines: { node: ">=8" } + + is-boolean-object@1.2.2: + resolution: + { + integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==, + } + engines: { node: ">= 0.4" } + + is-bun-module@2.0.0: + resolution: + { + integrity: sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==, + } + + is-callable@1.2.7: + resolution: + { + integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==, + } + engines: { node: ">= 0.4" } + + is-ci@3.0.1: + resolution: + { + integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==, + } + hasBin: true + + is-core-module@2.16.1: + resolution: + { + integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==, + } + engines: { node: ">= 0.4" } + + is-data-view@1.0.2: + resolution: + { + integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==, + } + engines: { node: ">= 0.4" } + + is-date-object@1.1.0: + resolution: + { + integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==, + } + engines: { node: ">= 0.4" } + + is-decimal@2.0.1: + resolution: + { + integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==, + } + + is-docker@2.2.1: + resolution: + { + integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==, + } + engines: { node: ">=8" } + hasBin: true + + is-docker@3.0.0: + resolution: + { + integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + hasBin: true + + is-extglob@2.1.1: + resolution: + { + integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, + } + engines: { node: ">=0.10.0" } + + is-finalizationregistry@1.1.1: + resolution: + { + integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==, + } + engines: { node: ">= 0.4" } + + is-fullwidth-code-point@3.0.0: + resolution: + { + integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==, + } + engines: { node: ">=8" } + + is-fullwidth-code-point@4.0.0: + resolution: + { + integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==, + } + engines: { node: ">=12" } + + is-generator-fn@2.1.0: + resolution: + { + integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==, + } + engines: { node: ">=6" } + + is-generator-function@1.1.0: + resolution: + { + integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==, + } + engines: { node: ">= 0.4" } + + is-glob@4.0.3: + resolution: + { + integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, + } + engines: { node: ">=0.10.0" } + + is-hexadecimal@2.0.1: + resolution: + { + integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==, + } + + is-inside-container@1.0.0: + resolution: + { + integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==, + } + engines: { node: ">=14.16" } + hasBin: true + + is-interactive@1.0.0: + resolution: + { + integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==, + } + engines: { node: ">=8" } + + is-interactive@2.0.0: + resolution: + { + integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==, + } + engines: { node: ">=12" } + + is-lower-case@2.0.2: + resolution: + { + integrity: sha512-bVcMJy4X5Og6VZfdOZstSexlEy20Sr0k/p/b2IlQJlfdKAQuMpiv5w2Ccxb8sKdRUNAG1PnHVHjFSdRDVS6NlQ==, + } + + is-map@2.0.3: + resolution: + { + integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==, + } + engines: { node: ">= 0.4" } + + is-module@1.0.0: + resolution: + { + integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==, + } + + is-negative-zero@2.0.3: + resolution: + { + integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==, + } + engines: { node: ">= 0.4" } + + is-number-object@1.1.1: + resolution: + { + integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==, + } + engines: { node: ">= 0.4" } + + is-number@7.0.0: + resolution: + { + integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, + } + engines: { node: ">=0.12.0" } + + is-obj@2.0.0: + resolution: + { + integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==, + } + engines: { node: ">=8" } + + is-plain-obj@2.1.0: + resolution: + { + integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==, + } + engines: { node: ">=8" } + + is-plain-obj@4.1.0: + resolution: + { + integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==, + } + engines: { node: ">=12" } + + is-plain-object@3.0.1: + resolution: + { + integrity: sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==, + } + engines: { node: ">=0.10.0" } + + is-reference@1.2.1: + resolution: + { + integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==, + } + + is-regex@1.2.1: + resolution: + { + integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==, + } + engines: { node: ">= 0.4" } + + is-retry-allowed@2.2.0: + resolution: + { + integrity: sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg==, + } + engines: { node: ">=10" } + + is-set@2.0.3: + resolution: + { + integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==, + } + engines: { node: ">= 0.4" } + + is-shared-array-buffer@1.0.4: + resolution: + { + integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==, + } + engines: { node: ">= 0.4" } + + is-ssh@1.4.1: + resolution: + { + integrity: sha512-JNeu1wQsHjyHgn9NcWTaXq6zWSR6hqE0++zhfZlkFBbScNkyvxCdeV8sRkSBaeLKxmbpR21brail63ACNxJ0Tg==, + } + + is-stream@2.0.1: + resolution: + { + integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==, + } + engines: { node: ">=8" } + + is-stream@3.0.0: + resolution: + { + integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + + is-string@1.1.1: + resolution: + { + integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==, + } + engines: { node: ">= 0.4" } + + is-symbol@1.1.1: + resolution: + { + integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==, + } + engines: { node: ">= 0.4" } + + is-text-path@2.0.0: + resolution: + { + integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==, + } + engines: { node: ">=8" } + + is-typed-array@1.1.15: + resolution: + { + integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==, + } + engines: { node: ">= 0.4" } + + is-unicode-supported@0.1.0: + resolution: + { + integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==, + } + engines: { node: ">=10" } + + is-unicode-supported@2.1.0: + resolution: + { + integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==, + } + engines: { node: ">=18" } + + is-upper-case@2.0.2: + resolution: + { + integrity: sha512-44pxmxAvnnAOwBg4tHPnkfvgjPwbc5QIsSstNU+YcJ1ovxVzCWpSGosPJOZh/a1tdl81fbgnLc9LLv+x2ywbPQ==, + } + + is-utf8@0.2.1: + resolution: + { + integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==, + } + + is-weakmap@2.0.2: + resolution: + { + integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==, + } + engines: { node: ">= 0.4" } + + is-weakref@1.1.1: + resolution: + { + integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==, + } + engines: { node: ">= 0.4" } + + is-weakset@2.0.4: + resolution: + { + integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==, + } + engines: { node: ">= 0.4" } + + is-windows@1.0.2: + resolution: + { + integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==, + } + engines: { node: ">=0.10.0" } + + is-wsl@2.2.0: + resolution: + { + integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==, + } + engines: { node: ">=8" } + + is-wsl@3.1.0: + resolution: + { + integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==, + } + engines: { node: ">=16" } + + isarray@1.0.0: + resolution: + { + integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==, + } + + isarray@2.0.5: + resolution: + { + integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==, + } + + isexe@2.0.0: + resolution: + { + integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==, + } + + issue-parser@7.0.1: + resolution: + { + integrity: sha512-3YZcUUR2Wt1WsapF+S/WiA2WmlW0cWAoPccMqne7AxEBhCdFeTPjfv/Axb8V2gyCgY3nRw+ksZ3xSUX+R47iAg==, + } + engines: { node: ^18.17 || >=20.6.1 } + + istanbul-lib-coverage@3.2.2: + resolution: + { + integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==, + } + engines: { node: ">=8" } + + istanbul-lib-instrument@5.2.1: + resolution: + { + integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==, + } + engines: { node: ">=8" } + + istanbul-lib-instrument@6.0.3: + resolution: + { + integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==, + } + engines: { node: ">=10" } + + istanbul-lib-report@3.0.1: + resolution: + { + integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==, + } + engines: { node: ">=10" } + + istanbul-lib-source-maps@4.0.1: + resolution: + { + integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==, + } + engines: { node: ">=10" } + + istanbul-lib-source-maps@5.0.6: + resolution: + { + integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==, + } + engines: { node: ">=10" } + + istanbul-reports@3.1.7: + resolution: + { + integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==, + } + engines: { node: ">=8" } + + iterator.prototype@1.1.5: + resolution: + { + integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==, + } + engines: { node: ">= 0.4" } + + jackspeak@3.4.3: + resolution: + { + integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==, + } + + jackspeak@4.1.1: + resolution: + { + integrity: sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==, + } + engines: { node: 20 || >=22 } + + jake@10.9.2: + resolution: + { + integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==, + } + engines: { node: ">=10" } + hasBin: true + + jest-changed-files@29.7.0: + resolution: + { + integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + jest-circus@29.7.0: + resolution: + { + integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + jest-circus@30.0.5: + resolution: + { + integrity: sha512-h/sjXEs4GS+NFFfqBDYT7y5Msfxh04EwWLhQi0F8kuWpe+J/7tICSlswU8qvBqumR3kFgHbfu7vU6qruWWBPug==, + } + engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 } + + jest-cli@29.7.0: + resolution: + { + integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + jest-config@29.7.0: + resolution: + { + integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + peerDependencies: + "@types/node": "*" + ts-node: ">=9.0.0" + peerDependenciesMeta: + "@types/node": + optional: true + ts-node: + optional: true + + jest-config@30.0.5: + resolution: + { + integrity: sha512-aIVh+JNOOpzUgzUnPn5FLtyVnqc3TQHVMupYtyeURSb//iLColiMIR8TxCIDKyx9ZgjKnXGucuW68hCxgbrwmA==, + } + engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 } + peerDependencies: + "@types/node": "*" + esbuild-register: ">=3.4.0" + ts-node: ">=9.0.0" + peerDependenciesMeta: + "@types/node": + optional: true + esbuild-register: + optional: true + ts-node: + optional: true + + jest-diff@29.7.0: + resolution: + { + integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + jest-diff@30.0.5: + resolution: + { + integrity: sha512-1UIqE9PoEKaHcIKvq2vbibrCog4Y8G0zmOxgQUVEiTqwR5hJVMCoDsN1vFvI5JvwD37hjueZ1C4l2FyGnfpE0A==, + } + engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 } + + jest-docblock@29.7.0: + resolution: + { + integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + jest-docblock@30.0.1: + resolution: + { + integrity: sha512-/vF78qn3DYphAaIc3jy4gA7XSAz167n9Bm/wn/1XhTLW7tTBIzXtCJpb/vcmc73NIIeeohCbdL94JasyXUZsGA==, + } + engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 } + + jest-each@29.7.0: + resolution: + { + integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + jest-each@30.0.5: + resolution: + { + integrity: sha512-dKjRsx1uZ96TVyejD3/aAWcNKy6ajMaN531CwWIsrazIqIoXI9TnnpPlkrEYku/8rkS3dh2rbH+kMOyiEIv0xQ==, + } + engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 } + + jest-environment-node@29.7.0: + resolution: + { + integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + jest-environment-node@30.0.5: + resolution: + { + integrity: sha512-ppYizXdLMSvciGsRsMEnv/5EFpvOdXBaXRBzFUDPWrsfmog4kYrOGWXarLllz6AXan6ZAA/kYokgDWuos1IKDA==, + } + engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 } + + jest-get-type@29.6.3: + resolution: + { + integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + jest-haste-map@29.7.0: + resolution: + { + integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + jest-haste-map@30.0.5: + resolution: + { + integrity: sha512-dkmlWNlsTSR0nH3nRfW5BKbqHefLZv0/6LCccG0xFCTWcJu8TuEwG+5Cm75iBfjVoockmO6J35o5gxtFSn5xeg==, + } + engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 } + + jest-leak-detector@29.7.0: + resolution: + { + integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + jest-leak-detector@30.0.5: + resolution: + { + integrity: sha512-3Uxr5uP8jmHMcsOtYMRB/zf1gXN3yUIc+iPorhNETG54gErFIiUhLvyY/OggYpSMOEYqsmRxmuU4ZOoX5jpRFg==, + } + engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 } + + jest-matcher-utils@29.7.0: + resolution: + { + integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + jest-matcher-utils@30.0.5: + resolution: + { + integrity: sha512-uQgGWt7GOrRLP1P7IwNWwK1WAQbq+m//ZY0yXygyfWp0rJlksMSLQAA4wYQC3b6wl3zfnchyTx+k3HZ5aPtCbQ==, + } + engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 } + + jest-message-util@29.7.0: + resolution: + { + integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + jest-message-util@30.0.5: + resolution: + { + integrity: sha512-NAiDOhsK3V7RU0Aa/HnrQo+E4JlbarbmI3q6Pi4KcxicdtjV82gcIUrejOtczChtVQR4kddu1E1EJlW6EN9IyA==, + } + engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 } + + jest-mock@29.7.0: + resolution: + { + integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + jest-mock@30.0.5: + resolution: + { + integrity: sha512-Od7TyasAAQX/6S+QCbN6vZoWOMwlTtzzGuxJku1GhGanAjz9y+QsQkpScDmETvdc9aSXyJ/Op4rhpMYBWW91wQ==, + } + engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 } + + jest-pnp-resolver@1.2.3: + resolution: + { + integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==, + } + engines: { node: ">=6" } + peerDependencies: + jest-resolve: "*" + peerDependenciesMeta: + jest-resolve: + optional: true + + jest-regex-util@29.6.3: + resolution: + { + integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + jest-regex-util@30.0.1: + resolution: + { + integrity: sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==, + } + engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 } + + jest-resolve-dependencies@29.7.0: + resolution: + { + integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + jest-resolve@29.7.0: + resolution: + { + integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + jest-resolve@30.0.5: + resolution: + { + integrity: sha512-d+DjBQ1tIhdz91B79mywH5yYu76bZuE96sSbxj8MkjWVx5WNdt1deEFRONVL4UkKLSrAbMkdhb24XN691yDRHg==, + } + engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 } + + jest-runner@29.7.0: + resolution: + { + integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + jest-runner@30.0.5: + resolution: + { + integrity: sha512-JcCOucZmgp+YuGgLAXHNy7ualBx4wYSgJVWrYMRBnb79j9PD0Jxh0EHvR5Cx/r0Ce+ZBC4hCdz2AzFFLl9hCiw==, + } + engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 } + + jest-runtime@29.7.0: + resolution: + { + integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + jest-runtime@30.0.5: + resolution: + { + integrity: sha512-7oySNDkqpe4xpX5PPiJTe5vEa+Ak/NnNz2bGYZrA1ftG3RL3EFlHaUkA1Cjx+R8IhK0Vg43RML5mJedGTPNz3A==, + } + engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 } + + jest-snapshot@29.7.0: + resolution: + { + integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + jest-snapshot@30.0.5: + resolution: + { + integrity: sha512-T00dWU/Ek3LqTp4+DcW6PraVxjk28WY5Ua/s+3zUKSERZSNyxTqhDXCWKG5p2HAJ+crVQ3WJ2P9YVHpj1tkW+g==, + } + engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 } + + jest-util@29.7.0: + resolution: + { + integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + jest-util@30.0.5: + resolution: + { + integrity: sha512-pvyPWssDZR0FlfMxCBoc0tvM8iUEskaRFALUtGQYzVEAqisAztmy+R8LnU14KT4XA0H/a5HMVTXat1jLne010g==, + } + engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 } + + jest-validate@29.7.0: + resolution: + { + integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + jest-validate@30.0.5: + resolution: + { + integrity: sha512-ouTm6VFHaS2boyl+k4u+Qip4TSH7Uld5tyD8psQ8abGgt2uYYB8VwVfAHWHjHc0NWmGGbwO5h0sCPOGHHevefw==, + } + engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 } + + jest-watcher@29.7.0: + resolution: + { + integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + jest-watcher@30.0.5: + resolution: + { + integrity: sha512-z9slj/0vOwBDBjN3L4z4ZYaA+pG56d6p3kTUhFRYGvXbXMWhXmb/FIxREZCD06DYUwDKKnj2T80+Pb71CQ0KEg==, + } + engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 } + + jest-worker@29.7.0: + resolution: + { + integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + jest-worker@30.0.5: + resolution: + { + integrity: sha512-ojRXsWzEP16NdUuBw/4H/zkZdHOa7MMYCk4E430l+8fELeLg/mqmMlRhjL7UNZvQrDmnovWZV4DxX03fZF48fQ==, + } + engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 } + + jest@29.7.0: + resolution: + { + integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + jiti@2.4.2: + resolution: + { + integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==, + } + hasBin: true + + jiti@2.6.1: + resolution: + { + integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==, + } + hasBin: true + + joycon@3.1.1: + resolution: + { + integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==, + } + engines: { node: ">=10" } + + js-tokens@4.0.0: + resolution: + { + integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, + } + + js-yaml@3.14.1: + resolution: + { + integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==, + } + hasBin: true + + js-yaml@4.1.0: + resolution: + { + integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==, + } + hasBin: true + + jsesc@3.0.2: + resolution: + { + integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==, + } + engines: { node: ">=6" } + hasBin: true + + jsesc@3.1.0: + resolution: + { + integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==, + } + engines: { node: ">=6" } + hasBin: true + + json-buffer@3.0.1: + resolution: + { + integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==, + } + + json-parse-even-better-errors@2.3.1: + resolution: + { + integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==, + } + + json-schema-traverse@0.4.1: + resolution: + { + integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==, + } + + json-schema-traverse@1.0.0: + resolution: + { + integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==, + } + + json-stable-stringify-without-jsonify@1.0.1: + resolution: + { + integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==, + } + + json5@1.0.2: + resolution: + { + integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==, + } + hasBin: true + + json5@2.2.3: + resolution: + { + integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==, + } + engines: { node: ">=6" } + hasBin: true + + jsonc-parser@3.2.0: + resolution: + { + integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==, + } + + jsonfile@4.0.0: + resolution: + { + integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==, + } + + jsonfile@6.1.0: + resolution: + { + integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==, + } + + jsonparse@1.3.1: + resolution: + { + integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==, + } + engines: { "0": node >= 0.2.0 } + + jsx-ast-utils@3.3.5: + resolution: + { + integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==, + } + engines: { node: ">=4.0" } + + keyv@4.5.4: + resolution: + { + integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==, + } + + kleur@3.0.3: + resolution: + { + integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==, + } + engines: { node: ">=6" } + + knip@5.69.1: + resolution: + { + integrity: sha512-duK61dmrk9O3RiPQtDrsWGzxGyNoyf9gQyjXPcvmcecZypdv9x0ixzPdBU4YTPRbwvUaRtNGulHYUyixz2fbKg==, + } + engines: { node: ">=18.18.0" } + hasBin: true + peerDependencies: + "@types/node": ">=18" + typescript: ">=5.0.4 <7" + + language-subtag-registry@0.3.23: + resolution: + { + integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==, + } + + language-tags@1.0.9: + resolution: + { + integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==, + } + engines: { node: ">=0.10" } + + lefthook-darwin-arm64@1.13.6: + resolution: + { + integrity: sha512-m6Lb77VGc84/Qo21Lhq576pEvcgFCnvloEiP02HbAHcIXD0RTLy9u2yAInrixqZeaz13HYtdDaI7OBYAAdVt8A==, + } + cpu: [arm64] + os: [darwin] + + lefthook-darwin-x64@1.13.6: + resolution: + { + integrity: sha512-CoRpdzanu9RK3oXR1vbEJA5LN7iB+c7hP+sONeQJzoOXuq4PNKVtEaN84Gl1BrVtCNLHWFAvCQaZPPiiXSy8qg==, + } + cpu: [x64] + os: [darwin] + + lefthook-freebsd-arm64@1.13.6: + resolution: + { + integrity: sha512-X4A7yfvAJ68CoHTqP+XvQzdKbyd935sYy0bQT6Ajz7FL1g7hFiro8dqHSdPdkwei9hs8hXeV7feyTXbYmfjKQQ==, + } + cpu: [arm64] + os: [freebsd] + + lefthook-freebsd-x64@1.13.6: + resolution: + { + integrity: sha512-ai2m+Sj2kGdY46USfBrCqLKe9GYhzeq01nuyDYCrdGISePeZ6udOlD1k3lQKJGQCHb0bRz4St0r5nKDSh1x/2A==, + } + cpu: [x64] + os: [freebsd] + + lefthook-linux-arm64@1.13.6: + resolution: + { + integrity: sha512-cbo4Wtdq81GTABvikLORJsAWPKAJXE8Q5RXsICFUVznh5PHigS9dFW/4NXywo0+jfFPCT6SYds2zz4tCx6DA0Q==, + } + cpu: [arm64] + os: [linux] + + lefthook-linux-x64@1.13.6: + resolution: + { + integrity: sha512-uJl9vjCIIBTBvMZkemxCE+3zrZHlRO7Oc+nZJ+o9Oea3fu+W82jwX7a7clw8jqNfaeBS+8+ZEQgiMHWCloTsGw==, + } + cpu: [x64] + os: [linux] + + lefthook-openbsd-arm64@1.13.6: + resolution: + { + integrity: sha512-7r153dxrNRQ9ytRs2PmGKKkYdvZYFPre7My7XToSTiRu5jNCq++++eAKVkoyWPduk97dGIA+YWiEr5Noe0TK2A==, + } + cpu: [arm64] + os: [openbsd] + + lefthook-openbsd-x64@1.13.6: + resolution: + { + integrity: sha512-Z+UhLlcg1xrXOidK3aLLpgH7KrwNyWYE3yb7ITYnzJSEV8qXnePtVu8lvMBHs/myzemjBzeIr/U/+ipjclR06g==, + } + cpu: [x64] + os: [openbsd] + + lefthook-windows-arm64@1.13.6: + resolution: + { + integrity: sha512-Uxef6qoDxCmUNQwk8eBvddYJKSBFglfwAY9Y9+NnnmiHpWTjjYiObE9gT2mvGVpEgZRJVAatBXc+Ha5oDD/OgQ==, + } + cpu: [arm64] + os: [win32] + + lefthook-windows-x64@1.13.6: + resolution: + { + integrity: sha512-mOZoM3FQh3o08M8PQ/b3IYuL5oo36D9ehczIw1dAgp1Ly+Tr4fJ96A+4SEJrQuYeRD4mex9bR7Ps56I73sBSZA==, + } + cpu: [x64] + os: [win32] + + lefthook@1.13.6: + resolution: + { + integrity: sha512-ojj4/4IJ29Xn4drd5emqVgilegAPN3Kf0FQM2p/9+lwSTpU+SZ1v4Ig++NF+9MOa99UKY8bElmVrLhnUUNFh5g==, + } + hasBin: true + + leven@3.1.0: + resolution: + { + integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==, + } + engines: { node: ">=6" } + + levn@0.4.1: + resolution: + { + integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==, + } + engines: { node: ">= 0.8.0" } + + lightningcss-android-arm64@1.30.2: + resolution: + { + integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==, + } + engines: { node: ">= 12.0.0" } + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.30.2: + resolution: + { + integrity: sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==, + } + engines: { node: ">= 12.0.0" } + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.30.2: + resolution: + { + integrity: sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==, + } + engines: { node: ">= 12.0.0" } + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.30.2: + resolution: + { + integrity: sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==, + } + engines: { node: ">= 12.0.0" } + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.30.2: + resolution: + { + integrity: sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==, + } + engines: { node: ">= 12.0.0" } + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.30.2: + resolution: + { + integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==, + } + engines: { node: ">= 12.0.0" } + cpu: [arm64] + os: [linux] + + lightningcss-linux-arm64-musl@1.30.2: + resolution: + { + integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==, + } + engines: { node: ">= 12.0.0" } + cpu: [arm64] + os: [linux] + + lightningcss-linux-x64-gnu@1.30.2: + resolution: + { + integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==, + } + engines: { node: ">= 12.0.0" } + cpu: [x64] + os: [linux] + + lightningcss-linux-x64-musl@1.30.2: + resolution: + { + integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==, + } + engines: { node: ">= 12.0.0" } + cpu: [x64] + os: [linux] + + lightningcss-win32-arm64-msvc@1.30.2: + resolution: + { + integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==, + } + engines: { node: ">= 12.0.0" } + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.30.2: + resolution: + { + integrity: sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==, + } + engines: { node: ">= 12.0.0" } + cpu: [x64] + os: [win32] + + lightningcss@1.30.2: + resolution: + { + integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==, + } + engines: { node: ">= 12.0.0" } + + lilconfig@2.1.0: + resolution: + { + integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==, + } + engines: { node: ">=10" } + + lilconfig@3.1.3: + resolution: + { + integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==, + } + engines: { node: ">=14" } + + lines-and-columns@1.2.4: + resolution: + { + integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==, + } + + lines-and-columns@2.0.3: + resolution: + { + integrity: sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + + linkify-it@5.0.0: + resolution: + { + integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==, + } + + load-tsconfig@0.2.5: + resolution: + { + integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + + loader-utils@3.3.1: + resolution: + { + integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==, + } + engines: { node: ">= 12.13.0" } + + locate-path@5.0.0: + resolution: + { + integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==, + } + engines: { node: ">=8" } + + locate-path@6.0.0: + resolution: + { + integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==, + } + engines: { node: ">=10" } + + locate-path@7.2.0: + resolution: + { + integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + + lodash.camelcase@4.3.0: + resolution: + { + integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==, + } + + lodash.capitalize@4.2.1: + resolution: + { + integrity: sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==, + } + + lodash.debounce@4.0.8: + resolution: + { + integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==, + } + + lodash.escaperegexp@4.1.2: + resolution: + { + integrity: sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==, + } + + lodash.isplainobject@4.0.6: + resolution: + { + integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==, + } + + lodash.isstring@4.0.1: + resolution: + { + integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==, + } + + lodash.kebabcase@4.1.1: + resolution: + { + integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==, + } + + lodash.map@4.6.0: + resolution: + { + integrity: sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==, + } + + lodash.memoize@4.1.2: + resolution: + { + integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==, + } + + lodash.merge@4.6.2: + resolution: + { + integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==, + } + + lodash.mergewith@4.6.2: + resolution: + { + integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==, + } + + lodash.snakecase@4.1.1: + resolution: + { + integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==, + } + + lodash.sortby@4.7.0: + resolution: + { + integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==, + } + + lodash.startcase@4.4.0: + resolution: + { + integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==, + } + + lodash.uniq@4.5.0: + resolution: + { + integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==, + } + + lodash.uniqby@4.7.0: + resolution: + { + integrity: sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==, + } + + lodash.upperfirst@4.3.1: + resolution: + { + integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==, + } + + lodash@4.17.21: + resolution: + { + integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==, + } + + log-symbols@4.1.0: + resolution: + { + integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==, + } + engines: { node: ">=10" } + + log-symbols@7.0.1: + resolution: + { + integrity: sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==, + } + engines: { node: ">=18" } + + longest-streak@3.1.0: + resolution: + { + integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==, + } + + longest@2.0.1: + resolution: + { + integrity: sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q==, + } + engines: { node: ">=0.10.0" } + + loose-envify@1.4.0: + resolution: + { + integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==, + } + hasBin: true + + loupe@2.3.7: + resolution: + { + integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==, + } + + lru-cache@10.4.3: + resolution: + { + integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==, + } + + lru-cache@11.1.0: + resolution: + { + integrity: sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==, + } + engines: { node: 20 || >=22 } + + lru-cache@11.2.2: + resolution: + { + integrity: sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==, + } + engines: { node: 20 || >=22 } + + lru-cache@5.1.1: + resolution: + { + integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==, + } + + lru-cache@6.0.0: + resolution: + { + integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==, + } + engines: { node: ">=10" } + + lru-cache@7.18.3: + resolution: + { + integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==, + } + engines: { node: ">=12" } + + lucide-react@0.552.0: + resolution: + { + integrity: sha512-g9WCjmfwqbexSnZE+2cl21PCfXOcqnGeWeMTNAOGEfpPbm/ZF4YIq77Z8qWrxbu660EKuLB4nSLggoKnCb+isw==, + } + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + lunr@2.3.9: + resolution: + { + integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==, + } + + macos-release@3.4.0: + resolution: + { + integrity: sha512-wpGPwyg/xrSp4H4Db4xYSeAr6+cFQGHfspHzDUdYxswDnUW0L5Ov63UuJiSr8NMSpyaChO4u1n0MXUvVPtrN6A==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + + magic-string@0.30.17: + resolution: + { + integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==, + } + + magic-string@0.30.21: + resolution: + { + integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==, + } + + make-dir@3.1.0: + resolution: + { + integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==, + } + engines: { node: ">=8" } + + make-dir@4.0.0: + resolution: + { + integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==, + } + engines: { node: ">=10" } + + make-error@1.3.6: + resolution: + { + integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==, + } + + makeerror@1.0.12: + resolution: + { + integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==, + } + + markdown-extensions@2.0.0: + resolution: + { + integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==, + } + engines: { node: ">=16" } + + markdown-it@14.1.0: + resolution: + { + integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==, + } + hasBin: true + + markdown-table@3.0.4: + resolution: + { + integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==, + } + + math-intrinsics@1.1.0: + resolution: + { + integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==, + } + engines: { node: ">= 0.4" } + + mdast-util-find-and-replace@3.0.2: + resolution: + { + integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==, + } + + mdast-util-from-markdown@2.0.2: + resolution: + { + integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==, + } + + mdast-util-gfm-autolink-literal@2.0.1: + resolution: + { + integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==, + } + + mdast-util-gfm-footnote@2.1.0: + resolution: + { + integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==, + } + + mdast-util-gfm-strikethrough@2.0.0: + resolution: + { + integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==, + } + + mdast-util-gfm-table@2.0.0: + resolution: + { + integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==, + } + + mdast-util-gfm-task-list-item@2.0.0: + resolution: + { + integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==, + } + + mdast-util-gfm@3.1.0: + resolution: + { + integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==, + } + + mdast-util-mdx-expression@2.0.1: + resolution: + { + integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==, + } + + mdast-util-mdx-jsx@3.2.0: + resolution: + { + integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==, + } + + mdast-util-mdx@3.0.0: + resolution: + { + integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==, + } + + mdast-util-mdxjs-esm@2.0.1: + resolution: + { + integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==, + } + + mdast-util-phrasing@4.1.0: + resolution: + { + integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==, + } + + mdast-util-to-hast@13.2.0: + resolution: + { + integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==, + } + + mdast-util-to-markdown@2.1.2: + resolution: + { + integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==, + } + + mdast-util-to-string@4.0.0: + resolution: + { + integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==, + } + + mdn-data@2.0.14: + resolution: + { + integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==, + } + + mdurl@2.0.0: + resolution: + { + integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==, + } + + meow@12.1.1: + resolution: + { + integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==, + } + engines: { node: ">=16.10" } + + meow@13.2.0: + resolution: + { + integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==, + } + engines: { node: ">=18" } + + merge-stream@2.0.0: + resolution: + { + integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==, + } + + merge2@1.4.1: + resolution: + { + integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==, + } + engines: { node: ">= 8" } + + merge@2.1.1: + resolution: + { + integrity: sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==, + } + + micromark-core-commonmark@2.0.3: + resolution: + { + integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==, + } + + micromark-extension-gfm-autolink-literal@2.1.0: + resolution: + { + integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==, + } + + micromark-extension-gfm-footnote@2.1.0: + resolution: + { + integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==, + } + + micromark-extension-gfm-strikethrough@2.1.0: + resolution: + { + integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==, + } + + micromark-extension-gfm-table@2.1.1: + resolution: + { + integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==, + } + + micromark-extension-gfm-tagfilter@2.0.0: + resolution: + { + integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==, + } + + micromark-extension-gfm-task-list-item@2.1.0: + resolution: + { + integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==, + } + + micromark-extension-gfm@3.0.0: + resolution: + { + integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==, + } + + micromark-extension-mdx-expression@3.0.1: + resolution: + { + integrity: sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==, + } + + micromark-extension-mdx-jsx@3.0.2: + resolution: + { + integrity: sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==, + } + + micromark-extension-mdx-md@2.0.0: + resolution: + { + integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==, + } + + micromark-extension-mdxjs-esm@3.0.0: + resolution: + { + integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==, + } + + micromark-extension-mdxjs@3.0.0: + resolution: + { + integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==, + } + + micromark-factory-destination@2.0.1: + resolution: + { + integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==, + } + + micromark-factory-label@2.0.1: + resolution: + { + integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==, + } + + micromark-factory-mdx-expression@2.0.3: + resolution: + { + integrity: sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==, + } + + micromark-factory-space@2.0.1: + resolution: + { + integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==, + } + + micromark-factory-title@2.0.1: + resolution: + { + integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==, + } + + micromark-factory-whitespace@2.0.1: + resolution: + { + integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==, + } + + micromark-util-character@2.1.1: + resolution: + { + integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==, + } + + micromark-util-chunked@2.0.1: + resolution: + { + integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==, + } + + micromark-util-classify-character@2.0.1: + resolution: + { + integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==, + } + + micromark-util-combine-extensions@2.0.1: + resolution: + { + integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==, + } + + micromark-util-decode-numeric-character-reference@2.0.2: + resolution: + { + integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==, + } + + micromark-util-decode-string@2.0.1: + resolution: + { + integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==, + } + + micromark-util-encode@2.0.1: + resolution: + { + integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==, + } + + micromark-util-events-to-acorn@2.0.3: + resolution: + { + integrity: sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==, + } + + micromark-util-html-tag-name@2.0.1: + resolution: + { + integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==, + } + + micromark-util-normalize-identifier@2.0.1: + resolution: + { + integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==, + } + + micromark-util-resolve-all@2.0.1: + resolution: + { + integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==, + } + + micromark-util-sanitize-uri@2.0.1: + resolution: + { + integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==, + } + + micromark-util-subtokenize@2.1.0: + resolution: + { + integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==, + } + + micromark-util-symbol@2.0.1: + resolution: + { + integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==, + } + + micromark-util-types@2.0.2: + resolution: + { + integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==, + } + + micromark@4.0.2: + resolution: + { + integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==, + } + + micromatch@4.0.8: + resolution: + { + integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==, + } + engines: { node: ">=8.6" } + + mime-db@1.52.0: + resolution: + { + integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==, + } + engines: { node: ">= 0.6" } + + mime-db@1.54.0: + resolution: + { + integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==, + } + engines: { node: ">= 0.6" } + + mime-types@2.1.35: + resolution: + { + integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==, + } + engines: { node: ">= 0.6" } + + mime-types@3.0.1: + resolution: + { + integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==, + } + engines: { node: ">= 0.6" } + + mimic-fn@2.1.0: + resolution: + { + integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==, + } + engines: { node: ">=6" } + + mimic-fn@4.0.0: + resolution: + { + integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==, + } + engines: { node: ">=12" } + + mimic-function@5.0.1: + resolution: + { + integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==, + } + engines: { node: ">=18" } + + mimic-response@3.1.0: + resolution: + { + integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==, + } + engines: { node: ">=10" } + + mini-svg-data-uri@1.4.4: + resolution: + { + integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==, + } + hasBin: true + + minimatch@10.0.3: + resolution: + { + integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==, + } + engines: { node: 20 || >=22 } + + minimatch@3.1.2: + resolution: + { + integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==, + } + + minimatch@5.1.6: + resolution: + { + integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==, + } + engines: { node: ">=10" } + + minimatch@9.0.3: + resolution: + { + integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==, + } + engines: { node: ">=16 || 14 >=14.17" } + + minimatch@9.0.5: + resolution: + { + integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==, + } + engines: { node: ">=16 || 14 >=14.17" } + + minimist@1.2.7: + resolution: + { + integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==, + } + + minimist@1.2.8: + resolution: + { + integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==, + } + + minipass@7.1.2: + resolution: + { + integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==, + } + engines: { node: ">=16 || 14 >=14.17" } + + minizlib@3.1.0: + resolution: + { + integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==, + } + engines: { node: ">= 18" } + + mkdirp-classic@0.5.3: + resolution: + { + integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==, + } + + mkdirp@0.5.6: + resolution: + { + integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==, + } + hasBin: true + + mlly@1.7.4: + resolution: + { + integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==, + } + + mocha@10.8.2: + resolution: + { + integrity: sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==, + } + engines: { node: ">= 14.0.0" } + hasBin: true + + ms@2.1.3: + resolution: + { + integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==, + } + + multistream@4.1.0: + resolution: + { + integrity: sha512-J1XDiAmmNpRCBfIWJv+n0ymC4ABcf/Pl+5YvC5B/D2f/2+8PtHvCNxMPKiQcZyi922Hq69J2YOpb1pTywfifyw==, + } + + mute-stream@0.0.8: + resolution: + { + integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==, + } + + mute-stream@2.0.0: + resolution: + { + integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==, + } + engines: { node: ^18.17.0 || >=20.5.0 } + + mz@2.7.0: + resolution: + { + integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==, + } + + nanoid@3.3.11: + resolution: + { + integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==, + } + engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 } + hasBin: true + + napi-build-utils@2.0.0: + resolution: + { + integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==, + } + + napi-postinstall@0.3.2: + resolution: + { + integrity: sha512-tWVJxJHmBWLy69PvO96TZMZDrzmw5KeiZBz3RHmiM2XZ9grBJ2WgMAFVVg25nqp3ZjTFUs2Ftw1JhscL3Teliw==, + } + engines: { node: ^12.20.0 || ^14.18.0 || >=16.0.0 } + hasBin: true + + natural-compare@1.4.0: + resolution: + { + integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==, + } + + negotiator@1.0.0: + resolution: + { + integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==, + } + engines: { node: ">= 0.6" } + + neo-async@2.6.2: + resolution: + { + integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==, + } + + netmask@2.0.2: + resolution: + { + integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==, + } + engines: { node: ">= 0.4.0" } + + new-github-release-url@2.0.0: + resolution: + { + integrity: sha512-NHDDGYudnvRutt/VhKFlX26IotXe1w0cmkDm6JGquh5bz/bDTw0LufSmH/GxTjEdpHEO+bVKFTwdrcGa/9XlKQ==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + + next-themes@0.4.6: + resolution: + { + integrity: sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==, + } + peerDependencies: + react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc + react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc + + next@16.0.1: + resolution: + { + integrity: sha512-e9RLSssZwd35p7/vOa+hoDFggUZIUbZhIUSLZuETCwrCVvxOs87NamoUzT+vbcNAL8Ld9GobBnWOA6SbV/arOw==, + } + engines: { node: ">=20.9.0" } + hasBin: true + peerDependencies: + "@opentelemetry/api": ^1.1.0 + "@playwright/test": ^1.51.1 + babel-plugin-react-compiler: "*" + react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + sass: ^1.3.0 + peerDependenciesMeta: + "@opentelemetry/api": + optional: true + "@playwright/test": + optional: true + babel-plugin-react-compiler: + optional: true + sass: + optional: true + + node-abi@3.85.0: + resolution: + { + integrity: sha512-zsFhmbkAzwhTft6nd3VxcG0cvJsT70rL+BIGHWVq5fi6MwGrHwzqKaxXE+Hl2GmnGItnDKPPkO5/LQqjVkIdFg==, + } + engines: { node: ">=10" } + + node-fetch-native@1.6.7: + resolution: + { + integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==, + } + + node-fetch@2.7.0: + resolution: + { + integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==, + } + engines: { node: 4.x || >=6.0.0 } + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-int64@0.4.0: + resolution: + { + integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==, + } + + node-machine-id@1.1.12: + resolution: + { + integrity: sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==, + } + + node-notifier@10.0.1: + resolution: + { + integrity: sha512-YX7TSyDukOZ0g+gmzjB6abKu+hTGvO8+8+gIFDsRCU2t8fLV/P2unmt+LGFaIa4y64aX98Qksa97rgz4vMNeLQ==, + } + + node-releases@2.0.19: + resolution: + { + integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==, + } + + normalize-package-data@6.0.2: + resolution: + { + integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==, + } + engines: { node: ^16.14.0 || >=18.0.0 } + + normalize-path@3.0.0: + resolution: + { + integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==, + } + engines: { node: ">=0.10.0" } + + normalize-range@0.1.2: + resolution: + { + integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==, + } + engines: { node: ">=0.10.0" } + + normalize-url@6.1.0: + resolution: + { + integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==, + } + engines: { node: ">=10" } + + npm-package-arg@11.0.1: + resolution: + { + integrity: sha512-M7s1BD4NxdAvBKUPqqRW957Xwcl/4Zvo8Aj+ANrzvIPzGJZElrH7Z//rSaec2ORcND6FHHLnZeY8qgTpXDMFQQ==, + } + engines: { node: ^16.14.0 || >=18.0.0 } + + npm-run-path@4.0.1: + resolution: + { + integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==, + } + engines: { node: ">=8" } + + npm-run-path@5.3.0: + resolution: + { + integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + + npm-to-yarn@3.0.1: + resolution: + { + integrity: sha512-tt6PvKu4WyzPwWUzy/hvPFqn+uwXO0K1ZHka8az3NnrhWJDmSqI8ncWq0fkL0k/lmmi5tAC11FXwXuh0rFbt1A==, + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + + nth-check@2.1.1: + resolution: + { + integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==, + } + + nx@21.3.7: + resolution: + { + integrity: sha512-/PwRGg6wH10V8pJHe3RJnizbxjNL0owLARCegup39sk0+m/G/qOfot5KqReWQR4YrtDpreSE7+tRWGCCovyE1A==, + } + hasBin: true + peerDependencies: + "@swc-node/register": ^1.8.0 + "@swc/core": ^1.3.85 + peerDependenciesMeta: + "@swc-node/register": + optional: true + "@swc/core": + optional: true + + nypm@0.6.2: + resolution: + { + integrity: sha512-7eM+hpOtrKrBDCh7Ypu2lJ9Z7PNZBdi/8AT3AX8xoCj43BBVHD0hPSTEvMtkMpfs8FCqBGhxB+uToIQimA111g==, + } + engines: { node: ^14.16.0 || >=16.10.0 } + hasBin: true + + object-assign@4.1.1: + resolution: + { + integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==, + } + engines: { node: ">=0.10.0" } + + object-inspect@1.13.4: + resolution: + { + integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==, + } + engines: { node: ">= 0.4" } + + object-keys@1.1.1: + resolution: + { + integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==, + } + engines: { node: ">= 0.4" } + + object.assign@4.1.7: + resolution: + { + integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==, + } + engines: { node: ">= 0.4" } + + object.entries@1.1.9: + resolution: + { + integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==, + } + engines: { node: ">= 0.4" } + + object.fromentries@2.0.8: + resolution: + { + integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==, + } + engines: { node: ">= 0.4" } + + object.groupby@1.0.3: + resolution: + { + integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==, + } + engines: { node: ">= 0.4" } + + object.values@1.2.1: + resolution: + { + integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==, + } + engines: { node: ">= 0.4" } + + ohash@2.0.11: + resolution: + { + integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==, + } + + once@1.4.0: + resolution: + { + integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==, + } + + onetime@5.1.2: + resolution: + { + integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==, + } + engines: { node: ">=6" } + + onetime@6.0.0: + resolution: + { + integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==, + } + engines: { node: ">=12" } + + onetime@7.0.0: + resolution: + { + integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==, + } + engines: { node: ">=18" } + + oniguruma-parser@0.12.1: + resolution: + { + integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==, + } + + oniguruma-to-es@4.3.3: + resolution: + { + integrity: sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==, + } + + open@10.2.0: + resolution: + { + integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==, + } + engines: { node: ">=18" } + + open@8.4.2: + resolution: + { + integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==, + } + engines: { node: ">=12" } + + optionator@0.9.4: + resolution: + { + integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==, + } + engines: { node: ">= 0.8.0" } + + ora@5.3.0: + resolution: + { + integrity: sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==, + } + engines: { node: ">=10" } + + ora@5.4.1: + resolution: + { + integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==, + } + engines: { node: ">=10" } + + ora@9.0.0: + resolution: + { + integrity: sha512-m0pg2zscbYgWbqRR6ABga5c3sZdEon7bSgjnlXC64kxtxLOyjRcbbUkLj7HFyy/FTD+P2xdBWu8snGhYI0jc4A==, + } + engines: { node: ">=20" } + + os-name@6.1.0: + resolution: + { + integrity: sha512-zBd1G8HkewNd2A8oQ8c6BN/f/c9EId7rSUueOLGu28govmUctXmM+3765GwsByv9nYUdrLqHphXlYIc86saYsg==, + } + engines: { node: ">=18" } + + os-tmpdir@1.0.2: + resolution: + { + integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==, + } + engines: { node: ">=0.10.0" } + + own-keys@1.0.1: + resolution: + { + integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==, + } + engines: { node: ">= 0.4" } + + oxc-resolver@11.13.2: + resolution: + { + integrity: sha512-1SXVyYQ9bqMX3uZo8Px81EG7jhZkO9PvvR5X9roY5TLYVm4ZA7pbPDNlYaDBBeF9U+YO3OeMNoHde52hrcCu8w==, + } + + p-finally@1.0.0: + resolution: + { + integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==, + } + engines: { node: ">=4" } + + p-is-promise@3.0.0: + resolution: + { + integrity: sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==, + } + engines: { node: ">=8" } + + p-limit@2.3.0: + resolution: + { + integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==, + } + engines: { node: ">=6" } + + p-limit@3.1.0: + resolution: + { + integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==, + } + engines: { node: ">=10" } + + p-limit@4.0.0: + resolution: + { + integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + + p-locate@4.1.0: + resolution: + { + integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==, + } + engines: { node: ">=8" } + + p-locate@5.0.0: + resolution: + { + integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==, + } + engines: { node: ">=10" } + + p-locate@6.0.0: + resolution: + { + integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + + p-queue@6.6.2: + resolution: + { + integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==, + } + engines: { node: ">=8" } + + p-timeout@3.2.0: + resolution: + { + integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==, + } + engines: { node: ">=8" } + + p-try@2.2.0: + resolution: + { + integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==, + } + engines: { node: ">=6" } + + pac-proxy-agent@7.2.0: + resolution: + { + integrity: sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==, + } + engines: { node: ">= 14" } + + pac-resolver@7.0.1: + resolution: + { + integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==, + } + engines: { node: ">= 14" } + + package-json-from-dist@1.0.1: + resolution: + { + integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==, + } + + parent-module@1.0.1: + resolution: + { + integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==, + } + engines: { node: ">=6" } + + parse-entities@4.0.2: + resolution: + { + integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==, + } + + parse-json@5.2.0: + resolution: + { + integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==, + } + engines: { node: ">=8" } + + parse-json@8.3.0: + resolution: + { + integrity: sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==, + } + engines: { node: ">=18" } + + parse-passwd@1.0.0: + resolution: + { + integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==, + } + engines: { node: ">=0.10.0" } + + parse-path@7.1.0: + resolution: + { + integrity: sha512-EuCycjZtfPcjWk7KTksnJ5xPMvWGA/6i4zrLYhRG0hGvC3GPU/jGUj3Cy+ZR0v30duV3e23R95T1lE2+lsndSw==, + } + + parse-url@9.2.0: + resolution: + { + integrity: sha512-bCgsFI+GeGWPAvAiUv63ZorMeif3/U0zaXABGJbOWt5OH2KCaPHF6S+0ok4aqM9RuIPGyZdx9tR9l13PsW4AYQ==, + } + engines: { node: ">=14.13.0" } + + patch-console@2.0.0: + resolution: + { + integrity: sha512-0YNdUceMdaQwoKce1gatDScmMo5pu/tfABfnzEqeG0gtTmd7mh/WcwgUjtAeOU7N8nFFlbQBnFK2gXW5fGvmMA==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + + path-exists@4.0.0: + resolution: + { + integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==, + } + engines: { node: ">=8" } + + path-exists@5.0.0: + resolution: + { + integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + + path-is-absolute@1.0.1: + resolution: + { + integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==, + } + engines: { node: ">=0.10.0" } + + path-key@3.1.1: + resolution: + { + integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==, + } + engines: { node: ">=8" } + + path-key@4.0.0: + resolution: + { + integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==, + } + engines: { node: ">=12" } + + path-parse@1.0.7: + resolution: + { + integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==, + } + + path-scurry@1.11.1: + resolution: + { + integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==, + } + engines: { node: ">=16 || 14 >=14.18" } + + path-scurry@2.0.0: + resolution: + { + integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==, + } + engines: { node: 20 || >=22 } + + path-to-regexp@8.3.0: + resolution: + { + integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==, + } + + path-type@4.0.0: + resolution: + { + integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==, + } + engines: { node: ">=8" } + + pathe@2.0.3: + resolution: + { + integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==, + } + + pathval@1.1.1: + resolution: + { + integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==, + } + + perfect-debounce@2.0.0: + resolution: + { + integrity: sha512-fkEH/OBiKrqqI/yIgjR92lMfs2K8105zt/VT6+7eTjNwisrsh47CeIED9z58zI7DfKdH3uHAn25ziRZn3kgAow==, + } + + picocolors@1.1.1: + resolution: + { + integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==, + } + + picomatch@2.3.1: + resolution: + { + integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==, + } + engines: { node: ">=8.6" } + + picomatch@4.0.2: + resolution: + { + integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==, + } + engines: { node: ">=12" } + + picomatch@4.0.3: + resolution: + { + integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==, + } + engines: { node: ">=12" } + + pify@5.0.0: + resolution: + { + integrity: sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==, + } + engines: { node: ">=10" } + + pirates@4.0.7: + resolution: + { + integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==, + } + engines: { node: ">= 6" } + + pkg-dir@4.2.0: + resolution: + { + integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==, + } + engines: { node: ">=8" } + + pkg-types@1.3.1: + resolution: + { + integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==, + } + + pkg-types@2.3.0: + resolution: + { + integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==, + } + + possible-typed-array-names@1.1.0: + resolution: + { + integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==, + } + engines: { node: ">= 0.4" } + + postcss-calc@8.2.4: + resolution: + { + integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==, + } + peerDependencies: + postcss: ^8.2.2 + + postcss-colormin@5.3.1: + resolution: + { + integrity: sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==, + } + engines: { node: ^10 || ^12 || >=14.0 } + peerDependencies: + postcss: ^8.2.15 + + postcss-convert-values@5.1.3: + resolution: + { + integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==, + } + engines: { node: ^10 || ^12 || >=14.0 } + peerDependencies: + postcss: ^8.2.15 + + postcss-discard-comments@5.1.2: + resolution: + { + integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==, + } + engines: { node: ^10 || ^12 || >=14.0 } + peerDependencies: + postcss: ^8.2.15 + + postcss-discard-duplicates@5.1.0: + resolution: + { + integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==, + } + engines: { node: ^10 || ^12 || >=14.0 } + peerDependencies: + postcss: ^8.2.15 + + postcss-discard-empty@5.1.1: + resolution: + { + integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==, + } + engines: { node: ^10 || ^12 || >=14.0 } + peerDependencies: + postcss: ^8.2.15 + + postcss-discard-overridden@5.1.0: + resolution: + { + integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==, + } + engines: { node: ^10 || ^12 || >=14.0 } + peerDependencies: + postcss: ^8.2.15 + + postcss-load-config@3.1.4: + resolution: + { + integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==, + } + engines: { node: ">= 10" } + peerDependencies: + postcss: ">=8.0.9" + ts-node: ">=9.0.0" + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + + postcss-load-config@6.0.1: + resolution: + { + integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==, + } + engines: { node: ">= 18" } + peerDependencies: + jiti: ">=1.21.0" + postcss: ">=8.0.9" + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + jiti: + optional: true + postcss: + optional: true + tsx: + optional: true + yaml: + optional: true + + postcss-merge-longhand@5.1.7: + resolution: + { + integrity: sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==, + } + engines: { node: ^10 || ^12 || >=14.0 } + peerDependencies: + postcss: ^8.2.15 + + postcss-merge-rules@5.1.4: + resolution: + { + integrity: sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==, + } + engines: { node: ^10 || ^12 || >=14.0 } + peerDependencies: + postcss: ^8.2.15 + + postcss-minify-font-values@5.1.0: + resolution: + { + integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==, + } + engines: { node: ^10 || ^12 || >=14.0 } + peerDependencies: + postcss: ^8.2.15 + + postcss-minify-gradients@5.1.1: + resolution: + { + integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==, + } + engines: { node: ^10 || ^12 || >=14.0 } + peerDependencies: + postcss: ^8.2.15 + + postcss-minify-params@5.1.4: + resolution: + { + integrity: sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==, + } + engines: { node: ^10 || ^12 || >=14.0 } + peerDependencies: + postcss: ^8.2.15 + + postcss-minify-selectors@5.2.1: + resolution: + { + integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==, + } + engines: { node: ^10 || ^12 || >=14.0 } + peerDependencies: + postcss: ^8.2.15 + + postcss-modules-extract-imports@3.1.0: + resolution: + { + integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==, + } + engines: { node: ^10 || ^12 || >= 14 } + peerDependencies: + postcss: ^8.1.0 + + postcss-modules-local-by-default@4.2.0: + resolution: + { + integrity: sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==, + } + engines: { node: ^10 || ^12 || >= 14 } + peerDependencies: + postcss: ^8.1.0 + + postcss-modules-scope@3.2.1: + resolution: + { + integrity: sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==, + } + engines: { node: ^10 || ^12 || >= 14 } + peerDependencies: + postcss: ^8.1.0 + + postcss-modules-values@4.0.0: + resolution: + { + integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==, + } + engines: { node: ^10 || ^12 || >= 14 } + peerDependencies: + postcss: ^8.1.0 + + postcss-modules@4.3.1: + resolution: + { + integrity: sha512-ItUhSUxBBdNamkT3KzIZwYNNRFKmkJrofvC2nWab3CPKhYBQ1f27XXh1PAPE27Psx58jeelPsxWB/+og+KEH0Q==, + } + peerDependencies: + postcss: ^8.0.0 + + postcss-normalize-charset@5.1.0: + resolution: + { + integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==, + } + engines: { node: ^10 || ^12 || >=14.0 } + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-display-values@5.1.0: + resolution: + { + integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==, + } + engines: { node: ^10 || ^12 || >=14.0 } + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-positions@5.1.1: + resolution: + { + integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==, + } + engines: { node: ^10 || ^12 || >=14.0 } + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-repeat-style@5.1.1: + resolution: + { + integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==, + } + engines: { node: ^10 || ^12 || >=14.0 } + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-string@5.1.0: + resolution: + { + integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==, + } + engines: { node: ^10 || ^12 || >=14.0 } + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-timing-functions@5.1.0: + resolution: + { + integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==, + } + engines: { node: ^10 || ^12 || >=14.0 } + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-unicode@5.1.1: + resolution: + { + integrity: sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==, + } + engines: { node: ^10 || ^12 || >=14.0 } + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-url@5.1.0: + resolution: + { + integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==, + } + engines: { node: ^10 || ^12 || >=14.0 } + peerDependencies: + postcss: ^8.2.15 + + postcss-normalize-whitespace@5.1.1: + resolution: + { + integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==, + } + engines: { node: ^10 || ^12 || >=14.0 } + peerDependencies: + postcss: ^8.2.15 + + postcss-ordered-values@5.1.3: + resolution: + { + integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==, + } + engines: { node: ^10 || ^12 || >=14.0 } + peerDependencies: + postcss: ^8.2.15 + + postcss-reduce-initial@5.1.2: + resolution: + { + integrity: sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==, + } + engines: { node: ^10 || ^12 || >=14.0 } + peerDependencies: + postcss: ^8.2.15 + + postcss-reduce-transforms@5.1.0: + resolution: + { + integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==, + } + engines: { node: ^10 || ^12 || >=14.0 } + peerDependencies: + postcss: ^8.2.15 + + postcss-selector-parser@6.1.2: + resolution: + { + integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==, + } + engines: { node: ">=4" } + + postcss-selector-parser@7.1.0: + resolution: + { + integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==, + } + engines: { node: ">=4" } + + postcss-svgo@5.1.0: + resolution: + { + integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==, + } + engines: { node: ^10 || ^12 || >=14.0 } + peerDependencies: + postcss: ^8.2.15 + + postcss-unique-selectors@5.1.1: + resolution: + { + integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==, + } + engines: { node: ^10 || ^12 || >=14.0 } + peerDependencies: + postcss: ^8.2.15 + + postcss-value-parser@4.2.0: + resolution: + { + integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==, + } + + postcss@8.4.31: + resolution: + { + integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==, + } + engines: { node: ^10 || ^12 || >=14 } + + postcss@8.5.6: + resolution: + { + integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==, + } + engines: { node: ^10 || ^12 || >=14 } + + prebuild-install@7.1.3: + resolution: + { + integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==, + } + engines: { node: ">=10" } + hasBin: true + + prelude-ls@1.2.1: + resolution: + { + integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==, + } + engines: { node: ">= 0.8.0" } + + prettier-linter-helpers@1.0.0: + resolution: + { + integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==, + } + engines: { node: ">=6.0.0" } + + prettier@3.6.2: + resolution: + { + integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==, + } + engines: { node: ">=14" } + hasBin: true + + pretty-format@29.7.0: + resolution: + { + integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==, + } + engines: { node: ^14.15.0 || ^16.10.0 || >=18.0.0 } + + pretty-format@30.0.5: + resolution: + { + integrity: sha512-D1tKtYvByrBkFLe2wHJl2bwMJIiT8rW+XA+TiataH79/FszLQMrpGEvzUVkzPau7OCO0Qnrhpe87PqtOAIB8Yw==, + } + engines: { node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0 } + + proc-log@3.0.0: + resolution: + { + integrity: sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==, + } + engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 } + + process-nextick-args@2.0.1: + resolution: + { + integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==, + } + + progress@2.0.3: + resolution: + { + integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==, + } + engines: { node: ">=0.4.0" } + + promise.series@0.2.0: + resolution: + { + integrity: sha512-VWQJyU2bcDTgZw8kpfBpB/ejZASlCrzwz5f2hjb/zlujOEB4oeiAhHygAWq8ubsX2GVkD4kCU5V2dwOTaCY5EQ==, + } + engines: { node: ">=0.12" } + + prompts@2.4.2: + resolution: + { + integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==, + } + engines: { node: ">= 6" } + + prop-types@15.8.1: + resolution: + { + integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==, + } + + property-information@7.1.0: + resolution: + { + integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==, + } + + protocols@2.0.2: + resolution: + { + integrity: sha512-hHVTzba3wboROl0/aWRRG9dMytgH6ow//STBZh43l/wQgmMhYhOFi0EHWAPtoCz9IAUymsyP0TSBHkhgMEGNnQ==, + } + + proxy-agent@6.5.0: + resolution: + { + integrity: sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==, + } + engines: { node: ">= 14" } + + proxy-from-env@1.1.0: + resolution: + { + integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==, + } + + pump@3.0.3: + resolution: + { + integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==, + } + + punycode.js@2.3.1: + resolution: + { + integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==, + } + engines: { node: ">=6" } + + punycode@2.3.1: + resolution: + { + integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==, + } + engines: { node: ">=6" } + + pure-rand@6.1.0: + resolution: + { + integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==, + } + + pure-rand@7.0.1: + resolution: + { + integrity: sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==, + } + + queue-microtask@1.2.3: + resolution: + { + integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==, + } + + randombytes@2.1.0: + resolution: + { + integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==, + } + + rc9@2.1.2: + resolution: + { + integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==, + } + + rc@1.2.8: + resolution: + { + integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==, + } + hasBin: true + + react-devtools-core@5.3.2: + resolution: + { + integrity: sha512-crr9HkVrDiJ0A4zot89oS0Cgv0Oa4OG1Em4jit3P3ZxZSKPMYyMjfwMqgcJna9o625g8oN87rBm8SWWrSTBZxg==, + } + + react-dom@19.2.0: + resolution: + { + integrity: sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==, + } + peerDependencies: + react: ^19.2.0 + + react-is@16.13.1: + resolution: + { + integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==, + } + + react-is@18.3.1: + resolution: + { + integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==, + } + + react-medium-image-zoom@5.4.0: + resolution: + { + integrity: sha512-BsE+EnFVQzFIlyuuQrZ9iTwyKpKkqdFZV1ImEQN573QPqGrIUuNni7aF+sZwDcxlsuOMayCr6oO/PZR/yJnbRg==, + } + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + react-reconciler@0.29.2: + resolution: + { + integrity: sha512-zZQqIiYgDCTP/f1N/mAR10nJGrPD2ZR+jDSEsKWJHYC7Cm2wodlwbR3upZRdC3cjIjSlTLNVyO7Iu0Yy7t2AYg==, + } + engines: { node: ">=0.10.0" } + peerDependencies: + react: ^18.3.1 + + react-remove-scroll-bar@2.3.8: + resolution: + { + integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==, + } + engines: { node: ">=10" } + peerDependencies: + "@types/react": "*" + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + + react-remove-scroll@2.7.1: + resolution: + { + integrity: sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==, + } + engines: { node: ">=10" } + peerDependencies: + "@types/react": "*" + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + + react-style-singleton@2.2.3: + resolution: + { + integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==, + } + engines: { node: ">=10" } + peerDependencies: + "@types/react": "*" + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + + react@18.3.1: + resolution: + { + integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==, + } + engines: { node: ">=0.10.0" } + + react@19.2.0: + resolution: + { + integrity: sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==, + } + engines: { node: ">=0.10.0" } + + read-package-up@11.0.0: + resolution: + { + integrity: sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==, + } + engines: { node: ">=18" } + + read-pkg@9.0.1: + resolution: + { + integrity: sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==, + } + engines: { node: ">=18" } + + readable-stream@2.3.8: + resolution: + { + integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==, + } + + readable-stream@3.6.2: + resolution: + { + integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==, + } + engines: { node: ">= 6" } + + readdirp@3.6.0: + resolution: + { + integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==, + } + engines: { node: ">=8.10.0" } + + readdirp@4.1.2: + resolution: + { + integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==, + } + engines: { node: ">= 14.18.0" } + + recma-build-jsx@1.0.0: + resolution: + { + integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==, + } + + recma-jsx@1.0.1: + resolution: + { + integrity: sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==, + } + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + recma-parse@1.0.0: + resolution: + { + integrity: sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==, + } + + recma-stringify@1.0.0: + resolution: + { + integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==, + } + + reflect.getprototypeof@1.0.10: + resolution: + { + integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==, + } + engines: { node: ">= 0.4" } + + regenerate-unicode-properties@10.2.0: + resolution: + { + integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==, + } + engines: { node: ">=4" } + + regenerate@1.4.2: + resolution: + { + integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==, + } + + regex-recursion@6.0.2: + resolution: + { + integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==, + } + + regex-utilities@2.3.0: + resolution: + { + integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==, + } + + regex@6.0.1: + resolution: + { + integrity: sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==, + } + + regexp.prototype.flags@1.5.4: + resolution: + { + integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==, + } + engines: { node: ">= 0.4" } + + regexpu-core@6.2.0: + resolution: + { + integrity: sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==, + } + engines: { node: ">=4" } + + regjsgen@0.8.0: + resolution: + { + integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==, + } + + regjsparser@0.12.0: + resolution: + { + integrity: sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==, + } + hasBin: true + + rehype-recma@1.0.0: + resolution: + { + integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==, + } + + release-it@19.0.6: + resolution: + { + integrity: sha512-XTCNZ2mV9wjASQmc2bcQjA+ImJiFMijbFSyQE6lDmP1Plq17acjYaoY5FmJb5Lh/Nv4UDwfRlKQMv1DvHFKf1g==, + } + engines: { node: ^20.12.0 || >=22.0.0 } + hasBin: true + + remark-gfm@4.0.1: + resolution: + { + integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==, + } + + remark-mdx@3.1.1: + resolution: + { + integrity: sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==, + } + + remark-parse@11.0.0: + resolution: + { + integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==, + } + + remark-rehype@11.1.2: + resolution: + { + integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==, + } + + remark-stringify@11.0.0: + resolution: + { + integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==, + } + + remark@15.0.1: + resolution: + { + integrity: sha512-Eht5w30ruCXgFmxVUSlNWQ9iiimq07URKeFS3hNc8cUWy1llX4KDWfyEDZRycMc+znsN9Ux5/tJ/BFdgdOwA3A==, + } + + require-directory@2.1.1: + resolution: + { + integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==, + } + engines: { node: ">=0.10.0" } + + require-from-string@2.0.2: + resolution: + { + integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==, + } + engines: { node: ">=0.10.0" } + + resolve-cwd@3.0.0: + resolution: + { + integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==, + } + engines: { node: ">=8" } + + resolve-dir@1.0.1: + resolution: + { + integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==, + } + engines: { node: ">=0.10.0" } + + resolve-from@4.0.0: + resolution: + { + integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==, + } + engines: { node: ">=4" } + + resolve-from@5.0.0: + resolution: + { + integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==, + } + engines: { node: ">=8" } + + resolve-pkg-maps@1.0.0: + resolution: + { + integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==, + } + + resolve.exports@2.0.3: + resolution: + { + integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==, + } + engines: { node: ">=10" } + + resolve@1.22.10: + resolution: + { + integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==, + } + engines: { node: ">= 0.4" } + hasBin: true + + resolve@2.0.0-next.5: + resolution: + { + integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==, + } + hasBin: true + + restore-cursor@3.1.0: + resolution: + { + integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==, + } + engines: { node: ">=8" } + + restore-cursor@4.0.0: + resolution: + { + integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + + restore-cursor@5.1.0: + resolution: + { + integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==, + } + engines: { node: ">=18" } + + retry@0.13.1: + resolution: + { + integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==, + } + engines: { node: ">= 4" } + + reusify@1.1.0: + resolution: + { + integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==, + } + engines: { iojs: ">=1.0.0", node: ">=0.10.0" } + + right-pad@1.1.1: + resolution: + { + integrity: sha512-eHfYN/4Pds8z4/LnF1LtZSQvWcU9HHU2A7iYtARpFO2fQqt2TP1vHCRTdkO9si7Zg3glo2qh1vgAmyDBO5FGRQ==, + } + engines: { node: ">= 0.10" } + deprecated: Use String.prototype.padEnd() instead + + rimraf@6.0.1: + resolution: + { + integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==, + } + engines: { node: 20 || >=22 } + hasBin: true + + rollup-plugin-copy@3.5.0: + resolution: + { + integrity: sha512-wI8D5dvYovRMx/YYKtUNt3Yxaw4ORC9xo6Gt9t22kveWz1enG9QrhVlagzwrxSC455xD1dHMKhIJkbsQ7d48BA==, + } + engines: { node: ">=8.3" } + + rollup-plugin-postcss@4.0.2: + resolution: + { + integrity: sha512-05EaY6zvZdmvPUDi3uCcAQoESDcYnv8ogJJQRp6V5kZ6J6P7uAVJlrTZcaaA20wTH527YTnKfkAoPxWI/jPp4w==, + } + engines: { node: ">=10" } + peerDependencies: + postcss: 8.x + + rollup-plugin-typescript2@0.36.0: + resolution: + { + integrity: sha512-NB2CSQDxSe9+Oe2ahZbf+B4bh7pHwjV5L+RSYpCu7Q5ROuN94F9b6ioWwKfz3ueL3KTtmX4o2MUH2cgHDIEUsw==, + } + peerDependencies: + rollup: ">=1.26.3" + typescript: ">=2.4.0" + + rollup-pluginutils@2.8.2: + resolution: + { + integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==, + } + + rollup@4.46.0: + resolution: + { + integrity: sha512-ONmkT3Ud3IfW15nl7l4qAZko5/2iZ5ALVBDh02ZSZ5IGVLJSYkRcRa3iB58VyEIyoofs9m2xdVrm+lTi97+3pw==, + } + engines: { node: ">=18.0.0", npm: ">=8.0.0" } + hasBin: true + + run-applescript@7.1.0: + resolution: + { + integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==, + } + engines: { node: ">=18" } + + run-async@2.4.1: + resolution: + { + integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==, + } + engines: { node: ">=0.12.0" } + + run-async@4.0.6: + resolution: + { + integrity: sha512-IoDlSLTs3Yq593mb3ZoKWKXMNu3UpObxhgA/Xuid5p4bbfi2jdY1Hj0m1K+0/tEuQTxIGMhQDqGjKb7RuxGpAQ==, + } + engines: { node: ">=0.12.0" } + + run-parallel@1.2.0: + resolution: + { + integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==, + } + + rxjs@7.8.2: + resolution: + { + integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==, + } + + safe-array-concat@1.1.3: + resolution: + { + integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==, + } + engines: { node: ">=0.4" } + + safe-buffer@5.1.2: + resolution: + { + integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==, + } + + safe-buffer@5.2.1: + resolution: + { + integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==, + } + + safe-identifier@0.4.2: + resolution: + { + integrity: sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==, + } + + safe-push-apply@1.0.0: + resolution: + { + integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==, + } + engines: { node: ">= 0.4" } + + safe-regex-test@1.1.0: + resolution: + { + integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==, + } + engines: { node: ">= 0.4" } + + safer-buffer@2.1.2: + resolution: + { + integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==, + } + + scheduler@0.23.2: + resolution: + { + integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==, + } + + scheduler@0.27.0: + resolution: + { + integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==, + } + + scroll-into-view-if-needed@3.1.0: + resolution: + { + integrity: sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==, + } + + semver@6.3.1: + resolution: + { + integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==, + } + hasBin: true + + semver@7.5.4: + resolution: + { + integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==, + } + engines: { node: ">=10" } + hasBin: true + + semver@7.7.2: + resolution: + { + integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==, + } + engines: { node: ">=10" } + hasBin: true + + semver@7.7.3: + resolution: + { + integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==, + } + engines: { node: ">=10" } + hasBin: true + + serialize-javascript@6.0.2: + resolution: + { + integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==, + } + + set-function-length@1.2.2: + resolution: + { + integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==, + } + engines: { node: ">= 0.4" } + + set-function-name@2.0.2: + resolution: + { + integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==, + } + engines: { node: ">= 0.4" } + + set-proto@1.0.0: + resolution: + { + integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==, + } + engines: { node: ">= 0.4" } + + sharp@0.34.5: + resolution: + { + integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==, + } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + + shebang-command@2.0.0: + resolution: + { + integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==, + } + engines: { node: ">=8" } + + shebang-regex@3.0.0: + resolution: + { + integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==, + } + engines: { node: ">=8" } + + shell-quote@1.8.3: + resolution: + { + integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==, + } + engines: { node: ">= 0.4" } + + shellwords@0.1.1: + resolution: + { + integrity: sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==, + } + + shiki@3.15.0: + resolution: + { + integrity: sha512-kLdkY6iV3dYbtPwS9KXU7mjfmDm25f5m0IPNFnaXO7TBPcvbUOY72PYXSuSqDzwp+vlH/d7MXpHlKO/x+QoLXw==, + } + + side-channel-list@1.0.0: + resolution: + { + integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==, + } + engines: { node: ">= 0.4" } + + side-channel-map@1.0.1: + resolution: + { + integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==, + } + engines: { node: ">= 0.4" } + + side-channel-weakmap@1.0.2: + resolution: + { + integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==, + } + engines: { node: ">= 0.4" } + + side-channel@1.1.0: + resolution: + { + integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==, + } + engines: { node: ">= 0.4" } + + signal-exit@3.0.7: + resolution: + { + integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==, + } + + signal-exit@4.1.0: + resolution: + { + integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==, + } + engines: { node: ">=14" } + + simple-concat@1.0.1: + resolution: + { + integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==, + } + + simple-get@4.0.1: + resolution: + { + integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==, + } + + sisteransi@1.0.5: + resolution: + { + integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==, + } + + slash@3.0.0: + resolution: + { + integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==, + } + engines: { node: ">=8" } + + slice-ansi@5.0.0: + resolution: + { + integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==, + } + engines: { node: ">=12" } + + slice-ansi@6.0.0: + resolution: + { + integrity: sha512-6bn4hRfkTvDfUoEQYkERg0BVF1D0vrX9HEkMl08uDiNWvVvjylLHvZFZWkDo6wjT8tUctbYl1nCOuE66ZTaUtA==, + } + engines: { node: ">=14.16" } + + smart-buffer@4.2.0: + resolution: + { + integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==, + } + engines: { node: ">= 6.0.0", npm: ">= 3.0.0" } + + smol-toml@1.5.2: + resolution: + { + integrity: sha512-QlaZEqcAH3/RtNyet1IPIYPsEWAaYyXXv1Krsi+1L/QHppjX4Ifm8MQsBISz9vE8cHicIq3clogsheili5vhaQ==, + } + engines: { node: ">= 18" } + + socks-proxy-agent@8.0.5: + resolution: + { + integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==, + } + engines: { node: ">= 14" } + + socks@2.8.7: + resolution: + { + integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==, + } + engines: { node: ">= 10.0.0", npm: ">= 3.0.0" } + + source-map-js@1.2.1: + resolution: + { + integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==, + } + engines: { node: ">=0.10.0" } + + source-map-support@0.5.13: + resolution: + { + integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==, + } + + source-map-support@0.5.19: + resolution: + { + integrity: sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==, + } + + source-map@0.6.1: + resolution: + { + integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, + } + engines: { node: ">=0.10.0" } + + source-map@0.7.6: + resolution: + { + integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==, + } + engines: { node: ">= 12" } + + source-map@0.8.0-beta.0: + resolution: + { + integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==, + } + engines: { node: ">= 8" } + deprecated: The work that was done in this beta branch won't be included in future versions + + space-separated-tokens@2.0.2: + resolution: + { + integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==, + } + + spdx-correct@3.2.0: + resolution: + { + integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==, + } + + spdx-exceptions@2.5.0: + resolution: + { + integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==, + } + + spdx-expression-parse@3.0.1: + resolution: + { + integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==, + } + + spdx-license-ids@3.0.22: + resolution: + { + integrity: sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==, + } + + split2@4.2.0: + resolution: + { + integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==, + } + engines: { node: ">= 10.x" } + + sprintf-js@1.0.3: + resolution: + { + integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==, + } + + stable-hash@0.0.5: + resolution: + { + integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==, + } + + stable@0.1.8: + resolution: + { + integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==, + } + deprecated: "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility" + + stack-utils@2.0.6: + resolution: + { + integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==, + } + engines: { node: ">=10" } + + stdin-discarder@0.2.2: + resolution: + { + integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==, + } + engines: { node: ">=18" } + + stop-iteration-iterator@1.1.0: + resolution: + { + integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==, + } + engines: { node: ">= 0.4" } + + stream-meter@1.0.4: + resolution: + { + integrity: sha512-4sOEtrbgFotXwnEuzzsQBYEV1elAeFSO8rSGeTwabuX1RRn/kEq9JVH7I0MRBhKVRR0sJkr0M0QCH7yOLf9fhQ==, + } + + streamx@2.23.0: + resolution: + { + integrity: sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==, + } + + string-hash@1.1.3: + resolution: + { + integrity: sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==, + } + + string-length@4.0.2: + resolution: + { + integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==, + } + engines: { node: ">=10" } + + string-width@4.2.3: + resolution: + { + integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==, + } + engines: { node: ">=8" } + + string-width@5.1.2: + resolution: + { + integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==, + } + engines: { node: ">=12" } + + string-width@8.1.0: + resolution: + { + integrity: sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==, + } + engines: { node: ">=20" } + + string.prototype.includes@2.0.1: + resolution: + { + integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==, + } + engines: { node: ">= 0.4" } + + string.prototype.matchall@4.0.12: + resolution: + { + integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==, + } + engines: { node: ">= 0.4" } + + string.prototype.repeat@1.0.0: + resolution: + { + integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==, + } + + string.prototype.trim@1.2.10: + resolution: + { + integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==, + } + engines: { node: ">= 0.4" } + + string.prototype.trimend@1.0.9: + resolution: + { + integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==, + } + engines: { node: ">= 0.4" } + + string.prototype.trimstart@1.0.8: + resolution: + { + integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==, + } + engines: { node: ">= 0.4" } + + string_decoder@1.1.1: + resolution: + { + integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==, + } + + string_decoder@1.3.0: + resolution: + { + integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==, + } + + stringify-entities@4.0.4: + resolution: + { + integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==, + } + + strip-ansi@6.0.1: + resolution: + { + integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==, + } + engines: { node: ">=8" } + + strip-ansi@7.1.0: + resolution: + { + integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==, + } + engines: { node: ">=12" } + + strip-ansi@7.1.2: + resolution: + { + integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==, + } + engines: { node: ">=12" } + + strip-bom@3.0.0: + resolution: + { + integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==, + } + engines: { node: ">=4" } + + strip-bom@4.0.0: + resolution: + { + integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==, + } + engines: { node: ">=8" } + + strip-final-newline@2.0.0: + resolution: + { + integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==, + } + engines: { node: ">=6" } + + strip-final-newline@3.0.0: + resolution: + { + integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==, + } + engines: { node: ">=12" } + + strip-json-comments@2.0.1: + resolution: + { + integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==, + } + engines: { node: ">=0.10.0" } + + strip-json-comments@3.1.1: + resolution: + { + integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==, + } + engines: { node: ">=8" } + + strip-json-comments@5.0.2: + resolution: + { + integrity: sha512-4X2FR3UwhNUE9G49aIsJW5hRRR3GXGTBTZRMfv568O60ojM8HcWjV/VxAxCDW3SUND33O6ZY66ZuRcdkj73q2g==, + } + engines: { node: ">=14.16" } + + style-inject@0.3.0: + resolution: + { + integrity: sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw==, + } + + style-to-js@1.1.19: + resolution: + { + integrity: sha512-Ev+SgeqiNGT1ufsXyVC5RrJRXdrkRJ1Gol9Qw7Pb72YCKJXrBvP0ckZhBeVSrw2m06DJpei2528uIpjMb4TsoQ==, + } + + style-to-object@1.0.12: + resolution: + { + integrity: sha512-ddJqYnoT4t97QvN2C95bCgt+m7AAgXjVnkk/jxAfmp7EAB8nnqqZYEbMd3em7/vEomDb2LAQKAy1RFfv41mdNw==, + } + + styled-jsx@5.1.6: + resolution: + { + integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==, + } + engines: { node: ">= 12.0.0" } + peerDependencies: + "@babel/core": "*" + babel-plugin-macros: "*" + react: ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" + peerDependenciesMeta: + "@babel/core": + optional: true + babel-plugin-macros: + optional: true + + stylehacks@5.1.1: + resolution: + { + integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==, + } + engines: { node: ^10 || ^12 || >=14.0 } + peerDependencies: + postcss: ^8.2.15 + + sucrase@3.35.0: + resolution: + { + integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==, + } + engines: { node: ">=16 || 14 >=14.17" } + hasBin: true + + supports-color@5.5.0: + resolution: + { + integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==, + } + engines: { node: ">=4" } + + supports-color@7.2.0: + resolution: + { + integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==, + } + engines: { node: ">=8" } + + supports-color@8.1.1: + resolution: + { + integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==, + } + engines: { node: ">=10" } + + supports-preserve-symlinks-flag@1.0.0: + resolution: + { + integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==, + } + engines: { node: ">= 0.4" } + + svgo@2.8.0: + resolution: + { + integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==, + } + engines: { node: ">=10.13.0" } + hasBin: true + + synckit@0.11.11: + resolution: + { + integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==, + } + engines: { node: ^14.18.0 || >=16.0.0 } + + tailwind-merge@3.4.0: + resolution: + { + integrity: sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==, + } + + tailwindcss@4.1.17: + resolution: + { + integrity: sha512-j9Ee2YjuQqYT9bbRTfTZht9W/ytp5H+jJpZKiYdP/bpnXARAuELt9ofP0lPnmHjbga7SNQIxdTAXCmtKVYjN+Q==, + } + + tapable@2.3.0: + resolution: + { + integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==, + } + engines: { node: ">=6" } + + tar-fs@2.1.4: + resolution: + { + integrity: sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==, + } + + tar-fs@3.1.1: + resolution: + { + integrity: sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==, + } + + tar-stream@2.2.0: + resolution: + { + integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==, + } + engines: { node: ">=6" } + + tar-stream@3.1.7: + resolution: + { + integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==, + } + + tar@7.5.2: + resolution: + { + integrity: sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==, + } + engines: { node: ">=18" } + + test-exclude@6.0.0: + resolution: + { + integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==, + } + engines: { node: ">=8" } + + test-exclude@7.0.1: + resolution: + { + integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==, + } + engines: { node: ">=18" } + + text-decoder@1.2.3: + resolution: + { + integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==, + } + + text-extensions@2.4.0: + resolution: + { + integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==, + } + engines: { node: ">=8" } + + thenify-all@1.6.0: + resolution: + { + integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==, + } + engines: { node: ">=0.8" } + + thenify@3.3.1: + resolution: + { + integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==, + } + + through@2.3.8: + resolution: + { + integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==, + } + + tinyexec@0.3.2: + resolution: + { + integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==, + } + + tinyexec@1.0.2: + resolution: + { + integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==, + } + engines: { node: ">=18" } + + tinyglobby@0.2.14: + resolution: + { + integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==, + } + engines: { node: ">=12.0.0" } + + tinyglobby@0.2.15: + resolution: + { + integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==, + } + engines: { node: ">=12.0.0" } + + tmp@0.0.33: + resolution: + { + integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==, + } + engines: { node: ">=0.6.0" } + + tmp@0.2.3: + resolution: + { + integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==, + } + engines: { node: ">=14.14" } + + tmpl@1.0.5: + resolution: + { + integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==, + } + + to-regex-range@5.0.1: + resolution: + { + integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, + } + engines: { node: ">=8.0" } + + tr46@0.0.3: + resolution: + { + integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==, + } + + tr46@1.0.1: + resolution: + { + integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==, + } + + tree-kill@1.2.2: + resolution: + { + integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==, + } + hasBin: true + + trim-lines@3.0.1: + resolution: + { + integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==, + } + + trough@2.2.0: + resolution: + { + integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==, + } + + ts-api-utils@2.1.0: + resolution: + { + integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==, + } + engines: { node: ">=18.12" } + peerDependencies: + typescript: ">=4.8.4" + + ts-interface-checker@0.1.13: + resolution: + { + integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==, + } + + ts-mocha@10.1.0: + resolution: + { + integrity: sha512-T0C0Xm3/WqCuF2tpa0GNGESTBoKZaiqdUP8guNv4ZY316AFXlyidnrzQ1LUrCT0Wb1i3J0zFTgOh/55Un44WdA==, + } + engines: { node: ">= 6.X.X" } + hasBin: true + peerDependencies: + mocha: ^3.X.X || ^4.X.X || ^5.X.X || ^6.X.X || ^7.X.X || ^8.X.X || ^9.X.X || ^10.X.X || ^11.X.X + + ts-node@10.9.2: + resolution: + { + integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==, + } + hasBin: true + peerDependencies: + "@swc/core": ">=1.2.50" + "@swc/wasm": ">=1.2.50" + "@types/node": "*" + typescript: ">=2.7" + peerDependenciesMeta: + "@swc/core": + optional: true + "@swc/wasm": + optional: true + + ts-node@7.0.1: + resolution: + { + integrity: sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==, + } + engines: { node: ">=4.2.0" } + hasBin: true + + tsconfig-paths@3.15.0: + resolution: + { + integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==, + } + + tsconfig-paths@4.2.0: + resolution: + { + integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==, + } + engines: { node: ">=6" } + + tslib@2.8.1: + resolution: + { + integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==, + } + + tsup@8.5.0: + resolution: + { + integrity: sha512-VmBp77lWNQq6PfuMqCHD3xWl22vEoWsKajkF8t+yMBawlUS8JzEI+vOVMeuNZIuMML8qXRizFKi9oD5glKQVcQ==, + } + engines: { node: ">=18" } + hasBin: true + peerDependencies: + "@microsoft/api-extractor": ^7.36.0 + "@swc/core": ^1 + postcss: ^8.4.12 + typescript: ">=4.5.0" + peerDependenciesMeta: + "@microsoft/api-extractor": + optional: true + "@swc/core": + optional: true + postcss: + optional: true + typescript: + optional: true + + tunnel-agent@0.6.0: + resolution: + { + integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==, + } + + type-check@0.4.0: + resolution: + { + integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==, + } + engines: { node: ">= 0.8.0" } + + type-detect@4.0.8: + resolution: + { + integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==, + } + engines: { node: ">=4" } + + type-detect@4.1.0: + resolution: + { + integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==, + } + engines: { node: ">=4" } + + type-fest@0.12.0: + resolution: + { + integrity: sha512-53RyidyjvkGpnWPMF9bQgFtWp+Sl8O2Rp13VavmJgfAP9WWG6q6TkrKU8iyJdnwnfgHI6k2hTlgqH4aSdjoTbg==, + } + engines: { node: ">=10" } + + type-fest@0.21.3: + resolution: + { + integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==, + } + engines: { node: ">=10" } + + type-fest@2.19.0: + resolution: + { + integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==, + } + engines: { node: ">=12.20" } + + type-fest@4.41.0: + resolution: + { + integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==, + } + engines: { node: ">=16" } + + typed-array-buffer@1.0.3: + resolution: + { + integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==, + } + engines: { node: ">= 0.4" } + + typed-array-byte-length@1.0.3: + resolution: + { + integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==, + } + engines: { node: ">= 0.4" } + + typed-array-byte-offset@1.0.4: + resolution: + { + integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==, + } + engines: { node: ">= 0.4" } + + typed-array-length@1.0.7: + resolution: + { + integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==, + } + engines: { node: ">= 0.4" } + + typedarray@0.0.6: + resolution: + { + integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==, + } + + typedoc-plugin-markdown@4.9.0: + resolution: + { + integrity: sha512-9Uu4WR9L7ZBgAl60N/h+jqmPxxvnC9nQAlnnO/OujtG2ubjnKTVUFY1XDhcMY+pCqlX3N2HsQM2QTYZIU9tJuw==, + } + engines: { node: ">= 18" } + peerDependencies: + typedoc: 0.28.x + + typedoc@0.28.14: + resolution: + { + integrity: sha512-ftJYPvpVfQvFzpkoSfHLkJybdA/geDJ8BGQt/ZnkkhnBYoYW6lBgPQXu6vqLxO4X75dA55hX8Af847H5KXlEFA==, + } + engines: { node: ">= 18", pnpm: ">= 10" } + hasBin: true + peerDependencies: + typescript: 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x || 5.9.x + + typescript-eslint@8.46.4: + resolution: + { + integrity: sha512-KALyxkpYV5Ix7UhvjTwJXZv76VWsHG+NjNlt/z+a17SOQSiOcBdUXdbJdyXi7RPxrBFECtFOiPwUJQusJuCqrg==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <6.0.0" + + typescript@5.8.3: + resolution: + { + integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==, + } + engines: { node: ">=14.17" } + hasBin: true + + typescript@5.9.3: + resolution: + { + integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==, + } + engines: { node: ">=14.17" } + hasBin: true + + uc.micro@2.1.0: + resolution: + { + integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==, + } + + ufo@1.6.1: + resolution: + { + integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==, + } + + uglify-js@3.19.3: + resolution: + { + integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==, + } + engines: { node: ">=0.8.0" } + hasBin: true + + unbox-primitive@1.1.0: + resolution: + { + integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==, + } + engines: { node: ">= 0.4" } + + undici-types@5.26.5: + resolution: + { + integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==, + } + + undici-types@7.16.0: + resolution: + { + integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==, + } + + undici@6.21.3: + resolution: + { + integrity: sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw==, + } + engines: { node: ">=18.17" } + + unicode-canonical-property-names-ecmascript@2.0.1: + resolution: + { + integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==, + } + engines: { node: ">=4" } + + unicode-match-property-ecmascript@2.0.0: + resolution: + { + integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==, + } + engines: { node: ">=4" } + + unicode-match-property-value-ecmascript@2.2.0: + resolution: + { + integrity: sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==, + } + engines: { node: ">=4" } + + unicode-property-aliases-ecmascript@2.1.0: + resolution: + { + integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==, + } + engines: { node: ">=4" } + + unicorn-magic@0.1.0: + resolution: + { + integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==, + } + engines: { node: ">=18" } + + unified@11.0.5: + resolution: + { + integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==, + } + + unist-util-is@6.0.1: + resolution: + { + integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==, + } + + unist-util-position-from-estree@2.0.0: + resolution: + { + integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==, + } + + unist-util-position@5.0.0: + resolution: + { + integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==, + } + + unist-util-remove-position@5.0.0: + resolution: + { + integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==, + } + + unist-util-stringify-position@4.0.0: + resolution: + { + integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==, + } + + unist-util-visit-parents@6.0.2: + resolution: + { + integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==, + } + + unist-util-visit@5.0.0: + resolution: + { + integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==, + } + + universal-user-agent@7.0.3: + resolution: + { + integrity: sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==, + } + + universalify@0.1.2: + resolution: + { + integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==, + } + engines: { node: ">= 4.0.0" } + + universalify@2.0.1: + resolution: + { + integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==, + } + engines: { node: ">= 10.0.0" } + + unrs-resolver@1.11.1: + resolution: + { + integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==, + } + + unzipper@0.12.3: + resolution: + { + integrity: sha512-PZ8hTS+AqcGxsaQntl3IRBw65QrBI6lxzqDEL7IAo/XCEqRTKGfOX56Vea5TH9SZczRVxuzk1re04z/YjuYCJA==, + } + + update-browserslist-db@1.1.3: + resolution: + { + integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==, + } + hasBin: true + peerDependencies: + browserslist: ">= 4.21.0" + + uri-js@4.4.1: + resolution: + { + integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==, + } + + url-join@5.0.0: + resolution: + { + integrity: sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + + use-callback-ref@1.3.3: + resolution: + { + integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==, + } + engines: { node: ">=10" } + peerDependencies: + "@types/react": "*" + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + + use-sidecar@1.1.3: + resolution: + { + integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==, + } + engines: { node: ">=10" } + peerDependencies: + "@types/react": "*" + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + "@types/react": + optional: true + + util-deprecate@1.0.2: + resolution: + { + integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==, + } + + uuid@8.3.2: + resolution: + { + integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==, + } + hasBin: true + + v8-compile-cache-lib@3.0.1: + resolution: + { + integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==, + } + + v8-to-istanbul@9.3.0: + resolution: + { + integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==, + } + engines: { node: ">=10.12.0" } + + validate-npm-package-license@3.0.4: + resolution: + { + integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==, + } + + validate-npm-package-name@5.0.1: + resolution: + { + integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==, + } + engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 } + + vfile-message@4.0.3: + resolution: + { + integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==, + } + + vfile@6.0.3: + resolution: + { + integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==, + } + + walk-up-path@4.0.0: + resolution: + { + integrity: sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A==, + } + engines: { node: 20 || >=22 } + + walker@1.0.8: + resolution: + { + integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==, + } + + wcwidth@1.0.1: + resolution: + { + integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==, + } + + webidl-conversions@3.0.1: + resolution: + { + integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==, + } + + webidl-conversions@4.0.2: + resolution: + { + integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==, + } + + whatwg-url@5.0.0: + resolution: + { + integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==, + } + + whatwg-url@7.1.0: + resolution: + { + integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==, + } + + which-boxed-primitive@1.1.1: + resolution: + { + integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==, + } + engines: { node: ">= 0.4" } + + which-builtin-type@1.2.1: + resolution: + { + integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==, + } + engines: { node: ">= 0.4" } + + which-collection@1.0.2: + resolution: + { + integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==, + } + engines: { node: ">= 0.4" } + + which-typed-array@1.1.19: + resolution: + { + integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==, + } + engines: { node: ">= 0.4" } + + which@1.3.1: + resolution: + { + integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==, + } + hasBin: true + + which@2.0.2: + resolution: + { + integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==, + } + engines: { node: ">= 8" } + hasBin: true + + widest-line@4.0.1: + resolution: + { + integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==, + } + engines: { node: ">=12" } + + wildcard-match@5.1.4: + resolution: + { + integrity: sha512-wldeCaczs8XXq7hj+5d/F38JE2r7EXgb6WQDM84RVwxy81T/sxB5e9+uZLK9Q9oNz1mlvjut+QtvgaOQFPVq/g==, + } + + windows-release@6.1.0: + resolution: + { + integrity: sha512-1lOb3qdzw6OFmOzoY0nauhLG72TpWtb5qgYPiSh/62rjc1XidBSDio2qw0pwHh17VINF217ebIkZJdFLZFn9SA==, + } + engines: { node: ">=18" } + + word-wrap@1.2.5: + resolution: + { + integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==, + } + engines: { node: ">=0.10.0" } + + wordwrap@1.0.0: + resolution: + { + integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==, + } + + workerpool@6.5.1: + resolution: + { + integrity: sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==, + } + + wrap-ansi@6.2.0: + resolution: + { + integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==, + } + engines: { node: ">=8" } + + wrap-ansi@7.0.0: + resolution: + { + integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==, + } + engines: { node: ">=10" } + + wrap-ansi@8.1.0: + resolution: + { + integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==, + } + engines: { node: ">=12" } + + wrappy@1.0.2: + resolution: + { + integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==, + } + + write-file-atomic@4.0.2: + resolution: + { + integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==, + } + engines: { node: ^12.13.0 || ^14.15.0 || >=16.0.0 } + + write-file-atomic@5.0.1: + resolution: + { + integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==, + } + engines: { node: ^14.17.0 || ^16.13.0 || >=18.0.0 } + + ws@7.5.10: + resolution: + { + integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==, + } + engines: { node: ">=8.3.0" } + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.18.3: + resolution: + { + integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==, + } + engines: { node: ">=10.0.0" } + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + wsl-utils@0.1.0: + resolution: + { + integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==, + } + engines: { node: ">=18" } + + y18n@5.0.8: + resolution: + { + integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==, + } + engines: { node: ">=10" } + + yallist@3.1.1: + resolution: + { + integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==, + } + + yallist@4.0.0: + resolution: + { + integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==, + } + + yallist@5.0.0: + resolution: + { + integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==, + } + engines: { node: ">=18" } + + yaml@1.10.2: + resolution: + { + integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==, + } + engines: { node: ">= 6" } + + yaml@2.8.0: + resolution: + { + integrity: sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==, + } + engines: { node: ">= 14.6" } + hasBin: true + + yaml@2.8.1: + resolution: + { + integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==, + } + engines: { node: ">= 14.6" } + hasBin: true + + yargs-parser@20.2.9: + resolution: + { + integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==, + } + engines: { node: ">=10" } + + yargs-parser@21.1.1: + resolution: + { + integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==, + } + engines: { node: ">=12" } + + yargs-unparser@2.0.0: + resolution: + { + integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==, + } + engines: { node: ">=10" } + + yargs@16.2.0: + resolution: + { + integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==, + } + engines: { node: ">=10" } + + yargs@17.7.2: + resolution: + { + integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==, + } + engines: { node: ">=12" } + + yn@2.0.0: + resolution: + { + integrity: sha512-uTv8J/wiWTgUTg+9vLTi//leUl5vDQS6uii/emeTb2ssY7vl6QWf2fFbIIGjnhjvbdKlU0ed7QPgY1htTC86jQ==, + } + engines: { node: ">=4" } + + yn@3.1.1: + resolution: + { + integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==, + } + engines: { node: ">=6" } + + yocto-queue@0.1.0: + resolution: + { + integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==, + } + engines: { node: ">=10" } + + yocto-queue@1.2.2: + resolution: + { + integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==, + } + engines: { node: ">=12.20" } + + yoctocolors-cjs@2.1.3: + resolution: + { + integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==, + } + engines: { node: ">=18" } + + yoctocolors@2.1.2: + resolution: + { + integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==, + } + engines: { node: ">=18" } + + yoga-wasm-web@0.3.3: + resolution: + { + integrity: sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA==, + } + + zod-validation-error@4.0.2: + resolution: + { + integrity: sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==, + } + engines: { node: ">=18.0.0" } + peerDependencies: + zod: ^3.25.0 || ^4.0.0 + + zod@4.1.12: + resolution: + { + integrity: sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==, + } + + zwitch@2.0.4: + resolution: + { + integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==, + } + +snapshots: + "@alcalzone/ansi-tokenize@0.1.3": + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 4.0.0 + + "@alloc/quick-lru@5.2.0": {} + + "@ampproject/remapping@2.3.0": + dependencies: + "@jridgewell/gen-mapping": 0.3.12 + "@jridgewell/trace-mapping": 0.3.29 + + "@babel/code-frame@7.27.1": + dependencies: + "@babel/helper-validator-identifier": 7.27.1 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + "@babel/compat-data@7.28.0": {} + + "@babel/core@7.28.0": + dependencies: + "@ampproject/remapping": 2.3.0 + "@babel/code-frame": 7.27.1 + "@babel/generator": 7.28.0 + "@babel/helper-compilation-targets": 7.27.2 + "@babel/helper-module-transforms": 7.27.3(@babel/core@7.28.0) + "@babel/helpers": 7.28.2 + "@babel/parser": 7.28.0 + "@babel/template": 7.27.2 + "@babel/traverse": 7.28.0 + "@babel/types": 7.28.2 + convert-source-map: 2.0.0 + debug: 4.4.1(supports-color@8.1.1) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + "@babel/generator@7.28.0": + dependencies: + "@babel/parser": 7.28.0 + "@babel/types": 7.28.2 + "@jridgewell/gen-mapping": 0.3.12 + "@jridgewell/trace-mapping": 0.3.29 + jsesc: 3.1.0 + + "@babel/helper-annotate-as-pure@7.27.3": + dependencies: + "@babel/types": 7.28.2 + + "@babel/helper-compilation-targets@7.27.2": + dependencies: + "@babel/compat-data": 7.28.0 + "@babel/helper-validator-option": 7.27.1 + browserslist: 4.25.1 + lru-cache: 5.1.1 + semver: 6.3.1 + + "@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-annotate-as-pure": 7.27.3 + "@babel/helper-member-expression-to-functions": 7.27.1 + "@babel/helper-optimise-call-expression": 7.27.1 + "@babel/helper-replace-supers": 7.27.1(@babel/core@7.28.0) + "@babel/helper-skip-transparent-expression-wrappers": 7.27.1 + "@babel/traverse": 7.28.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + "@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-annotate-as-pure": 7.27.3 + regexpu-core: 6.2.0 + semver: 6.3.1 + + "@babel/helper-define-polyfill-provider@0.6.5(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-compilation-targets": 7.27.2 + "@babel/helper-plugin-utils": 7.27.1 + debug: 4.4.1(supports-color@8.1.1) + lodash.debounce: 4.0.8 + resolve: 1.22.10 + transitivePeerDependencies: + - supports-color + + "@babel/helper-globals@7.28.0": {} + + "@babel/helper-member-expression-to-functions@7.27.1": + dependencies: + "@babel/traverse": 7.28.0 + "@babel/types": 7.28.2 + transitivePeerDependencies: + - supports-color + + "@babel/helper-module-imports@7.27.1": + dependencies: + "@babel/traverse": 7.28.0 + "@babel/types": 7.28.2 + transitivePeerDependencies: + - supports-color + + "@babel/helper-module-transforms@7.27.3(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-module-imports": 7.27.1 + "@babel/helper-validator-identifier": 7.27.1 + "@babel/traverse": 7.28.0 + transitivePeerDependencies: + - supports-color + + "@babel/helper-optimise-call-expression@7.27.1": + dependencies: + "@babel/types": 7.28.2 + + "@babel/helper-plugin-utils@7.27.1": {} + + "@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-annotate-as-pure": 7.27.3 + "@babel/helper-wrap-function": 7.27.1 + "@babel/traverse": 7.28.0 + transitivePeerDependencies: + - supports-color + + "@babel/helper-replace-supers@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-member-expression-to-functions": 7.27.1 + "@babel/helper-optimise-call-expression": 7.27.1 + "@babel/traverse": 7.28.0 + transitivePeerDependencies: + - supports-color + + "@babel/helper-skip-transparent-expression-wrappers@7.27.1": + dependencies: + "@babel/traverse": 7.28.0 + "@babel/types": 7.28.2 + transitivePeerDependencies: + - supports-color + + "@babel/helper-string-parser@7.27.1": {} + + "@babel/helper-validator-identifier@7.27.1": {} + + "@babel/helper-validator-option@7.27.1": {} + + "@babel/helper-wrap-function@7.27.1": + dependencies: + "@babel/template": 7.27.2 + "@babel/traverse": 7.28.0 + "@babel/types": 7.28.2 + transitivePeerDependencies: + - supports-color + + "@babel/helpers@7.28.2": + dependencies: + "@babel/template": 7.27.2 + "@babel/types": 7.28.2 + + "@babel/parser@7.28.0": + dependencies: + "@babel/types": 7.28.2 + + "@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + "@babel/traverse": 7.28.0 + transitivePeerDependencies: + - supports-color + + "@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + "@babel/helper-skip-transparent-expression-wrappers": 7.27.1 + "@babel/plugin-transform-optional-chaining": 7.27.1(@babel/core@7.28.0) + transitivePeerDependencies: + - supports-color + + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + "@babel/traverse": 7.28.0 + transitivePeerDependencies: + - supports-color + + "@babel/plugin-proposal-decorators@7.28.0(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-create-class-features-plugin": 7.27.1(@babel/core@7.28.0) + "@babel/helper-plugin-utils": 7.27.1 + "@babel/plugin-syntax-decorators": 7.27.1(@babel/core@7.28.0) + transitivePeerDependencies: + - supports-color + + "@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + + "@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-syntax-decorators@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-create-regexp-features-plugin": 7.27.1(@babel/core@7.28.0) + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-transform-async-generator-functions@7.28.0(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + "@babel/helper-remap-async-to-generator": 7.27.1(@babel/core@7.28.0) + "@babel/traverse": 7.28.0 + transitivePeerDependencies: + - supports-color + + "@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-module-imports": 7.27.1 + "@babel/helper-plugin-utils": 7.27.1 + "@babel/helper-remap-async-to-generator": 7.27.1(@babel/core@7.28.0) + transitivePeerDependencies: + - supports-color + + "@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-transform-block-scoping@7.28.0(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-create-class-features-plugin": 7.27.1(@babel/core@7.28.0) + "@babel/helper-plugin-utils": 7.27.1 + transitivePeerDependencies: + - supports-color + + "@babel/plugin-transform-class-static-block@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-create-class-features-plugin": 7.27.1(@babel/core@7.28.0) + "@babel/helper-plugin-utils": 7.27.1 + transitivePeerDependencies: + - supports-color + + "@babel/plugin-transform-classes@7.28.0(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-annotate-as-pure": 7.27.3 + "@babel/helper-compilation-targets": 7.27.2 + "@babel/helper-globals": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + "@babel/helper-replace-supers": 7.27.1(@babel/core@7.28.0) + "@babel/traverse": 7.28.0 + transitivePeerDependencies: + - supports-color + + "@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + "@babel/template": 7.27.2 + + "@babel/plugin-transform-destructuring@7.28.0(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + "@babel/traverse": 7.28.0 + transitivePeerDependencies: + - supports-color + + "@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-create-regexp-features-plugin": 7.27.1(@babel/core@7.28.0) + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-create-regexp-features-plugin": 7.27.1(@babel/core@7.28.0) + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-transform-explicit-resource-management@7.28.0(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + "@babel/plugin-transform-destructuring": 7.28.0(@babel/core@7.28.0) + transitivePeerDependencies: + - supports-color + + "@babel/plugin-transform-exponentiation-operator@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-transform-for-of@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + "@babel/helper-skip-transparent-expression-wrappers": 7.27.1 + transitivePeerDependencies: + - supports-color + + "@babel/plugin-transform-function-name@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-compilation-targets": 7.27.2 + "@babel/helper-plugin-utils": 7.27.1 + "@babel/traverse": 7.28.0 + transitivePeerDependencies: + - supports-color + + "@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-transform-literals@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-transform-logical-assignment-operators@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-module-transforms": 7.27.3(@babel/core@7.28.0) + "@babel/helper-plugin-utils": 7.27.1 + transitivePeerDependencies: + - supports-color + + "@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-module-transforms": 7.27.3(@babel/core@7.28.0) + "@babel/helper-plugin-utils": 7.27.1 + transitivePeerDependencies: + - supports-color + + "@babel/plugin-transform-modules-systemjs@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-module-transforms": 7.27.3(@babel/core@7.28.0) + "@babel/helper-plugin-utils": 7.27.1 + "@babel/helper-validator-identifier": 7.27.1 + "@babel/traverse": 7.28.0 + transitivePeerDependencies: + - supports-color + + "@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-module-transforms": 7.27.3(@babel/core@7.28.0) + "@babel/helper-plugin-utils": 7.27.1 + transitivePeerDependencies: + - supports-color + + "@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-create-regexp-features-plugin": 7.27.1(@babel/core@7.28.0) + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-transform-new-target@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-transform-object-rest-spread@7.28.0(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-compilation-targets": 7.27.2 + "@babel/helper-plugin-utils": 7.27.1 + "@babel/plugin-transform-destructuring": 7.28.0(@babel/core@7.28.0) + "@babel/plugin-transform-parameters": 7.27.7(@babel/core@7.28.0) + "@babel/traverse": 7.28.0 + transitivePeerDependencies: + - supports-color + + "@babel/plugin-transform-object-super@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + "@babel/helper-replace-supers": 7.27.1(@babel/core@7.28.0) + transitivePeerDependencies: + - supports-color + + "@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-transform-optional-chaining@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + "@babel/helper-skip-transparent-expression-wrappers": 7.27.1 + transitivePeerDependencies: + - supports-color + + "@babel/plugin-transform-parameters@7.27.7(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-create-class-features-plugin": 7.27.1(@babel/core@7.28.0) + "@babel/helper-plugin-utils": 7.27.1 + transitivePeerDependencies: + - supports-color + + "@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-annotate-as-pure": 7.27.3 + "@babel/helper-create-class-features-plugin": 7.27.1(@babel/core@7.28.0) + "@babel/helper-plugin-utils": 7.27.1 + transitivePeerDependencies: + - supports-color + + "@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-transform-regenerator@7.28.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-create-regexp-features-plugin": 7.27.1(@babel/core@7.28.0) + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-transform-runtime@7.28.0(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-module-imports": 7.27.1 + "@babel/helper-plugin-utils": 7.27.1 + babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.28.0) + babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.28.0) + babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.28.0) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + "@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-transform-spread@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + "@babel/helper-skip-transparent-expression-wrappers": 7.27.1 + transitivePeerDependencies: + - supports-color + + "@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-transform-typescript@7.28.0(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-annotate-as-pure": 7.27.3 + "@babel/helper-create-class-features-plugin": 7.27.1(@babel/core@7.28.0) + "@babel/helper-plugin-utils": 7.27.1 + "@babel/helper-skip-transparent-expression-wrappers": 7.27.1 + "@babel/plugin-syntax-typescript": 7.27.1(@babel/core@7.28.0) + transitivePeerDependencies: + - supports-color + + "@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-create-regexp-features-plugin": 7.27.1(@babel/core@7.28.0) + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-create-regexp-features-plugin": 7.27.1(@babel/core@7.28.0) + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-create-regexp-features-plugin": 7.27.1(@babel/core@7.28.0) + "@babel/helper-plugin-utils": 7.27.1 + + "@babel/preset-env@7.28.0(@babel/core@7.28.0)": + dependencies: + "@babel/compat-data": 7.28.0 + "@babel/core": 7.28.0 + "@babel/helper-compilation-targets": 7.27.2 + "@babel/helper-plugin-utils": 7.27.1 + "@babel/helper-validator-option": 7.27.1 + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-bugfix-safari-class-field-initializer-scope": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-proposal-private-property-in-object": 7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.0) + "@babel/plugin-syntax-import-assertions": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-syntax-import-attributes": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-syntax-unicode-sets-regex": 7.18.6(@babel/core@7.28.0) + "@babel/plugin-transform-arrow-functions": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-transform-async-generator-functions": 7.28.0(@babel/core@7.28.0) + "@babel/plugin-transform-async-to-generator": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-transform-block-scoped-functions": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-transform-block-scoping": 7.28.0(@babel/core@7.28.0) + "@babel/plugin-transform-class-properties": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-transform-class-static-block": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-transform-classes": 7.28.0(@babel/core@7.28.0) + "@babel/plugin-transform-computed-properties": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-transform-destructuring": 7.28.0(@babel/core@7.28.0) + "@babel/plugin-transform-dotall-regex": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-transform-duplicate-keys": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-transform-dynamic-import": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-transform-explicit-resource-management": 7.28.0(@babel/core@7.28.0) + "@babel/plugin-transform-exponentiation-operator": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-transform-export-namespace-from": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-transform-for-of": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-transform-function-name": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-transform-json-strings": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-transform-literals": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-transform-logical-assignment-operators": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-transform-member-expression-literals": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-transform-modules-amd": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-transform-modules-commonjs": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-transform-modules-systemjs": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-transform-modules-umd": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-transform-named-capturing-groups-regex": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-transform-new-target": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-transform-nullish-coalescing-operator": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-transform-numeric-separator": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-transform-object-rest-spread": 7.28.0(@babel/core@7.28.0) + "@babel/plugin-transform-object-super": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-transform-optional-catch-binding": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-transform-optional-chaining": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-transform-parameters": 7.27.7(@babel/core@7.28.0) + "@babel/plugin-transform-private-methods": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-transform-private-property-in-object": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-transform-property-literals": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-transform-regenerator": 7.28.1(@babel/core@7.28.0) + "@babel/plugin-transform-regexp-modifiers": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-transform-reserved-words": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-transform-shorthand-properties": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-transform-spread": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-transform-sticky-regex": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-transform-template-literals": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-transform-typeof-symbol": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-transform-unicode-escapes": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-transform-unicode-property-regex": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-transform-unicode-regex": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-transform-unicode-sets-regex": 7.27.1(@babel/core@7.28.0) + "@babel/preset-modules": 0.1.6-no-external-plugins(@babel/core@7.28.0) + babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.28.0) + babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.28.0) + babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.28.0) + core-js-compat: 3.44.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + "@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + "@babel/types": 7.28.2 + esutils: 2.0.3 + + "@babel/preset-typescript@7.27.1(@babel/core@7.28.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + "@babel/helper-validator-option": 7.27.1 + "@babel/plugin-syntax-jsx": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-transform-modules-commonjs": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-transform-typescript": 7.28.0(@babel/core@7.28.0) + transitivePeerDependencies: + - supports-color + + "@babel/runtime@7.28.2": {} + + "@babel/template@7.27.2": + dependencies: + "@babel/code-frame": 7.27.1 + "@babel/parser": 7.28.0 + "@babel/types": 7.28.2 + + "@babel/traverse@7.28.0": + dependencies: + "@babel/code-frame": 7.27.1 + "@babel/generator": 7.28.0 + "@babel/helper-globals": 7.28.0 + "@babel/parser": 7.28.0 + "@babel/template": 7.27.2 + "@babel/types": 7.28.2 + debug: 4.4.1(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + "@babel/types@7.28.2": + dependencies: + "@babel/helper-string-parser": 7.27.1 + "@babel/helper-validator-identifier": 7.27.1 + + "@bcoe/v8-coverage@0.2.3": {} + + "@bcoe/v8-coverage@1.0.2": {} + + "@commitlint/cli@19.8.1(@types/node@18.19.120)(typescript@5.9.3)": + dependencies: + "@commitlint/format": 19.8.1 + "@commitlint/lint": 19.8.1 + "@commitlint/load": 19.8.1(@types/node@18.19.120)(typescript@5.9.3) + "@commitlint/read": 19.8.1 + "@commitlint/types": 19.8.1 + tinyexec: 1.0.2 + yargs: 17.7.2 + transitivePeerDependencies: + - "@types/node" + - typescript + + "@commitlint/config-conventional@19.8.1": + dependencies: + "@commitlint/types": 19.8.1 + conventional-changelog-conventionalcommits: 7.0.2 + + "@commitlint/config-validator@19.8.1": + dependencies: + "@commitlint/types": 19.8.1 + ajv: 8.17.1 + + "@commitlint/ensure@19.8.1": + dependencies: + "@commitlint/types": 19.8.1 + lodash.camelcase: 4.3.0 + lodash.kebabcase: 4.1.1 + lodash.snakecase: 4.1.1 + lodash.startcase: 4.4.0 + lodash.upperfirst: 4.3.1 + + "@commitlint/execute-rule@19.8.1": {} + + "@commitlint/format@19.8.1": + dependencies: + "@commitlint/types": 19.8.1 + chalk: 5.6.2 + + "@commitlint/is-ignored@19.8.1": + dependencies: + "@commitlint/types": 19.8.1 + semver: 7.7.3 + + "@commitlint/lint@19.8.1": + dependencies: + "@commitlint/is-ignored": 19.8.1 + "@commitlint/parse": 19.8.1 + "@commitlint/rules": 19.8.1 + "@commitlint/types": 19.8.1 + + "@commitlint/load@19.8.1(@types/node@18.19.120)(typescript@5.9.3)": + dependencies: + "@commitlint/config-validator": 19.8.1 + "@commitlint/execute-rule": 19.8.1 + "@commitlint/resolve-extends": 19.8.1 + "@commitlint/types": 19.8.1 + chalk: 5.6.2 + cosmiconfig: 9.0.0(typescript@5.9.3) + cosmiconfig-typescript-loader: 6.1.0(@types/node@18.19.120)(cosmiconfig@9.0.0(typescript@5.9.3))(typescript@5.9.3) + lodash.isplainobject: 4.0.6 + lodash.merge: 4.6.2 + lodash.uniq: 4.5.0 + transitivePeerDependencies: + - "@types/node" + - typescript + + "@commitlint/message@19.8.1": {} + + "@commitlint/parse@19.8.1": + dependencies: + "@commitlint/types": 19.8.1 + conventional-changelog-angular: 7.0.0 + conventional-commits-parser: 5.0.0 + + "@commitlint/read@19.8.1": + dependencies: + "@commitlint/top-level": 19.8.1 + "@commitlint/types": 19.8.1 + git-raw-commits: 4.0.0 + minimist: 1.2.8 + tinyexec: 1.0.2 + + "@commitlint/resolve-extends@19.8.1": + dependencies: + "@commitlint/config-validator": 19.8.1 + "@commitlint/types": 19.8.1 + global-directory: 4.0.1 + import-meta-resolve: 4.1.0 + lodash.mergewith: 4.6.2 + resolve-from: 5.0.0 + + "@commitlint/rules@19.8.1": + dependencies: + "@commitlint/ensure": 19.8.1 + "@commitlint/message": 19.8.1 + "@commitlint/to-lines": 19.8.1 + "@commitlint/types": 19.8.1 + + "@commitlint/to-lines@19.8.1": {} + + "@commitlint/top-level@19.8.1": + dependencies: + find-up: 7.0.0 + + "@commitlint/types@19.8.1": + dependencies: + "@types/conventional-commits-parser": 5.0.1 + chalk: 5.4.1 + + "@conventional-changelog/git-client@1.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.2.1)": + dependencies: + "@types/semver": 7.7.1 + semver: 7.7.3 + optionalDependencies: + conventional-commits-filter: 5.0.0 + conventional-commits-parser: 6.2.1 + + "@cspotcode/source-map-support@0.8.1": + dependencies: + "@jridgewell/trace-mapping": 0.3.9 + + "@emnapi/core@1.4.3": + dependencies: + "@emnapi/wasi-threads": 1.0.2 + tslib: 2.8.1 + + "@emnapi/core@1.7.1": + dependencies: + "@emnapi/wasi-threads": 1.1.0 + tslib: 2.8.1 + optional: true + + "@emnapi/runtime@1.4.3": + dependencies: + tslib: 2.8.1 + + "@emnapi/runtime@1.7.1": + dependencies: + tslib: 2.8.1 + optional: true + + "@emnapi/wasi-threads@1.0.2": + dependencies: + tslib: 2.8.1 + + "@emnapi/wasi-threads@1.1.0": + dependencies: + tslib: 2.8.1 + optional: true + + "@esbuild/aix-ppc64@0.21.5": + optional: true + + "@esbuild/aix-ppc64@0.25.12": + optional: true + + "@esbuild/aix-ppc64@0.25.8": + optional: true + + "@esbuild/android-arm64@0.21.5": + optional: true + + "@esbuild/android-arm64@0.25.12": + optional: true + + "@esbuild/android-arm64@0.25.8": + optional: true + + "@esbuild/android-arm@0.21.5": + optional: true + + "@esbuild/android-arm@0.25.12": + optional: true + + "@esbuild/android-arm@0.25.8": + optional: true + + "@esbuild/android-x64@0.21.5": + optional: true + + "@esbuild/android-x64@0.25.12": + optional: true + + "@esbuild/android-x64@0.25.8": + optional: true + + "@esbuild/darwin-arm64@0.21.5": + optional: true + + "@esbuild/darwin-arm64@0.25.12": + optional: true + + "@esbuild/darwin-arm64@0.25.8": + optional: true + + "@esbuild/darwin-x64@0.21.5": + optional: true + + "@esbuild/darwin-x64@0.25.12": + optional: true + + "@esbuild/darwin-x64@0.25.8": + optional: true + + "@esbuild/freebsd-arm64@0.21.5": + optional: true + + "@esbuild/freebsd-arm64@0.25.12": + optional: true + + "@esbuild/freebsd-arm64@0.25.8": + optional: true + + "@esbuild/freebsd-x64@0.21.5": + optional: true + + "@esbuild/freebsd-x64@0.25.12": + optional: true + + "@esbuild/freebsd-x64@0.25.8": + optional: true + + "@esbuild/linux-arm64@0.21.5": + optional: true + + "@esbuild/linux-arm64@0.25.12": + optional: true + + "@esbuild/linux-arm64@0.25.8": + optional: true + + "@esbuild/linux-arm@0.21.5": + optional: true + + "@esbuild/linux-arm@0.25.12": + optional: true + + "@esbuild/linux-arm@0.25.8": + optional: true + + "@esbuild/linux-ia32@0.21.5": + optional: true + + "@esbuild/linux-ia32@0.25.12": + optional: true + + "@esbuild/linux-ia32@0.25.8": + optional: true + + "@esbuild/linux-loong64@0.21.5": + optional: true + + "@esbuild/linux-loong64@0.25.12": + optional: true + + "@esbuild/linux-loong64@0.25.8": + optional: true + + "@esbuild/linux-mips64el@0.21.5": + optional: true + + "@esbuild/linux-mips64el@0.25.12": + optional: true + + "@esbuild/linux-mips64el@0.25.8": + optional: true + + "@esbuild/linux-ppc64@0.21.5": + optional: true + + "@esbuild/linux-ppc64@0.25.12": + optional: true + + "@esbuild/linux-ppc64@0.25.8": + optional: true + + "@esbuild/linux-riscv64@0.21.5": + optional: true + + "@esbuild/linux-riscv64@0.25.12": + optional: true + + "@esbuild/linux-riscv64@0.25.8": + optional: true + + "@esbuild/linux-s390x@0.21.5": + optional: true + + "@esbuild/linux-s390x@0.25.12": + optional: true + + "@esbuild/linux-s390x@0.25.8": + optional: true + + "@esbuild/linux-x64@0.21.5": + optional: true + + "@esbuild/linux-x64@0.25.12": + optional: true + + "@esbuild/linux-x64@0.25.8": + optional: true + + "@esbuild/netbsd-arm64@0.25.12": + optional: true + + "@esbuild/netbsd-arm64@0.25.8": + optional: true + + "@esbuild/netbsd-x64@0.21.5": + optional: true + + "@esbuild/netbsd-x64@0.25.12": + optional: true + + "@esbuild/netbsd-x64@0.25.8": + optional: true + + "@esbuild/openbsd-arm64@0.25.12": + optional: true + + "@esbuild/openbsd-arm64@0.25.8": + optional: true + + "@esbuild/openbsd-x64@0.21.5": + optional: true + + "@esbuild/openbsd-x64@0.25.12": + optional: true + + "@esbuild/openbsd-x64@0.25.8": + optional: true + + "@esbuild/openharmony-arm64@0.25.12": + optional: true + + "@esbuild/openharmony-arm64@0.25.8": + optional: true + + "@esbuild/sunos-x64@0.21.5": + optional: true + + "@esbuild/sunos-x64@0.25.12": + optional: true + + "@esbuild/sunos-x64@0.25.8": + optional: true + + "@esbuild/win32-arm64@0.21.5": + optional: true + + "@esbuild/win32-arm64@0.25.12": + optional: true + + "@esbuild/win32-arm64@0.25.8": + optional: true + + "@esbuild/win32-ia32@0.21.5": + optional: true + + "@esbuild/win32-ia32@0.25.12": + optional: true + + "@esbuild/win32-ia32@0.25.8": + optional: true + + "@esbuild/win32-x64@0.21.5": + optional: true + + "@esbuild/win32-x64@0.25.12": + optional: true + + "@esbuild/win32-x64@0.25.8": + optional: true + + "@eslint-community/eslint-utils@4.7.0(eslint@9.39.1(jiti@2.6.1))": + dependencies: + eslint: 9.39.1(jiti@2.6.1) + eslint-visitor-keys: 3.4.3 + + "@eslint-community/eslint-utils@4.9.0(eslint@9.39.1(jiti@2.6.1))": + dependencies: + eslint: 9.39.1(jiti@2.6.1) + eslint-visitor-keys: 3.4.3 + + "@eslint-community/regexpp@4.12.1": {} + + "@eslint/config-array@0.21.1": + dependencies: + "@eslint/object-schema": 2.1.7 + debug: 4.4.1(supports-color@8.1.1) + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + "@eslint/config-helpers@0.4.2": + dependencies: + "@eslint/core": 0.17.0 + + "@eslint/core@0.17.0": + dependencies: + "@types/json-schema": 7.0.15 + + "@eslint/eslintrc@3.3.1": + dependencies: + ajv: 6.12.6 + debug: 4.4.1(supports-color@8.1.1) + espree: 10.4.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + "@eslint/js@9.39.1": {} + + "@eslint/object-schema@2.1.7": {} + + "@eslint/plugin-kit@0.4.1": + dependencies: + "@eslint/core": 0.17.0 + levn: 0.4.1 + + "@floating-ui/core@1.7.3": + dependencies: + "@floating-ui/utils": 0.2.10 + + "@floating-ui/dom@1.7.4": + dependencies: + "@floating-ui/core": 1.7.3 + "@floating-ui/utils": 0.2.10 + + "@floating-ui/react-dom@2.1.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0)": + dependencies: + "@floating-ui/dom": 1.7.4 + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + + "@floating-ui/utils@0.2.10": {} + + "@formatjs/intl-localematcher@0.6.2": + dependencies: + tslib: 2.8.1 + + "@gerrit0/mini-shiki@3.15.0": + dependencies: + "@shikijs/engine-oniguruma": 3.15.0 + "@shikijs/langs": 3.15.0 + "@shikijs/themes": 3.15.0 + "@shikijs/types": 3.15.0 + "@shikijs/vscode-textmate": 10.0.2 + + "@humanfs/core@0.19.1": {} + + "@humanfs/node@0.16.6": + dependencies: + "@humanfs/core": 0.19.1 + "@humanwhocodes/retry": 0.3.1 + + "@humanwhocodes/module-importer@1.0.1": {} + + "@humanwhocodes/retry@0.3.1": {} + + "@humanwhocodes/retry@0.4.3": {} + + "@hutson/parse-repository-url@5.0.0": {} + + "@img/colour@1.0.0": + optional: true + + "@img/sharp-darwin-arm64@0.34.5": + optionalDependencies: + "@img/sharp-libvips-darwin-arm64": 1.2.4 + optional: true + + "@img/sharp-darwin-x64@0.34.5": + optionalDependencies: + "@img/sharp-libvips-darwin-x64": 1.2.4 + optional: true + + "@img/sharp-libvips-darwin-arm64@1.2.4": + optional: true + + "@img/sharp-libvips-darwin-x64@1.2.4": + optional: true + + "@img/sharp-libvips-linux-arm64@1.2.4": + optional: true + + "@img/sharp-libvips-linux-arm@1.2.4": + optional: true + + "@img/sharp-libvips-linux-ppc64@1.2.4": + optional: true + + "@img/sharp-libvips-linux-riscv64@1.2.4": + optional: true + + "@img/sharp-libvips-linux-s390x@1.2.4": + optional: true + + "@img/sharp-libvips-linux-x64@1.2.4": + optional: true + + "@img/sharp-libvips-linuxmusl-arm64@1.2.4": + optional: true + + "@img/sharp-libvips-linuxmusl-x64@1.2.4": + optional: true + + "@img/sharp-linux-arm64@0.34.5": + optionalDependencies: + "@img/sharp-libvips-linux-arm64": 1.2.4 + optional: true + + "@img/sharp-linux-arm@0.34.5": + optionalDependencies: + "@img/sharp-libvips-linux-arm": 1.2.4 + optional: true + + "@img/sharp-linux-ppc64@0.34.5": + optionalDependencies: + "@img/sharp-libvips-linux-ppc64": 1.2.4 + optional: true + + "@img/sharp-linux-riscv64@0.34.5": + optionalDependencies: + "@img/sharp-libvips-linux-riscv64": 1.2.4 + optional: true + + "@img/sharp-linux-s390x@0.34.5": + optionalDependencies: + "@img/sharp-libvips-linux-s390x": 1.2.4 + optional: true + + "@img/sharp-linux-x64@0.34.5": + optionalDependencies: + "@img/sharp-libvips-linux-x64": 1.2.4 + optional: true + + "@img/sharp-linuxmusl-arm64@0.34.5": + optionalDependencies: + "@img/sharp-libvips-linuxmusl-arm64": 1.2.4 + optional: true + + "@img/sharp-linuxmusl-x64@0.34.5": + optionalDependencies: + "@img/sharp-libvips-linuxmusl-x64": 1.2.4 + optional: true + + "@img/sharp-wasm32@0.34.5": + dependencies: + "@emnapi/runtime": 1.7.1 + optional: true + + "@img/sharp-win32-arm64@0.34.5": + optional: true + + "@img/sharp-win32-ia32@0.34.5": + optional: true + + "@img/sharp-win32-x64@0.34.5": + optional: true + + "@inquirer/ansi@1.0.2": {} + + "@inquirer/checkbox@4.3.2(@types/node@18.19.120)": + dependencies: + "@inquirer/ansi": 1.0.2 + "@inquirer/core": 10.3.2(@types/node@18.19.120) + "@inquirer/figures": 1.0.15 + "@inquirer/type": 3.0.10(@types/node@18.19.120) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + "@types/node": 18.19.120 + + "@inquirer/confirm@5.1.21(@types/node@18.19.120)": + dependencies: + "@inquirer/core": 10.3.2(@types/node@18.19.120) + "@inquirer/type": 3.0.10(@types/node@18.19.120) + optionalDependencies: + "@types/node": 18.19.120 + + "@inquirer/core@10.3.2(@types/node@18.19.120)": + dependencies: + "@inquirer/ansi": 1.0.2 + "@inquirer/figures": 1.0.15 + "@inquirer/type": 3.0.10(@types/node@18.19.120) + cli-width: 4.1.0 + mute-stream: 2.0.0 + signal-exit: 4.1.0 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.3 + optionalDependencies: + "@types/node": 18.19.120 + + "@inquirer/editor@4.2.23(@types/node@18.19.120)": + dependencies: + "@inquirer/core": 10.3.2(@types/node@18.19.120) + "@inquirer/external-editor": 1.0.3(@types/node@18.19.120) + "@inquirer/type": 3.0.10(@types/node@18.19.120) + optionalDependencies: + "@types/node": 18.19.120 + + "@inquirer/expand@4.0.23(@types/node@18.19.120)": + dependencies: + "@inquirer/core": 10.3.2(@types/node@18.19.120) + "@inquirer/type": 3.0.10(@types/node@18.19.120) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + "@types/node": 18.19.120 + + "@inquirer/external-editor@1.0.3(@types/node@18.19.120)": + dependencies: + chardet: 2.1.1 + iconv-lite: 0.7.0 + optionalDependencies: + "@types/node": 18.19.120 + + "@inquirer/figures@1.0.15": {} + + "@inquirer/input@4.3.1(@types/node@18.19.120)": + dependencies: + "@inquirer/core": 10.3.2(@types/node@18.19.120) + "@inquirer/type": 3.0.10(@types/node@18.19.120) + optionalDependencies: + "@types/node": 18.19.120 + + "@inquirer/number@3.0.23(@types/node@18.19.120)": + dependencies: + "@inquirer/core": 10.3.2(@types/node@18.19.120) + "@inquirer/type": 3.0.10(@types/node@18.19.120) + optionalDependencies: + "@types/node": 18.19.120 + + "@inquirer/password@4.0.23(@types/node@18.19.120)": + dependencies: + "@inquirer/ansi": 1.0.2 + "@inquirer/core": 10.3.2(@types/node@18.19.120) + "@inquirer/type": 3.0.10(@types/node@18.19.120) + optionalDependencies: + "@types/node": 18.19.120 + + "@inquirer/prompts@7.10.1(@types/node@18.19.120)": + dependencies: + "@inquirer/checkbox": 4.3.2(@types/node@18.19.120) + "@inquirer/confirm": 5.1.21(@types/node@18.19.120) + "@inquirer/editor": 4.2.23(@types/node@18.19.120) + "@inquirer/expand": 4.0.23(@types/node@18.19.120) + "@inquirer/input": 4.3.1(@types/node@18.19.120) + "@inquirer/number": 3.0.23(@types/node@18.19.120) + "@inquirer/password": 4.0.23(@types/node@18.19.120) + "@inquirer/rawlist": 4.1.11(@types/node@18.19.120) + "@inquirer/search": 3.2.2(@types/node@18.19.120) + "@inquirer/select": 4.4.2(@types/node@18.19.120) + optionalDependencies: + "@types/node": 18.19.120 + + "@inquirer/rawlist@4.1.11(@types/node@18.19.120)": + dependencies: + "@inquirer/core": 10.3.2(@types/node@18.19.120) + "@inquirer/type": 3.0.10(@types/node@18.19.120) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + "@types/node": 18.19.120 + + "@inquirer/search@3.2.2(@types/node@18.19.120)": + dependencies: + "@inquirer/core": 10.3.2(@types/node@18.19.120) + "@inquirer/figures": 1.0.15 + "@inquirer/type": 3.0.10(@types/node@18.19.120) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + "@types/node": 18.19.120 + + "@inquirer/select@4.4.2(@types/node@18.19.120)": + dependencies: + "@inquirer/ansi": 1.0.2 + "@inquirer/core": 10.3.2(@types/node@18.19.120) + "@inquirer/figures": 1.0.15 + "@inquirer/type": 3.0.10(@types/node@18.19.120) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + "@types/node": 18.19.120 + + "@inquirer/type@3.0.10(@types/node@18.19.120)": + optionalDependencies: + "@types/node": 18.19.120 + + "@isaacs/balanced-match@4.0.1": {} + + "@isaacs/brace-expansion@5.0.0": + dependencies: + "@isaacs/balanced-match": 4.0.1 + + "@isaacs/cliui@8.0.2": + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + "@isaacs/fs-minipass@4.0.1": + dependencies: + minipass: 7.1.2 + + "@istanbuljs/load-nyc-config@1.1.0": + dependencies: + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.1 + resolve-from: 5.0.0 + + "@istanbuljs/schema@0.1.3": {} + + "@jest/console@29.7.0": + dependencies: + "@jest/types": 29.6.3 + "@types/node": 18.19.120 + chalk: 4.1.2 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + + "@jest/console@30.0.5": + dependencies: + "@jest/types": 30.0.5 + "@types/node": 18.19.120 + chalk: 4.1.2 + jest-message-util: 30.0.5 + jest-util: 30.0.5 + slash: 3.0.0 + + "@jest/core@29.7.0(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@types/node@18.19.120)(typescript@5.9.3))": + dependencies: + "@jest/console": 29.7.0 + "@jest/reporters": 29.7.0(node-notifier@10.0.1) + "@jest/test-result": 29.7.0 + "@jest/transform": 29.7.0 + "@jest/types": 29.6.3 + "@types/node": 18.19.120 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 3.9.0 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 29.7.0 + jest-config: 29.7.0(@types/node@18.19.120)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@18.19.120)(typescript@5.9.3)) + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-resolve-dependencies: 29.7.0 + jest-runner: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + jest-watcher: 29.7.0 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-ansi: 6.0.1 + optionalDependencies: + node-notifier: 10.0.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + - ts-node + + "@jest/diff-sequences@30.0.1": {} + + "@jest/environment@29.7.0": + dependencies: + "@jest/fake-timers": 29.7.0 + "@jest/types": 29.6.3 + "@types/node": 18.19.120 + jest-mock: 29.7.0 + + "@jest/environment@30.0.5": + dependencies: + "@jest/fake-timers": 30.0.5 + "@jest/types": 30.0.5 + "@types/node": 18.19.120 + jest-mock: 30.0.5 + + "@jest/expect-utils@29.7.0": + dependencies: + jest-get-type: 29.6.3 + + "@jest/expect-utils@30.0.5": + dependencies: + "@jest/get-type": 30.0.1 + + "@jest/expect@29.7.0": + dependencies: + expect: 29.7.0 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + + "@jest/expect@30.0.5": + dependencies: + expect: 30.0.5 + jest-snapshot: 30.0.5 + transitivePeerDependencies: + - supports-color + + "@jest/fake-timers@29.7.0": + dependencies: + "@jest/types": 29.6.3 + "@sinonjs/fake-timers": 10.3.0 + "@types/node": 18.19.120 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-util: 29.7.0 + + "@jest/fake-timers@30.0.5": + dependencies: + "@jest/types": 30.0.5 + "@sinonjs/fake-timers": 13.0.5 + "@types/node": 18.19.120 + jest-message-util: 30.0.5 + jest-mock: 30.0.5 + jest-util: 30.0.5 + + "@jest/get-type@30.0.1": {} + + "@jest/globals@29.7.0": + dependencies: + "@jest/environment": 29.7.0 + "@jest/expect": 29.7.0 + "@jest/types": 29.6.3 + jest-mock: 29.7.0 + transitivePeerDependencies: + - supports-color + + "@jest/globals@30.0.5": + dependencies: + "@jest/environment": 30.0.5 + "@jest/expect": 30.0.5 + "@jest/types": 30.0.5 + jest-mock: 30.0.5 + transitivePeerDependencies: + - supports-color + + "@jest/pattern@30.0.1": + dependencies: + "@types/node": 18.19.120 + jest-regex-util: 30.0.1 + + "@jest/reporters@29.7.0(node-notifier@10.0.1)": + dependencies: + "@bcoe/v8-coverage": 0.2.3 + "@jest/console": 29.7.0 + "@jest/test-result": 29.7.0 + "@jest/transform": 29.7.0 + "@jest/types": 29.6.3 + "@jridgewell/trace-mapping": 0.3.29 + "@types/node": 18.19.120 + chalk: 4.1.2 + collect-v8-coverage: 1.0.2 + exit: 0.1.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-instrument: 6.0.3 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.7 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + jest-worker: 29.7.0 + slash: 3.0.0 + string-length: 4.0.2 + strip-ansi: 6.0.1 + v8-to-istanbul: 9.3.0 + optionalDependencies: + node-notifier: 10.0.1 + transitivePeerDependencies: + - supports-color + + "@jest/reporters@30.0.5(node-notifier@10.0.1)": + dependencies: + "@bcoe/v8-coverage": 0.2.3 + "@jest/console": 30.0.5 + "@jest/test-result": 30.0.5 + "@jest/transform": 30.0.5 + "@jest/types": 30.0.5 + "@jridgewell/trace-mapping": 0.3.29 + "@types/node": 18.19.120 + chalk: 4.1.2 + collect-v8-coverage: 1.0.2 + exit-x: 0.2.2 + glob: 10.4.5 + graceful-fs: 4.2.11 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-instrument: 6.0.3 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 5.0.6 + istanbul-reports: 3.1.7 + jest-message-util: 30.0.5 + jest-util: 30.0.5 + jest-worker: 30.0.5 + slash: 3.0.0 + string-length: 4.0.2 + v8-to-istanbul: 9.3.0 + optionalDependencies: + node-notifier: 10.0.1 + transitivePeerDependencies: + - supports-color + + "@jest/schemas@29.6.3": + dependencies: + "@sinclair/typebox": 0.27.8 + + "@jest/schemas@30.0.5": + dependencies: + "@sinclair/typebox": 0.34.38 + + "@jest/snapshot-utils@30.0.5": + dependencies: + "@jest/types": 30.0.5 + chalk: 4.1.2 + graceful-fs: 4.2.11 + natural-compare: 1.4.0 + + "@jest/source-map@29.6.3": + dependencies: + "@jridgewell/trace-mapping": 0.3.29 + callsites: 3.1.0 + graceful-fs: 4.2.11 + + "@jest/source-map@30.0.1": + dependencies: + "@jridgewell/trace-mapping": 0.3.29 + callsites: 3.1.0 + graceful-fs: 4.2.11 + + "@jest/test-result@29.7.0": + dependencies: + "@jest/console": 29.7.0 + "@jest/types": 29.6.3 + "@types/istanbul-lib-coverage": 2.0.6 + collect-v8-coverage: 1.0.2 + + "@jest/test-result@30.0.5": + dependencies: + "@jest/console": 30.0.5 + "@jest/types": 30.0.5 + "@types/istanbul-lib-coverage": 2.0.6 + collect-v8-coverage: 1.0.2 + + "@jest/test-sequencer@29.7.0": + dependencies: + "@jest/test-result": 29.7.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + slash: 3.0.0 + + "@jest/test-sequencer@30.0.5": + dependencies: + "@jest/test-result": 30.0.5 + graceful-fs: 4.2.11 + jest-haste-map: 30.0.5 + slash: 3.0.0 + + "@jest/transform@29.7.0": + dependencies: + "@babel/core": 7.28.0 + "@jest/types": 29.6.3 + "@jridgewell/trace-mapping": 0.3.29 + babel-plugin-istanbul: 6.1.1 + chalk: 4.1.2 + convert-source-map: 2.0.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + micromatch: 4.0.8 + pirates: 4.0.7 + slash: 3.0.0 + write-file-atomic: 4.0.2 + transitivePeerDependencies: + - supports-color + + "@jest/transform@30.0.5": + dependencies: + "@babel/core": 7.28.0 + "@jest/types": 30.0.5 + "@jridgewell/trace-mapping": 0.3.29 + babel-plugin-istanbul: 7.0.0 + chalk: 4.1.2 + convert-source-map: 2.0.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.11 + jest-haste-map: 30.0.5 + jest-regex-util: 30.0.1 + jest-util: 30.0.5 + micromatch: 4.0.8 + pirates: 4.0.7 + slash: 3.0.0 + write-file-atomic: 5.0.1 + transitivePeerDependencies: + - supports-color + + "@jest/types@29.6.3": + dependencies: + "@jest/schemas": 29.6.3 + "@types/istanbul-lib-coverage": 2.0.6 + "@types/istanbul-reports": 3.0.4 + "@types/node": 18.19.120 + "@types/yargs": 17.0.33 + chalk: 4.1.2 + + "@jest/types@30.0.5": + dependencies: + "@jest/pattern": 30.0.1 + "@jest/schemas": 30.0.5 + "@types/istanbul-lib-coverage": 2.0.6 + "@types/istanbul-reports": 3.0.4 + "@types/node": 18.19.120 + "@types/yargs": 17.0.33 + chalk: 4.1.2 + + "@jridgewell/gen-mapping@0.3.12": + dependencies: + "@jridgewell/sourcemap-codec": 1.5.4 + "@jridgewell/trace-mapping": 0.3.29 + + "@jridgewell/remapping@2.3.5": + dependencies: + "@jridgewell/gen-mapping": 0.3.12 + "@jridgewell/trace-mapping": 0.3.29 + + "@jridgewell/resolve-uri@3.1.2": {} + + "@jridgewell/sourcemap-codec@1.5.4": {} + + "@jridgewell/sourcemap-codec@1.5.5": {} + + "@jridgewell/trace-mapping@0.3.29": + dependencies: + "@jridgewell/resolve-uri": 3.1.2 + "@jridgewell/sourcemap-codec": 1.5.4 + + "@jridgewell/trace-mapping@0.3.9": + dependencies: + "@jridgewell/resolve-uri": 3.1.2 + "@jridgewell/sourcemap-codec": 1.5.5 + + "@mdx-js/mdx@3.1.1": + dependencies: + "@types/estree": 1.0.8 + "@types/estree-jsx": 1.0.5 + "@types/hast": 3.0.4 + "@types/mdx": 2.0.13 + acorn: 8.15.0 + collapse-white-space: 2.1.0 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + estree-util-scope: 1.0.0 + estree-walker: 3.0.3 + hast-util-to-jsx-runtime: 2.3.6 + markdown-extensions: 2.0.0 + recma-build-jsx: 1.0.0 + recma-jsx: 1.0.1(acorn@8.15.0) + recma-stringify: 1.0.0 + rehype-recma: 1.0.0 + remark-mdx: 3.1.1 + remark-parse: 11.0.0 + remark-rehype: 11.1.2 + source-map: 0.7.6 + unified: 11.0.5 + unist-util-position-from-estree: 2.0.0 + unist-util-stringify-position: 4.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + transitivePeerDependencies: + - supports-color + + "@napi-rs/wasm-runtime@0.2.12": + dependencies: + "@emnapi/core": 1.4.3 + "@emnapi/runtime": 1.7.1 + "@tybys/wasm-util": 0.10.0 + optional: true + + "@napi-rs/wasm-runtime@0.2.4": + dependencies: + "@emnapi/core": 1.4.3 + "@emnapi/runtime": 1.4.3 + "@tybys/wasm-util": 0.9.0 + + "@napi-rs/wasm-runtime@1.0.7": + dependencies: + "@emnapi/core": 1.7.1 + "@emnapi/runtime": 1.7.1 + "@tybys/wasm-util": 0.10.1 + optional: true + + "@next/env@16.0.1": {} + + "@next/eslint-plugin-next@16.0.1": + dependencies: + fast-glob: 3.3.1 + + "@next/swc-darwin-arm64@16.0.1": + optional: true + + "@next/swc-darwin-x64@16.0.1": + optional: true + + "@next/swc-linux-arm64-gnu@16.0.1": + optional: true + + "@next/swc-linux-arm64-musl@16.0.1": + optional: true + + "@next/swc-linux-x64-gnu@16.0.1": + optional: true + + "@next/swc-linux-x64-musl@16.0.1": + optional: true + + "@next/swc-win32-arm64-msvc@16.0.1": + optional: true + + "@next/swc-win32-x64-msvc@16.0.1": + optional: true + + "@nodelib/fs.scandir@2.1.5": + dependencies: + "@nodelib/fs.stat": 2.0.5 + run-parallel: 1.2.0 + + "@nodelib/fs.stat@2.0.5": {} + + "@nodelib/fs.walk@1.2.8": + dependencies: + "@nodelib/fs.scandir": 2.1.5 + fastq: 1.19.1 + + "@nodeutils/defaults-deep@1.1.0": + dependencies: + lodash: 4.17.21 + + "@nolyfill/is-core-module@1.0.39": {} + + "@nx/conformance@3.0.0(@nx/js@21.3.7(@babel/traverse@7.28.0)(nx@21.3.7))(nx@21.3.7)": + dependencies: + "@nx/devkit": 21.0.0(nx@21.3.7) + "@nx/js": 21.3.7(@babel/traverse@7.28.0)(nx@21.3.7) + "@nx/key": 3.0.0 + ajv: 8.17.1 + esbuild: 0.21.5 + nx: 21.3.7 + picocolors: 1.1.1 + semver: 7.5.4 + yargs: 17.7.2 + transitivePeerDependencies: + - debug + + "@nx/devkit@21.0.0(nx@21.3.7)": + dependencies: + ejs: 3.1.10 + enquirer: 2.3.6 + ignore: 5.3.2 + minimatch: 9.0.3 + nx: 21.3.7 + semver: 7.7.2 + tmp: 0.2.3 + tslib: 2.8.1 + yargs-parser: 21.1.1 + + "@nx/devkit@21.3.7(nx@21.3.7)": + dependencies: + ejs: 3.1.10 + enquirer: 2.3.6 + ignore: 5.3.2 + minimatch: 9.0.3 + nx: 21.3.7 + semver: 7.7.2 + tmp: 0.2.3 + tslib: 2.8.1 + yargs-parser: 21.1.1 + + "@nx/devkit@22.0.3(nx@21.3.7)": + dependencies: + "@zkochan/js-yaml": 0.0.7 + ejs: 3.1.10 + enquirer: 2.3.6 + minimatch: 9.0.3 + nx: 21.3.7 + semver: 7.7.3 + tslib: 2.8.1 + yargs-parser: 21.1.1 + + "@nx/eslint@21.3.7(@babel/traverse@7.28.0)(@zkochan/js-yaml@0.0.7)(eslint@9.39.1(jiti@2.6.1))(nx@21.3.7)": + dependencies: + "@nx/devkit": 21.3.7(nx@21.3.7) + "@nx/js": 21.3.7(@babel/traverse@7.28.0)(nx@21.3.7) + eslint: 9.39.1(jiti@2.6.1) + semver: 7.7.2 + tslib: 2.8.1 + typescript: 5.8.3 + optionalDependencies: + "@zkochan/js-yaml": 0.0.7 + transitivePeerDependencies: + - "@babel/traverse" + - "@swc-node/register" + - "@swc/core" + - debug + - nx + - supports-color + - verdaccio + + "@nx/jest@21.3.7(@babel/traverse@7.28.0)(@types/node@18.19.120)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(nx@21.3.7)(ts-node@10.9.2(@types/node@18.19.120)(typescript@5.9.3))(typescript@5.9.3)": + dependencies: + "@jest/reporters": 30.0.5(node-notifier@10.0.1) + "@jest/test-result": 30.0.5 + "@nx/devkit": 21.3.7(nx@21.3.7) + "@nx/js": 21.3.7(@babel/traverse@7.28.0)(nx@21.3.7) + "@phenomnomnominal/tsquery": 5.0.1(typescript@5.9.3) + identity-obj-proxy: 3.0.0 + jest-config: 30.0.5(@types/node@18.19.120)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@18.19.120)(typescript@5.9.3)) + jest-resolve: 30.0.5 + jest-util: 30.0.5 + minimatch: 9.0.3 + picocolors: 1.1.1 + resolve.exports: 2.0.3 + semver: 7.7.2 + tslib: 2.8.1 + yargs-parser: 21.1.1 + transitivePeerDependencies: + - "@babel/traverse" + - "@swc-node/register" + - "@swc/core" + - "@types/node" + - babel-plugin-macros + - debug + - esbuild-register + - node-notifier + - nx + - supports-color + - ts-node + - typescript + - verdaccio + + "@nx/js@21.3.7(@babel/traverse@7.28.0)(nx@21.3.7)": + dependencies: + "@babel/core": 7.28.0 + "@babel/plugin-proposal-decorators": 7.28.0(@babel/core@7.28.0) + "@babel/plugin-transform-class-properties": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-transform-runtime": 7.28.0(@babel/core@7.28.0) + "@babel/preset-env": 7.28.0(@babel/core@7.28.0) + "@babel/preset-typescript": 7.27.1(@babel/core@7.28.0) + "@babel/runtime": 7.28.2 + "@nx/devkit": 21.3.7(nx@21.3.7) + "@nx/workspace": 21.3.7 + "@zkochan/js-yaml": 0.0.7 + babel-plugin-const-enum: 1.2.0(@babel/core@7.28.0) + babel-plugin-macros: 3.1.0 + babel-plugin-transform-typescript-metadata: 0.3.2(@babel/core@7.28.0)(@babel/traverse@7.28.0) + chalk: 4.1.2 + columnify: 1.6.0 + detect-port: 1.6.1 + enquirer: 2.3.6 + ignore: 5.3.2 + js-tokens: 4.0.0 + jsonc-parser: 3.2.0 + npm-package-arg: 11.0.1 + npm-run-path: 4.0.1 + ora: 5.3.0 + picocolors: 1.1.1 + picomatch: 4.0.2 + semver: 7.7.2 + source-map-support: 0.5.19 + tinyglobby: 0.2.14 + tslib: 2.8.1 + transitivePeerDependencies: + - "@babel/traverse" + - "@swc-node/register" + - "@swc/core" + - debug + - nx + - supports-color + + "@nx/key-darwin-arm64@3.0.0": + optional: true + + "@nx/key-darwin-x64@3.0.0": + optional: true + + "@nx/key-linux-arm-gnueabihf@3.0.0": + optional: true + + "@nx/key-linux-arm64-gnu@3.0.0": + optional: true + + "@nx/key-linux-arm64-musl@3.0.0": + optional: true + + "@nx/key-linux-x64-gnu@3.0.0": + optional: true + + "@nx/key-linux-x64-musl@3.0.0": + optional: true + + "@nx/key-win32-arm64-msvc@3.0.0": + optional: true + + "@nx/key-win32-x64-msvc@3.0.0": + optional: true + + "@nx/key@3.0.0": + dependencies: + "@napi-rs/wasm-runtime": 0.2.4 + axios: 1.10.0 + axios-retry: 4.5.0(axios@1.10.0) + chalk: 4.1.2 + enquirer: 2.4.1 + ora: 5.4.1 + optionalDependencies: + "@nx/key-darwin-arm64": 3.0.0 + "@nx/key-darwin-x64": 3.0.0 + "@nx/key-linux-arm-gnueabihf": 3.0.0 + "@nx/key-linux-arm64-gnu": 3.0.0 + "@nx/key-linux-arm64-musl": 3.0.0 + "@nx/key-linux-x64-gnu": 3.0.0 + "@nx/key-linux-x64-musl": 3.0.0 + "@nx/key-win32-arm64-msvc": 3.0.0 + "@nx/key-win32-x64-msvc": 3.0.0 + transitivePeerDependencies: + - debug + + "@nx/nx-darwin-arm64@21.3.7": + optional: true + + "@nx/nx-darwin-x64@21.3.7": + optional: true + + "@nx/nx-freebsd-x64@21.3.7": + optional: true + + "@nx/nx-linux-arm-gnueabihf@21.3.7": + optional: true + + "@nx/nx-linux-arm64-gnu@21.3.7": + optional: true + + "@nx/nx-linux-arm64-musl@21.3.7": + optional: true + + "@nx/nx-linux-x64-gnu@21.3.7": + optional: true + + "@nx/nx-linux-x64-musl@21.3.7": + optional: true + + "@nx/nx-win32-arm64-msvc@21.3.7": + optional: true + + "@nx/nx-win32-x64-msvc@21.3.7": + optional: true + + "@nx/plugin@21.3.7(@babel/traverse@7.28.0)(@types/node@18.19.120)(@zkochan/js-yaml@0.0.7)(babel-plugin-macros@3.1.0)(eslint@9.39.1(jiti@2.6.1))(node-notifier@10.0.1)(nx@21.3.7)(ts-node@10.9.2(@types/node@18.19.120)(typescript@5.9.3))(typescript@5.9.3)": + dependencies: + "@nx/devkit": 21.3.7(nx@21.3.7) + "@nx/eslint": 21.3.7(@babel/traverse@7.28.0)(@zkochan/js-yaml@0.0.7)(eslint@9.39.1(jiti@2.6.1))(nx@21.3.7) + "@nx/jest": 21.3.7(@babel/traverse@7.28.0)(@types/node@18.19.120)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(nx@21.3.7)(ts-node@10.9.2(@types/node@18.19.120)(typescript@5.9.3))(typescript@5.9.3) + "@nx/js": 21.3.7(@babel/traverse@7.28.0)(nx@21.3.7) + tslib: 2.8.1 + transitivePeerDependencies: + - "@babel/traverse" + - "@swc-node/register" + - "@swc/core" + - "@types/node" + - "@zkochan/js-yaml" + - babel-plugin-macros + - debug + - esbuild-register + - eslint + - node-notifier + - nx + - supports-color + - ts-node + - typescript + - verdaccio + + "@nx/rollup@21.3.7(@babel/core@7.28.0)(@babel/traverse@7.28.0)(@types/babel__core@7.20.5)(nx@21.3.7)(ts-node@10.9.2(@types/node@18.19.120)(typescript@5.9.3))(typescript@5.9.3)": + dependencies: + "@nx/devkit": 21.3.7(nx@21.3.7) + "@nx/js": 21.3.7(@babel/traverse@7.28.0)(nx@21.3.7) + "@rollup/plugin-babel": 6.0.4(@babel/core@7.28.0)(@types/babel__core@7.20.5)(rollup@4.46.0) + "@rollup/plugin-commonjs": 25.0.8(rollup@4.46.0) + "@rollup/plugin-image": 3.0.3(rollup@4.46.0) + "@rollup/plugin-json": 6.1.0(rollup@4.46.0) + "@rollup/plugin-node-resolve": 15.3.1(rollup@4.46.0) + "@rollup/plugin-typescript": 12.1.4(rollup@4.46.0)(tslib@2.8.1)(typescript@5.9.3) + autoprefixer: 10.4.21(postcss@8.5.6) + picocolors: 1.1.1 + picomatch: 4.0.2 + postcss: 8.5.6 + rollup: 4.46.0 + rollup-plugin-copy: 3.5.0 + rollup-plugin-postcss: 4.0.2(postcss@8.5.6)(ts-node@10.9.2(@types/node@18.19.120)(typescript@5.9.3)) + rollup-plugin-typescript2: 0.36.0(rollup@4.46.0)(typescript@5.9.3) + tslib: 2.8.1 + transitivePeerDependencies: + - "@babel/core" + - "@babel/traverse" + - "@swc-node/register" + - "@swc/core" + - "@types/babel__core" + - debug + - nx + - supports-color + - ts-node + - typescript + - verdaccio + + "@nx/workspace@21.3.7": + dependencies: + "@nx/devkit": 21.3.7(nx@21.3.7) + "@zkochan/js-yaml": 0.0.7 + chalk: 4.1.2 + enquirer: 2.3.6 + nx: 21.3.7 + picomatch: 4.0.2 + tslib: 2.8.1 + yargs-parser: 21.1.1 + transitivePeerDependencies: + - "@swc-node/register" + - "@swc/core" + - debug + + "@octokit/auth-token@6.0.0": {} + + "@octokit/core@7.0.6": + dependencies: + "@octokit/auth-token": 6.0.0 + "@octokit/graphql": 9.0.3 + "@octokit/request": 10.0.7 + "@octokit/request-error": 7.1.0 + "@octokit/types": 16.0.0 + before-after-hook: 4.0.0 + universal-user-agent: 7.0.3 + + "@octokit/endpoint@11.0.2": + dependencies: + "@octokit/types": 16.0.0 + universal-user-agent: 7.0.3 + + "@octokit/graphql@9.0.3": + dependencies: + "@octokit/request": 10.0.7 + "@octokit/types": 16.0.0 + universal-user-agent: 7.0.3 + + "@octokit/openapi-types@26.0.0": {} + + "@octokit/openapi-types@27.0.0": {} + + "@octokit/plugin-paginate-rest@13.2.1(@octokit/core@7.0.6)": + dependencies: + "@octokit/core": 7.0.6 + "@octokit/types": 15.0.2 + + "@octokit/plugin-request-log@6.0.0(@octokit/core@7.0.6)": + dependencies: + "@octokit/core": 7.0.6 + + "@octokit/plugin-rest-endpoint-methods@16.1.1(@octokit/core@7.0.6)": + dependencies: + "@octokit/core": 7.0.6 + "@octokit/types": 15.0.2 + + "@octokit/request-error@7.1.0": + dependencies: + "@octokit/types": 16.0.0 + + "@octokit/request@10.0.7": + dependencies: + "@octokit/endpoint": 11.0.2 + "@octokit/request-error": 7.1.0 + "@octokit/types": 16.0.0 + fast-content-type-parse: 3.0.0 + universal-user-agent: 7.0.3 + + "@octokit/rest@22.0.0": + dependencies: + "@octokit/core": 7.0.6 + "@octokit/plugin-paginate-rest": 13.2.1(@octokit/core@7.0.6) + "@octokit/plugin-request-log": 6.0.0(@octokit/core@7.0.6) + "@octokit/plugin-rest-endpoint-methods": 16.1.1(@octokit/core@7.0.6) + + "@octokit/types@15.0.2": + dependencies: + "@octokit/openapi-types": 26.0.0 + + "@octokit/types@16.0.0": + dependencies: + "@octokit/openapi-types": 27.0.0 + + "@orama/orama@3.1.16": {} + + "@oxc-resolver/binding-android-arm-eabi@11.13.2": + optional: true + + "@oxc-resolver/binding-android-arm64@11.13.2": + optional: true + + "@oxc-resolver/binding-darwin-arm64@11.13.2": + optional: true + + "@oxc-resolver/binding-darwin-x64@11.13.2": + optional: true + + "@oxc-resolver/binding-freebsd-x64@11.13.2": + optional: true + + "@oxc-resolver/binding-linux-arm-gnueabihf@11.13.2": + optional: true + + "@oxc-resolver/binding-linux-arm-musleabihf@11.13.2": + optional: true + + "@oxc-resolver/binding-linux-arm64-gnu@11.13.2": + optional: true + + "@oxc-resolver/binding-linux-arm64-musl@11.13.2": + optional: true + + "@oxc-resolver/binding-linux-ppc64-gnu@11.13.2": + optional: true + + "@oxc-resolver/binding-linux-riscv64-gnu@11.13.2": + optional: true + + "@oxc-resolver/binding-linux-riscv64-musl@11.13.2": + optional: true + + "@oxc-resolver/binding-linux-s390x-gnu@11.13.2": + optional: true + + "@oxc-resolver/binding-linux-x64-gnu@11.13.2": + optional: true + + "@oxc-resolver/binding-linux-x64-musl@11.13.2": + optional: true + + "@oxc-resolver/binding-wasm32-wasi@11.13.2": + dependencies: + "@napi-rs/wasm-runtime": 1.0.7 + optional: true + + "@oxc-resolver/binding-win32-arm64-msvc@11.13.2": + optional: true + + "@oxc-resolver/binding-win32-ia32-msvc@11.13.2": + optional: true + + "@oxc-resolver/binding-win32-x64-msvc@11.13.2": + optional: true + + "@phenomnomnominal/tsquery@5.0.1(typescript@5.9.3)": + dependencies: + esquery: 1.6.0 + typescript: 5.9.3 + + "@phun-ky/typeof@2.0.3": {} + + "@pkgjs/parseargs@0.11.0": + optional: true + + "@pkgr/core@0.2.9": {} + + "@radix-ui/number@1.1.1": {} + + "@radix-ui/primitive@1.1.3": {} + + "@radix-ui/react-accordion@1.2.12(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)": + dependencies: + "@radix-ui/primitive": 1.1.3 + "@radix-ui/react-collapsible": 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + "@radix-ui/react-collection": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-context": 1.1.2(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-direction": 1.1.1(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-id": 1.1.1(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.5)(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + optionalDependencies: + "@types/react": 19.2.5 + "@types/react-dom": 19.2.3(@types/react@19.2.5) + + "@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)": + dependencies: + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + optionalDependencies: + "@types/react": 19.2.5 + "@types/react-dom": 19.2.3(@types/react@19.2.5) + + "@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)": + dependencies: + "@radix-ui/primitive": 1.1.3 + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-context": 1.1.2(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-id": 1.1.1(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-presence": 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.5)(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + optionalDependencies: + "@types/react": 19.2.5 + "@types/react-dom": 19.2.3(@types/react@19.2.5) + + "@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)": + dependencies: + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-context": 1.1.2(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + "@radix-ui/react-slot": 1.2.3(@types/react@19.2.5)(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + optionalDependencies: + "@types/react": 19.2.5 + "@types/react-dom": 19.2.3(@types/react@19.2.5) + + "@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.5)(react@19.2.0)": + dependencies: + react: 19.2.0 + optionalDependencies: + "@types/react": 19.2.5 + + "@radix-ui/react-context@1.1.2(@types/react@19.2.5)(react@19.2.0)": + dependencies: + react: 19.2.0 + optionalDependencies: + "@types/react": 19.2.5 + + "@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)": + dependencies: + "@radix-ui/primitive": 1.1.3 + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-context": 1.1.2(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-dismissable-layer": 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + "@radix-ui/react-focus-guards": 1.1.3(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-focus-scope": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + "@radix-ui/react-id": 1.1.1(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-portal": 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + "@radix-ui/react-presence": 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + "@radix-ui/react-slot": 1.2.3(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.5)(react@19.2.0) + aria-hidden: 1.2.6 + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + react-remove-scroll: 2.7.1(@types/react@19.2.5)(react@19.2.0) + optionalDependencies: + "@types/react": 19.2.5 + "@types/react-dom": 19.2.3(@types/react@19.2.5) + + "@radix-ui/react-direction@1.1.1(@types/react@19.2.5)(react@19.2.0)": + dependencies: + react: 19.2.0 + optionalDependencies: + "@types/react": 19.2.5 + + "@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)": + dependencies: + "@radix-ui/primitive": 1.1.3 + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-use-escape-keydown": 1.1.1(@types/react@19.2.5)(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + optionalDependencies: + "@types/react": 19.2.5 + "@types/react-dom": 19.2.3(@types/react@19.2.5) + + "@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.5)(react@19.2.0)": + dependencies: + react: 19.2.0 + optionalDependencies: + "@types/react": 19.2.5 + + "@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)": + dependencies: + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.2.5)(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + optionalDependencies: + "@types/react": 19.2.5 + "@types/react-dom": 19.2.3(@types/react@19.2.5) + + "@radix-ui/react-id@1.1.1(@types/react@19.2.5)(react@19.2.0)": + dependencies: + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.5)(react@19.2.0) + react: 19.2.0 + optionalDependencies: + "@types/react": 19.2.5 + + "@radix-ui/react-navigation-menu@1.2.14(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)": + dependencies: + "@radix-ui/primitive": 1.1.3 + "@radix-ui/react-collection": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-context": 1.1.2(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-direction": 1.1.1(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-dismissable-layer": 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + "@radix-ui/react-id": 1.1.1(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-presence": 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-use-previous": 1.1.1(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-visually-hidden": 1.2.3(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + optionalDependencies: + "@types/react": 19.2.5 + "@types/react-dom": 19.2.3(@types/react@19.2.5) + + "@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)": + dependencies: + "@radix-ui/primitive": 1.1.3 + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-context": 1.1.2(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-dismissable-layer": 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + "@radix-ui/react-focus-guards": 1.1.3(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-focus-scope": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + "@radix-ui/react-id": 1.1.1(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-popper": 1.2.8(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + "@radix-ui/react-portal": 1.1.9(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + "@radix-ui/react-presence": 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + "@radix-ui/react-slot": 1.2.3(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.5)(react@19.2.0) + aria-hidden: 1.2.6 + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + react-remove-scroll: 2.7.1(@types/react@19.2.5)(react@19.2.0) + optionalDependencies: + "@types/react": 19.2.5 + "@types/react-dom": 19.2.3(@types/react@19.2.5) + + "@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)": + dependencies: + "@floating-ui/react-dom": 2.1.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + "@radix-ui/react-arrow": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-context": 1.1.2(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-use-rect": 1.1.1(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-use-size": 1.1.1(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/rect": 1.1.1 + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + optionalDependencies: + "@types/react": 19.2.5 + "@types/react-dom": 19.2.3(@types/react@19.2.5) + + "@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)": + dependencies: + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.5)(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + optionalDependencies: + "@types/react": 19.2.5 + "@types/react-dom": 19.2.3(@types/react@19.2.5) + + "@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)": + dependencies: + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.5)(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + optionalDependencies: + "@types/react": 19.2.5 + "@types/react-dom": 19.2.3(@types/react@19.2.5) + + "@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)": + dependencies: + "@radix-ui/react-slot": 1.2.3(@types/react@19.2.5)(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + optionalDependencies: + "@types/react": 19.2.5 + "@types/react-dom": 19.2.3(@types/react@19.2.5) + + "@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)": + dependencies: + "@radix-ui/primitive": 1.1.3 + "@radix-ui/react-collection": 1.1.7(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-context": 1.1.2(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-direction": 1.1.1(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-id": 1.1.1(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.5)(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + optionalDependencies: + "@types/react": 19.2.5 + "@types/react-dom": 19.2.3(@types/react@19.2.5) + + "@radix-ui/react-scroll-area@1.2.10(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)": + dependencies: + "@radix-ui/number": 1.1.1 + "@radix-ui/primitive": 1.1.3 + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-context": 1.1.2(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-direction": 1.1.1(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-presence": 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.5)(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + optionalDependencies: + "@types/react": 19.2.5 + "@types/react-dom": 19.2.3(@types/react@19.2.5) + + "@radix-ui/react-slot@1.2.3(@types/react@19.2.5)(react@19.2.0)": + dependencies: + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.5)(react@19.2.0) + react: 19.2.0 + optionalDependencies: + "@types/react": 19.2.5 + + "@radix-ui/react-slot@1.2.4(@types/react@19.2.5)(react@19.2.0)": + dependencies: + "@radix-ui/react-compose-refs": 1.1.2(@types/react@19.2.5)(react@19.2.0) + react: 19.2.0 + optionalDependencies: + "@types/react": 19.2.5 + + "@radix-ui/react-tabs@1.1.13(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)": + dependencies: + "@radix-ui/primitive": 1.1.3 + "@radix-ui/react-context": 1.1.2(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-direction": 1.1.1(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-id": 1.1.1(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-presence": 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + "@radix-ui/react-roving-focus": 1.1.11(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + "@radix-ui/react-use-controllable-state": 1.2.2(@types/react@19.2.5)(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + optionalDependencies: + "@types/react": 19.2.5 + "@types/react-dom": 19.2.3(@types/react@19.2.5) + + "@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.5)(react@19.2.0)": + dependencies: + react: 19.2.0 + optionalDependencies: + "@types/react": 19.2.5 + + "@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.5)(react@19.2.0)": + dependencies: + "@radix-ui/react-use-effect-event": 0.0.2(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.5)(react@19.2.0) + react: 19.2.0 + optionalDependencies: + "@types/react": 19.2.5 + + "@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.5)(react@19.2.0)": + dependencies: + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.5)(react@19.2.0) + react: 19.2.0 + optionalDependencies: + "@types/react": 19.2.5 + + "@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.5)(react@19.2.0)": + dependencies: + "@radix-ui/react-use-callback-ref": 1.1.1(@types/react@19.2.5)(react@19.2.0) + react: 19.2.0 + optionalDependencies: + "@types/react": 19.2.5 + + "@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.5)(react@19.2.0)": + dependencies: + react: 19.2.0 + optionalDependencies: + "@types/react": 19.2.5 + + "@radix-ui/react-use-previous@1.1.1(@types/react@19.2.5)(react@19.2.0)": + dependencies: + react: 19.2.0 + optionalDependencies: + "@types/react": 19.2.5 + + "@radix-ui/react-use-rect@1.1.1(@types/react@19.2.5)(react@19.2.0)": + dependencies: + "@radix-ui/rect": 1.1.1 + react: 19.2.0 + optionalDependencies: + "@types/react": 19.2.5 + + "@radix-ui/react-use-size@1.1.1(@types/react@19.2.5)(react@19.2.0)": + dependencies: + "@radix-ui/react-use-layout-effect": 1.1.1(@types/react@19.2.5)(react@19.2.0) + react: 19.2.0 + optionalDependencies: + "@types/react": 19.2.5 + + "@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)": + dependencies: + "@radix-ui/react-primitive": 2.1.3(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + optionalDependencies: + "@types/react": 19.2.5 + "@types/react-dom": 19.2.3(@types/react@19.2.5) + + "@radix-ui/rect@1.1.1": {} + + "@release-it/conventional-changelog@10.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.2.1)(release-it@19.0.6(@types/node@18.19.120))": + dependencies: + concat-stream: 2.0.0 + conventional-changelog: 6.0.0(conventional-commits-filter@5.0.0) + conventional-recommended-bump: 10.0.0 + git-semver-tags: 8.0.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.2.1) + release-it: 19.0.6(@types/node@18.19.120) + semver: 7.7.2 + transitivePeerDependencies: + - conventional-commits-filter + - conventional-commits-parser + + "@rollup/plugin-babel@6.0.4(@babel/core@7.28.0)(@types/babel__core@7.20.5)(rollup@4.46.0)": + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-module-imports": 7.27.1 + "@rollup/pluginutils": 5.2.0(rollup@4.46.0) + optionalDependencies: + "@types/babel__core": 7.20.5 + rollup: 4.46.0 + transitivePeerDependencies: + - supports-color + + "@rollup/plugin-commonjs@25.0.8(rollup@4.46.0)": + dependencies: + "@rollup/pluginutils": 5.2.0(rollup@4.46.0) + commondir: 1.0.1 + estree-walker: 2.0.2 + glob: 8.1.0 + is-reference: 1.2.1 + magic-string: 0.30.17 + optionalDependencies: + rollup: 4.46.0 + + "@rollup/plugin-image@3.0.3(rollup@4.46.0)": + dependencies: + "@rollup/pluginutils": 5.2.0(rollup@4.46.0) + mini-svg-data-uri: 1.4.4 + optionalDependencies: + rollup: 4.46.0 + + "@rollup/plugin-json@6.1.0(rollup@4.46.0)": + dependencies: + "@rollup/pluginutils": 5.2.0(rollup@4.46.0) + optionalDependencies: + rollup: 4.46.0 + + "@rollup/plugin-node-resolve@15.3.1(rollup@4.46.0)": + dependencies: + "@rollup/pluginutils": 5.2.0(rollup@4.46.0) + "@types/resolve": 1.20.2 + deepmerge: 4.3.1 + is-module: 1.0.0 + resolve: 1.22.10 + optionalDependencies: + rollup: 4.46.0 + + "@rollup/plugin-typescript@12.1.4(rollup@4.46.0)(tslib@2.8.1)(typescript@5.9.3)": + dependencies: + "@rollup/pluginutils": 5.2.0(rollup@4.46.0) + resolve: 1.22.10 + typescript: 5.9.3 + optionalDependencies: + rollup: 4.46.0 + tslib: 2.8.1 + + "@rollup/pluginutils@4.2.1": + dependencies: + estree-walker: 2.0.2 + picomatch: 2.3.1 + + "@rollup/pluginutils@5.2.0(rollup@4.46.0)": + dependencies: + "@types/estree": 1.0.8 + estree-walker: 2.0.2 + picomatch: 4.0.2 + optionalDependencies: + rollup: 4.46.0 + + "@rollup/rollup-android-arm-eabi@4.46.0": + optional: true + + "@rollup/rollup-android-arm64@4.46.0": + optional: true + + "@rollup/rollup-darwin-arm64@4.46.0": + optional: true + + "@rollup/rollup-darwin-x64@4.46.0": + optional: true + + "@rollup/rollup-freebsd-arm64@4.46.0": + optional: true + + "@rollup/rollup-freebsd-x64@4.46.0": + optional: true + + "@rollup/rollup-linux-arm-gnueabihf@4.46.0": + optional: true + + "@rollup/rollup-linux-arm-musleabihf@4.46.0": + optional: true + + "@rollup/rollup-linux-arm64-gnu@4.46.0": + optional: true + + "@rollup/rollup-linux-arm64-musl@4.46.0": + optional: true + + "@rollup/rollup-linux-loongarch64-gnu@4.46.0": + optional: true + + "@rollup/rollup-linux-ppc64-gnu@4.46.0": + optional: true + + "@rollup/rollup-linux-riscv64-gnu@4.46.0": + optional: true + + "@rollup/rollup-linux-riscv64-musl@4.46.0": + optional: true + + "@rollup/rollup-linux-s390x-gnu@4.46.0": + optional: true + + "@rollup/rollup-linux-x64-gnu@4.46.0": + optional: true + + "@rollup/rollup-linux-x64-musl@4.46.0": + optional: true + + "@rollup/rollup-win32-arm64-msvc@4.46.0": + optional: true + + "@rollup/rollup-win32-ia32-msvc@4.46.0": + optional: true + + "@rollup/rollup-win32-x64-msvc@4.46.0": + optional: true + + "@rtsao/scc@1.1.0": {} + + "@shikijs/core@3.15.0": + dependencies: + "@shikijs/types": 3.15.0 + "@shikijs/vscode-textmate": 10.0.2 + "@types/hast": 3.0.4 + hast-util-to-html: 9.0.5 + + "@shikijs/engine-javascript@3.15.0": + dependencies: + "@shikijs/types": 3.15.0 + "@shikijs/vscode-textmate": 10.0.2 + oniguruma-to-es: 4.3.3 + + "@shikijs/engine-oniguruma@3.15.0": + dependencies: + "@shikijs/types": 3.15.0 + "@shikijs/vscode-textmate": 10.0.2 + + "@shikijs/langs@3.15.0": + dependencies: + "@shikijs/types": 3.15.0 + + "@shikijs/rehype@3.15.0": + dependencies: + "@shikijs/types": 3.15.0 + "@types/hast": 3.0.4 + hast-util-to-string: 3.0.1 + shiki: 3.15.0 + unified: 11.0.5 + unist-util-visit: 5.0.0 + + "@shikijs/themes@3.15.0": + dependencies: + "@shikijs/types": 3.15.0 + + "@shikijs/transformers@3.15.0": + dependencies: + "@shikijs/core": 3.15.0 + "@shikijs/types": 3.15.0 + + "@shikijs/types@3.15.0": + dependencies: + "@shikijs/vscode-textmate": 10.0.2 + "@types/hast": 3.0.4 + + "@shikijs/vscode-textmate@10.0.2": {} + + "@sinclair/typebox@0.27.8": {} + + "@sinclair/typebox@0.34.38": {} + + "@sinonjs/commons@3.0.1": + dependencies: + type-detect: 4.0.8 + + "@sinonjs/fake-timers@10.3.0": + dependencies: + "@sinonjs/commons": 3.0.1 + + "@sinonjs/fake-timers@13.0.5": + dependencies: + "@sinonjs/commons": 3.0.1 + + "@standard-schema/spec@1.0.0": {} + + "@swc/helpers@0.5.15": + dependencies: + tslib: 2.8.1 + + "@tailwindcss/node@4.1.17": + dependencies: + "@jridgewell/remapping": 2.3.5 + enhanced-resolve: 5.18.3 + jiti: 2.6.1 + lightningcss: 1.30.2 + magic-string: 0.30.21 + source-map-js: 1.2.1 + tailwindcss: 4.1.17 + + "@tailwindcss/oxide-android-arm64@4.1.17": + optional: true + + "@tailwindcss/oxide-darwin-arm64@4.1.17": + optional: true + + "@tailwindcss/oxide-darwin-x64@4.1.17": + optional: true + + "@tailwindcss/oxide-freebsd-x64@4.1.17": + optional: true + + "@tailwindcss/oxide-linux-arm-gnueabihf@4.1.17": + optional: true + + "@tailwindcss/oxide-linux-arm64-gnu@4.1.17": + optional: true + + "@tailwindcss/oxide-linux-arm64-musl@4.1.17": + optional: true + + "@tailwindcss/oxide-linux-x64-gnu@4.1.17": + optional: true + + "@tailwindcss/oxide-linux-x64-musl@4.1.17": + optional: true + + "@tailwindcss/oxide-wasm32-wasi@4.1.17": + optional: true + + "@tailwindcss/oxide-win32-arm64-msvc@4.1.17": + optional: true + + "@tailwindcss/oxide-win32-x64-msvc@4.1.17": + optional: true + + "@tailwindcss/oxide@4.1.17": + optionalDependencies: + "@tailwindcss/oxide-android-arm64": 4.1.17 + "@tailwindcss/oxide-darwin-arm64": 4.1.17 + "@tailwindcss/oxide-darwin-x64": 4.1.17 + "@tailwindcss/oxide-freebsd-x64": 4.1.17 + "@tailwindcss/oxide-linux-arm-gnueabihf": 4.1.17 + "@tailwindcss/oxide-linux-arm64-gnu": 4.1.17 + "@tailwindcss/oxide-linux-arm64-musl": 4.1.17 + "@tailwindcss/oxide-linux-x64-gnu": 4.1.17 + "@tailwindcss/oxide-linux-x64-musl": 4.1.17 + "@tailwindcss/oxide-wasm32-wasi": 4.1.17 + "@tailwindcss/oxide-win32-arm64-msvc": 4.1.17 + "@tailwindcss/oxide-win32-x64-msvc": 4.1.17 + + "@tailwindcss/postcss@4.1.17": + dependencies: + "@alloc/quick-lru": 5.2.0 + "@tailwindcss/node": 4.1.17 + "@tailwindcss/oxide": 4.1.17 + postcss: 8.5.6 + tailwindcss: 4.1.17 + + "@tootallnate/quickjs-emscripten@0.23.0": {} + + "@trysound/sax@0.2.0": {} + + "@tsconfig/node10@1.0.11": {} + + "@tsconfig/node12@1.0.11": {} + + "@tsconfig/node14@1.0.3": {} + + "@tsconfig/node16@1.0.4": {} + + "@tybys/wasm-util@0.10.0": + dependencies: + tslib: 2.8.1 + optional: true + + "@tybys/wasm-util@0.10.1": + dependencies: + tslib: 2.8.1 + optional: true + + "@tybys/wasm-util@0.9.0": + dependencies: + tslib: 2.8.1 + + "@types/babel__core@7.20.5": + dependencies: + "@babel/parser": 7.28.0 + "@babel/types": 7.28.2 + "@types/babel__generator": 7.27.0 + "@types/babel__template": 7.4.4 + "@types/babel__traverse": 7.20.7 + + "@types/babel__generator@7.27.0": + dependencies: + "@babel/types": 7.28.2 + + "@types/babel__template@7.4.4": + dependencies: + "@babel/parser": 7.28.0 + "@babel/types": 7.28.2 + + "@types/babel__traverse@7.20.7": + dependencies: + "@babel/types": 7.28.2 + + "@types/chai@4.3.20": {} + + "@types/conventional-commits-parser@5.0.1": + dependencies: + "@types/node": 18.19.120 + + "@types/debug@4.1.12": + dependencies: + "@types/ms": 2.1.0 + + "@types/eslint-plugin-jsx-a11y@6.10.0": + dependencies: + "@types/eslint": 9.6.1 + + "@types/eslint@9.6.1": + dependencies: + "@types/estree": 1.0.8 + "@types/json-schema": 7.0.15 + + "@types/estree-jsx@1.0.5": + dependencies: + "@types/estree": 1.0.8 + + "@types/estree@1.0.8": {} + + "@types/fs-extra@8.1.5": + dependencies: + "@types/node": 18.19.120 + + "@types/glob@7.2.0": + dependencies: + "@types/minimatch": 6.0.0 + "@types/node": 18.19.120 + + "@types/graceful-fs@4.1.9": + dependencies: + "@types/node": 18.19.120 + + "@types/hast@3.0.4": + dependencies: + "@types/unist": 3.0.3 + + "@types/istanbul-lib-coverage@2.0.6": {} + + "@types/istanbul-lib-report@3.0.3": + dependencies: + "@types/istanbul-lib-coverage": 2.0.6 + + "@types/istanbul-reports@3.0.4": + dependencies: + "@types/istanbul-lib-report": 3.0.3 + + "@types/json-schema@7.0.15": {} + + "@types/json5@0.0.29": {} + + "@types/lodash@4.17.20": {} + + "@types/mdast@4.0.4": + dependencies: + "@types/unist": 3.0.3 + + "@types/mdx@2.0.13": {} + + "@types/minimatch@6.0.0": + dependencies: + minimatch: 10.0.3 + + "@types/mocha@10.0.10": {} + + "@types/ms@2.1.0": {} + + "@types/node@18.19.120": + dependencies: + undici-types: 5.26.5 + + "@types/node@24.10.1": + dependencies: + undici-types: 7.16.0 + + "@types/normalize-package-data@2.4.4": {} + + "@types/parse-json@4.0.2": {} + + "@types/parse-path@7.1.0": + dependencies: + parse-path: 7.1.0 + + "@types/prop-types@15.7.15": {} + + "@types/react-dom@19.2.3(@types/react@19.2.5)": + dependencies: + "@types/react": 19.2.5 + + "@types/react@18.3.26": + dependencies: + "@types/prop-types": 15.7.15 + csstype: 3.2.1 + + "@types/react@19.2.5": + dependencies: + csstype: 3.2.1 + + "@types/resolve@1.20.2": {} + + "@types/semver@7.7.1": {} + + "@types/stack-utils@2.0.3": {} + + "@types/unist@2.0.11": {} + + "@types/unist@3.0.3": {} + + "@types/yargs-parser@21.0.3": {} + + "@types/yargs@17.0.33": + dependencies: + "@types/yargs-parser": 21.0.3 + + "@typescript-eslint/eslint-plugin@8.46.4(@typescript-eslint/parser@8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)": + dependencies: + "@eslint-community/regexpp": 4.12.1 + "@typescript-eslint/parser": 8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + "@typescript-eslint/scope-manager": 8.46.4 + "@typescript-eslint/type-utils": 8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + "@typescript-eslint/utils": 8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + "@typescript-eslint/visitor-keys": 8.46.4 + eslint: 9.39.1(jiti@2.6.1) + graphemer: 1.4.0 + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + "@typescript-eslint/parser@8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)": + dependencies: + "@typescript-eslint/scope-manager": 8.46.4 + "@typescript-eslint/types": 8.46.4 + "@typescript-eslint/typescript-estree": 8.46.4(typescript@5.9.3) + "@typescript-eslint/visitor-keys": 8.46.4 + debug: 4.4.1(supports-color@8.1.1) + eslint: 9.39.1(jiti@2.6.1) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + "@typescript-eslint/project-service@8.46.4(typescript@5.9.3)": + dependencies: + "@typescript-eslint/tsconfig-utils": 8.46.4(typescript@5.9.3) + "@typescript-eslint/types": 8.46.4 + debug: 4.4.1(supports-color@8.1.1) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + "@typescript-eslint/scope-manager@8.46.4": + dependencies: + "@typescript-eslint/types": 8.46.4 + "@typescript-eslint/visitor-keys": 8.46.4 + + "@typescript-eslint/tsconfig-utils@8.46.4(typescript@5.9.3)": + dependencies: + typescript: 5.9.3 + + "@typescript-eslint/type-utils@8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)": + dependencies: + "@typescript-eslint/types": 8.46.4 + "@typescript-eslint/typescript-estree": 8.46.4(typescript@5.9.3) + "@typescript-eslint/utils": 8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + debug: 4.4.1(supports-color@8.1.1) + eslint: 9.39.1(jiti@2.6.1) + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + "@typescript-eslint/types@8.46.4": {} + + "@typescript-eslint/typescript-estree@8.46.4(typescript@5.9.3)": + dependencies: + "@typescript-eslint/project-service": 8.46.4(typescript@5.9.3) + "@typescript-eslint/tsconfig-utils": 8.46.4(typescript@5.9.3) + "@typescript-eslint/types": 8.46.4 + "@typescript-eslint/visitor-keys": 8.46.4 + debug: 4.4.1(supports-color@8.1.1) + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.3 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + "@typescript-eslint/utils@8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)": + dependencies: + "@eslint-community/eslint-utils": 4.7.0(eslint@9.39.1(jiti@2.6.1)) + "@typescript-eslint/scope-manager": 8.46.4 + "@typescript-eslint/types": 8.46.4 + "@typescript-eslint/typescript-estree": 8.46.4(typescript@5.9.3) + eslint: 9.39.1(jiti@2.6.1) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + + "@typescript-eslint/visitor-keys@8.46.4": + dependencies: + "@typescript-eslint/types": 8.46.4 + eslint-visitor-keys: 4.2.1 + + "@ungap/structured-clone@1.3.0": {} + + "@unrs/resolver-binding-android-arm-eabi@1.11.1": + optional: true + + "@unrs/resolver-binding-android-arm64@1.11.1": + optional: true + + "@unrs/resolver-binding-darwin-arm64@1.11.1": + optional: true + + "@unrs/resolver-binding-darwin-x64@1.11.1": + optional: true + + "@unrs/resolver-binding-freebsd-x64@1.11.1": + optional: true + + "@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1": + optional: true + + "@unrs/resolver-binding-linux-arm-musleabihf@1.11.1": + optional: true + + "@unrs/resolver-binding-linux-arm64-gnu@1.11.1": + optional: true + + "@unrs/resolver-binding-linux-arm64-musl@1.11.1": + optional: true + + "@unrs/resolver-binding-linux-ppc64-gnu@1.11.1": + optional: true + + "@unrs/resolver-binding-linux-riscv64-gnu@1.11.1": + optional: true + + "@unrs/resolver-binding-linux-riscv64-musl@1.11.1": + optional: true + + "@unrs/resolver-binding-linux-s390x-gnu@1.11.1": + optional: true + + "@unrs/resolver-binding-linux-x64-gnu@1.11.1": + optional: true + + "@unrs/resolver-binding-linux-x64-musl@1.11.1": + optional: true + + "@unrs/resolver-binding-wasm32-wasi@1.11.1": + dependencies: + "@napi-rs/wasm-runtime": 0.2.12 + optional: true + + "@unrs/resolver-binding-win32-arm64-msvc@1.11.1": + optional: true + + "@unrs/resolver-binding-win32-ia32-msvc@1.11.1": + optional: true + + "@unrs/resolver-binding-win32-x64-msvc@1.11.1": + optional: true + + "@yao-pkg/pkg-fetch@3.5.30": + dependencies: + https-proxy-agent: 5.0.1 + node-fetch: 2.7.0 + picocolors: 1.1.1 + progress: 2.0.3 + semver: 7.7.3 + tar-fs: 3.1.1 + yargs: 16.2.0 + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - encoding + - react-native-b4a + - supports-color + + "@yao-pkg/pkg@6.10.1": + dependencies: + "@babel/generator": 7.28.0 + "@babel/parser": 7.28.0 + "@babel/types": 7.28.2 + "@yao-pkg/pkg-fetch": 3.5.30 + into-stream: 6.0.0 + minimist: 1.2.8 + multistream: 4.1.0 + picocolors: 1.1.1 + picomatch: 4.0.3 + prebuild-install: 7.1.3 + resolve: 1.22.10 + stream-meter: 1.0.4 + tar: 7.5.2 + tinyglobby: 0.2.15 + unzipper: 0.12.3 + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - encoding + - react-native-b4a + - supports-color + + "@yarnpkg/lockfile@1.1.0": {} + + "@yarnpkg/parsers@3.0.2": + dependencies: + js-yaml: 3.14.1 + tslib: 2.8.1 + + "@zkochan/js-yaml@0.0.7": + dependencies: + argparse: 2.0.1 + + JSONStream@1.3.5: + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 + + acorn-jsx@5.3.2(acorn@8.15.0): + dependencies: + acorn: 8.15.0 + + acorn-walk@8.3.4: + dependencies: + acorn: 8.15.0 + + acorn@8.15.0: {} + + add-stream@1.0.0: {} + + address@1.2.2: {} + + agent-base@6.0.2: + dependencies: + debug: 4.4.1(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + agent-base@7.1.4: {} + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.0.6 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + ansi-colors@4.1.3: {} + + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + + ansi-escapes@6.2.1: {} + + ansi-regex@5.0.1: {} + + ansi-regex@6.1.0: {} + + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@5.2.0: {} + + ansi-styles@6.2.1: {} + + any-promise@1.3.0: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + arg@4.1.3: {} + + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 + + argparse@2.0.1: {} + + aria-hidden@1.2.6: + dependencies: + tslib: 2.8.1 + + aria-query@5.3.2: {} + + array-buffer-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + is-array-buffer: 3.0.5 + + array-ify@1.0.0: {} + + array-includes@3.1.9: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + is-string: 1.1.1 + math-intrinsics: 1.1.0 + + array-union@2.1.0: {} + + array.prototype.findlast@1.2.5: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-shim-unscopables: 1.1.0 + + array.prototype.findlastindex@1.2.6: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-shim-unscopables: 1.1.0 + + array.prototype.flat@1.3.3: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-shim-unscopables: 1.1.0 + + array.prototype.flatmap@1.3.3: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-shim-unscopables: 1.1.0 + + array.prototype.tosorted@1.1.4: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + es-shim-unscopables: 1.1.0 + + arraybuffer.prototype.slice@1.0.4: + dependencies: + array-buffer-byte-length: 1.0.2 + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + is-array-buffer: 3.0.5 + + arrify@1.0.1: {} + + assertion-error@1.1.0: {} + + ast-types-flow@0.0.8: {} + + ast-types@0.13.4: + dependencies: + tslib: 2.8.1 + + astring@1.9.0: {} + + async-function@1.0.0: {} + + async-retry@1.3.3: + dependencies: + retry: 0.13.1 + + async@3.2.6: {} + + asynckit@0.4.0: {} + + at-least-node@1.0.0: {} + + auto-bind@5.0.1: {} + + autoprefixer@10.4.21(postcss@8.5.6): + dependencies: + browserslist: 4.25.1 + caniuse-lite: 1.0.30001727 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.1.1 + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.1.0 + + axe-core@4.10.3: {} + + axios-retry@4.5.0(axios@1.10.0): + dependencies: + axios: 1.10.0 + is-retry-allowed: 2.2.0 + + axios@1.10.0: + dependencies: + follow-redirects: 1.15.9 + form-data: 4.0.3 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + axobject-query@4.1.0: {} + + b4a@1.7.3: {} + + babel-jest@29.7.0(@babel/core@7.28.0): + dependencies: + "@babel/core": 7.28.0 + "@jest/transform": 29.7.0 + "@types/babel__core": 7.20.5 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 29.6.3(@babel/core@7.28.0) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + + babel-jest@30.0.5(@babel/core@7.28.0): + dependencies: + "@babel/core": 7.28.0 + "@jest/transform": 30.0.5 + "@types/babel__core": 7.20.5 + babel-plugin-istanbul: 7.0.0 + babel-preset-jest: 30.0.1(@babel/core@7.28.0) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-const-enum@1.2.0(@babel/core@7.28.0): + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + "@babel/plugin-syntax-typescript": 7.27.1(@babel/core@7.28.0) + "@babel/traverse": 7.28.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-istanbul@6.1.1: + dependencies: + "@babel/helper-plugin-utils": 7.27.1 + "@istanbuljs/load-nyc-config": 1.1.0 + "@istanbuljs/schema": 0.1.3 + istanbul-lib-instrument: 5.2.1 + test-exclude: 6.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-istanbul@7.0.0: + dependencies: + "@babel/helper-plugin-utils": 7.27.1 + "@istanbuljs/load-nyc-config": 1.1.0 + "@istanbuljs/schema": 0.1.3 + istanbul-lib-instrument: 6.0.3 + test-exclude: 6.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-jest-hoist@29.6.3: + dependencies: + "@babel/template": 7.27.2 + "@babel/types": 7.28.2 + "@types/babel__core": 7.20.5 + "@types/babel__traverse": 7.20.7 + + babel-plugin-jest-hoist@30.0.1: + dependencies: + "@babel/template": 7.27.2 + "@babel/types": 7.28.2 + "@types/babel__core": 7.20.5 + + babel-plugin-macros@3.1.0: + dependencies: + "@babel/runtime": 7.28.2 + cosmiconfig: 7.1.0 + resolve: 1.22.10 + + babel-plugin-polyfill-corejs2@0.4.14(@babel/core@7.28.0): + dependencies: + "@babel/compat-data": 7.28.0 + "@babel/core": 7.28.0 + "@babel/helper-define-polyfill-provider": 0.6.5(@babel/core@7.28.0) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.28.0): + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-define-polyfill-provider": 0.6.5(@babel/core@7.28.0) + core-js-compat: 3.44.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-regenerator@0.6.5(@babel/core@7.28.0): + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-define-polyfill-provider": 0.6.5(@babel/core@7.28.0) + transitivePeerDependencies: + - supports-color + + babel-plugin-transform-typescript-metadata@0.3.2(@babel/core@7.28.0)(@babel/traverse@7.28.0): + dependencies: + "@babel/core": 7.28.0 + "@babel/helper-plugin-utils": 7.27.1 + optionalDependencies: + "@babel/traverse": 7.28.0 + + babel-preset-current-node-syntax@1.1.0(@babel/core@7.28.0): + dependencies: + "@babel/core": 7.28.0 + "@babel/plugin-syntax-async-generators": 7.8.4(@babel/core@7.28.0) + "@babel/plugin-syntax-bigint": 7.8.3(@babel/core@7.28.0) + "@babel/plugin-syntax-class-properties": 7.12.13(@babel/core@7.28.0) + "@babel/plugin-syntax-class-static-block": 7.14.5(@babel/core@7.28.0) + "@babel/plugin-syntax-import-attributes": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-syntax-import-meta": 7.10.4(@babel/core@7.28.0) + "@babel/plugin-syntax-json-strings": 7.8.3(@babel/core@7.28.0) + "@babel/plugin-syntax-logical-assignment-operators": 7.10.4(@babel/core@7.28.0) + "@babel/plugin-syntax-nullish-coalescing-operator": 7.8.3(@babel/core@7.28.0) + "@babel/plugin-syntax-numeric-separator": 7.10.4(@babel/core@7.28.0) + "@babel/plugin-syntax-object-rest-spread": 7.8.3(@babel/core@7.28.0) + "@babel/plugin-syntax-optional-catch-binding": 7.8.3(@babel/core@7.28.0) + "@babel/plugin-syntax-optional-chaining": 7.8.3(@babel/core@7.28.0) + "@babel/plugin-syntax-private-property-in-object": 7.14.5(@babel/core@7.28.0) + "@babel/plugin-syntax-top-level-await": 7.14.5(@babel/core@7.28.0) + + babel-preset-jest@29.6.3(@babel/core@7.28.0): + dependencies: + "@babel/core": 7.28.0 + babel-plugin-jest-hoist: 29.6.3 + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.28.0) + + babel-preset-jest@30.0.1(@babel/core@7.28.0): + dependencies: + "@babel/core": 7.28.0 + babel-plugin-jest-hoist: 30.0.1 + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.28.0) + + bail@2.0.2: {} + + balanced-match@1.0.2: {} + + bare-events@2.8.2: {} + + bare-fs@4.5.1: + dependencies: + bare-events: 2.8.2 + bare-path: 3.0.0 + bare-stream: 2.7.0(bare-events@2.8.2) + bare-url: 2.3.2 + fast-fifo: 1.3.2 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + optional: true + + bare-os@3.6.2: + optional: true + + bare-path@3.0.0: + dependencies: + bare-os: 3.6.2 + optional: true + + bare-stream@2.7.0(bare-events@2.8.2): + dependencies: + streamx: 2.23.0 + optionalDependencies: + bare-events: 2.8.2 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + optional: true + + bare-url@2.3.2: + dependencies: + bare-path: 3.0.0 + optional: true + + base64-js@1.5.1: {} + + basic-ftp@5.0.5: {} + + before-after-hook@4.0.0: {} + + binary-extensions@2.3.0: {} + + bl@4.1.0: + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + + bluebird@3.7.2: {} + + boolbase@1.0.0: {} + + brace-expansion@1.1.12: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.2: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browser-stdout@1.3.1: {} + + browserslist@4.25.1: + dependencies: + caniuse-lite: 1.0.30001727 + electron-to-chromium: 1.5.191 + node-releases: 2.0.19 + update-browserslist-db: 1.1.3(browserslist@4.25.1) + + bser@2.1.1: + dependencies: + node-int64: 0.4.0 + + buffer-from@1.1.2: {} + + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + bundle-name@4.1.0: + dependencies: + run-applescript: 7.1.0 + + bundle-require@5.1.0(esbuild@0.25.8): + dependencies: + esbuild: 0.25.8 + load-tsconfig: 0.2.5 + + c12@3.3.1: + dependencies: + chokidar: 4.0.3 + confbox: 0.2.2 + defu: 6.1.4 + dotenv: 17.2.3 + exsolve: 1.0.8 + giget: 2.0.0 + jiti: 2.6.1 + ohash: 2.0.11 + pathe: 2.0.3 + perfect-debounce: 2.0.0 + pkg-types: 2.3.0 + rc9: 2.1.2 + + c8@10.1.3: + dependencies: + "@bcoe/v8-coverage": 1.0.2 + "@istanbuljs/schema": 0.1.3 + find-up: 5.0.0 + foreground-child: 3.3.1 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-report: 3.0.1 + istanbul-reports: 3.1.7 + test-exclude: 7.0.1 + v8-to-istanbul: 9.3.0 + yargs: 17.7.2 + yargs-parser: 21.1.1 + + cac@6.7.14: {} + + cachedir@2.3.0: {} + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bind@1.0.8: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 + set-function-length: 1.2.2 + + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + + callsites@3.1.0: {} + + camelcase@5.3.1: {} + + camelcase@6.3.0: {} + + caniuse-api@3.0.0: + dependencies: + browserslist: 4.25.1 + caniuse-lite: 1.0.30001727 + lodash.memoize: 4.1.2 + lodash.uniq: 4.5.0 + + caniuse-lite@1.0.30001727: {} + + ccount@2.0.1: {} + + chai@4.5.0: + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.3 + deep-eql: 4.1.4 + get-func-name: 2.0.2 + loupe: 2.3.7 + pathval: 1.1.1 + type-detect: 4.1.0 + + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.4.1: {} + + chalk@5.6.2: {} + + char-regex@1.0.2: {} + + character-entities-html4@2.1.0: {} + + character-entities-legacy@3.0.0: {} + + character-entities@2.0.2: {} + + character-reference-invalid@2.0.1: {} + + chardet@0.7.0: {} + + chardet@2.1.1: {} + + check-error@1.0.3: + dependencies: + get-func-name: 2.0.2 + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + chokidar@4.0.3: + dependencies: + readdirp: 4.1.2 + + chownr@1.1.4: {} + + chownr@3.0.0: {} + + ci-info@3.9.0: {} + + ci-info@4.3.0: {} + + citty@0.1.6: + dependencies: + consola: 3.4.2 + + cjs-module-lexer@1.4.3: {} + + cjs-module-lexer@2.1.0: {} + + class-variance-authority@0.7.1: + dependencies: + clsx: 2.1.1 + + cli-boxes@3.0.0: {} + + cli-cursor@3.1.0: + dependencies: + restore-cursor: 3.1.0 + + cli-cursor@4.0.0: + dependencies: + restore-cursor: 4.0.0 + + cli-cursor@5.0.0: + dependencies: + restore-cursor: 5.1.0 + + cli-spinners@2.6.1: {} + + cli-spinners@3.3.0: {} + + cli-truncate@3.1.0: + dependencies: + slice-ansi: 5.0.0 + string-width: 5.1.2 + + cli-width@3.0.0: {} + + cli-width@4.1.0: {} + + client-only@0.0.1: {} + + cliui@7.0.4: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + clone@1.0.4: {} + + clsx@2.1.1: {} + + co@4.6.0: {} + + code-excerpt@4.0.0: + dependencies: + convert-to-spaces: 2.0.1 + + collapse-white-space@2.1.0: {} + + collect-v8-coverage@1.0.2: {} + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.3: {} + + color-name@1.1.4: {} + + colord@2.9.3: {} + + colorette@1.4.0: {} + + columnify@1.6.0: + dependencies: + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + comma-separated-tokens@2.0.3: {} + + commander@12.1.0: {} + + commander@4.1.1: {} + + commander@7.2.0: {} + + commitizen@4.3.1(@types/node@18.19.120)(typescript@5.9.3): + dependencies: + cachedir: 2.3.0 + cz-conventional-changelog: 3.3.0(@types/node@18.19.120)(typescript@5.9.3) + dedent: 0.7.0 + detect-indent: 6.1.0 + find-node-modules: 2.1.3 + find-root: 1.1.0 + fs-extra: 9.1.0 + glob: 7.2.3 + inquirer: 8.2.5 + is-utf8: 0.2.1 + lodash: 4.17.21 + minimist: 1.2.7 + strip-bom: 4.0.0 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - "@types/node" + - typescript + + commondir@1.0.1: {} + + compare-func@2.0.0: + dependencies: + array-ify: 1.0.0 + dot-prop: 5.3.0 + + compute-scroll-into-view@3.1.1: {} + + concat-map@0.0.1: {} + + concat-stream@2.0.0: + dependencies: + buffer-from: 1.1.2 + inherits: 2.0.4 + readable-stream: 3.6.2 + typedarray: 0.0.6 + + concat-with-sourcemaps@1.1.0: + dependencies: + source-map: 0.6.1 + + confbox@0.1.8: {} + + confbox@0.2.2: {} + + consola@3.4.2: {} + + conventional-changelog-angular@7.0.0: + dependencies: + compare-func: 2.0.0 + + conventional-changelog-angular@8.1.0: + dependencies: + compare-func: 2.0.0 + + conventional-changelog-atom@5.0.0: {} + + conventional-changelog-codemirror@5.0.0: {} + + conventional-changelog-conventionalcommits@7.0.2: + dependencies: + compare-func: 2.0.0 + + conventional-changelog-conventionalcommits@8.0.0: + dependencies: + compare-func: 2.0.0 + + conventional-changelog-core@8.0.0(conventional-commits-filter@5.0.0): + dependencies: + "@hutson/parse-repository-url": 5.0.0 + add-stream: 1.0.0 + conventional-changelog-writer: 8.2.0 + conventional-commits-parser: 6.2.1 + git-raw-commits: 5.0.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.2.1) + git-semver-tags: 8.0.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.2.1) + hosted-git-info: 7.0.2 + normalize-package-data: 6.0.2 + read-package-up: 11.0.0 + read-pkg: 9.0.1 + transitivePeerDependencies: + - conventional-commits-filter + + conventional-changelog-ember@5.0.0: {} + + conventional-changelog-eslint@6.0.0: {} + + conventional-changelog-express@5.0.0: {} + + conventional-changelog-jquery@6.0.0: {} + + conventional-changelog-jshint@5.0.0: + dependencies: + compare-func: 2.0.0 + + conventional-changelog-preset-loader@5.0.0: {} + + conventional-changelog-writer@8.2.0: + dependencies: + conventional-commits-filter: 5.0.0 + handlebars: 4.7.8 + meow: 13.2.0 + semver: 7.7.3 + + conventional-changelog@6.0.0(conventional-commits-filter@5.0.0): + dependencies: + conventional-changelog-angular: 8.1.0 + conventional-changelog-atom: 5.0.0 + conventional-changelog-codemirror: 5.0.0 + conventional-changelog-conventionalcommits: 8.0.0 + conventional-changelog-core: 8.0.0(conventional-commits-filter@5.0.0) + conventional-changelog-ember: 5.0.0 + conventional-changelog-eslint: 6.0.0 + conventional-changelog-express: 5.0.0 + conventional-changelog-jquery: 6.0.0 + conventional-changelog-jshint: 5.0.0 + conventional-changelog-preset-loader: 5.0.0 + transitivePeerDependencies: + - conventional-commits-filter + + conventional-commit-types@3.0.0: {} + + conventional-commits-filter@5.0.0: {} + + conventional-commits-parser@5.0.0: + dependencies: + JSONStream: 1.3.5 + is-text-path: 2.0.0 + meow: 12.1.1 + split2: 4.2.0 + + conventional-commits-parser@6.2.1: + dependencies: + meow: 13.2.0 + + conventional-recommended-bump@10.0.0: + dependencies: + "@conventional-changelog/git-client": 1.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.2.1) + conventional-changelog-preset-loader: 5.0.0 + conventional-commits-filter: 5.0.0 + conventional-commits-parser: 6.2.1 + meow: 13.2.0 + + convert-source-map@2.0.0: {} + + convert-to-spaces@2.0.1: {} + + core-js-compat@3.44.0: + dependencies: + browserslist: 4.25.1 + + core-util-is@1.0.3: {} + + cosmiconfig-typescript-loader@6.1.0(@types/node@18.19.120)(cosmiconfig@9.0.0(typescript@5.9.3))(typescript@5.9.3): + dependencies: + "@types/node": 18.19.120 + cosmiconfig: 9.0.0(typescript@5.9.3) + jiti: 2.4.2 + typescript: 5.9.3 + + cosmiconfig@7.1.0: + dependencies: + "@types/parse-json": 4.0.2 + import-fresh: 3.3.1 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + + cosmiconfig@9.0.0(typescript@5.9.3): + dependencies: + env-paths: 2.2.1 + import-fresh: 3.3.1 + js-yaml: 4.1.0 + parse-json: 5.2.0 + optionalDependencies: + typescript: 5.9.3 + + create-jest@29.7.0(@types/node@18.19.120)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@18.19.120)(typescript@5.9.3)): + dependencies: + "@jest/types": 29.6.3 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-config: 29.7.0(@types/node@18.19.120)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@18.19.120)(typescript@5.9.3)) + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - "@types/node" + - babel-plugin-macros + - supports-color + - ts-node + + create-require@1.1.1: {} + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + css-declaration-sorter@6.4.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + css-select@4.3.0: + dependencies: + boolbase: 1.0.0 + css-what: 6.2.2 + domhandler: 4.3.1 + domutils: 2.8.0 + nth-check: 2.1.1 + + css-tree@1.1.3: + dependencies: + mdn-data: 2.0.14 + source-map: 0.6.1 + + css-what@6.2.2: {} + + cssesc@3.0.0: {} + + cssnano-preset-default@5.2.14(postcss@8.5.6): + dependencies: + css-declaration-sorter: 6.4.1(postcss@8.5.6) + cssnano-utils: 3.1.0(postcss@8.5.6) + postcss: 8.5.6 + postcss-calc: 8.2.4(postcss@8.5.6) + postcss-colormin: 5.3.1(postcss@8.5.6) + postcss-convert-values: 5.1.3(postcss@8.5.6) + postcss-discard-comments: 5.1.2(postcss@8.5.6) + postcss-discard-duplicates: 5.1.0(postcss@8.5.6) + postcss-discard-empty: 5.1.1(postcss@8.5.6) + postcss-discard-overridden: 5.1.0(postcss@8.5.6) + postcss-merge-longhand: 5.1.7(postcss@8.5.6) + postcss-merge-rules: 5.1.4(postcss@8.5.6) + postcss-minify-font-values: 5.1.0(postcss@8.5.6) + postcss-minify-gradients: 5.1.1(postcss@8.5.6) + postcss-minify-params: 5.1.4(postcss@8.5.6) + postcss-minify-selectors: 5.2.1(postcss@8.5.6) + postcss-normalize-charset: 5.1.0(postcss@8.5.6) + postcss-normalize-display-values: 5.1.0(postcss@8.5.6) + postcss-normalize-positions: 5.1.1(postcss@8.5.6) + postcss-normalize-repeat-style: 5.1.1(postcss@8.5.6) + postcss-normalize-string: 5.1.0(postcss@8.5.6) + postcss-normalize-timing-functions: 5.1.0(postcss@8.5.6) + postcss-normalize-unicode: 5.1.1(postcss@8.5.6) + postcss-normalize-url: 5.1.0(postcss@8.5.6) + postcss-normalize-whitespace: 5.1.1(postcss@8.5.6) + postcss-ordered-values: 5.1.3(postcss@8.5.6) + postcss-reduce-initial: 5.1.2(postcss@8.5.6) + postcss-reduce-transforms: 5.1.0(postcss@8.5.6) + postcss-svgo: 5.1.0(postcss@8.5.6) + postcss-unique-selectors: 5.1.1(postcss@8.5.6) + + cssnano-utils@3.1.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + cssnano@5.1.15(postcss@8.5.6): + dependencies: + cssnano-preset-default: 5.2.14(postcss@8.5.6) + lilconfig: 2.1.0 + postcss: 8.5.6 + yaml: 1.10.2 + + csso@4.2.0: + dependencies: + css-tree: 1.1.3 + + csstype@3.2.1: {} + + cz-conventional-changelog@3.3.0(@types/node@18.19.120)(typescript@5.9.3): + dependencies: + chalk: 2.4.2 + commitizen: 4.3.1(@types/node@18.19.120)(typescript@5.9.3) + conventional-commit-types: 3.0.0 + lodash.map: 4.6.0 + longest: 2.0.1 + word-wrap: 1.2.5 + optionalDependencies: + "@commitlint/load": 19.8.1(@types/node@18.19.120)(typescript@5.9.3) + transitivePeerDependencies: + - "@types/node" + - typescript + + cz-conventional-commit@1.0.6(@types/node@18.19.120)(typescript@5.9.3): + dependencies: + chalk: 2.4.2 + commitizen: 4.3.1(@types/node@18.19.120)(typescript@5.9.3) + lodash.map: 4.6.0 + longest: 2.0.1 + right-pad: 1.1.1 + word-wrap: 1.2.5 + optionalDependencies: + "@commitlint/load": 19.8.1(@types/node@18.19.120)(typescript@5.9.3) + transitivePeerDependencies: + - "@types/node" + - typescript + + cz-git@1.12.0: {} + + damerau-levenshtein@1.0.8: {} + + dargs@8.1.0: {} + + data-uri-to-buffer@6.0.2: {} + + data-view-buffer@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-offset@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + debug@3.2.7: + dependencies: + ms: 2.1.3 + + debug@4.4.1(supports-color@8.1.1): + dependencies: + ms: 2.1.3 + optionalDependencies: + supports-color: 8.1.1 + + decamelize@4.0.0: {} + + decode-named-character-reference@1.2.0: + dependencies: + character-entities: 2.0.2 + + decompress-response@6.0.0: + dependencies: + mimic-response: 3.1.0 + + dedent@0.7.0: {} + + dedent@1.6.0(babel-plugin-macros@3.1.0): + optionalDependencies: + babel-plugin-macros: 3.1.0 + + deep-eql@4.1.4: + dependencies: + type-detect: 4.1.0 + + deep-extend@0.6.0: {} + + deep-is@0.1.4: {} + + deepmerge@4.3.1: {} + + default-browser-id@5.0.1: {} + + default-browser@5.4.0: + dependencies: + bundle-name: 4.1.0 + default-browser-id: 5.0.1 + + defaults@1.0.4: + dependencies: + clone: 1.0.4 + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + + define-lazy-prop@2.0.0: {} + + define-lazy-prop@3.0.0: {} + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + + defu@6.1.4: {} + + degenerator@5.0.1: + dependencies: + ast-types: 0.13.4 + escodegen: 2.1.0 + esprima: 4.0.1 + + delayed-stream@1.0.0: {} + + dequal@2.0.3: {} + + destr@2.0.5: {} + + detect-file@1.0.0: {} + + detect-indent@6.1.0: {} + + detect-libc@2.1.2: {} + + detect-newline@3.1.0: {} + + detect-node-es@1.1.0: {} + + detect-port@1.6.1: + dependencies: + address: 1.2.2 + debug: 4.4.1(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + devlop@1.1.0: + dependencies: + dequal: 2.0.3 + + diff-sequences@29.6.3: {} + + diff@3.5.0: {} + + diff@4.0.2: {} + + diff@5.2.0: {} + + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + + doctrine@2.1.0: + dependencies: + esutils: 2.0.3 + + dom-serializer@1.4.1: + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + entities: 2.2.0 + + domelementtype@2.3.0: {} + + domhandler@4.3.1: + dependencies: + domelementtype: 2.3.0 + + domutils@2.8.0: + dependencies: + dom-serializer: 1.4.1 + domelementtype: 2.3.0 + domhandler: 4.3.1 + + dot-prop@5.3.0: + dependencies: + is-obj: 2.0.0 + + dotenv-expand@11.0.7: + dependencies: + dotenv: 16.4.7 + + dotenv@16.4.7: {} + + dotenv@17.2.3: {} + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + duplexer2@0.1.4: + dependencies: + readable-stream: 2.3.8 + + eastasianwidth@0.2.0: {} + + ejs@3.1.10: + dependencies: + jake: 10.9.2 + + electron-to-chromium@1.5.191: {} + + emittery@0.13.1: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + end-of-stream@1.4.5: + dependencies: + once: 1.4.0 + + enhanced-resolve@5.18.3: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.3.0 + + enquirer@2.3.6: + dependencies: + ansi-colors: 4.1.3 + + enquirer@2.4.1: + dependencies: + ansi-colors: 4.1.3 + strip-ansi: 6.0.1 + + entities@2.2.0: {} + + entities@4.5.0: {} + + env-paths@2.2.1: {} + + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + + es-abstract@1.24.0: + dependencies: + array-buffer-byte-length: 1.0.2 + arraybuffer.prototype.slice: 1.0.4 + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + data-view-buffer: 1.0.2 + data-view-byte-length: 1.0.2 + data-view-byte-offset: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-set-tostringtag: 2.1.0 + es-to-primitive: 1.3.0 + function.prototype.name: 1.1.8 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + get-symbol-description: 1.1.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + internal-slot: 1.1.0 + is-array-buffer: 3.0.5 + is-callable: 1.2.7 + is-data-view: 1.0.2 + is-negative-zero: 2.0.3 + is-regex: 1.2.1 + is-set: 2.0.3 + is-shared-array-buffer: 1.0.4 + is-string: 1.1.1 + is-typed-array: 1.1.15 + is-weakref: 1.1.1 + math-intrinsics: 1.1.0 + object-inspect: 1.13.4 + object-keys: 1.1.1 + object.assign: 4.1.7 + own-keys: 1.0.1 + regexp.prototype.flags: 1.5.4 + safe-array-concat: 1.1.3 + safe-push-apply: 1.0.0 + safe-regex-test: 1.1.0 + set-proto: 1.0.0 + stop-iteration-iterator: 1.1.0 + string.prototype.trim: 1.2.10 + string.prototype.trimend: 1.0.9 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.3 + typed-array-byte-length: 1.0.3 + typed-array-byte-offset: 1.0.4 + typed-array-length: 1.0.7 + unbox-primitive: 1.1.0 + which-typed-array: 1.1.19 + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-iterator-helpers@1.2.1: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + es-set-tostringtag: 2.1.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + internal-slot: 1.1.0 + iterator.prototype: 1.1.5 + safe-array-concat: 1.1.3 + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + es-shim-unscopables@1.1.0: + dependencies: + hasown: 2.0.2 + + es-to-primitive@1.3.0: + dependencies: + is-callable: 1.2.7 + is-date-object: 1.1.0 + is-symbol: 1.1.1 + + esast-util-from-estree@2.0.0: + dependencies: + "@types/estree-jsx": 1.0.5 + devlop: 1.1.0 + estree-util-visit: 2.0.0 + unist-util-position-from-estree: 2.0.0 + + esast-util-from-js@2.0.1: + dependencies: + "@types/estree-jsx": 1.0.5 + acorn: 8.15.0 + esast-util-from-estree: 2.0.0 + vfile-message: 4.0.3 + + esbuild@0.21.5: + optionalDependencies: + "@esbuild/aix-ppc64": 0.21.5 + "@esbuild/android-arm": 0.21.5 + "@esbuild/android-arm64": 0.21.5 + "@esbuild/android-x64": 0.21.5 + "@esbuild/darwin-arm64": 0.21.5 + "@esbuild/darwin-x64": 0.21.5 + "@esbuild/freebsd-arm64": 0.21.5 + "@esbuild/freebsd-x64": 0.21.5 + "@esbuild/linux-arm": 0.21.5 + "@esbuild/linux-arm64": 0.21.5 + "@esbuild/linux-ia32": 0.21.5 + "@esbuild/linux-loong64": 0.21.5 + "@esbuild/linux-mips64el": 0.21.5 + "@esbuild/linux-ppc64": 0.21.5 + "@esbuild/linux-riscv64": 0.21.5 + "@esbuild/linux-s390x": 0.21.5 + "@esbuild/linux-x64": 0.21.5 + "@esbuild/netbsd-x64": 0.21.5 + "@esbuild/openbsd-x64": 0.21.5 + "@esbuild/sunos-x64": 0.21.5 + "@esbuild/win32-arm64": 0.21.5 + "@esbuild/win32-ia32": 0.21.5 + "@esbuild/win32-x64": 0.21.5 + + esbuild@0.25.12: + optionalDependencies: + "@esbuild/aix-ppc64": 0.25.12 + "@esbuild/android-arm": 0.25.12 + "@esbuild/android-arm64": 0.25.12 + "@esbuild/android-x64": 0.25.12 + "@esbuild/darwin-arm64": 0.25.12 + "@esbuild/darwin-x64": 0.25.12 + "@esbuild/freebsd-arm64": 0.25.12 + "@esbuild/freebsd-x64": 0.25.12 + "@esbuild/linux-arm": 0.25.12 + "@esbuild/linux-arm64": 0.25.12 + "@esbuild/linux-ia32": 0.25.12 + "@esbuild/linux-loong64": 0.25.12 + "@esbuild/linux-mips64el": 0.25.12 + "@esbuild/linux-ppc64": 0.25.12 + "@esbuild/linux-riscv64": 0.25.12 + "@esbuild/linux-s390x": 0.25.12 + "@esbuild/linux-x64": 0.25.12 + "@esbuild/netbsd-arm64": 0.25.12 + "@esbuild/netbsd-x64": 0.25.12 + "@esbuild/openbsd-arm64": 0.25.12 + "@esbuild/openbsd-x64": 0.25.12 + "@esbuild/openharmony-arm64": 0.25.12 + "@esbuild/sunos-x64": 0.25.12 + "@esbuild/win32-arm64": 0.25.12 + "@esbuild/win32-ia32": 0.25.12 + "@esbuild/win32-x64": 0.25.12 + + esbuild@0.25.8: + optionalDependencies: + "@esbuild/aix-ppc64": 0.25.8 + "@esbuild/android-arm": 0.25.8 + "@esbuild/android-arm64": 0.25.8 + "@esbuild/android-x64": 0.25.8 + "@esbuild/darwin-arm64": 0.25.8 + "@esbuild/darwin-x64": 0.25.8 + "@esbuild/freebsd-arm64": 0.25.8 + "@esbuild/freebsd-x64": 0.25.8 + "@esbuild/linux-arm": 0.25.8 + "@esbuild/linux-arm64": 0.25.8 + "@esbuild/linux-ia32": 0.25.8 + "@esbuild/linux-loong64": 0.25.8 + "@esbuild/linux-mips64el": 0.25.8 + "@esbuild/linux-ppc64": 0.25.8 + "@esbuild/linux-riscv64": 0.25.8 + "@esbuild/linux-s390x": 0.25.8 + "@esbuild/linux-x64": 0.25.8 + "@esbuild/netbsd-arm64": 0.25.8 + "@esbuild/netbsd-x64": 0.25.8 + "@esbuild/openbsd-arm64": 0.25.8 + "@esbuild/openbsd-x64": 0.25.8 + "@esbuild/openharmony-arm64": 0.25.8 + "@esbuild/sunos-x64": 0.25.8 + "@esbuild/win32-arm64": 0.25.8 + "@esbuild/win32-ia32": 0.25.8 + "@esbuild/win32-x64": 0.25.8 + + escalade@3.2.0: {} + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@2.0.0: {} + + escape-string-regexp@4.0.0: {} + + escape-string-regexp@5.0.0: {} + + escodegen@2.1.0: + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionalDependencies: + source-map: 0.6.1 + + eslint-config-next@16.0.1(@typescript-eslint/parser@8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3): + dependencies: + "@next/eslint-plugin-next": 16.0.1 + eslint: 9.39.1(jiti@2.6.1) + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@2.6.1)) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.1(jiti@2.6.1)) + eslint-plugin-react: 7.37.5(eslint@9.39.1(jiti@2.6.1)) + eslint-plugin-react-hooks: 7.0.1(eslint@9.39.1(jiti@2.6.1)) + globals: 16.4.0 + typescript-eslint: 8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + optionalDependencies: + typescript: 5.9.3 + transitivePeerDependencies: + - "@typescript-eslint/parser" + - eslint-import-resolver-webpack + - eslint-plugin-import-x + - supports-color + + eslint-config-prettier@10.1.8(eslint@9.39.1(jiti@2.6.1)): + dependencies: + eslint: 9.39.1(jiti@2.6.1) + + eslint-import-resolver-node@0.3.9: + dependencies: + debug: 3.2.7 + is-core-module: 2.16.1 + resolve: 1.22.10 + transitivePeerDependencies: + - supports-color + + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)): + dependencies: + "@nolyfill/is-core-module": 1.0.39 + debug: 4.4.1(supports-color@8.1.1) + eslint: 9.39.1(jiti@2.6.1) + get-tsconfig: 4.13.0 + is-bun-module: 2.0.0 + stable-hash: 0.0.5 + tinyglobby: 0.2.15 + unrs-resolver: 1.11.1 + optionalDependencies: + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@2.6.1)) + transitivePeerDependencies: + - supports-color + + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)): + dependencies: + debug: 3.2.7 + optionalDependencies: + "@typescript-eslint/parser": 8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.39.1(jiti@2.6.1) + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)) + transitivePeerDependencies: + - supports-color + + eslint-plugin-eslint-comments@3.2.0(eslint@9.39.1(jiti@2.6.1)): + dependencies: + escape-string-regexp: 1.0.5 + eslint: 9.39.1(jiti@2.6.1) + ignore: 5.3.2 + + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.39.1(jiti@2.6.1)): + dependencies: + "@rtsao/scc": 1.1.0 + array-includes: 3.1.9 + array.prototype.findlastindex: 1.2.6 + array.prototype.flat: 1.3.3 + array.prototype.flatmap: 1.3.3 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 9.39.1(jiti@2.6.1) + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1)) + hasown: 2.0.2 + is-core-module: 2.16.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.1 + semver: 6.3.1 + string.prototype.trimend: 1.0.9 + tsconfig-paths: 3.15.0 + optionalDependencies: + "@typescript-eslint/parser": 8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + + eslint-plugin-jsx-a11y@6.10.2(eslint@9.39.1(jiti@2.6.1)): + dependencies: + aria-query: 5.3.2 + array-includes: 3.1.9 + array.prototype.flatmap: 1.3.3 + ast-types-flow: 0.0.8 + axe-core: 4.10.3 + axobject-query: 4.1.0 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + eslint: 9.39.1(jiti@2.6.1) + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + language-tags: 1.0.9 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + safe-regex-test: 1.1.0 + string.prototype.includes: 2.0.1 + + eslint-plugin-prettier@5.5.3(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1))(prettier@3.6.2): + dependencies: + eslint: 9.39.1(jiti@2.6.1) + prettier: 3.6.2 + prettier-linter-helpers: 1.0.0 + synckit: 0.11.11 + optionalDependencies: + "@types/eslint": 9.6.1 + eslint-config-prettier: 10.1.8(eslint@9.39.1(jiti@2.6.1)) + + eslint-plugin-react-hooks@5.2.0(eslint@9.39.1(jiti@2.6.1)): + dependencies: + eslint: 9.39.1(jiti@2.6.1) + + eslint-plugin-react-hooks@7.0.1(eslint@9.39.1(jiti@2.6.1)): + dependencies: + "@babel/core": 7.28.0 + "@babel/parser": 7.28.0 + eslint: 9.39.1(jiti@2.6.1) + hermes-parser: 0.25.1 + zod: 4.1.12 + zod-validation-error: 4.0.2(zod@4.1.12) + transitivePeerDependencies: + - supports-color + + eslint-plugin-react@7.37.5(eslint@9.39.1(jiti@2.6.1)): + dependencies: + array-includes: 3.1.9 + array.prototype.findlast: 1.2.5 + array.prototype.flatmap: 1.3.3 + array.prototype.tosorted: 1.1.4 + doctrine: 2.1.0 + es-iterator-helpers: 1.2.1 + eslint: 9.39.1(jiti@2.6.1) + estraverse: 5.3.0 + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + object.entries: 1.1.9 + object.fromentries: 2.0.8 + object.values: 1.2.1 + prop-types: 15.8.1 + resolve: 2.0.0-next.5 + semver: 6.3.1 + string.prototype.matchall: 4.0.12 + string.prototype.repeat: 1.0.0 + + eslint-scope@8.4.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.2.1: {} + + eslint@9.39.1(jiti@2.6.1): + dependencies: + "@eslint-community/eslint-utils": 4.9.0(eslint@9.39.1(jiti@2.6.1)) + "@eslint-community/regexpp": 4.12.1 + "@eslint/config-array": 0.21.1 + "@eslint/config-helpers": 0.4.2 + "@eslint/core": 0.17.0 + "@eslint/eslintrc": 3.3.1 + "@eslint/js": 9.39.1 + "@eslint/plugin-kit": 0.4.1 + "@humanfs/node": 0.16.6 + "@humanwhocodes/module-importer": 1.0.1 + "@humanwhocodes/retry": 0.4.3 + "@types/estree": 1.0.8 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.1(supports-color@8.1.1) + escape-string-regexp: 4.0.0 + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + optionalDependencies: + jiti: 2.6.1 + transitivePeerDependencies: + - supports-color + + espree@10.4.0: + dependencies: + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + eslint-visitor-keys: 4.2.1 + + esprima@4.0.1: {} + + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + estree-util-attach-comments@3.0.0: + dependencies: + "@types/estree": 1.0.8 + + estree-util-build-jsx@3.0.1: + dependencies: + "@types/estree-jsx": 1.0.5 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + estree-walker: 3.0.3 + + estree-util-is-identifier-name@3.0.0: {} + + estree-util-scope@1.0.0: + dependencies: + "@types/estree": 1.0.8 + devlop: 1.1.0 + + estree-util-to-js@2.0.0: + dependencies: + "@types/estree-jsx": 1.0.5 + astring: 1.9.0 + source-map: 0.7.6 + + estree-util-value-to-estree@3.5.0: + dependencies: + "@types/estree": 1.0.8 + + estree-util-visit@2.0.0: + dependencies: + "@types/estree-jsx": 1.0.5 + "@types/unist": 3.0.3 + + estree-walker@0.6.1: {} + + estree-walker@2.0.2: {} + + estree-walker@3.0.3: + dependencies: + "@types/estree": 1.0.8 + + esutils@2.0.3: {} + + eta@4.0.1: {} + + eventemitter3@4.0.7: {} + + events-universal@1.0.1: + dependencies: + bare-events: 2.8.2 + transitivePeerDependencies: + - bare-abort-controller + + execa@5.1.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + + execa@8.0.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.3.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + + exit-x@0.2.2: {} + + exit@0.1.2: {} + + expand-template@2.0.3: {} + + expand-tilde@2.0.2: + dependencies: + homedir-polyfill: 1.0.3 + + expect@29.7.0: + dependencies: + "@jest/expect-utils": 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + + expect@30.0.5: + dependencies: + "@jest/expect-utils": 30.0.5 + "@jest/get-type": 30.0.1 + jest-matcher-utils: 30.0.5 + jest-message-util: 30.0.5 + jest-mock: 30.0.5 + jest-util: 30.0.5 + + exsolve@1.0.8: {} + + extend@3.0.2: {} + + external-editor@3.1.0: + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.0.33 + + fast-content-type-parse@3.0.0: {} + + fast-deep-equal@3.1.3: {} + + fast-diff@1.3.0: {} + + fast-fifo@1.3.2: {} + + fast-glob@3.3.1: + dependencies: + "@nodelib/fs.stat": 2.0.5 + "@nodelib/fs.walk": 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-glob@3.3.3: + dependencies: + "@nodelib/fs.stat": 2.0.5 + "@nodelib/fs.walk": 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fast-uri@3.0.6: {} + + fastq@1.19.1: + dependencies: + reusify: 1.1.0 + + fb-watchman@2.0.2: + dependencies: + bser: 2.1.1 + + fd-package-json@2.0.0: + dependencies: + walk-up-path: 4.0.0 + + fdir@6.4.6(picomatch@4.0.2): + optionalDependencies: + picomatch: 4.0.2 + + fdir@6.5.0(picomatch@4.0.3): + optionalDependencies: + picomatch: 4.0.3 + + figures@3.2.0: + dependencies: + escape-string-regexp: 1.0.5 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + filelist@1.0.4: + dependencies: + minimatch: 5.1.6 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-cache-dir@3.3.2: + dependencies: + commondir: 1.0.1 + make-dir: 3.1.0 + pkg-dir: 4.2.0 + + find-node-modules@2.1.3: + dependencies: + findup-sync: 4.0.0 + merge: 2.1.1 + + find-root@1.1.0: {} + + find-up-simple@1.0.1: {} + + find-up@4.1.0: + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + find-up@7.0.0: + dependencies: + locate-path: 7.2.0 + path-exists: 5.0.0 + unicorn-magic: 0.1.0 + + findup-sync@4.0.0: + dependencies: + detect-file: 1.0.0 + is-glob: 4.0.3 + micromatch: 4.0.8 + resolve-dir: 1.0.1 + + fix-dts-default-cjs-exports@1.0.1: + dependencies: + magic-string: 0.30.17 + mlly: 1.7.4 + rollup: 4.46.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.3.3 + keyv: 4.5.4 + + flat@5.0.2: {} + + flatted@3.3.3: {} + + follow-redirects@1.15.9: {} + + for-each@0.3.5: + dependencies: + is-callable: 1.2.7 + + foreground-child@3.3.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + form-data@4.0.3: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.2 + mime-types: 2.1.35 + + formatly@0.3.0: + dependencies: + fd-package-json: 2.0.0 + + fraction.js@4.3.7: {} + + from2@2.3.0: + dependencies: + inherits: 2.0.4 + readable-stream: 2.3.8 + + front-matter@4.0.2: + dependencies: + js-yaml: 3.14.1 + + fs-constants@1.0.0: {} + + fs-extra@10.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs-extra@11.3.2: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs-extra@8.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + + fs-extra@9.1.0: + dependencies: + at-least-node: 1.0.0 + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + fumadocs-core@16.0.11(@types/react@19.2.5)(lucide-react@0.552.0(react@19.2.0))(next@16.0.1(@babel/core@7.28.0)(babel-plugin-macros@3.1.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0): + dependencies: + "@formatjs/intl-localematcher": 0.6.2 + "@orama/orama": 3.1.16 + "@shikijs/rehype": 3.15.0 + "@shikijs/transformers": 3.15.0 + estree-util-value-to-estree: 3.5.0 + github-slugger: 2.0.0 + hast-util-to-estree: 3.1.3 + hast-util-to-jsx-runtime: 2.3.6 + image-size: 2.0.2 + negotiator: 1.0.0 + npm-to-yarn: 3.0.1 + path-to-regexp: 8.3.0 + remark: 15.0.1 + remark-gfm: 4.0.1 + remark-rehype: 11.1.2 + scroll-into-view-if-needed: 3.1.0 + shiki: 3.15.0 + unist-util-visit: 5.0.0 + optionalDependencies: + "@types/react": 19.2.5 + lucide-react: 0.552.0(react@19.2.0) + next: 16.0.1(@babel/core@7.28.0)(babel-plugin-macros@3.1.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + transitivePeerDependencies: + - supports-color + + fumadocs-mdx@13.0.8(fumadocs-core@16.0.11(@types/react@19.2.5)(lucide-react@0.552.0(react@19.2.0))(next@16.0.1(@babel/core@7.28.0)(babel-plugin-macros@3.1.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(next@16.0.1(@babel/core@7.28.0)(babel-plugin-macros@3.1.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0): + dependencies: + "@mdx-js/mdx": 3.1.1 + "@standard-schema/spec": 1.0.0 + chokidar: 4.0.3 + esbuild: 0.25.12 + estree-util-value-to-estree: 3.5.0 + fumadocs-core: 16.0.11(@types/react@19.2.5)(lucide-react@0.552.0(react@19.2.0))(next@16.0.1(@babel/core@7.28.0)(babel-plugin-macros@3.1.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + js-yaml: 4.1.0 + lru-cache: 11.2.2 + mdast-util-to-markdown: 2.1.2 + picocolors: 1.1.1 + picomatch: 4.0.3 + remark-mdx: 3.1.1 + tinyexec: 1.0.2 + tinyglobby: 0.2.15 + unified: 11.0.5 + unist-util-remove-position: 5.0.0 + unist-util-visit: 5.0.0 + zod: 4.1.12 + optionalDependencies: + next: 16.0.1(@babel/core@7.28.0)(babel-plugin-macros@3.1.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + react: 19.2.0 + transitivePeerDependencies: + - supports-color + + fumadocs-ui@16.0.11(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(lucide-react@0.552.0(react@19.2.0))(next@16.0.1(@babel/core@7.28.0)(babel-plugin-macros@3.1.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(tailwindcss@4.1.17): + dependencies: + "@radix-ui/react-accordion": 1.2.12(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + "@radix-ui/react-collapsible": 1.1.12(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + "@radix-ui/react-dialog": 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + "@radix-ui/react-direction": 1.1.1(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-navigation-menu": 1.2.14(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + "@radix-ui/react-popover": 1.1.15(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + "@radix-ui/react-presence": 1.1.5(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + "@radix-ui/react-scroll-area": 1.2.10(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + "@radix-ui/react-slot": 1.2.4(@types/react@19.2.5)(react@19.2.0) + "@radix-ui/react-tabs": 1.1.13(@types/react-dom@19.2.3(@types/react@19.2.5))(@types/react@19.2.5)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + class-variance-authority: 0.7.1 + fumadocs-core: 16.0.11(@types/react@19.2.5)(lucide-react@0.552.0(react@19.2.0))(next@16.0.1(@babel/core@7.28.0)(babel-plugin-macros@3.1.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + lodash.merge: 4.6.2 + next-themes: 0.4.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + postcss-selector-parser: 7.1.0 + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + react-medium-image-zoom: 5.4.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + scroll-into-view-if-needed: 3.1.0 + tailwind-merge: 3.4.0 + optionalDependencies: + "@types/react": 19.2.5 + next: 16.0.1(@babel/core@7.28.0)(babel-plugin-macros@3.1.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + tailwindcss: 4.1.17 + transitivePeerDependencies: + - "@mixedbread/sdk" + - "@orama/core" + - "@tanstack/react-router" + - "@types/react-dom" + - algoliasearch + - lucide-react + - react-router + - supports-color + - waku + + function-bind@1.1.2: {} + + function.prototype.name@1.1.8: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + functions-have-names: 1.2.3 + hasown: 2.0.2 + is-callable: 1.2.7 + + functions-have-names@1.2.3: {} + + generic-names@4.0.0: + dependencies: + loader-utils: 3.3.1 + + gensync@1.0.0-beta.2: {} + + get-caller-file@2.0.5: {} + + get-east-asian-width@1.4.0: {} + + get-func-name@2.0.2: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-nonce@1.0.1: {} + + get-package-type@0.1.0: {} + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + get-stream@6.0.1: {} + + get-stream@8.0.1: {} + + get-symbol-description@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + + get-tsconfig@4.13.0: + dependencies: + resolve-pkg-maps: 1.0.0 + + get-uri@6.0.5: + dependencies: + basic-ftp: 5.0.5 + data-uri-to-buffer: 6.0.2 + debug: 4.4.1(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + giget@2.0.0: + dependencies: + citty: 0.1.6 + consola: 3.4.2 + defu: 6.1.4 + node-fetch-native: 1.6.7 + nypm: 0.6.2 + pathe: 2.0.3 + + git-raw-commits@4.0.0: + dependencies: + dargs: 8.1.0 + meow: 12.1.1 + split2: 4.2.0 + + git-raw-commits@5.0.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.2.1): + dependencies: + "@conventional-changelog/git-client": 1.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.2.1) + meow: 13.2.0 + transitivePeerDependencies: + - conventional-commits-filter + - conventional-commits-parser + + git-semver-tags@8.0.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.2.1): + dependencies: + "@conventional-changelog/git-client": 1.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.2.1) + meow: 13.2.0 + transitivePeerDependencies: + - conventional-commits-filter + - conventional-commits-parser + + git-up@8.1.1: + dependencies: + is-ssh: 1.4.1 + parse-url: 9.2.0 + + git-url-parse@16.1.0: + dependencies: + git-up: 8.1.1 + + github-from-package@0.0.0: {} + + github-slugger@2.0.0: {} + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob@10.4.5: + dependencies: + foreground-child: 3.3.1 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + + glob@11.0.3: + dependencies: + foreground-child: 3.3.1 + jackspeak: 4.1.1 + minimatch: 10.0.3 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 2.0.0 + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + glob@8.1.0: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 5.1.6 + once: 1.4.0 + + global-directory@4.0.1: + dependencies: + ini: 4.1.1 + + global-modules@1.0.0: + dependencies: + global-prefix: 1.0.2 + is-windows: 1.0.2 + resolve-dir: 1.0.1 + + global-prefix@1.0.2: + dependencies: + expand-tilde: 2.0.2 + homedir-polyfill: 1.0.3 + ini: 1.3.8 + is-windows: 1.0.2 + which: 1.3.1 + + globals@14.0.0: {} + + globals@16.4.0: {} + + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.2.0 + + globby@10.0.1: + dependencies: + "@types/glob": 7.2.0 + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.3 + glob: 7.2.3 + ignore: 5.3.2 + merge2: 1.4.1 + slash: 3.0.0 + + gopd@1.2.0: {} + + graceful-fs@4.2.11: {} + + graphemer@1.4.0: {} + + growly@1.3.0: + optional: true + + handlebars@4.7.8: + dependencies: + minimist: 1.2.8 + neo-async: 2.6.2 + source-map: 0.6.1 + wordwrap: 1.0.0 + optionalDependencies: + uglify-js: 3.19.3 + + harmony-reflect@1.6.2: {} + + has-bigints@1.1.0: {} + + has-flag@3.0.0: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.1 + + has-proto@1.2.0: + dependencies: + dunder-proto: 1.0.1 + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + hast-util-to-estree@3.1.3: + dependencies: + "@types/estree": 1.0.8 + "@types/estree-jsx": 1.0.5 + "@types/hast": 3.0.4 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + estree-util-attach-comments: 3.0.0 + estree-util-is-identifier-name: 3.0.0 + hast-util-whitespace: 3.0.0 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + style-to-js: 1.1.19 + unist-util-position: 5.0.0 + zwitch: 2.0.4 + transitivePeerDependencies: + - supports-color + + hast-util-to-html@9.0.5: + dependencies: + "@types/hast": 3.0.4 + "@types/unist": 3.0.3 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.0 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + + hast-util-to-jsx-runtime@2.3.6: + dependencies: + "@types/estree": 1.0.8 + "@types/hast": 3.0.4 + "@types/unist": 3.0.3 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + hast-util-whitespace: 3.0.0 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + style-to-js: 1.1.19 + unist-util-position: 5.0.0 + vfile-message: 4.0.3 + transitivePeerDependencies: + - supports-color + + hast-util-to-string@3.0.1: + dependencies: + "@types/hast": 3.0.4 + + hast-util-whitespace@3.0.0: + dependencies: + "@types/hast": 3.0.4 + + he@1.2.0: {} + + hermes-estree@0.25.1: {} + + hermes-parser@0.25.1: + dependencies: + hermes-estree: 0.25.1 + + homedir-polyfill@1.0.3: + dependencies: + parse-passwd: 1.0.0 + + hosted-git-info@7.0.2: + dependencies: + lru-cache: 10.4.3 + + html-escaper@2.0.2: {} + + html-void-elements@3.0.0: {} + + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.4 + debug: 4.4.1(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + https-proxy-agent@5.0.1: + dependencies: + agent-base: 6.0.2 + debug: 4.4.1(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + https-proxy-agent@7.0.6: + dependencies: + agent-base: 7.1.4 + debug: 4.4.1(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + human-signals@2.1.0: {} + + human-signals@5.0.0: {} + + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + + iconv-lite@0.7.0: + dependencies: + safer-buffer: 2.1.2 + + icss-replace-symbols@1.1.0: {} + + icss-utils@5.1.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + identity-obj-proxy@3.0.0: + dependencies: + harmony-reflect: 1.6.2 + + ieee754@1.2.1: {} + + ignore@5.3.2: {} + + ignore@7.0.5: {} + + image-size@2.0.2: {} + + import-cwd@3.0.0: + dependencies: + import-from: 3.0.0 + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + import-from@3.0.0: + dependencies: + resolve-from: 5.0.0 + + import-local@3.2.0: + dependencies: + pkg-dir: 4.2.0 + resolve-cwd: 3.0.0 + + import-meta-resolve@4.1.0: {} + + imurmurhash@0.1.4: {} + + indent-string@5.0.0: {} + + index-to-position@1.2.0: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + ini@1.3.8: {} + + ini@4.1.1: {} + + ink-testing-library@4.0.0(@types/react@18.3.26): + optionalDependencies: + "@types/react": 18.3.26 + + ink@4.4.1(@types/react@18.3.26)(react-devtools-core@5.3.2)(react@18.3.1): + dependencies: + "@alcalzone/ansi-tokenize": 0.1.3 + ansi-escapes: 6.2.1 + auto-bind: 5.0.1 + chalk: 5.6.2 + cli-boxes: 3.0.0 + cli-cursor: 4.0.0 + cli-truncate: 3.1.0 + code-excerpt: 4.0.0 + indent-string: 5.0.0 + is-ci: 3.0.1 + is-lower-case: 2.0.2 + is-upper-case: 2.0.2 + lodash: 4.17.21 + patch-console: 2.0.0 + react: 18.3.1 + react-reconciler: 0.29.2(react@18.3.1) + scheduler: 0.23.2 + signal-exit: 3.0.7 + slice-ansi: 6.0.0 + stack-utils: 2.0.6 + string-width: 5.1.2 + type-fest: 0.12.0 + widest-line: 4.0.1 + wrap-ansi: 8.1.0 + ws: 8.18.3 + yoga-wasm-web: 0.3.3 + optionalDependencies: + "@types/react": 18.3.26 + react-devtools-core: 5.3.2 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + inline-style-parser@0.2.6: {} + + inquirer@12.9.6(@types/node@18.19.120): + dependencies: + "@inquirer/ansi": 1.0.2 + "@inquirer/core": 10.3.2(@types/node@18.19.120) + "@inquirer/prompts": 7.10.1(@types/node@18.19.120) + "@inquirer/type": 3.0.10(@types/node@18.19.120) + mute-stream: 2.0.0 + run-async: 4.0.6 + rxjs: 7.8.2 + optionalDependencies: + "@types/node": 18.19.120 + + inquirer@8.2.5: + dependencies: + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-width: 3.0.0 + external-editor: 3.1.0 + figures: 3.2.0 + lodash: 4.17.21 + mute-stream: 0.0.8 + ora: 5.4.1 + run-async: 2.4.1 + rxjs: 7.8.2 + string-width: 4.2.3 + strip-ansi: 6.0.1 + through: 2.3.8 + wrap-ansi: 7.0.0 + + internal-slot@1.1.0: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.1.0 + + into-stream@6.0.0: + dependencies: + from2: 2.3.0 + p-is-promise: 3.0.0 + + ip-address@10.1.0: {} + + is-alphabetical@2.0.1: {} + + is-alphanumerical@2.0.1: + dependencies: + is-alphabetical: 2.0.1 + is-decimal: 2.0.1 + + is-array-buffer@3.0.5: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + + is-arrayish@0.2.1: {} + + is-async-function@2.1.1: + dependencies: + async-function: 1.0.0 + call-bound: 1.0.4 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-bigint@1.1.0: + dependencies: + has-bigints: 1.1.0 + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-boolean-object@1.2.2: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-bun-module@2.0.0: + dependencies: + semver: 7.7.3 + + is-callable@1.2.7: {} + + is-ci@3.0.1: + dependencies: + ci-info: 3.9.0 + + is-core-module@2.16.1: + dependencies: + hasown: 2.0.2 + + is-data-view@1.0.2: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + is-typed-array: 1.1.15 + + is-date-object@1.1.0: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-decimal@2.0.1: {} + + is-docker@2.2.1: {} + + is-docker@3.0.0: {} + + is-extglob@2.1.1: {} + + is-finalizationregistry@1.1.1: + dependencies: + call-bound: 1.0.4 + + is-fullwidth-code-point@3.0.0: {} + + is-fullwidth-code-point@4.0.0: {} + + is-generator-fn@2.1.0: {} + + is-generator-function@1.1.0: + dependencies: + call-bound: 1.0.4 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-hexadecimal@2.0.1: {} + + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + + is-interactive@1.0.0: {} + + is-interactive@2.0.0: {} + + is-lower-case@2.0.2: + dependencies: + tslib: 2.8.1 + + is-map@2.0.3: {} + + is-module@1.0.0: {} + + is-negative-zero@2.0.3: {} + + is-number-object@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-number@7.0.0: {} + + is-obj@2.0.0: {} + + is-plain-obj@2.1.0: {} + + is-plain-obj@4.1.0: {} + + is-plain-object@3.0.1: {} + + is-reference@1.2.1: + dependencies: + "@types/estree": 1.0.8 + + is-regex@1.2.1: + dependencies: + call-bound: 1.0.4 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + is-retry-allowed@2.2.0: {} + + is-set@2.0.3: {} + + is-shared-array-buffer@1.0.4: + dependencies: + call-bound: 1.0.4 + + is-ssh@1.4.1: + dependencies: + protocols: 2.0.2 + + is-stream@2.0.1: {} + + is-stream@3.0.0: {} + + is-string@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-symbol@1.1.1: + dependencies: + call-bound: 1.0.4 + has-symbols: 1.1.0 + safe-regex-test: 1.1.0 + + is-text-path@2.0.0: + dependencies: + text-extensions: 2.4.0 + + is-typed-array@1.1.15: + dependencies: + which-typed-array: 1.1.19 + + is-unicode-supported@0.1.0: {} + + is-unicode-supported@2.1.0: {} + + is-upper-case@2.0.2: + dependencies: + tslib: 2.8.1 + + is-utf8@0.2.1: {} + + is-weakmap@2.0.2: {} + + is-weakref@1.1.1: + dependencies: + call-bound: 1.0.4 + + is-weakset@2.0.4: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + + is-windows@1.0.2: {} + + is-wsl@2.2.0: + dependencies: + is-docker: 2.2.1 + + is-wsl@3.1.0: + dependencies: + is-inside-container: 1.0.0 + + isarray@1.0.0: {} + + isarray@2.0.5: {} + + isexe@2.0.0: {} + + issue-parser@7.0.1: + dependencies: + lodash.capitalize: 4.2.1 + lodash.escaperegexp: 4.1.2 + lodash.isplainobject: 4.0.6 + lodash.isstring: 4.0.1 + lodash.uniqby: 4.7.0 + + istanbul-lib-coverage@3.2.2: {} + + istanbul-lib-instrument@5.2.1: + dependencies: + "@babel/core": 7.28.0 + "@babel/parser": 7.28.0 + "@istanbuljs/schema": 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + istanbul-lib-instrument@6.0.3: + dependencies: + "@babel/core": 7.28.0 + "@babel/parser": 7.28.0 + "@istanbuljs/schema": 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 7.7.3 + transitivePeerDependencies: + - supports-color + + istanbul-lib-report@3.0.1: + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 + + istanbul-lib-source-maps@4.0.1: + dependencies: + debug: 4.4.1(supports-color@8.1.1) + istanbul-lib-coverage: 3.2.2 + source-map: 0.6.1 + transitivePeerDependencies: + - supports-color + + istanbul-lib-source-maps@5.0.6: + dependencies: + "@jridgewell/trace-mapping": 0.3.29 + debug: 4.4.1(supports-color@8.1.1) + istanbul-lib-coverage: 3.2.2 + transitivePeerDependencies: + - supports-color + + istanbul-reports@3.1.7: + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + + iterator.prototype@1.1.5: + dependencies: + define-data-property: 1.1.4 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + has-symbols: 1.1.0 + set-function-name: 2.0.2 + + jackspeak@3.4.3: + dependencies: + "@isaacs/cliui": 8.0.2 + optionalDependencies: + "@pkgjs/parseargs": 0.11.0 + + jackspeak@4.1.1: + dependencies: + "@isaacs/cliui": 8.0.2 + + jake@10.9.2: + dependencies: + async: 3.2.6 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 + + jest-changed-files@29.7.0: + dependencies: + execa: 5.1.1 + jest-util: 29.7.0 + p-limit: 3.1.0 + + jest-circus@29.7.0(babel-plugin-macros@3.1.0): + dependencies: + "@jest/environment": 29.7.0 + "@jest/expect": 29.7.0 + "@jest/test-result": 29.7.0 + "@jest/types": 29.6.3 + "@types/node": 18.19.120 + chalk: 4.1.2 + co: 4.6.0 + dedent: 1.6.0(babel-plugin-macros@3.1.0) + is-generator-fn: 2.1.0 + jest-each: 29.7.0 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + p-limit: 3.1.0 + pretty-format: 29.7.0 + pure-rand: 6.1.0 + slash: 3.0.0 + stack-utils: 2.0.6 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-circus@30.0.5(babel-plugin-macros@3.1.0): + dependencies: + "@jest/environment": 30.0.5 + "@jest/expect": 30.0.5 + "@jest/test-result": 30.0.5 + "@jest/types": 30.0.5 + "@types/node": 18.19.120 + chalk: 4.1.2 + co: 4.6.0 + dedent: 1.6.0(babel-plugin-macros@3.1.0) + is-generator-fn: 2.1.0 + jest-each: 30.0.5 + jest-matcher-utils: 30.0.5 + jest-message-util: 30.0.5 + jest-runtime: 30.0.5 + jest-snapshot: 30.0.5 + jest-util: 30.0.5 + p-limit: 3.1.0 + pretty-format: 30.0.5 + pure-rand: 7.0.1 + slash: 3.0.0 + stack-utils: 2.0.6 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-cli@29.7.0(@types/node@18.19.120)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@types/node@18.19.120)(typescript@5.9.3)): + dependencies: + "@jest/core": 29.7.0(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@types/node@18.19.120)(typescript@5.9.3)) + "@jest/test-result": 29.7.0 + "@jest/types": 29.6.3 + chalk: 4.1.2 + create-jest: 29.7.0(@types/node@18.19.120)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@18.19.120)(typescript@5.9.3)) + exit: 0.1.2 + import-local: 3.2.0 + jest-config: 29.7.0(@types/node@18.19.120)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@18.19.120)(typescript@5.9.3)) + jest-util: 29.7.0 + jest-validate: 29.7.0 + yargs: 17.7.2 + optionalDependencies: + node-notifier: 10.0.1 + transitivePeerDependencies: + - "@types/node" + - babel-plugin-macros + - supports-color + - ts-node + + jest-config@29.7.0(@types/node@18.19.120)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@18.19.120)(typescript@5.9.3)): + dependencies: + "@babel/core": 7.28.0 + "@jest/test-sequencer": 29.7.0 + "@jest/types": 29.6.3 + babel-jest: 29.7.0(@babel/core@7.28.0) + chalk: 4.1.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.7.0(babel-plugin-macros@3.1.0) + jest-environment-node: 29.7.0 + jest-get-type: 29.6.3 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-runner: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + micromatch: 4.0.8 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + optionalDependencies: + "@types/node": 18.19.120 + ts-node: 10.9.2(@types/node@18.19.120)(typescript@5.9.3) + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-config@30.0.5(@types/node@18.19.120)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@18.19.120)(typescript@5.9.3)): + dependencies: + "@babel/core": 7.28.0 + "@jest/get-type": 30.0.1 + "@jest/pattern": 30.0.1 + "@jest/test-sequencer": 30.0.5 + "@jest/types": 30.0.5 + babel-jest: 30.0.5(@babel/core@7.28.0) + chalk: 4.1.2 + ci-info: 4.3.0 + deepmerge: 4.3.1 + glob: 10.4.5 + graceful-fs: 4.2.11 + jest-circus: 30.0.5(babel-plugin-macros@3.1.0) + jest-docblock: 30.0.1 + jest-environment-node: 30.0.5 + jest-regex-util: 30.0.1 + jest-resolve: 30.0.5 + jest-runner: 30.0.5 + jest-util: 30.0.5 + jest-validate: 30.0.5 + micromatch: 4.0.8 + parse-json: 5.2.0 + pretty-format: 30.0.5 + slash: 3.0.0 + strip-json-comments: 3.1.1 + optionalDependencies: + "@types/node": 18.19.120 + ts-node: 10.9.2(@types/node@18.19.120)(typescript@5.9.3) + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-diff@29.7.0: + dependencies: + chalk: 4.1.2 + diff-sequences: 29.6.3 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-diff@30.0.5: + dependencies: + "@jest/diff-sequences": 30.0.1 + "@jest/get-type": 30.0.1 + chalk: 4.1.2 + pretty-format: 30.0.5 + + jest-docblock@29.7.0: + dependencies: + detect-newline: 3.1.0 + + jest-docblock@30.0.1: + dependencies: + detect-newline: 3.1.0 + + jest-each@29.7.0: + dependencies: + "@jest/types": 29.6.3 + chalk: 4.1.2 + jest-get-type: 29.6.3 + jest-util: 29.7.0 + pretty-format: 29.7.0 + + jest-each@30.0.5: + dependencies: + "@jest/get-type": 30.0.1 + "@jest/types": 30.0.5 + chalk: 4.1.2 + jest-util: 30.0.5 + pretty-format: 30.0.5 + + jest-environment-node@29.7.0: + dependencies: + "@jest/environment": 29.7.0 + "@jest/fake-timers": 29.7.0 + "@jest/types": 29.6.3 + "@types/node": 18.19.120 + jest-mock: 29.7.0 + jest-util: 29.7.0 + + jest-environment-node@30.0.5: + dependencies: + "@jest/environment": 30.0.5 + "@jest/fake-timers": 30.0.5 + "@jest/types": 30.0.5 + "@types/node": 18.19.120 + jest-mock: 30.0.5 + jest-util: 30.0.5 + jest-validate: 30.0.5 + + jest-get-type@29.6.3: {} + + jest-haste-map@29.7.0: + dependencies: + "@jest/types": 29.6.3 + "@types/graceful-fs": 4.1.9 + "@types/node": 18.19.120 + anymatch: 3.1.3 + fb-watchman: 2.0.2 + graceful-fs: 4.2.11 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + jest-worker: 29.7.0 + micromatch: 4.0.8 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.3 + + jest-haste-map@30.0.5: + dependencies: + "@jest/types": 30.0.5 + "@types/node": 18.19.120 + anymatch: 3.1.3 + fb-watchman: 2.0.2 + graceful-fs: 4.2.11 + jest-regex-util: 30.0.1 + jest-util: 30.0.5 + jest-worker: 30.0.5 + micromatch: 4.0.8 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.3 + + jest-leak-detector@29.7.0: + dependencies: + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-leak-detector@30.0.5: + dependencies: + "@jest/get-type": 30.0.1 + pretty-format: 30.0.5 + + jest-matcher-utils@29.7.0: + dependencies: + chalk: 4.1.2 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-matcher-utils@30.0.5: + dependencies: + "@jest/get-type": 30.0.1 + chalk: 4.1.2 + jest-diff: 30.0.5 + pretty-format: 30.0.5 + + jest-message-util@29.7.0: + dependencies: + "@babel/code-frame": 7.27.1 + "@jest/types": 29.6.3 + "@types/stack-utils": 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + stack-utils: 2.0.6 + + jest-message-util@30.0.5: + dependencies: + "@babel/code-frame": 7.27.1 + "@jest/types": 30.0.5 + "@types/stack-utils": 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.8 + pretty-format: 30.0.5 + slash: 3.0.0 + stack-utils: 2.0.6 + + jest-mock@29.7.0: + dependencies: + "@jest/types": 29.6.3 + "@types/node": 18.19.120 + jest-util: 29.7.0 + + jest-mock@30.0.5: + dependencies: + "@jest/types": 30.0.5 + "@types/node": 18.19.120 + jest-util: 30.0.5 + + jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): + optionalDependencies: + jest-resolve: 29.7.0 + + jest-pnp-resolver@1.2.3(jest-resolve@30.0.5): + optionalDependencies: + jest-resolve: 30.0.5 + + jest-regex-util@29.6.3: {} + + jest-regex-util@30.0.1: {} + + jest-resolve-dependencies@29.7.0: + dependencies: + jest-regex-util: 29.6.3 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + + jest-resolve@29.7.0: + dependencies: + chalk: 4.1.2 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) + jest-util: 29.7.0 + jest-validate: 29.7.0 + resolve: 1.22.10 + resolve.exports: 2.0.3 + slash: 3.0.0 + + jest-resolve@30.0.5: + dependencies: + chalk: 4.1.2 + graceful-fs: 4.2.11 + jest-haste-map: 30.0.5 + jest-pnp-resolver: 1.2.3(jest-resolve@30.0.5) + jest-util: 30.0.5 + jest-validate: 30.0.5 + slash: 3.0.0 + unrs-resolver: 1.11.1 + + jest-runner@29.7.0: + dependencies: + "@jest/console": 29.7.0 + "@jest/environment": 29.7.0 + "@jest/test-result": 29.7.0 + "@jest/transform": 29.7.0 + "@jest/types": 29.6.3 + "@types/node": 18.19.120 + chalk: 4.1.2 + emittery: 0.13.1 + graceful-fs: 4.2.11 + jest-docblock: 29.7.0 + jest-environment-node: 29.7.0 + jest-haste-map: 29.7.0 + jest-leak-detector: 29.7.0 + jest-message-util: 29.7.0 + jest-resolve: 29.7.0 + jest-runtime: 29.7.0 + jest-util: 29.7.0 + jest-watcher: 29.7.0 + jest-worker: 29.7.0 + p-limit: 3.1.0 + source-map-support: 0.5.13 + transitivePeerDependencies: + - supports-color + + jest-runner@30.0.5: + dependencies: + "@jest/console": 30.0.5 + "@jest/environment": 30.0.5 + "@jest/test-result": 30.0.5 + "@jest/transform": 30.0.5 + "@jest/types": 30.0.5 + "@types/node": 18.19.120 + chalk: 4.1.2 + emittery: 0.13.1 + exit-x: 0.2.2 + graceful-fs: 4.2.11 + jest-docblock: 30.0.1 + jest-environment-node: 30.0.5 + jest-haste-map: 30.0.5 + jest-leak-detector: 30.0.5 + jest-message-util: 30.0.5 + jest-resolve: 30.0.5 + jest-runtime: 30.0.5 + jest-util: 30.0.5 + jest-watcher: 30.0.5 + jest-worker: 30.0.5 + p-limit: 3.1.0 + source-map-support: 0.5.13 + transitivePeerDependencies: + - supports-color + + jest-runtime@29.7.0: + dependencies: + "@jest/environment": 29.7.0 + "@jest/fake-timers": 29.7.0 + "@jest/globals": 29.7.0 + "@jest/source-map": 29.6.3 + "@jest/test-result": 29.7.0 + "@jest/transform": 29.7.0 + "@jest/types": 29.6.3 + "@types/node": 18.19.120 + chalk: 4.1.2 + cjs-module-lexer: 1.4.3 + collect-v8-coverage: 1.0.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + strip-bom: 4.0.0 + transitivePeerDependencies: + - supports-color + + jest-runtime@30.0.5: + dependencies: + "@jest/environment": 30.0.5 + "@jest/fake-timers": 30.0.5 + "@jest/globals": 30.0.5 + "@jest/source-map": 30.0.1 + "@jest/test-result": 30.0.5 + "@jest/transform": 30.0.5 + "@jest/types": 30.0.5 + "@types/node": 18.19.120 + chalk: 4.1.2 + cjs-module-lexer: 2.1.0 + collect-v8-coverage: 1.0.2 + glob: 10.4.5 + graceful-fs: 4.2.11 + jest-haste-map: 30.0.5 + jest-message-util: 30.0.5 + jest-mock: 30.0.5 + jest-regex-util: 30.0.1 + jest-resolve: 30.0.5 + jest-snapshot: 30.0.5 + jest-util: 30.0.5 + slash: 3.0.0 + strip-bom: 4.0.0 + transitivePeerDependencies: + - supports-color + + jest-snapshot@29.7.0: + dependencies: + "@babel/core": 7.28.0 + "@babel/generator": 7.28.0 + "@babel/plugin-syntax-jsx": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-syntax-typescript": 7.27.1(@babel/core@7.28.0) + "@babel/types": 7.28.2 + "@jest/expect-utils": 29.7.0 + "@jest/transform": 29.7.0 + "@jest/types": 29.6.3 + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.28.0) + chalk: 4.1.2 + expect: 29.7.0 + graceful-fs: 4.2.11 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + natural-compare: 1.4.0 + pretty-format: 29.7.0 + semver: 7.7.3 + transitivePeerDependencies: + - supports-color + + jest-snapshot@30.0.5: + dependencies: + "@babel/core": 7.28.0 + "@babel/generator": 7.28.0 + "@babel/plugin-syntax-jsx": 7.27.1(@babel/core@7.28.0) + "@babel/plugin-syntax-typescript": 7.27.1(@babel/core@7.28.0) + "@babel/types": 7.28.2 + "@jest/expect-utils": 30.0.5 + "@jest/get-type": 30.0.1 + "@jest/snapshot-utils": 30.0.5 + "@jest/transform": 30.0.5 + "@jest/types": 30.0.5 + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.28.0) + chalk: 4.1.2 + expect: 30.0.5 + graceful-fs: 4.2.11 + jest-diff: 30.0.5 + jest-matcher-utils: 30.0.5 + jest-message-util: 30.0.5 + jest-util: 30.0.5 + pretty-format: 30.0.5 + semver: 7.7.3 + synckit: 0.11.11 + transitivePeerDependencies: + - supports-color + + jest-util@29.7.0: + dependencies: + "@jest/types": 29.6.3 + "@types/node": 18.19.120 + chalk: 4.1.2 + ci-info: 3.9.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 + + jest-util@30.0.5: + dependencies: + "@jest/types": 30.0.5 + "@types/node": 18.19.120 + chalk: 4.1.2 + ci-info: 4.3.0 + graceful-fs: 4.2.11 + picomatch: 4.0.2 + + jest-validate@29.7.0: + dependencies: + "@jest/types": 29.6.3 + camelcase: 6.3.0 + chalk: 4.1.2 + jest-get-type: 29.6.3 + leven: 3.1.0 + pretty-format: 29.7.0 + + jest-validate@30.0.5: + dependencies: + "@jest/get-type": 30.0.1 + "@jest/types": 30.0.5 + camelcase: 6.3.0 + chalk: 4.1.2 + leven: 3.1.0 + pretty-format: 30.0.5 + + jest-watcher@29.7.0: + dependencies: + "@jest/test-result": 29.7.0 + "@jest/types": 29.6.3 + "@types/node": 18.19.120 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.13.1 + jest-util: 29.7.0 + string-length: 4.0.2 + + jest-watcher@30.0.5: + dependencies: + "@jest/test-result": 30.0.5 + "@jest/types": 30.0.5 + "@types/node": 18.19.120 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.13.1 + jest-util: 30.0.5 + string-length: 4.0.2 + + jest-worker@29.7.0: + dependencies: + "@types/node": 18.19.120 + jest-util: 29.7.0 + merge-stream: 2.0.0 + supports-color: 8.1.1 + + jest-worker@30.0.5: + dependencies: + "@types/node": 18.19.120 + "@ungap/structured-clone": 1.3.0 + jest-util: 30.0.5 + merge-stream: 2.0.0 + supports-color: 8.1.1 + + jest@29.7.0(@types/node@18.19.120)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@types/node@18.19.120)(typescript@5.9.3)): + dependencies: + "@jest/core": 29.7.0(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@types/node@18.19.120)(typescript@5.9.3)) + "@jest/types": 29.6.3 + import-local: 3.2.0 + jest-cli: 29.7.0(@types/node@18.19.120)(babel-plugin-macros@3.1.0)(node-notifier@10.0.1)(ts-node@10.9.2(@types/node@18.19.120)(typescript@5.9.3)) + optionalDependencies: + node-notifier: 10.0.1 + transitivePeerDependencies: + - "@types/node" + - babel-plugin-macros + - supports-color + - ts-node + + jiti@2.4.2: {} + + jiti@2.6.1: {} + + joycon@3.1.1: {} + + js-tokens@4.0.0: {} + + js-yaml@3.14.1: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsesc@3.0.2: {} + + jsesc@3.1.0: {} + + json-buffer@3.0.1: {} + + json-parse-even-better-errors@2.3.1: {} + + json-schema-traverse@0.4.1: {} + + json-schema-traverse@1.0.0: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json5@1.0.2: + dependencies: + minimist: 1.2.8 + + json5@2.2.3: {} + + jsonc-parser@3.2.0: {} + + jsonfile@4.0.0: + optionalDependencies: + graceful-fs: 4.2.11 + + jsonfile@6.1.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + jsonparse@1.3.1: {} + + jsx-ast-utils@3.3.5: + dependencies: + array-includes: 3.1.9 + array.prototype.flat: 1.3.3 + object.assign: 4.1.7 + object.values: 1.2.1 + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + kleur@3.0.3: {} + + knip@5.69.1(@types/node@18.19.120)(typescript@5.9.3): + dependencies: + "@nodelib/fs.walk": 1.2.8 + "@types/node": 18.19.120 + fast-glob: 3.3.3 + formatly: 0.3.0 + jiti: 2.6.1 + js-yaml: 4.1.0 + minimist: 1.2.8 + oxc-resolver: 11.13.2 + picocolors: 1.1.1 + picomatch: 4.0.3 + smol-toml: 1.5.2 + strip-json-comments: 5.0.2 + typescript: 5.9.3 + zod: 4.1.12 + + language-subtag-registry@0.3.23: {} + + language-tags@1.0.9: + dependencies: + language-subtag-registry: 0.3.23 + + lefthook-darwin-arm64@1.13.6: + optional: true + + lefthook-darwin-x64@1.13.6: + optional: true + + lefthook-freebsd-arm64@1.13.6: + optional: true + + lefthook-freebsd-x64@1.13.6: + optional: true + + lefthook-linux-arm64@1.13.6: + optional: true + + lefthook-linux-x64@1.13.6: + optional: true + + lefthook-openbsd-arm64@1.13.6: + optional: true + + lefthook-openbsd-x64@1.13.6: + optional: true + + lefthook-windows-arm64@1.13.6: + optional: true + + lefthook-windows-x64@1.13.6: + optional: true + + lefthook@1.13.6: + optionalDependencies: + lefthook-darwin-arm64: 1.13.6 + lefthook-darwin-x64: 1.13.6 + lefthook-freebsd-arm64: 1.13.6 + lefthook-freebsd-x64: 1.13.6 + lefthook-linux-arm64: 1.13.6 + lefthook-linux-x64: 1.13.6 + lefthook-openbsd-arm64: 1.13.6 + lefthook-openbsd-x64: 1.13.6 + lefthook-windows-arm64: 1.13.6 + lefthook-windows-x64: 1.13.6 + + leven@3.1.0: {} + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lightningcss-android-arm64@1.30.2: + optional: true + + lightningcss-darwin-arm64@1.30.2: + optional: true + + lightningcss-darwin-x64@1.30.2: + optional: true + + lightningcss-freebsd-x64@1.30.2: + optional: true + + lightningcss-linux-arm-gnueabihf@1.30.2: + optional: true + + lightningcss-linux-arm64-gnu@1.30.2: + optional: true + + lightningcss-linux-arm64-musl@1.30.2: + optional: true + + lightningcss-linux-x64-gnu@1.30.2: + optional: true + + lightningcss-linux-x64-musl@1.30.2: + optional: true + + lightningcss-win32-arm64-msvc@1.30.2: + optional: true + + lightningcss-win32-x64-msvc@1.30.2: + optional: true + + lightningcss@1.30.2: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.30.2 + lightningcss-darwin-arm64: 1.30.2 + lightningcss-darwin-x64: 1.30.2 + lightningcss-freebsd-x64: 1.30.2 + lightningcss-linux-arm-gnueabihf: 1.30.2 + lightningcss-linux-arm64-gnu: 1.30.2 + lightningcss-linux-arm64-musl: 1.30.2 + lightningcss-linux-x64-gnu: 1.30.2 + lightningcss-linux-x64-musl: 1.30.2 + lightningcss-win32-arm64-msvc: 1.30.2 + lightningcss-win32-x64-msvc: 1.30.2 + + lilconfig@2.1.0: {} + + lilconfig@3.1.3: {} + + lines-and-columns@1.2.4: {} + + lines-and-columns@2.0.3: {} + + linkify-it@5.0.0: + dependencies: + uc.micro: 2.1.0 + + load-tsconfig@0.2.5: {} + + loader-utils@3.3.1: {} + + locate-path@5.0.0: + dependencies: + p-locate: 4.1.0 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + locate-path@7.2.0: + dependencies: + p-locate: 6.0.0 + + lodash.camelcase@4.3.0: {} + + lodash.capitalize@4.2.1: {} + + lodash.debounce@4.0.8: {} + + lodash.escaperegexp@4.1.2: {} + + lodash.isplainobject@4.0.6: {} + + lodash.isstring@4.0.1: {} + + lodash.kebabcase@4.1.1: {} + + lodash.map@4.6.0: {} + + lodash.memoize@4.1.2: {} + + lodash.merge@4.6.2: {} + + lodash.mergewith@4.6.2: {} + + lodash.snakecase@4.1.1: {} + + lodash.sortby@4.7.0: {} + + lodash.startcase@4.4.0: {} + + lodash.uniq@4.5.0: {} + + lodash.uniqby@4.7.0: {} + + lodash.upperfirst@4.3.1: {} + + lodash@4.17.21: {} + + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + + log-symbols@7.0.1: + dependencies: + is-unicode-supported: 2.1.0 + yoctocolors: 2.1.2 + + longest-streak@3.1.0: {} + + longest@2.0.1: {} + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + loupe@2.3.7: + dependencies: + get-func-name: 2.0.2 + + lru-cache@10.4.3: {} + + lru-cache@11.1.0: {} + + lru-cache@11.2.2: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + lru-cache@6.0.0: + dependencies: + yallist: 4.0.0 + + lru-cache@7.18.3: {} + + lucide-react@0.552.0(react@19.2.0): + dependencies: + react: 19.2.0 + + lunr@2.3.9: {} + + macos-release@3.4.0: {} + + magic-string@0.30.17: + dependencies: + "@jridgewell/sourcemap-codec": 1.5.4 + + magic-string@0.30.21: + dependencies: + "@jridgewell/sourcemap-codec": 1.5.5 + + make-dir@3.1.0: + dependencies: + semver: 6.3.1 + + make-dir@4.0.0: + dependencies: + semver: 7.7.3 + + make-error@1.3.6: {} + + makeerror@1.0.12: + dependencies: + tmpl: 1.0.5 + + markdown-extensions@2.0.0: {} + + markdown-it@14.1.0: + dependencies: + argparse: 2.0.1 + entities: 4.5.0 + linkify-it: 5.0.0 + mdurl: 2.0.0 + punycode.js: 2.3.1 + uc.micro: 2.1.0 + + markdown-table@3.0.4: {} + + math-intrinsics@1.1.0: {} + + mdast-util-find-and-replace@3.0.2: + dependencies: + "@types/mdast": 4.0.4 + escape-string-regexp: 5.0.0 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 + + mdast-util-from-markdown@2.0.2: + dependencies: + "@types/mdast": 4.0.4 + "@types/unist": 3.0.3 + decode-named-character-reference: 1.2.0 + devlop: 1.1.0 + mdast-util-to-string: 4.0.0 + micromark: 4.0.2 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-decode-string: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-stringify-position: 4.0.0 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-autolink-literal@2.0.1: + dependencies: + "@types/mdast": 4.0.4 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-find-and-replace: 3.0.2 + micromark-util-character: 2.1.1 + + mdast-util-gfm-footnote@2.1.0: + dependencies: + "@types/mdast": 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + micromark-util-normalize-identifier: 2.0.1 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-strikethrough@2.0.0: + dependencies: + "@types/mdast": 4.0.4 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-table@2.0.0: + dependencies: + "@types/mdast": 4.0.4 + devlop: 1.1.0 + markdown-table: 3.0.4 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-task-list-item@2.0.0: + dependencies: + "@types/mdast": 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm@3.1.0: + dependencies: + mdast-util-from-markdown: 2.0.2 + mdast-util-gfm-autolink-literal: 2.0.1 + mdast-util-gfm-footnote: 2.1.0 + mdast-util-gfm-strikethrough: 2.0.0 + mdast-util-gfm-table: 2.0.0 + mdast-util-gfm-task-list-item: 2.0.0 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx-expression@2.0.1: + dependencies: + "@types/estree-jsx": 1.0.5 + "@types/hast": 3.0.4 + "@types/mdast": 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx-jsx@3.2.0: + dependencies: + "@types/estree-jsx": 1.0.5 + "@types/hast": 3.0.4 + "@types/mdast": 4.0.4 + "@types/unist": 3.0.3 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + parse-entities: 4.0.2 + stringify-entities: 4.0.4 + unist-util-stringify-position: 4.0.0 + vfile-message: 4.0.3 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx@3.0.0: + dependencies: + mdast-util-from-markdown: 2.0.2 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-mdxjs-esm@2.0.1: + dependencies: + "@types/estree-jsx": 1.0.5 + "@types/hast": 3.0.4 + "@types/mdast": 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-phrasing@4.1.0: + dependencies: + "@types/mdast": 4.0.4 + unist-util-is: 6.0.1 + + mdast-util-to-hast@13.2.0: + dependencies: + "@types/hast": 3.0.4 + "@types/mdast": 4.0.4 + "@ungap/structured-clone": 1.3.0 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.1 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + + mdast-util-to-markdown@2.1.2: + dependencies: + "@types/mdast": 4.0.4 + "@types/unist": 3.0.3 + longest-streak: 3.1.0 + mdast-util-phrasing: 4.1.0 + mdast-util-to-string: 4.0.0 + micromark-util-classify-character: 2.0.1 + micromark-util-decode-string: 2.0.1 + unist-util-visit: 5.0.0 + zwitch: 2.0.4 + + mdast-util-to-string@4.0.0: + dependencies: + "@types/mdast": 4.0.4 + + mdn-data@2.0.14: {} + + mdurl@2.0.0: {} + + meow@12.1.1: {} + + meow@13.2.0: {} + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + merge@2.1.1: {} + + micromark-core-commonmark@2.0.3: + dependencies: + decode-named-character-reference: 1.2.0 + devlop: 1.1.0 + micromark-factory-destination: 2.0.1 + micromark-factory-label: 2.0.1 + micromark-factory-space: 2.0.1 + micromark-factory-title: 2.0.1 + micromark-factory-whitespace: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-html-tag-name: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-autolink-literal@2.1.0: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-footnote@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-strikethrough@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-table@2.1.1: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-tagfilter@2.0.0: + dependencies: + micromark-util-types: 2.0.2 + + micromark-extension-gfm-task-list-item@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm@3.0.0: + dependencies: + micromark-extension-gfm-autolink-literal: 2.1.0 + micromark-extension-gfm-footnote: 2.1.0 + micromark-extension-gfm-strikethrough: 2.1.0 + micromark-extension-gfm-table: 2.1.1 + micromark-extension-gfm-tagfilter: 2.0.0 + micromark-extension-gfm-task-list-item: 2.1.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-mdx-expression@3.0.1: + dependencies: + "@types/estree": 1.0.8 + devlop: 1.1.0 + micromark-factory-mdx-expression: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-mdx-jsx@3.0.2: + dependencies: + "@types/estree": 1.0.8 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + micromark-factory-mdx-expression: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + vfile-message: 4.0.3 + + micromark-extension-mdx-md@2.0.0: + dependencies: + micromark-util-types: 2.0.2 + + micromark-extension-mdxjs-esm@3.0.0: + dependencies: + "@types/estree": 1.0.8 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.3 + + micromark-extension-mdxjs@3.0.0: + dependencies: + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + micromark-extension-mdx-expression: 3.0.1 + micromark-extension-mdx-jsx: 3.0.2 + micromark-extension-mdx-md: 2.0.0 + micromark-extension-mdxjs-esm: 3.0.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-destination@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-label@2.0.1: + dependencies: + devlop: 1.1.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-mdx-expression@2.0.3: + dependencies: + "@types/estree": 1.0.8 + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.3 + + micromark-factory-space@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-types: 2.0.2 + + micromark-factory-title@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-whitespace@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-character@2.1.1: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-chunked@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-classify-character@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-combine-extensions@2.0.1: + dependencies: + micromark-util-chunked: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-decode-numeric-character-reference@2.0.2: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-decode-string@2.0.1: + dependencies: + decode-named-character-reference: 1.2.0 + micromark-util-character: 2.1.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-symbol: 2.0.1 + + micromark-util-encode@2.0.1: {} + + micromark-util-events-to-acorn@2.0.3: + dependencies: + "@types/estree": 1.0.8 + "@types/unist": 3.0.3 + devlop: 1.1.0 + estree-util-visit: 2.0.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + vfile-message: 4.0.3 + + micromark-util-html-tag-name@2.0.1: {} + + micromark-util-normalize-identifier@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-resolve-all@2.0.1: + dependencies: + micromark-util-types: 2.0.2 + + micromark-util-sanitize-uri@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-encode: 2.0.1 + micromark-util-symbol: 2.0.1 + + micromark-util-subtokenize@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-symbol@2.0.1: {} + + micromark-util-types@2.0.2: {} + + micromark@4.0.2: + dependencies: + "@types/debug": 4.1.12 + debug: 4.4.1(supports-color@8.1.1) + decode-named-character-reference: 1.2.0 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-combine-extensions: 2.0.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-encode: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + transitivePeerDependencies: + - supports-color + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-db@1.54.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mime-types@3.0.1: + dependencies: + mime-db: 1.54.0 + + mimic-fn@2.1.0: {} + + mimic-fn@4.0.0: {} + + mimic-function@5.0.1: {} + + mimic-response@3.1.0: {} + + mini-svg-data-uri@1.4.4: {} + + minimatch@10.0.3: + dependencies: + "@isaacs/brace-expansion": 5.0.0 + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.12 + + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.2 + + minimatch@9.0.3: + dependencies: + brace-expansion: 2.0.2 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.2 + + minimist@1.2.7: {} + + minimist@1.2.8: {} + + minipass@7.1.2: {} + + minizlib@3.1.0: + dependencies: + minipass: 7.1.2 + + mkdirp-classic@0.5.3: {} + + mkdirp@0.5.6: + dependencies: + minimist: 1.2.8 + + mlly@1.7.4: + dependencies: + acorn: 8.15.0 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.6.1 + + mocha@10.8.2: + dependencies: + ansi-colors: 4.1.3 + browser-stdout: 1.3.1 + chokidar: 3.6.0 + debug: 4.4.1(supports-color@8.1.1) + diff: 5.2.0 + escape-string-regexp: 4.0.0 + find-up: 5.0.0 + glob: 8.1.0 + he: 1.2.0 + js-yaml: 4.1.0 + log-symbols: 4.1.0 + minimatch: 5.1.6 + ms: 2.1.3 + serialize-javascript: 6.0.2 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + workerpool: 6.5.1 + yargs: 16.2.0 + yargs-parser: 20.2.9 + yargs-unparser: 2.0.0 + + ms@2.1.3: {} + + multistream@4.1.0: + dependencies: + once: 1.4.0 + readable-stream: 3.6.2 + + mute-stream@0.0.8: {} + + mute-stream@2.0.0: {} + + mz@2.7.0: + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + + nanoid@3.3.11: {} + + napi-build-utils@2.0.0: {} + + napi-postinstall@0.3.2: {} + + natural-compare@1.4.0: {} + + negotiator@1.0.0: {} + + neo-async@2.6.2: {} + + netmask@2.0.2: {} + + new-github-release-url@2.0.0: + dependencies: + type-fest: 2.19.0 + + next-themes@0.4.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0): + dependencies: + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + + next@16.0.1(@babel/core@7.28.0)(babel-plugin-macros@3.1.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0): + dependencies: + "@next/env": 16.0.1 + "@swc/helpers": 0.5.15 + caniuse-lite: 1.0.30001727 + postcss: 8.4.31 + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) + styled-jsx: 5.1.6(@babel/core@7.28.0)(babel-plugin-macros@3.1.0)(react@19.2.0) + optionalDependencies: + "@next/swc-darwin-arm64": 16.0.1 + "@next/swc-darwin-x64": 16.0.1 + "@next/swc-linux-arm64-gnu": 16.0.1 + "@next/swc-linux-arm64-musl": 16.0.1 + "@next/swc-linux-x64-gnu": 16.0.1 + "@next/swc-linux-x64-musl": 16.0.1 + "@next/swc-win32-arm64-msvc": 16.0.1 + "@next/swc-win32-x64-msvc": 16.0.1 + sharp: 0.34.5 + transitivePeerDependencies: + - "@babel/core" + - babel-plugin-macros + + node-abi@3.85.0: + dependencies: + semver: 7.7.3 + + node-fetch-native@1.6.7: {} + + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + + node-int64@0.4.0: {} + + node-machine-id@1.1.12: {} + + node-notifier@10.0.1: + dependencies: + growly: 1.3.0 + is-wsl: 2.2.0 + semver: 7.7.3 + shellwords: 0.1.1 + uuid: 8.3.2 + which: 2.0.2 + optional: true + + node-releases@2.0.19: {} + + normalize-package-data@6.0.2: + dependencies: + hosted-git-info: 7.0.2 + semver: 7.7.3 + validate-npm-package-license: 3.0.4 + + normalize-path@3.0.0: {} + + normalize-range@0.1.2: {} + + normalize-url@6.1.0: {} + + npm-package-arg@11.0.1: + dependencies: + hosted-git-info: 7.0.2 + proc-log: 3.0.0 + semver: 7.7.2 + validate-npm-package-name: 5.0.1 + + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 + + npm-run-path@5.3.0: + dependencies: + path-key: 4.0.0 + + npm-to-yarn@3.0.1: {} + + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + + nx@21.3.7: + dependencies: + "@napi-rs/wasm-runtime": 0.2.4 + "@yarnpkg/lockfile": 1.1.0 + "@yarnpkg/parsers": 3.0.2 + "@zkochan/js-yaml": 0.0.7 + axios: 1.10.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.6.1 + cliui: 8.0.1 + dotenv: 16.4.7 + dotenv-expand: 11.0.7 + enquirer: 2.3.6 + figures: 3.2.0 + flat: 5.0.2 + front-matter: 4.0.2 + ignore: 5.3.2 + jest-diff: 30.0.5 + jsonc-parser: 3.2.0 + lines-and-columns: 2.0.3 + minimatch: 9.0.3 + node-machine-id: 1.1.12 + npm-run-path: 4.0.1 + open: 8.4.2 + ora: 5.3.0 + resolve.exports: 2.0.3 + semver: 7.7.2 + string-width: 4.2.3 + tar-stream: 2.2.0 + tmp: 0.2.3 + tree-kill: 1.2.2 + tsconfig-paths: 4.2.0 + tslib: 2.8.1 + yaml: 2.8.0 + yargs: 17.7.2 + yargs-parser: 21.1.1 + optionalDependencies: + "@nx/nx-darwin-arm64": 21.3.7 + "@nx/nx-darwin-x64": 21.3.7 + "@nx/nx-freebsd-x64": 21.3.7 + "@nx/nx-linux-arm-gnueabihf": 21.3.7 + "@nx/nx-linux-arm64-gnu": 21.3.7 + "@nx/nx-linux-arm64-musl": 21.3.7 + "@nx/nx-linux-x64-gnu": 21.3.7 + "@nx/nx-linux-x64-musl": 21.3.7 + "@nx/nx-win32-arm64-msvc": 21.3.7 + "@nx/nx-win32-x64-msvc": 21.3.7 + transitivePeerDependencies: + - debug + + nypm@0.6.2: + dependencies: + citty: 0.1.6 + consola: 3.4.2 + pathe: 2.0.3 + pkg-types: 2.3.0 + tinyexec: 1.0.2 + + object-assign@4.1.1: {} + + object-inspect@1.13.4: {} + + object-keys@1.1.1: {} + + object.assign@4.1.7: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + has-symbols: 1.1.0 + object-keys: 1.1.1 + + object.entries@1.1.9: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + object.fromentries@2.0.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-object-atoms: 1.1.1 + + object.groupby@1.0.3: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + + object.values@1.2.1: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + ohash@2.0.11: {} + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + onetime@6.0.0: + dependencies: + mimic-fn: 4.0.0 + + onetime@7.0.0: + dependencies: + mimic-function: 5.0.1 + + oniguruma-parser@0.12.1: {} + + oniguruma-to-es@4.3.3: + dependencies: + oniguruma-parser: 0.12.1 + regex: 6.0.1 + regex-recursion: 6.0.2 + + open@10.2.0: + dependencies: + default-browser: 5.4.0 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + wsl-utils: 0.1.0 + + open@8.4.2: + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + ora@5.3.0: + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.6.1 + is-interactive: 1.0.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + + ora@5.4.1: + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.6.1 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + + ora@9.0.0: + dependencies: + chalk: 5.6.2 + cli-cursor: 5.0.0 + cli-spinners: 3.3.0 + is-interactive: 2.0.0 + is-unicode-supported: 2.1.0 + log-symbols: 7.0.1 + stdin-discarder: 0.2.2 + string-width: 8.1.0 + strip-ansi: 7.1.2 + + os-name@6.1.0: + dependencies: + macos-release: 3.4.0 + windows-release: 6.1.0 + + os-tmpdir@1.0.2: {} + + own-keys@1.0.1: + dependencies: + get-intrinsic: 1.3.0 + object-keys: 1.1.1 + safe-push-apply: 1.0.0 + + oxc-resolver@11.13.2: + optionalDependencies: + "@oxc-resolver/binding-android-arm-eabi": 11.13.2 + "@oxc-resolver/binding-android-arm64": 11.13.2 + "@oxc-resolver/binding-darwin-arm64": 11.13.2 + "@oxc-resolver/binding-darwin-x64": 11.13.2 + "@oxc-resolver/binding-freebsd-x64": 11.13.2 + "@oxc-resolver/binding-linux-arm-gnueabihf": 11.13.2 + "@oxc-resolver/binding-linux-arm-musleabihf": 11.13.2 + "@oxc-resolver/binding-linux-arm64-gnu": 11.13.2 + "@oxc-resolver/binding-linux-arm64-musl": 11.13.2 + "@oxc-resolver/binding-linux-ppc64-gnu": 11.13.2 + "@oxc-resolver/binding-linux-riscv64-gnu": 11.13.2 + "@oxc-resolver/binding-linux-riscv64-musl": 11.13.2 + "@oxc-resolver/binding-linux-s390x-gnu": 11.13.2 + "@oxc-resolver/binding-linux-x64-gnu": 11.13.2 + "@oxc-resolver/binding-linux-x64-musl": 11.13.2 + "@oxc-resolver/binding-wasm32-wasi": 11.13.2 + "@oxc-resolver/binding-win32-arm64-msvc": 11.13.2 + "@oxc-resolver/binding-win32-ia32-msvc": 11.13.2 + "@oxc-resolver/binding-win32-x64-msvc": 11.13.2 + + p-finally@1.0.0: {} + + p-is-promise@3.0.0: {} + + p-limit@2.3.0: + dependencies: + p-try: 2.2.0 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-limit@4.0.0: + dependencies: + yocto-queue: 1.2.2 + + p-locate@4.1.0: + dependencies: + p-limit: 2.3.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + p-locate@6.0.0: + dependencies: + p-limit: 4.0.0 + + p-queue@6.6.2: + dependencies: + eventemitter3: 4.0.7 + p-timeout: 3.2.0 + + p-timeout@3.2.0: + dependencies: + p-finally: 1.0.0 + + p-try@2.2.0: {} + + pac-proxy-agent@7.2.0: + dependencies: + "@tootallnate/quickjs-emscripten": 0.23.0 + agent-base: 7.1.4 + debug: 4.4.1(supports-color@8.1.1) + get-uri: 6.0.5 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + pac-resolver: 7.0.1 + socks-proxy-agent: 8.0.5 + transitivePeerDependencies: + - supports-color + + pac-resolver@7.0.1: + dependencies: + degenerator: 5.0.1 + netmask: 2.0.2 + + package-json-from-dist@1.0.1: {} + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-entities@4.0.2: + dependencies: + "@types/unist": 2.0.11 + character-entities-legacy: 3.0.0 + character-reference-invalid: 2.0.1 + decode-named-character-reference: 1.2.0 + is-alphanumerical: 2.0.1 + is-decimal: 2.0.1 + is-hexadecimal: 2.0.1 + + parse-json@5.2.0: + dependencies: + "@babel/code-frame": 7.27.1 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + parse-json@8.3.0: + dependencies: + "@babel/code-frame": 7.27.1 + index-to-position: 1.2.0 + type-fest: 4.41.0 + + parse-passwd@1.0.0: {} + + parse-path@7.1.0: + dependencies: + protocols: 2.0.2 + + parse-url@9.2.0: + dependencies: + "@types/parse-path": 7.1.0 + parse-path: 7.1.0 + + patch-console@2.0.0: {} + + path-exists@4.0.0: {} + + path-exists@5.0.0: {} + + path-is-absolute@1.0.1: {} + + path-key@3.1.1: {} + + path-key@4.0.0: {} + + path-parse@1.0.7: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + path-scurry@2.0.0: + dependencies: + lru-cache: 11.1.0 + minipass: 7.1.2 + + path-to-regexp@8.3.0: {} + + path-type@4.0.0: {} + + pathe@2.0.3: {} + + pathval@1.1.1: {} + + perfect-debounce@2.0.0: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + picomatch@4.0.2: {} + + picomatch@4.0.3: {} + + pify@5.0.0: {} + + pirates@4.0.7: {} + + pkg-dir@4.2.0: + dependencies: + find-up: 4.1.0 + + pkg-types@1.3.1: + dependencies: + confbox: 0.1.8 + mlly: 1.7.4 + pathe: 2.0.3 + + pkg-types@2.3.0: + dependencies: + confbox: 0.2.2 + exsolve: 1.0.8 + pathe: 2.0.3 + + possible-typed-array-names@1.1.0: {} + + postcss-calc@8.2.4(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-selector-parser: 6.1.2 + postcss-value-parser: 4.2.0 + + postcss-colormin@5.3.1(postcss@8.5.6): + dependencies: + browserslist: 4.25.1 + caniuse-api: 3.0.0 + colord: 2.9.3 + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-convert-values@5.1.3(postcss@8.5.6): + dependencies: + browserslist: 4.25.1 + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-discard-comments@5.1.2(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + postcss-discard-duplicates@5.1.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + postcss-discard-empty@5.1.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + postcss-discard-overridden@5.1.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + postcss-load-config@3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@18.19.120)(typescript@5.9.3)): + dependencies: + lilconfig: 2.1.0 + yaml: 1.10.2 + optionalDependencies: + postcss: 8.5.6 + ts-node: 10.9.2(@types/node@18.19.120)(typescript@5.9.3) + + postcss-load-config@6.0.1(jiti@2.6.1)(postcss@8.5.6)(yaml@2.8.1): + dependencies: + lilconfig: 3.1.3 + optionalDependencies: + jiti: 2.6.1 + postcss: 8.5.6 + yaml: 2.8.1 + + postcss-merge-longhand@5.1.7(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + stylehacks: 5.1.1(postcss@8.5.6) + + postcss-merge-rules@5.1.4(postcss@8.5.6): + dependencies: + browserslist: 4.25.1 + caniuse-api: 3.0.0 + cssnano-utils: 3.1.0(postcss@8.5.6) + postcss: 8.5.6 + postcss-selector-parser: 6.1.2 + + postcss-minify-font-values@5.1.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-minify-gradients@5.1.1(postcss@8.5.6): + dependencies: + colord: 2.9.3 + cssnano-utils: 3.1.0(postcss@8.5.6) + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-minify-params@5.1.4(postcss@8.5.6): + dependencies: + browserslist: 4.25.1 + cssnano-utils: 3.1.0(postcss@8.5.6) + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-minify-selectors@5.2.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-selector-parser: 6.1.2 + + postcss-modules-extract-imports@3.1.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + postcss-modules-local-by-default@4.2.0(postcss@8.5.6): + dependencies: + icss-utils: 5.1.0(postcss@8.5.6) + postcss: 8.5.6 + postcss-selector-parser: 7.1.0 + postcss-value-parser: 4.2.0 + + postcss-modules-scope@3.2.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-selector-parser: 7.1.0 + + postcss-modules-values@4.0.0(postcss@8.5.6): + dependencies: + icss-utils: 5.1.0(postcss@8.5.6) + postcss: 8.5.6 + + postcss-modules@4.3.1(postcss@8.5.6): + dependencies: + generic-names: 4.0.0 + icss-replace-symbols: 1.1.0 + lodash.camelcase: 4.3.0 + postcss: 8.5.6 + postcss-modules-extract-imports: 3.1.0(postcss@8.5.6) + postcss-modules-local-by-default: 4.2.0(postcss@8.5.6) + postcss-modules-scope: 3.2.1(postcss@8.5.6) + postcss-modules-values: 4.0.0(postcss@8.5.6) + string-hash: 1.1.3 + + postcss-normalize-charset@5.1.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + postcss-normalize-display-values@5.1.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-normalize-positions@5.1.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-normalize-repeat-style@5.1.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-normalize-string@5.1.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-normalize-timing-functions@5.1.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-normalize-unicode@5.1.1(postcss@8.5.6): + dependencies: + browserslist: 4.25.1 + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-normalize-url@5.1.0(postcss@8.5.6): + dependencies: + normalize-url: 6.1.0 + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-normalize-whitespace@5.1.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-ordered-values@5.1.3(postcss@8.5.6): + dependencies: + cssnano-utils: 3.1.0(postcss@8.5.6) + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-reduce-initial@5.1.2(postcss@8.5.6): + dependencies: + browserslist: 4.25.1 + caniuse-api: 3.0.0 + postcss: 8.5.6 + + postcss-reduce-transforms@5.1.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + + postcss-selector-parser@6.1.2: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-selector-parser@7.1.0: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-svgo@5.1.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + svgo: 2.8.0 + + postcss-unique-selectors@5.1.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-selector-parser: 6.1.2 + + postcss-value-parser@4.2.0: {} + + postcss@8.4.31: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + postcss@8.5.6: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + prebuild-install@7.1.3: + dependencies: + detect-libc: 2.1.2 + expand-template: 2.0.3 + github-from-package: 0.0.0 + minimist: 1.2.8 + mkdirp-classic: 0.5.3 + napi-build-utils: 2.0.0 + node-abi: 3.85.0 + pump: 3.0.3 + rc: 1.2.8 + simple-get: 4.0.1 + tar-fs: 2.1.4 + tunnel-agent: 0.6.0 + + prelude-ls@1.2.1: {} + + prettier-linter-helpers@1.0.0: + dependencies: + fast-diff: 1.3.0 + + prettier@3.6.2: {} + + pretty-format@29.7.0: + dependencies: + "@jest/schemas": 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.3.1 + + pretty-format@30.0.5: + dependencies: + "@jest/schemas": 30.0.5 + ansi-styles: 5.2.0 + react-is: 18.3.1 + + proc-log@3.0.0: {} + + process-nextick-args@2.0.1: {} + + progress@2.0.3: {} + + promise.series@0.2.0: {} + + prompts@2.4.2: + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + + prop-types@15.8.1: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 - .: + property-information@7.1.0: {} + + protocols@2.0.2: {} + + proxy-agent@6.5.0: dependencies: - blessed: - specifier: ^0.1.81 - version: 0.1.81 - boxen: - specifier: ^8.0.1 - version: 8.0.1 - chalk: - specifier: ^5.4.1 - version: 5.4.1 - commander: - specifier: ^13.1.0 - version: 13.1.0 - crypto-js: - specifier: ^4.2.0 - version: 4.2.0 - date-fns: - specifier: ^4.1.0 - version: 4.1.0 - expandenv: - specifier: ^1.0.0 - version: 1.0.0 - figlet: - specifier: ^1.8.1 - version: 1.8.1 - fs-extra: - specifier: ^11.3.0 - version: 11.3.0 - gradient-string: - specifier: ^3.0.0 - version: 3.0.0 - inquirer: - specifier: ^12.6.0 - version: 12.6.0(@types/node@22.15.2) - node-notifier: - specifier: ^10.0.1 - version: 10.0.1 - node-ssh: - specifier: ^13.2.1 - version: 13.2.1 - ora: - specifier: ^8.2.0 - version: 8.2.0 - uuid: - specifier: ^11.1.0 - version: 11.1.0 - devDependencies: - '@types/blessed': - specifier: ^0.1.25 - version: 0.1.25 - '@types/boxen': - specifier: ^3.0.5 - version: 3.0.5 - '@types/crypto-js': - specifier: ^4.2.2 - version: 4.2.2 - '@types/figlet': - specifier: ^1.7.0 - version: 1.7.0 - '@types/fs-extra': - specifier: ^11.0.4 - version: 11.0.4 - '@types/gradient-string': - specifier: ^1.1.6 - version: 1.1.6 - '@types/inquirer': - specifier: ^9.0.7 - version: 9.0.7 - '@types/node': - specifier: ^22.15.2 - version: 22.15.2 - '@types/node-notifier': - specifier: ^8.0.5 - version: 8.0.5 - ts-node: - specifier: ^10.9.2 - version: 10.9.2(@types/node@22.15.2)(typescript@5.8.3) - typescript: - specifier: ^5.8.3 - version: 5.8.3 + agent-base: 7.1.4 + debug: 4.4.1(supports-color@8.1.1) + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + lru-cache: 7.18.3 + pac-proxy-agent: 7.2.0 + proxy-from-env: 1.1.0 + socks-proxy-agent: 8.0.5 + transitivePeerDependencies: + - supports-color + + proxy-from-env@1.1.0: {} + + pump@3.0.3: + dependencies: + end-of-stream: 1.4.5 + once: 1.4.0 -packages: + punycode.js@2.3.1: {} - '@cspotcode/source-map-support@0.8.1': - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} + punycode@2.3.1: {} - '@inquirer/checkbox@4.1.5': - resolution: {integrity: sha512-swPczVU+at65xa5uPfNP9u3qx/alNwiaykiI/ExpsmMSQW55trmZcwhYWzw/7fj+n6Q8z1eENvR7vFfq9oPSAQ==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true + pure-rand@6.1.0: {} - '@inquirer/confirm@5.1.9': - resolution: {integrity: sha512-NgQCnHqFTjF7Ys2fsqK2WtnA8X1kHyInyG+nMIuHowVTIgIuS10T4AznI/PvbqSpJqjCUqNBlKGh1v3bwLFL4w==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true + pure-rand@7.0.1: {} - '@inquirer/core@10.1.10': - resolution: {integrity: sha512-roDaKeY1PYY0aCqhRmXihrHjoSW2A00pV3Ke5fTpMCkzcGF64R8e0lw3dK+eLEHwS4vB5RnW1wuQmvzoRul8Mw==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true + queue-microtask@1.2.3: {} - '@inquirer/editor@4.2.10': - resolution: {integrity: sha512-5GVWJ+qeI6BzR6TIInLP9SXhWCEcvgFQYmcRG6d6RIlhFjM5TyG18paTGBgRYyEouvCmzeco47x9zX9tQEofkw==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 - '@inquirer/expand@4.0.12': - resolution: {integrity: sha512-jV8QoZE1fC0vPe6TnsOfig+qwu7Iza1pkXoUJ3SroRagrt2hxiL+RbM432YAihNR7m7XnU0HWl/WQ35RIGmXHw==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true + rc9@2.1.2: + dependencies: + defu: 6.1.4 + destr: 2.0.5 - '@inquirer/figures@1.0.11': - resolution: {integrity: sha512-eOg92lvrn/aRUqbxRyvpEWnrvRuTYRifixHkYVpJiygTgVSBIHDqLh0SrMQXkafvULg3ck11V7xvR+zcgvpHFw==} - engines: {node: '>=18'} + rc@1.2.8: + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 - '@inquirer/input@4.1.9': - resolution: {integrity: sha512-mshNG24Ij5KqsQtOZMgj5TwEjIf+F2HOESk6bjMwGWgcH5UBe8UoljwzNFHqdMbGYbgAf6v2wU/X9CAdKJzgOA==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true + react-devtools-core@5.3.2: + dependencies: + shell-quote: 1.8.3 + ws: 7.5.10 + transitivePeerDependencies: + - bufferutil + - utf-8-validate - '@inquirer/number@3.0.12': - resolution: {integrity: sha512-7HRFHxbPCA4e4jMxTQglHJwP+v/kpFsCf2szzfBHy98Wlc3L08HL76UDiA87TOdX5fwj2HMOLWqRWv9Pnn+Z5Q==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true + react-dom@19.2.0(react@19.2.0): + dependencies: + react: 19.2.0 + scheduler: 0.27.0 - '@inquirer/password@4.0.12': - resolution: {integrity: sha512-FlOB0zvuELPEbnBYiPaOdJIaDzb2PmJ7ghi/SVwIHDDSQ2K4opGBkF+5kXOg6ucrtSUQdLhVVY5tycH0j0l+0g==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true + react-is@16.13.1: {} - '@inquirer/prompts@7.5.0': - resolution: {integrity: sha512-tk8Bx7l5AX/CR0sVfGj3Xg6v7cYlFBkEahH+EgBB+cZib6Fc83dwerTbzj7f2+qKckjIUGsviWRI1d7lx6nqQA==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true + react-is@18.3.1: {} - '@inquirer/rawlist@4.1.0': - resolution: {integrity: sha512-6ob45Oh9pXmfprKqUiEeMz/tjtVTFQTgDDz1xAMKMrIvyrYjAmRbQZjMJfsictlL4phgjLhdLu27IkHNnNjB7g==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true + react-medium-image-zoom@5.4.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0): + dependencies: + react: 19.2.0 + react-dom: 19.2.0(react@19.2.0) - '@inquirer/search@3.0.12': - resolution: {integrity: sha512-H/kDJA3kNlnNIjB8YsaXoQI0Qccgf0Na14K1h8ExWhNmUg2E941dyFPrZeugihEa9AZNW5NdsD/NcvUME83OPQ==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true + react-reconciler@0.29.2(react@18.3.1): + dependencies: + loose-envify: 1.4.0 + react: 18.3.1 + scheduler: 0.23.2 - '@inquirer/select@4.2.0': - resolution: {integrity: sha512-KkXQ4aSySWimpV4V/TUJWdB3tdfENZUU765GjOIZ0uPwdbGIG6jrxD4dDf1w68uP+DVtfNhr1A92B+0mbTZ8FA==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true + react-remove-scroll-bar@2.3.8(@types/react@19.2.5)(react@19.2.0): + dependencies: + react: 19.2.0 + react-style-singleton: 2.2.3(@types/react@19.2.5)(react@19.2.0) + tslib: 2.8.1 + optionalDependencies: + "@types/react": 19.2.5 - '@inquirer/type@3.0.6': - resolution: {integrity: sha512-/mKVCtVpyBu3IDarv0G+59KC4stsD5mDsGpYh+GKs1NZT88Jh52+cuoA1AtLk2Q0r/quNl+1cSUyLRHBFeD0XA==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true + react-remove-scroll@2.7.1(@types/react@19.2.5)(react@19.2.0): + dependencies: + react: 19.2.0 + react-remove-scroll-bar: 2.3.8(@types/react@19.2.5)(react@19.2.0) + react-style-singleton: 2.2.3(@types/react@19.2.5)(react@19.2.0) + tslib: 2.8.1 + use-callback-ref: 1.3.3(@types/react@19.2.5)(react@19.2.0) + use-sidecar: 1.1.3(@types/react@19.2.5)(react@19.2.0) + optionalDependencies: + "@types/react": 19.2.5 + + react-style-singleton@2.2.3(@types/react@19.2.5)(react@19.2.0): + dependencies: + get-nonce: 1.0.1 + react: 19.2.0 + tslib: 2.8.1 + optionalDependencies: + "@types/react": 19.2.5 - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} + react@18.3.1: + dependencies: + loose-envify: 1.4.0 - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + react@19.2.0: {} - '@jridgewell/trace-mapping@0.3.9': - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + read-package-up@11.0.0: + dependencies: + find-up-simple: 1.0.1 + read-pkg: 9.0.1 + type-fest: 4.41.0 - '@tsconfig/node10@1.0.11': - resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + read-pkg@9.0.1: + dependencies: + "@types/normalize-package-data": 2.4.4 + normalize-package-data: 6.0.2 + parse-json: 8.3.0 + type-fest: 4.41.0 + unicorn-magic: 0.1.0 - '@tsconfig/node12@1.0.11': - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + readable-stream@2.3.8: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 - '@tsconfig/node14@1.0.3': - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 - '@tsconfig/node16@1.0.4': - resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + readdirp@4.1.2: {} - '@types/blessed@0.1.25': - resolution: {integrity: sha512-kQsjBgtsbJLmG6CJA+Z6Nujj+tq1fcSE3UIowbDvzQI4wWmoTV7djUDhSo5lDjgwpIN0oRvks0SA5mMdKE5eFg==} + recma-build-jsx@1.0.0: + dependencies: + "@types/estree": 1.0.8 + estree-util-build-jsx: 3.0.1 + vfile: 6.0.3 - '@types/boxen@3.0.5': - resolution: {integrity: sha512-5O+dAJuahjV1PiRRYBRAJkpyCk9UjoWzdmhftmEwafoYx0DhPBT9qIwrKCCIpt/DdcG1g7/UD5lrf4qmHkp8TQ==} - deprecated: This is a stub types definition. boxen provides its own type definitions, so you do not need this installed. + recma-jsx@1.0.1(acorn@8.15.0): + dependencies: + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + estree-util-to-js: 2.0.0 + recma-parse: 1.0.0 + recma-stringify: 1.0.0 + unified: 11.0.5 + + recma-parse@1.0.0: + dependencies: + "@types/estree": 1.0.8 + esast-util-from-js: 2.0.1 + unified: 11.0.5 + vfile: 6.0.3 - '@types/crypto-js@4.2.2': - resolution: {integrity: sha512-sDOLlVbHhXpAUAL0YHDUUwDZf3iN4Bwi4W6a0W0b+QcAezUbRtH4FVb+9J4h+XFPW7l/gQ9F8qC7P+Ec4k8QVQ==} + recma-stringify@1.0.0: + dependencies: + "@types/estree": 1.0.8 + estree-util-to-js: 2.0.0 + unified: 11.0.5 + vfile: 6.0.3 - '@types/figlet@1.7.0': - resolution: {integrity: sha512-KwrT7p/8Eo3Op/HBSIwGXOsTZKYiM9NpWRBJ5sVjWP/SmlS+oxxRvJht/FNAtliJvja44N3ul1yATgohnVBV0Q==} + reflect.getprototypeof@1.0.10: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + which-builtin-type: 1.2.1 + + regenerate-unicode-properties@10.2.0: + dependencies: + regenerate: 1.4.2 - '@types/fs-extra@11.0.4': - resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} + regenerate@1.4.2: {} - '@types/gradient-string@1.1.6': - resolution: {integrity: sha512-LkaYxluY4G5wR1M4AKQUal2q61Di1yVVCw42ImFTuaIoQVgmV0WP1xUaLB8zwb47mp82vWTpePI9JmrjEnJ7nQ==} + regex-recursion@6.0.2: + dependencies: + regex-utilities: 2.3.0 - '@types/inquirer@9.0.7': - resolution: {integrity: sha512-Q0zyBupO6NxGRZut/JdmqYKOnN95Eg5V8Csg3PGKkP+FnvsUZx1jAyK7fztIszxxMuoBA6E3KXWvdZVXIpx60g==} + regex-utilities@2.3.0: {} - '@types/jsonfile@6.1.4': - resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} + regex@6.0.1: + dependencies: + regex-utilities: 2.3.0 - '@types/node-notifier@8.0.5': - resolution: {integrity: sha512-LX7+8MtTsv6szumAp6WOy87nqMEdGhhry/Qfprjm1Ma6REjVzeF7SCyvPtp5RaF6IkXCS9V4ra8g5fwvf2ZAYg==} + regexp.prototype.flags@1.5.4: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-errors: 1.3.0 + get-proto: 1.0.1 + gopd: 1.2.0 + set-function-name: 2.0.2 + + regexpu-core@6.2.0: + dependencies: + regenerate: 1.4.2 + regenerate-unicode-properties: 10.2.0 + regjsgen: 0.8.0 + regjsparser: 0.12.0 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.2.0 - '@types/node@22.15.2': - resolution: {integrity: sha512-uKXqKN9beGoMdBfcaTY1ecwz6ctxuJAcUlwE55938g0ZJ8lRxwAZqRz2AJ4pzpt5dHdTPMB863UZ0ESiFUcP7A==} + regjsgen@0.8.0: {} - '@types/through@0.0.33': - resolution: {integrity: sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==} + regjsparser@0.12.0: + dependencies: + jsesc: 3.0.2 - '@types/tinycolor2@1.4.6': - resolution: {integrity: sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw==} + rehype-recma@1.0.0: + dependencies: + "@types/estree": 1.0.8 + "@types/hast": 3.0.4 + hast-util-to-estree: 3.1.3 + transitivePeerDependencies: + - supports-color - acorn-walk@8.3.4: - resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} - engines: {node: '>=0.4.0'} + release-it@19.0.6(@types/node@18.19.120): + dependencies: + "@nodeutils/defaults-deep": 1.1.0 + "@octokit/rest": 22.0.0 + "@phun-ky/typeof": 2.0.3 + async-retry: 1.3.3 + c12: 3.3.1 + ci-info: 4.3.0 + eta: 4.0.1 + git-url-parse: 16.1.0 + inquirer: 12.9.6(@types/node@18.19.120) + issue-parser: 7.0.1 + lodash.merge: 4.6.2 + mime-types: 3.0.1 + new-github-release-url: 2.0.0 + open: 10.2.0 + ora: 9.0.0 + os-name: 6.1.0 + proxy-agent: 6.5.0 + semver: 7.7.2 + tinyglobby: 0.2.15 + undici: 6.21.3 + url-join: 5.0.0 + wildcard-match: 5.1.4 + yargs-parser: 21.1.1 + transitivePeerDependencies: + - "@types/node" + - magicast + - supports-color + + remark-gfm@4.0.1: + dependencies: + "@types/mdast": 4.0.4 + mdast-util-gfm: 3.1.0 + micromark-extension-gfm: 3.0.0 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-mdx@3.1.1: + dependencies: + mdast-util-mdx: 3.0.0 + micromark-extension-mdxjs: 3.0.0 + transitivePeerDependencies: + - supports-color - acorn@8.14.1: - resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} - engines: {node: '>=0.4.0'} - hasBin: true + remark-parse@11.0.0: + dependencies: + "@types/mdast": 4.0.4 + mdast-util-from-markdown: 2.0.2 + micromark-util-types: 2.0.2 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-rehype@11.1.2: + dependencies: + "@types/hast": 3.0.4 + "@types/mdast": 4.0.4 + mdast-util-to-hast: 13.2.0 + unified: 11.0.5 + vfile: 6.0.3 - ansi-align@3.0.1: - resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + remark-stringify@11.0.0: + dependencies: + "@types/mdast": 4.0.4 + mdast-util-to-markdown: 2.1.2 + unified: 11.0.5 - ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} + remark@15.0.1: + dependencies: + "@types/mdast": 4.0.4 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} + require-directory@2.1.1: {} - ansi-regex@6.1.0: - resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} - engines: {node: '>=12'} + require-from-string@2.0.2: {} - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} + resolve-cwd@3.0.0: + dependencies: + resolve-from: 5.0.0 - ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} + resolve-dir@1.0.1: + dependencies: + expand-tilde: 2.0.2 + global-modules: 1.0.0 - arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + resolve-from@4.0.0: {} - asn1@0.2.6: - resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} + resolve-from@5.0.0: {} - bcrypt-pbkdf@1.0.2: - resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} + resolve-pkg-maps@1.0.0: {} - blessed@0.1.81: - resolution: {integrity: sha512-LoF5gae+hlmfORcG1M5+5XZi4LBmvlXTzwJWzUlPryN/SJdSflZvROM2TwkT0GMpq7oqT48NRd4GS7BiVBc5OQ==} - engines: {node: '>= 0.8.0'} - hasBin: true + resolve.exports@2.0.3: {} - boxen@8.0.1: - resolution: {integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==} - engines: {node: '>=18'} + resolve@1.22.10: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 - buildcheck@0.0.6: - resolution: {integrity: sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==} - engines: {node: '>=10.0.0'} + resolve@2.0.0-next.5: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 - camelcase@8.0.0: - resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} - engines: {node: '>=16'} + restore-cursor@3.1.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 - chalk@5.4.1: - resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + restore-cursor@4.0.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 - chardet@0.7.0: - resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + restore-cursor@5.1.0: + dependencies: + onetime: 7.0.0 + signal-exit: 4.1.0 - cli-boxes@3.0.0: - resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} - engines: {node: '>=10'} + retry@0.13.1: {} - cli-cursor@5.0.0: - resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} - engines: {node: '>=18'} + reusify@1.1.0: {} - cli-spinners@2.9.2: - resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} - engines: {node: '>=6'} + right-pad@1.1.1: {} - cli-width@4.1.0: - resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} - engines: {node: '>= 12'} + rimraf@6.0.1: + dependencies: + glob: 11.0.3 + package-json-from-dist: 1.0.1 - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + rollup-plugin-copy@3.5.0: + dependencies: + "@types/fs-extra": 8.1.5 + colorette: 1.4.0 + fs-extra: 8.1.0 + globby: 10.0.1 + is-plain-object: 3.0.1 - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + rollup-plugin-postcss@4.0.2(postcss@8.5.6)(ts-node@10.9.2(@types/node@18.19.120)(typescript@5.9.3)): + dependencies: + chalk: 4.1.2 + concat-with-sourcemaps: 1.1.0 + cssnano: 5.1.15(postcss@8.5.6) + import-cwd: 3.0.0 + p-queue: 6.6.2 + pify: 5.0.0 + postcss: 8.5.6 + postcss-load-config: 3.1.4(postcss@8.5.6)(ts-node@10.9.2(@types/node@18.19.120)(typescript@5.9.3)) + postcss-modules: 4.3.1(postcss@8.5.6) + promise.series: 0.2.0 + resolve: 1.22.10 + rollup-pluginutils: 2.8.2 + safe-identifier: 0.4.2 + style-inject: 0.3.0 + transitivePeerDependencies: + - ts-node + + rollup-plugin-typescript2@0.36.0(rollup@4.46.0)(typescript@5.9.3): + dependencies: + "@rollup/pluginutils": 4.2.1 + find-cache-dir: 3.3.2 + fs-extra: 10.1.0 + rollup: 4.46.0 + semver: 7.7.2 + tslib: 2.8.1 + typescript: 5.9.3 - commander@13.1.0: - resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} - engines: {node: '>=18'} + rollup-pluginutils@2.8.2: + dependencies: + estree-walker: 0.6.1 - cpu-features@0.0.10: - resolution: {integrity: sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA==} - engines: {node: '>=10.0.0'} + rollup@4.46.0: + dependencies: + "@types/estree": 1.0.8 + optionalDependencies: + "@rollup/rollup-android-arm-eabi": 4.46.0 + "@rollup/rollup-android-arm64": 4.46.0 + "@rollup/rollup-darwin-arm64": 4.46.0 + "@rollup/rollup-darwin-x64": 4.46.0 + "@rollup/rollup-freebsd-arm64": 4.46.0 + "@rollup/rollup-freebsd-x64": 4.46.0 + "@rollup/rollup-linux-arm-gnueabihf": 4.46.0 + "@rollup/rollup-linux-arm-musleabihf": 4.46.0 + "@rollup/rollup-linux-arm64-gnu": 4.46.0 + "@rollup/rollup-linux-arm64-musl": 4.46.0 + "@rollup/rollup-linux-loongarch64-gnu": 4.46.0 + "@rollup/rollup-linux-ppc64-gnu": 4.46.0 + "@rollup/rollup-linux-riscv64-gnu": 4.46.0 + "@rollup/rollup-linux-riscv64-musl": 4.46.0 + "@rollup/rollup-linux-s390x-gnu": 4.46.0 + "@rollup/rollup-linux-x64-gnu": 4.46.0 + "@rollup/rollup-linux-x64-musl": 4.46.0 + "@rollup/rollup-win32-arm64-msvc": 4.46.0 + "@rollup/rollup-win32-ia32-msvc": 4.46.0 + "@rollup/rollup-win32-x64-msvc": 4.46.0 + fsevents: 2.3.3 + + run-applescript@7.1.0: {} + + run-async@2.4.1: {} + + run-async@4.0.6: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 - create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + rxjs@7.8.2: + dependencies: + tslib: 2.8.1 - crypto-js@4.2.0: - resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} + safe-array-concat@1.1.3: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + has-symbols: 1.1.0 + isarray: 2.0.5 - date-fns@4.1.0: - resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} + safe-buffer@5.1.2: {} - diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} + safe-buffer@5.2.1: {} - emoji-regex@10.4.0: - resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} + safe-identifier@0.4.2: {} - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + safe-push-apply@1.0.0: + dependencies: + es-errors: 1.3.0 + isarray: 2.0.5 - expandenv@1.0.0: - resolution: {integrity: sha512-arP8L2ecF2vZBn/uCtx+UdjeDmRzzfBLPeqIdbamwtFjI/DZuGNWhitcafw5ptPFA2m2DlDUxQ6C8BBi5FfdnA==} + safe-regex-test@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-regex: 1.2.1 - external-editor@3.1.0: - resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} - engines: {node: '>=4'} + safer-buffer@2.1.2: {} - figlet@1.8.1: - resolution: {integrity: sha512-kEC3Sme+YvA8Hkibv0NR1oClGcWia0VB2fC1SlMy027cwe795Xx40Xiv/nw/iFAwQLupymWh+uhAAErn/7hwPg==} - engines: {node: '>= 0.4.0'} - hasBin: true + scheduler@0.23.2: + dependencies: + loose-envify: 1.4.0 - fs-extra@11.3.0: - resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} - engines: {node: '>=14.14'} + scheduler@0.27.0: {} - get-east-asian-width@1.3.0: - resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} - engines: {node: '>=18'} + scroll-into-view-if-needed@3.1.0: + dependencies: + compute-scroll-into-view: 3.1.1 - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + semver@6.3.1: {} - gradient-string@3.0.0: - resolution: {integrity: sha512-frdKI4Qi8Ihp4C6wZNB565de/THpIaw3DjP5ku87M+N9rNSGmPTjfkq61SdRXB7eCaL8O1hkKDvf6CDMtOzIAg==} - engines: {node: '>=14'} + semver@7.5.4: + dependencies: + lru-cache: 6.0.0 - growly@1.3.0: - resolution: {integrity: sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==} + semver@7.7.2: {} - iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} + semver@7.7.3: {} - inquirer@12.6.0: - resolution: {integrity: sha512-3zmmccQd/8o65nPOZJZ+2wqt76Ghw3+LaMrmc6JE/IzcvQhJ1st+QLCOo/iLS85/tILU0myG31a2TAZX0ysAvg==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true + serialize-javascript@6.0.2: + dependencies: + randombytes: 2.1.0 - is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + + set-function-name@2.0.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} + set-proto@1.0.0: + dependencies: + dunder-proto: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 - is-interactive@2.0.0: - resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} - engines: {node: '>=12'} + sharp@0.34.5: + dependencies: + "@img/colour": 1.0.0 + detect-libc: 2.1.2 + semver: 7.7.3 + optionalDependencies: + "@img/sharp-darwin-arm64": 0.34.5 + "@img/sharp-darwin-x64": 0.34.5 + "@img/sharp-libvips-darwin-arm64": 1.2.4 + "@img/sharp-libvips-darwin-x64": 1.2.4 + "@img/sharp-libvips-linux-arm": 1.2.4 + "@img/sharp-libvips-linux-arm64": 1.2.4 + "@img/sharp-libvips-linux-ppc64": 1.2.4 + "@img/sharp-libvips-linux-riscv64": 1.2.4 + "@img/sharp-libvips-linux-s390x": 1.2.4 + "@img/sharp-libvips-linux-x64": 1.2.4 + "@img/sharp-libvips-linuxmusl-arm64": 1.2.4 + "@img/sharp-libvips-linuxmusl-x64": 1.2.4 + "@img/sharp-linux-arm": 0.34.5 + "@img/sharp-linux-arm64": 0.34.5 + "@img/sharp-linux-ppc64": 0.34.5 + "@img/sharp-linux-riscv64": 0.34.5 + "@img/sharp-linux-s390x": 0.34.5 + "@img/sharp-linux-x64": 0.34.5 + "@img/sharp-linuxmusl-arm64": 0.34.5 + "@img/sharp-linuxmusl-x64": 0.34.5 + "@img/sharp-wasm32": 0.34.5 + "@img/sharp-win32-arm64": 0.34.5 + "@img/sharp-win32-ia32": 0.34.5 + "@img/sharp-win32-x64": 0.34.5 + optional: true - is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 - is-unicode-supported@1.3.0: - resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} - engines: {node: '>=12'} + shebang-regex@3.0.0: {} - is-unicode-supported@2.1.0: - resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} - engines: {node: '>=18'} + shell-quote@1.8.3: {} - is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} + shellwords@0.1.1: + optional: true - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + shiki@3.15.0: + dependencies: + "@shikijs/core": 3.15.0 + "@shikijs/engine-javascript": 3.15.0 + "@shikijs/engine-oniguruma": 3.15.0 + "@shikijs/langs": 3.15.0 + "@shikijs/themes": 3.15.0 + "@shikijs/types": 3.15.0 + "@shikijs/vscode-textmate": 10.0.2 + "@types/hast": 3.0.4 + + side-channel-list@1.0.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 - jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 - log-symbols@6.0.0: - resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} - engines: {node: '>=18'} + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 - make-dir@3.1.0: - resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} - engines: {node: '>=8'} + side-channel@1.1.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 - make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + signal-exit@3.0.7: {} - mimic-function@5.0.1: - resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} - engines: {node: '>=18'} + signal-exit@4.1.0: {} - mute-stream@2.0.0: - resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} - engines: {node: ^18.17.0 || >=20.5.0} + simple-concat@1.0.1: {} - nan@2.22.2: - resolution: {integrity: sha512-DANghxFkS1plDdRsX0X9pm0Z6SJNN6gBdtXfanwoZ8hooC5gosGFSBGRYHUVPz1asKA/kMRqDRdHrluZ61SpBQ==} + simple-get@4.0.1: + dependencies: + decompress-response: 6.0.0 + once: 1.4.0 + simple-concat: 1.0.1 - node-notifier@10.0.1: - resolution: {integrity: sha512-YX7TSyDukOZ0g+gmzjB6abKu+hTGvO8+8+gIFDsRCU2t8fLV/P2unmt+LGFaIa4y64aX98Qksa97rgz4vMNeLQ==} + sisteransi@1.0.5: {} - node-ssh@13.2.1: - resolution: {integrity: sha512-rfl4GWMygQfzlExPkQ2LWyya5n2jOBm5vhEnup+4mdw7tQhNpJWbP5ldr09Jfj93k5SfY5lxcn8od5qrQ/6mBg==} - engines: {node: '>= 10'} + slash@3.0.0: {} - onetime@7.0.0: - resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} - engines: {node: '>=18'} + slice-ansi@5.0.0: + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 4.0.0 - ora@8.2.0: - resolution: {integrity: sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==} - engines: {node: '>=18'} + slice-ansi@6.0.0: + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 4.0.0 - os-tmpdir@1.0.2: - resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} - engines: {node: '>=0.10.0'} + smart-buffer@4.2.0: {} - restore-cursor@5.1.0: - resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} - engines: {node: '>=18'} + smol-toml@1.5.2: {} - run-async@3.0.0: - resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} - engines: {node: '>=0.12.0'} + socks-proxy-agent@8.0.5: + dependencies: + agent-base: 7.1.4 + debug: 4.4.1(supports-color@8.1.1) + socks: 2.8.7 + transitivePeerDependencies: + - supports-color - rxjs@7.8.2: - resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + socks@2.8.7: + dependencies: + ip-address: 10.1.0 + smart-buffer: 4.2.0 - safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + source-map-js@1.2.1: {} - sb-promise-queue@2.1.1: - resolution: {integrity: sha512-qXfdcJQMxMljxmPprn4Q4hl3pJmoljSCzUvvEBa9Kscewnv56n0KqrO6yWSrGLOL9E021wcGdPa39CHGKA6G0w==} - engines: {node: '>= 8'} + source-map-support@0.5.13: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 - sb-scandir@3.1.0: - resolution: {integrity: sha512-70BVm2xz9jn94zSQdpvYrEG101/UV9TVGcfWr9T5iob3QhCK4lYXeculfBqPGFv3XTeKgx4dpWyYIDeZUqo4kg==} - engines: {node: '>= 8'} + source-map-support@0.5.19: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true + source-map@0.6.1: {} - semver@7.7.1: - resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} - engines: {node: '>=10'} - hasBin: true + source-map@0.7.6: {} - shell-escape@0.2.0: - resolution: {integrity: sha512-uRRBT2MfEOyxuECseCZd28jC1AJ8hmqqneWQ4VWUTgCAFvb3wKU1jLqj6egC4Exrr88ogg3dp+zroH4wJuaXzw==} + source-map@0.8.0-beta.0: + dependencies: + whatwg-url: 7.1.0 - shellwords@0.1.1: - resolution: {integrity: sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==} + space-separated-tokens@2.0.2: {} - signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} + spdx-correct@3.2.0: + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.22 - ssh2@1.16.0: - resolution: {integrity: sha512-r1X4KsBGedJqo7h8F5c4Ybpcr5RjyP+aWIG007uBPRjmdQWfEiVLzSK71Zji1B9sKxwaCvD8y8cwSkYrlLiRRg==} - engines: {node: '>=10.16.0'} + spdx-exceptions@2.5.0: {} - stdin-discarder@0.2.2: - resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} - engines: {node: '>=18'} + spdx-expression-parse@3.0.1: + dependencies: + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.22 - string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} + spdx-license-ids@3.0.22: {} - string-width@7.2.0: - resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} - engines: {node: '>=18'} + split2@4.2.0: {} - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} + sprintf-js@1.0.3: {} - strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} - engines: {node: '>=12'} + stable-hash@0.0.5: {} - tinycolor2@1.6.0: - resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==} + stable@0.1.8: {} - tinygradient@1.1.5: - resolution: {integrity: sha512-8nIfc2vgQ4TeLnk2lFj4tRLvvJwEfQuabdsmvDdQPT0xlk9TaNtpGd6nNRxXoK6vQhN6RSzj+Cnp5tTQmpxmbw==} + stack-utils@2.0.6: + dependencies: + escape-string-regexp: 2.0.0 - tmp@0.0.33: - resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} - engines: {node: '>=0.6.0'} + stdin-discarder@0.2.2: {} - ts-node@10.9.2: - resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} - hasBin: true - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true + stop-iteration-iterator@1.1.0: + dependencies: + es-errors: 1.3.0 + internal-slot: 1.1.0 - tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + stream-meter@1.0.4: + dependencies: + readable-stream: 2.3.8 - tweetnacl@0.14.5: - resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} + streamx@2.23.0: + dependencies: + events-universal: 1.0.1 + fast-fifo: 1.3.2 + text-decoder: 1.2.3 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a - type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} + string-hash@1.1.3: {} - type-fest@4.40.0: - resolution: {integrity: sha512-ABHZ2/tS2JkvH1PEjxFDTUWC8dB5OsIGZP4IFLhR293GqT5Y5qB1WwL2kMPYhQW9DVgVD8Hd7I8gjwPIf5GFkw==} - engines: {node: '>=16'} + string-length@4.0.2: + dependencies: + char-regex: 1.0.2 + strip-ansi: 6.0.1 - typescript@5.8.3: - resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} - engines: {node: '>=14.17'} - hasBin: true + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.2 + + string-width@8.1.0: + dependencies: + get-east-asian-width: 1.4.0 + strip-ansi: 7.1.2 + + string.prototype.includes@2.0.1: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + + string.prototype.matchall@4.0.12: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-symbols: 1.1.0 + internal-slot: 1.1.0 + regexp.prototype.flags: 1.5.4 + set-function-name: 2.0.2 + side-channel: 1.1.0 + + string.prototype.repeat@1.0.0: + dependencies: + define-properties: 1.2.1 + es-abstract: 1.24.0 + + string.prototype.trim@1.2.10: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-data-property: 1.1.4 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-object-atoms: 1.1.1 + has-property-descriptors: 1.0.2 + + string.prototype.trimend@1.0.9: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + string.prototype.trimstart@1.0.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + string_decoder@1.1.1: + dependencies: + safe-buffer: 5.1.2 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + stringify-entities@4.0.4: + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 - undici-types@6.21.0: - resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 - universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.1.0 - uuid@11.1.0: - resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} - hasBin: true + strip-ansi@7.1.2: + dependencies: + ansi-regex: 6.1.0 - uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true + strip-bom@3.0.0: {} - v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + strip-bom@4.0.0: {} - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true + strip-final-newline@2.0.0: {} - widest-line@5.0.0: - resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==} - engines: {node: '>=18'} + strip-final-newline@3.0.0: {} - wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} + strip-json-comments@2.0.1: {} - wrap-ansi@9.0.0: - resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} - engines: {node: '>=18'} + strip-json-comments@3.1.1: {} - yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} + strip-json-comments@5.0.2: {} - yoctocolors-cjs@2.1.2: - resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} - engines: {node: '>=18'} + style-inject@0.3.0: {} -snapshots: + style-to-js@1.1.19: + dependencies: + style-to-object: 1.0.12 - '@cspotcode/source-map-support@0.8.1': + style-to-object@1.0.12: dependencies: - '@jridgewell/trace-mapping': 0.3.9 + inline-style-parser: 0.2.6 - '@inquirer/checkbox@4.1.5(@types/node@22.15.2)': + styled-jsx@5.1.6(@babel/core@7.28.0)(babel-plugin-macros@3.1.0)(react@19.2.0): dependencies: - '@inquirer/core': 10.1.10(@types/node@22.15.2) - '@inquirer/figures': 1.0.11 - '@inquirer/type': 3.0.6(@types/node@22.15.2) - ansi-escapes: 4.3.2 - yoctocolors-cjs: 2.1.2 + client-only: 0.0.1 + react: 19.2.0 optionalDependencies: - '@types/node': 22.15.2 + "@babel/core": 7.28.0 + babel-plugin-macros: 3.1.0 - '@inquirer/confirm@5.1.9(@types/node@22.15.2)': + stylehacks@5.1.1(postcss@8.5.6): dependencies: - '@inquirer/core': 10.1.10(@types/node@22.15.2) - '@inquirer/type': 3.0.6(@types/node@22.15.2) - optionalDependencies: - '@types/node': 22.15.2 + browserslist: 4.25.1 + postcss: 8.5.6 + postcss-selector-parser: 6.1.2 - '@inquirer/core@10.1.10(@types/node@22.15.2)': + sucrase@3.35.0: dependencies: - '@inquirer/figures': 1.0.11 - '@inquirer/type': 3.0.6(@types/node@22.15.2) - ansi-escapes: 4.3.2 - cli-width: 4.1.0 - mute-stream: 2.0.0 - signal-exit: 4.1.0 - wrap-ansi: 6.2.0 - yoctocolors-cjs: 2.1.2 - optionalDependencies: - '@types/node': 22.15.2 + "@jridgewell/gen-mapping": 0.3.12 + commander: 4.1.1 + glob: 10.4.5 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.7 + ts-interface-checker: 0.1.13 + + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 - '@inquirer/editor@4.2.10(@types/node@22.15.2)': + supports-color@7.2.0: dependencies: - '@inquirer/core': 10.1.10(@types/node@22.15.2) - '@inquirer/type': 3.0.6(@types/node@22.15.2) - external-editor: 3.1.0 - optionalDependencies: - '@types/node': 22.15.2 + has-flag: 4.0.0 - '@inquirer/expand@4.0.12(@types/node@22.15.2)': + supports-color@8.1.1: dependencies: - '@inquirer/core': 10.1.10(@types/node@22.15.2) - '@inquirer/type': 3.0.6(@types/node@22.15.2) - yoctocolors-cjs: 2.1.2 - optionalDependencies: - '@types/node': 22.15.2 + has-flag: 4.0.0 - '@inquirer/figures@1.0.11': {} + supports-preserve-symlinks-flag@1.0.0: {} - '@inquirer/input@4.1.9(@types/node@22.15.2)': + svgo@2.8.0: dependencies: - '@inquirer/core': 10.1.10(@types/node@22.15.2) - '@inquirer/type': 3.0.6(@types/node@22.15.2) - optionalDependencies: - '@types/node': 22.15.2 - - '@inquirer/number@3.0.12(@types/node@22.15.2)': + "@trysound/sax": 0.2.0 + commander: 7.2.0 + css-select: 4.3.0 + css-tree: 1.1.3 + csso: 4.2.0 + picocolors: 1.1.1 + stable: 0.1.8 + + synckit@0.11.11: dependencies: - '@inquirer/core': 10.1.10(@types/node@22.15.2) - '@inquirer/type': 3.0.6(@types/node@22.15.2) - optionalDependencies: - '@types/node': 22.15.2 + "@pkgr/core": 0.2.9 + + tailwind-merge@3.4.0: {} - '@inquirer/password@4.0.12(@types/node@22.15.2)': + tailwindcss@4.1.17: {} + + tapable@2.3.0: {} + + tar-fs@2.1.4: dependencies: - '@inquirer/core': 10.1.10(@types/node@22.15.2) - '@inquirer/type': 3.0.6(@types/node@22.15.2) - ansi-escapes: 4.3.2 - optionalDependencies: - '@types/node': 22.15.2 + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.3 + tar-stream: 2.2.0 - '@inquirer/prompts@7.5.0(@types/node@22.15.2)': + tar-fs@3.1.1: dependencies: - '@inquirer/checkbox': 4.1.5(@types/node@22.15.2) - '@inquirer/confirm': 5.1.9(@types/node@22.15.2) - '@inquirer/editor': 4.2.10(@types/node@22.15.2) - '@inquirer/expand': 4.0.12(@types/node@22.15.2) - '@inquirer/input': 4.1.9(@types/node@22.15.2) - '@inquirer/number': 3.0.12(@types/node@22.15.2) - '@inquirer/password': 4.0.12(@types/node@22.15.2) - '@inquirer/rawlist': 4.1.0(@types/node@22.15.2) - '@inquirer/search': 3.0.12(@types/node@22.15.2) - '@inquirer/select': 4.2.0(@types/node@22.15.2) + pump: 3.0.3 + tar-stream: 3.1.7 optionalDependencies: - '@types/node': 22.15.2 + bare-fs: 4.5.1 + bare-path: 3.0.0 + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - react-native-b4a + + tar-stream@2.2.0: + dependencies: + bl: 4.1.0 + end-of-stream: 1.4.5 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 3.6.2 - '@inquirer/rawlist@4.1.0(@types/node@22.15.2)': + tar-stream@3.1.7: dependencies: - '@inquirer/core': 10.1.10(@types/node@22.15.2) - '@inquirer/type': 3.0.6(@types/node@22.15.2) - yoctocolors-cjs: 2.1.2 - optionalDependencies: - '@types/node': 22.15.2 + b4a: 1.7.3 + fast-fifo: 1.3.2 + streamx: 2.23.0 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + + tar@7.5.2: + dependencies: + "@isaacs/fs-minipass": 4.0.1 + chownr: 3.0.0 + minipass: 7.1.2 + minizlib: 3.1.0 + yallist: 5.0.0 - '@inquirer/search@3.0.12(@types/node@22.15.2)': + test-exclude@6.0.0: dependencies: - '@inquirer/core': 10.1.10(@types/node@22.15.2) - '@inquirer/figures': 1.0.11 - '@inquirer/type': 3.0.6(@types/node@22.15.2) - yoctocolors-cjs: 2.1.2 - optionalDependencies: - '@types/node': 22.15.2 + "@istanbuljs/schema": 0.1.3 + glob: 7.2.3 + minimatch: 3.1.2 - '@inquirer/select@4.2.0(@types/node@22.15.2)': + test-exclude@7.0.1: dependencies: - '@inquirer/core': 10.1.10(@types/node@22.15.2) - '@inquirer/figures': 1.0.11 - '@inquirer/type': 3.0.6(@types/node@22.15.2) - ansi-escapes: 4.3.2 - yoctocolors-cjs: 2.1.2 - optionalDependencies: - '@types/node': 22.15.2 + "@istanbuljs/schema": 0.1.3 + glob: 10.4.5 + minimatch: 9.0.5 - '@inquirer/type@3.0.6(@types/node@22.15.2)': - optionalDependencies: - '@types/node': 22.15.2 + text-decoder@1.2.3: + dependencies: + b4a: 1.7.3 + transitivePeerDependencies: + - react-native-b4a - '@jridgewell/resolve-uri@3.1.2': {} + text-extensions@2.4.0: {} - '@jridgewell/sourcemap-codec@1.5.0': {} + thenify-all@1.6.0: + dependencies: + thenify: 3.3.1 - '@jridgewell/trace-mapping@0.3.9': + thenify@3.3.1: dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 + any-promise: 1.3.0 - '@tsconfig/node10@1.0.11': {} + through@2.3.8: {} - '@tsconfig/node12@1.0.11': {} + tinyexec@0.3.2: {} - '@tsconfig/node14@1.0.3': {} + tinyexec@1.0.2: {} - '@tsconfig/node16@1.0.4': {} + tinyglobby@0.2.14: + dependencies: + fdir: 6.4.6(picomatch@4.0.2) + picomatch: 4.0.2 - '@types/blessed@0.1.25': + tinyglobby@0.2.15: dependencies: - '@types/node': 22.15.2 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 - '@types/boxen@3.0.5': + tmp@0.0.33: dependencies: - boxen: 8.0.1 + os-tmpdir: 1.0.2 - '@types/crypto-js@4.2.2': {} + tmp@0.2.3: {} - '@types/figlet@1.7.0': {} + tmpl@1.0.5: {} - '@types/fs-extra@11.0.4': + to-regex-range@5.0.1: dependencies: - '@types/jsonfile': 6.1.4 - '@types/node': 22.15.2 + is-number: 7.0.0 - '@types/gradient-string@1.1.6': - dependencies: - '@types/tinycolor2': 1.4.6 + tr46@0.0.3: {} - '@types/inquirer@9.0.7': + tr46@1.0.1: dependencies: - '@types/through': 0.0.33 - rxjs: 7.8.2 + punycode: 2.3.1 - '@types/jsonfile@6.1.4': - dependencies: - '@types/node': 22.15.2 + tree-kill@1.2.2: {} - '@types/node-notifier@8.0.5': - dependencies: - '@types/node': 22.15.2 + trim-lines@3.0.1: {} - '@types/node@22.15.2': - dependencies: - undici-types: 6.21.0 + trough@2.2.0: {} - '@types/through@0.0.33': + ts-api-utils@2.1.0(typescript@5.9.3): dependencies: - '@types/node': 22.15.2 + typescript: 5.9.3 - '@types/tinycolor2@1.4.6': {} + ts-interface-checker@0.1.13: {} - acorn-walk@8.3.4: + ts-mocha@10.1.0(mocha@10.8.2): dependencies: - acorn: 8.14.1 - - acorn@8.14.1: {} + mocha: 10.8.2 + ts-node: 7.0.1 + optionalDependencies: + tsconfig-paths: 3.15.0 - ansi-align@3.0.1: + ts-node@10.9.2(@types/node@18.19.120)(typescript@5.9.3): dependencies: - string-width: 4.2.3 + "@cspotcode/source-map-support": 0.8.1 + "@tsconfig/node10": 1.0.11 + "@tsconfig/node12": 1.0.11 + "@tsconfig/node14": 1.0.3 + "@tsconfig/node16": 1.0.4 + "@types/node": 18.19.120 + acorn: 8.15.0 + acorn-walk: 8.3.4 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.9.3 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 - ansi-escapes@4.3.2: + ts-node@7.0.1: dependencies: - type-fest: 0.21.3 - - ansi-regex@5.0.1: {} - - ansi-regex@6.1.0: {} + arrify: 1.0.1 + buffer-from: 1.1.2 + diff: 3.5.0 + make-error: 1.3.6 + minimist: 1.2.8 + mkdirp: 0.5.6 + source-map-support: 0.5.19 + yn: 2.0.0 - ansi-styles@4.3.0: + tsconfig-paths@3.15.0: dependencies: - color-convert: 2.0.1 + "@types/json5": 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 - ansi-styles@6.2.1: {} + tsconfig-paths@4.2.0: + dependencies: + json5: 2.2.3 + minimist: 1.2.8 + strip-bom: 3.0.0 - arg@4.1.3: {} + tslib@2.8.1: {} - asn1@0.2.6: + tsup@8.5.0(jiti@2.6.1)(postcss@8.5.6)(typescript@5.9.3)(yaml@2.8.1): dependencies: - safer-buffer: 2.1.2 - - bcrypt-pbkdf@1.0.2: + bundle-require: 5.1.0(esbuild@0.25.8) + cac: 6.7.14 + chokidar: 4.0.3 + consola: 3.4.2 + debug: 4.4.1(supports-color@8.1.1) + esbuild: 0.25.8 + fix-dts-default-cjs-exports: 1.0.1 + joycon: 3.1.1 + picocolors: 1.1.1 + postcss-load-config: 6.0.1(jiti@2.6.1)(postcss@8.5.6)(yaml@2.8.1) + resolve-from: 5.0.0 + rollup: 4.46.0 + source-map: 0.8.0-beta.0 + sucrase: 3.35.0 + tinyexec: 0.3.2 + tinyglobby: 0.2.14 + tree-kill: 1.2.2 + optionalDependencies: + postcss: 8.5.6 + typescript: 5.9.3 + transitivePeerDependencies: + - jiti + - supports-color + - tsx + - yaml + + tunnel-agent@0.6.0: dependencies: - tweetnacl: 0.14.5 + safe-buffer: 5.2.1 - blessed@0.1.81: {} - - boxen@8.0.1: + type-check@0.4.0: dependencies: - ansi-align: 3.0.1 - camelcase: 8.0.0 - chalk: 5.4.1 - cli-boxes: 3.0.0 - string-width: 7.2.0 - type-fest: 4.40.0 - widest-line: 5.0.0 - wrap-ansi: 9.0.0 - - buildcheck@0.0.6: - optional: true + prelude-ls: 1.2.1 - camelcase@8.0.0: {} + type-detect@4.0.8: {} - chalk@5.4.1: {} + type-detect@4.1.0: {} - chardet@0.7.0: {} + type-fest@0.12.0: {} - cli-boxes@3.0.0: {} + type-fest@0.21.3: {} - cli-cursor@5.0.0: - dependencies: - restore-cursor: 5.1.0 + type-fest@2.19.0: {} - cli-spinners@2.9.2: {} + type-fest@4.41.0: {} - cli-width@4.1.0: {} + typed-array-buffer@1.0.3: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-typed-array: 1.1.15 - color-convert@2.0.1: + typed-array-byte-length@1.0.3: dependencies: - color-name: 1.1.4 + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 - color-name@1.1.4: {} + typed-array-byte-offset@1.0.4: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + reflect.getprototypeof: 1.0.10 + + typed-array-length@1.0.7: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + is-typed-array: 1.1.15 + possible-typed-array-names: 1.1.0 + reflect.getprototypeof: 1.0.10 - commander@13.1.0: {} + typedarray@0.0.6: {} - cpu-features@0.0.10: + typedoc-plugin-markdown@4.9.0(typedoc@0.28.14(typescript@5.9.3)): dependencies: - buildcheck: 0.0.6 - nan: 2.22.2 - optional: true + typedoc: 0.28.14(typescript@5.9.3) - create-require@1.1.1: {} - - crypto-js@4.2.0: {} + typedoc@0.28.14(typescript@5.9.3): + dependencies: + "@gerrit0/mini-shiki": 3.15.0 + lunr: 2.3.9 + markdown-it: 14.1.0 + minimatch: 9.0.5 + typescript: 5.9.3 + yaml: 2.8.1 + + typescript-eslint@8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3): + dependencies: + "@typescript-eslint/eslint-plugin": 8.46.4(@typescript-eslint/parser@8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + "@typescript-eslint/parser": 8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + "@typescript-eslint/typescript-estree": 8.46.4(typescript@5.9.3) + "@typescript-eslint/utils": 8.46.4(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.39.1(jiti@2.6.1) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color - date-fns@4.1.0: {} + typescript@5.8.3: {} - diff@4.0.2: {} + typescript@5.9.3: {} - emoji-regex@10.4.0: {} + uc.micro@2.1.0: {} - emoji-regex@8.0.0: {} + ufo@1.6.1: {} - expandenv@1.0.0: {} + uglify-js@3.19.3: + optional: true - external-editor@3.1.0: + unbox-primitive@1.1.0: dependencies: - chardet: 0.7.0 - iconv-lite: 0.4.24 - tmp: 0.0.33 + call-bound: 1.0.4 + has-bigints: 1.1.0 + has-symbols: 1.1.0 + which-boxed-primitive: 1.1.1 - figlet@1.8.1: {} + undici-types@5.26.5: {} - fs-extra@11.3.0: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.1 + undici-types@7.16.0: {} - get-east-asian-width@1.3.0: {} + undici@6.21.3: {} - graceful-fs@4.2.11: {} + unicode-canonical-property-names-ecmascript@2.0.1: {} - gradient-string@3.0.0: + unicode-match-property-ecmascript@2.0.0: dependencies: - chalk: 5.4.1 - tinygradient: 1.1.5 + unicode-canonical-property-names-ecmascript: 2.0.1 + unicode-property-aliases-ecmascript: 2.1.0 - growly@1.3.0: {} + unicode-match-property-value-ecmascript@2.2.0: {} - iconv-lite@0.4.24: + unicode-property-aliases-ecmascript@2.1.0: {} + + unicorn-magic@0.1.0: {} + + unified@11.0.5: dependencies: - safer-buffer: 2.1.2 + "@types/unist": 3.0.3 + bail: 2.0.2 + devlop: 1.1.0 + extend: 3.0.2 + is-plain-obj: 4.1.0 + trough: 2.2.0 + vfile: 6.0.3 + + unist-util-is@6.0.1: + dependencies: + "@types/unist": 3.0.3 - inquirer@12.6.0(@types/node@22.15.2): + unist-util-position-from-estree@2.0.0: dependencies: - '@inquirer/core': 10.1.10(@types/node@22.15.2) - '@inquirer/prompts': 7.5.0(@types/node@22.15.2) - '@inquirer/type': 3.0.6(@types/node@22.15.2) - ansi-escapes: 4.3.2 - mute-stream: 2.0.0 - run-async: 3.0.0 - rxjs: 7.8.2 - optionalDependencies: - '@types/node': 22.15.2 + "@types/unist": 3.0.3 - is-docker@2.2.1: {} + unist-util-position@5.0.0: + dependencies: + "@types/unist": 3.0.3 - is-fullwidth-code-point@3.0.0: {} + unist-util-remove-position@5.0.0: + dependencies: + "@types/unist": 3.0.3 + unist-util-visit: 5.0.0 - is-interactive@2.0.0: {} + unist-util-stringify-position@4.0.0: + dependencies: + "@types/unist": 3.0.3 - is-stream@2.0.1: {} + unist-util-visit-parents@6.0.2: + dependencies: + "@types/unist": 3.0.3 + unist-util-is: 6.0.1 - is-unicode-supported@1.3.0: {} + unist-util-visit@5.0.0: + dependencies: + "@types/unist": 3.0.3 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 - is-unicode-supported@2.1.0: {} + universal-user-agent@7.0.3: {} - is-wsl@2.2.0: - dependencies: - is-docker: 2.2.1 + universalify@0.1.2: {} - isexe@2.0.0: {} + universalify@2.0.1: {} - jsonfile@6.1.0: + unrs-resolver@1.11.1: dependencies: - universalify: 2.0.1 + napi-postinstall: 0.3.2 optionalDependencies: + "@unrs/resolver-binding-android-arm-eabi": 1.11.1 + "@unrs/resolver-binding-android-arm64": 1.11.1 + "@unrs/resolver-binding-darwin-arm64": 1.11.1 + "@unrs/resolver-binding-darwin-x64": 1.11.1 + "@unrs/resolver-binding-freebsd-x64": 1.11.1 + "@unrs/resolver-binding-linux-arm-gnueabihf": 1.11.1 + "@unrs/resolver-binding-linux-arm-musleabihf": 1.11.1 + "@unrs/resolver-binding-linux-arm64-gnu": 1.11.1 + "@unrs/resolver-binding-linux-arm64-musl": 1.11.1 + "@unrs/resolver-binding-linux-ppc64-gnu": 1.11.1 + "@unrs/resolver-binding-linux-riscv64-gnu": 1.11.1 + "@unrs/resolver-binding-linux-riscv64-musl": 1.11.1 + "@unrs/resolver-binding-linux-s390x-gnu": 1.11.1 + "@unrs/resolver-binding-linux-x64-gnu": 1.11.1 + "@unrs/resolver-binding-linux-x64-musl": 1.11.1 + "@unrs/resolver-binding-wasm32-wasi": 1.11.1 + "@unrs/resolver-binding-win32-arm64-msvc": 1.11.1 + "@unrs/resolver-binding-win32-ia32-msvc": 1.11.1 + "@unrs/resolver-binding-win32-x64-msvc": 1.11.1 + + unzipper@0.12.3: + dependencies: + bluebird: 3.7.2 + duplexer2: 0.1.4 + fs-extra: 11.3.2 graceful-fs: 4.2.11 + node-int64: 0.4.0 - log-symbols@6.0.0: + update-browserslist-db@1.1.3(browserslist@4.25.1): dependencies: - chalk: 5.4.1 - is-unicode-supported: 1.3.0 + browserslist: 4.25.1 + escalade: 3.2.0 + picocolors: 1.1.1 - make-dir@3.1.0: + uri-js@4.4.1: dependencies: - semver: 6.3.1 + punycode: 2.3.1 - make-error@1.3.6: {} + url-join@5.0.0: {} - mimic-function@5.0.1: {} + use-callback-ref@1.3.3(@types/react@19.2.5)(react@19.2.0): + dependencies: + react: 19.2.0 + tslib: 2.8.1 + optionalDependencies: + "@types/react": 19.2.5 - mute-stream@2.0.0: {} + use-sidecar@1.1.3(@types/react@19.2.5)(react@19.2.0): + dependencies: + detect-node-es: 1.1.0 + react: 19.2.0 + tslib: 2.8.1 + optionalDependencies: + "@types/react": 19.2.5 + + util-deprecate@1.0.2: {} - nan@2.22.2: + uuid@8.3.2: optional: true - node-notifier@10.0.1: + v8-compile-cache-lib@3.0.1: {} + + v8-to-istanbul@9.3.0: dependencies: - growly: 1.3.0 - is-wsl: 2.2.0 - semver: 7.7.1 - shellwords: 0.1.1 - uuid: 8.3.2 - which: 2.0.2 + "@jridgewell/trace-mapping": 0.3.29 + "@types/istanbul-lib-coverage": 2.0.6 + convert-source-map: 2.0.0 - node-ssh@13.2.1: + validate-npm-package-license@3.0.4: dependencies: - is-stream: 2.0.1 - make-dir: 3.1.0 - sb-promise-queue: 2.1.1 - sb-scandir: 3.1.0 - shell-escape: 0.2.0 - ssh2: 1.16.0 + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 - onetime@7.0.0: + validate-npm-package-name@5.0.1: {} + + vfile-message@4.0.3: dependencies: - mimic-function: 5.0.1 + "@types/unist": 3.0.3 + unist-util-stringify-position: 4.0.0 - ora@8.2.0: + vfile@6.0.3: dependencies: - chalk: 5.4.1 - cli-cursor: 5.0.0 - cli-spinners: 2.9.2 - is-interactive: 2.0.0 - is-unicode-supported: 2.1.0 - log-symbols: 6.0.0 - stdin-discarder: 0.2.2 - string-width: 7.2.0 - strip-ansi: 7.1.0 + "@types/unist": 3.0.3 + vfile-message: 4.0.3 - os-tmpdir@1.0.2: {} + walk-up-path@4.0.0: {} - restore-cursor@5.1.0: + walker@1.0.8: dependencies: - onetime: 7.0.0 - signal-exit: 4.1.0 + makeerror: 1.0.12 - run-async@3.0.0: {} - - rxjs@7.8.2: + wcwidth@1.0.1: dependencies: - tslib: 2.8.1 + defaults: 1.0.4 - safer-buffer@2.1.2: {} + webidl-conversions@3.0.1: {} - sb-promise-queue@2.1.1: {} + webidl-conversions@4.0.2: {} - sb-scandir@3.1.0: + whatwg-url@5.0.0: dependencies: - sb-promise-queue: 2.1.1 + tr46: 0.0.3 + webidl-conversions: 3.0.1 - semver@6.3.1: {} + whatwg-url@7.1.0: + dependencies: + lodash.sortby: 4.7.0 + tr46: 1.0.1 + webidl-conversions: 4.0.2 - semver@7.7.1: {} + which-boxed-primitive@1.1.1: + dependencies: + is-bigint: 1.1.0 + is-boolean-object: 1.2.2 + is-number-object: 1.1.1 + is-string: 1.1.1 + is-symbol: 1.1.1 - shell-escape@0.2.0: {} + which-builtin-type@1.2.1: + dependencies: + call-bound: 1.0.4 + function.prototype.name: 1.1.8 + has-tostringtag: 1.0.2 + is-async-function: 2.1.1 + is-date-object: 1.1.0 + is-finalizationregistry: 1.1.1 + is-generator-function: 1.1.0 + is-regex: 1.2.1 + is-weakref: 1.1.1 + isarray: 2.0.5 + which-boxed-primitive: 1.1.1 + which-collection: 1.0.2 + which-typed-array: 1.1.19 + + which-collection@1.0.2: + dependencies: + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.4 - shellwords@0.1.1: {} + which-typed-array@1.1.19: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + for-each: 0.3.5 + get-proto: 1.0.1 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + + which@1.3.1: + dependencies: + isexe: 2.0.0 - signal-exit@4.1.0: {} + which@2.0.2: + dependencies: + isexe: 2.0.0 - ssh2@1.16.0: + widest-line@4.0.1: dependencies: - asn1: 0.2.6 - bcrypt-pbkdf: 1.0.2 - optionalDependencies: - cpu-features: 0.0.10 - nan: 2.22.2 + string-width: 5.1.2 - stdin-discarder@0.2.2: {} + wildcard-match@5.1.4: {} - string-width@4.2.3: + windows-release@6.1.0: dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 + execa: 8.0.1 - string-width@7.2.0: + word-wrap@1.2.5: {} + + wordwrap@1.0.0: {} + + workerpool@6.5.1: {} + + wrap-ansi@6.2.0: dependencies: - emoji-regex: 10.4.0 - get-east-asian-width: 1.3.0 - strip-ansi: 7.1.0 + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 - strip-ansi@6.0.1: + wrap-ansi@7.0.0: dependencies: - ansi-regex: 5.0.1 + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 - strip-ansi@7.1.0: + wrap-ansi@8.1.0: dependencies: - ansi-regex: 6.1.0 + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.2 - tinycolor2@1.6.0: {} + wrappy@1.0.2: {} - tinygradient@1.1.5: + write-file-atomic@4.0.2: dependencies: - '@types/tinycolor2': 1.4.6 - tinycolor2: 1.6.0 + imurmurhash: 0.1.4 + signal-exit: 3.0.7 - tmp@0.0.33: + write-file-atomic@5.0.1: dependencies: - os-tmpdir: 1.0.2 + imurmurhash: 0.1.4 + signal-exit: 4.1.0 - ts-node@10.9.2(@types/node@22.15.2)(typescript@5.8.3): - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.11 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.4 - '@types/node': 22.15.2 - acorn: 8.14.1 - acorn-walk: 8.3.4 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 5.8.3 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 + ws@7.5.10: {} - tslib@2.8.1: {} + ws@8.18.3: {} - tweetnacl@0.14.5: {} + wsl-utils@0.1.0: + dependencies: + is-wsl: 3.1.0 - type-fest@0.21.3: {} + y18n@5.0.8: {} - type-fest@4.40.0: {} + yallist@3.1.1: {} - typescript@5.8.3: {} + yallist@4.0.0: {} - undici-types@6.21.0: {} + yallist@5.0.0: {} - universalify@2.0.1: {} + yaml@1.10.2: {} - uuid@11.1.0: {} + yaml@2.8.0: {} - uuid@8.3.2: {} + yaml@2.8.1: {} - v8-compile-cache-lib@3.0.1: {} + yargs-parser@20.2.9: {} - which@2.0.2: - dependencies: - isexe: 2.0.0 + yargs-parser@21.1.1: {} - widest-line@5.0.0: + yargs-unparser@2.0.0: dependencies: - string-width: 7.2.0 + camelcase: 6.3.0 + decamelize: 4.0.0 + flat: 5.0.2 + is-plain-obj: 2.1.0 - wrap-ansi@6.2.0: + yargs@16.2.0: dependencies: - ansi-styles: 4.3.0 + cliui: 7.0.4 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 string-width: 4.2.3 - strip-ansi: 6.0.1 + y18n: 5.0.8 + yargs-parser: 20.2.9 - wrap-ansi@9.0.0: + yargs@17.7.2: dependencies: - ansi-styles: 6.2.1 - string-width: 7.2.0 - strip-ansi: 7.1.0 + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yn@2.0.0: {} yn@3.1.1: {} - yoctocolors-cjs@2.1.2: {} + yocto-queue@0.1.0: {} + + yocto-queue@1.2.2: {} + + yoctocolors-cjs@2.1.3: {} + + yoctocolors@2.1.2: {} + + yoga-wasm-web@0.3.3: {} + + zod-validation-error@4.0.2(zod@4.1.12): + dependencies: + zod: 4.1.12 + + zod@4.1.12: {} + + zwitch@2.0.4: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 0000000..9c2b042 --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,10 @@ +# @format + +packages: + - packages/* + - plugins/* + - config + - docs + +onlyBuiltDependencies: + - nx diff --git a/src/commands/agent.ts b/src/commands/agent.ts deleted file mode 100644 index a0d2778..0000000 --- a/src/commands/agent.ts +++ /dev/null @@ -1,387 +0,0 @@ -/** @format */ - -import { AgentStatus, AgentKey, CommandOptions } from "../types" -import { - startAgent, - stopAgent, - getAgentStatus, - addKeyToAgent, - removeKeyFromAgent, - removeAllKeysFromAgent, -} from "../utils/ssh" -import { loadProject, getActiveProject } from "../utils/config" -import { - log, - prompt, - createSpinner, - renderBox, - formatKeyValueList, -} from "../utils/ui" -import * as fs from "fs-extra" -import { DEFAULT_AGENT_TIMEOUT } from "../constants" - -/** - * Start the SSH agent - */ -export const startSshAgent = async ( - options: { - setEnv?: boolean - } & CommandOptions -): Promise => { - try { - // Check if agent is already running - const status = await getAgentStatus() - - if (status.running) { - log.info("SSHield agent is already running") - log.info(`SSH_AUTH_SOCK=${status.socket}`) - log.info(`SSH_AGENT_PID=${status.pid}`) - return - } - - // Show a spinner while starting the agent - const spinner = createSpinner("Starting SSHield agent...") - spinner.start() - - // Start the agent - const { agentPid, sshAuthSock } = await startAgent() - - spinner.succeed("SSHield agent started successfully") - - // Show agent details - renderBox( - formatKeyValueList({ - SSH_AUTH_SOCK: sshAuthSock, - SSH_AGENT_PID: agentPid, - }), - "SSHield Agent Started", - "green" - ) - - // Print commands to set environment variables if requested - if (options.setEnv) { - log.info("Run the following commands to set the environment variables:") - log.info(`export SSH_AUTH_SOCK=${sshAuthSock}`) - log.info(`export SSH_AGENT_PID=${agentPid}`) - } - } catch (error: any) { - log.error(`Failed to start SSHield agent: ${error.message}`) - throw error - } -} - -/** - * Stop the SSH agent - */ -export const stopSshAgent = async ( - options: CommandOptions = {} -): Promise => { - try { - // Check if agent is running - const status = await getAgentStatus() - - if (!status.running) { - log.info("SSHield agent is not running") - return - } - - // Confirm stopping if not in JSON mode - if (!options.json) { - const confirmed = await prompt.confirm( - "Are you sure you want to stop the SSHield agent? All loaded keys will be unloaded.", - false - ) - - if (!confirmed) { - log.info("Operation cancelled.") - return - } - } - - // Show a spinner while stopping the agent - const spinner = createSpinner("Stopping SSHield agent...") - spinner.start() - - // Stop the agent - await stopAgent() - - spinner.succeed("SSHield agent stopped successfully") - } catch (error: any) { - log.error(`Failed to stop SSHield agent: ${error.message}`) - throw error - } -} - -/** - * Get the status of the SSH agent - */ -export const getSshAgentStatus = async ( - options: CommandOptions = {} -): Promise => { - try { - const status = await getAgentStatus() - - if (!options.json) { - if (status.running) { - renderBox( - formatKeyValueList({ - Status: "Running", - SSH_AUTH_SOCK: status.socket, - SSH_AGENT_PID: status.pid, - "Loaded Keys": status.keys?.length || 0, - }), - "SSHield Agent Status", - "blue" - ) - - // Show detailed key information if there are any keys - if (status.keys && status.keys.length > 0) { - log.info("Loaded Keys:") - - status.keys.forEach((key, index) => { - log.info( - ` ${index + 1}. ${key.fingerprint} (${key.type}) ${ - key.comment || "" - }` - ) - }) - } - } else { - renderBox( - formatKeyValueList({ - Status: "Not Running", - }), - "SSHield Agent Status", - "yellow" - ) - } - } - - return status - } catch (error: any) { - log.error(`Failed to get SSH agent status: ${error.message}`) - throw error - } -} - -/** - * Add all project keys to the SSH agent - */ -export const addProjectKeysToAgent = async ( - options: { - projectId?: string - lifetime?: number - } & CommandOptions -): Promise => { - try { - // Get active project if not specified - const projectId = options.projectId || (await getActiveProject()) - - // Load the project - const project = await loadProject(projectId) - - // Check if there are any keys - if (project.keys.length === 0) { - log.info(`No SSH keys found for project ${projectId}.`) - return - } - - // Check if agent is running, start it if not - const status = await getAgentStatus() - if (!status.running) { - log.info("SSH agent is not running. Starting...") - await startSshAgent(options) - } - - // Show a spinner while adding keys - const spinner = createSpinner( - `Adding ${project.keys.length} keys to SSH agent...` - ) - spinner.start() - - // Add each key to the agent - const lifetime = options.lifetime || DEFAULT_AGENT_TIMEOUT - let addedCount = 0 - - for (const key of project.keys) { - try { - // Check if the key file exists - if (await fs.pathExists(key.path)) { - await addKeyToAgent(key.path, { lifetime }) - addedCount++ - - // Update the key's last used timestamp - key.lastUsed = new Date().toISOString() - } else { - log.warn(`Key file not found: ${key.path}`) - } - } catch (error: any) { - log.warn(`Failed to add key ${key.name}: ${error.message}`) - } - } - - // Save the project with updated last used timestamps - if (addedCount > 0) { - await loadProject(projectId) - } - - spinner.succeed(`Added ${addedCount} keys to SSH agent`) - } catch (error: any) { - log.error(`Failed to add project keys to agent: ${error.message}`) - throw error - } -} - -/** - * Remove all keys from the SSH agent - */ -export const removeAllKeysFromAgentCommand = async ( - options: CommandOptions = {} -): Promise => { - try { - // Check if agent is running - const status = await getAgentStatus() - - if (!status.running) { - log.info("SSH agent is not running") - return - } - - // Check if there are any keys - if (!status.keys || status.keys.length === 0) { - log.info("No keys are loaded in the SSH agent") - return - } - - // Confirm removal if not in JSON mode - if (!options.json) { - const confirmed = await prompt.confirm( - `Are you sure you want to remove all ${status.keys.length} keys from the SSH agent?`, - false - ) - - if (!confirmed) { - log.info("Operation cancelled.") - return - } - } - - // Show a spinner while removing keys - const spinner = createSpinner("Removing all keys from SSH agent...") - spinner.start() - - // Remove all keys - await removeAllKeysFromAgent() - - spinner.succeed("All keys removed from SSH agent") - } catch (error: any) { - log.error(`Failed to remove keys from agent: ${error.message}`) - throw error - } -} - -/** - * Generate an SSH agent startup script - */ -export const generateAgentStartupScript = async ( - options: { - outputPath?: string - projectId?: string - lifetime?: number - } & CommandOptions -): Promise => { - try { - // Get active project if not specified - const projectId = options.projectId || (await getActiveProject()) - - // Default output path - const outputPath = - options.outputPath || `${process.env.HOME}/.sshield-agent.sh` - - // Create the script content - const scriptContent = `#!/bin/bash - # SSH Agent startup script generated by sshield - # Project: ${projectId} - # Generated: ${new Date().toISOString()} - - # Start the SSH agent if not already running - if [ -z "$SSH_AUTH_SOCK" ]; then - echo "Starting SSH agent..." - eval "$(ssh-agent -s)" - fi - - # Add keys to the agent - ${ - options.lifetime - ? `# Keys will expire after ${options.lifetime} seconds` - : "# Keys will not expire" - } - SSH_MANAGER_DIR="${process.env.HOME}/.sshield" - - # Check if the sshield CLI is available - if command -v sshield &> /dev/null; then - echo "Adding keys from project ${projectId}..." - sshield agent add-project-keys --project ${projectId} ${ - options.lifetime ? `--lifetime ${options.lifetime}` : "" - } - else - echo "sshield CLI not found. You need to install it to use this script." - fi - - echo "SSH agent ready with keys from project ${projectId}" - ` - - // Write the script to file - await fs.writeFile(outputPath, scriptContent) - await fs.chmod(outputPath, 0o755) - - log.success(`SSH agent startup script generated: ${outputPath}`) - log.info("To use this script:") - log.info(` 1. Add "source ${outputPath}" to your ~/.bashrc or ~/.zshrc`) - log.info(" 2. Restart your shell or run the script manually") - - return outputPath - } catch (error: any) { - log.error(`Failed to generate agent startup script: ${error.message}`) - throw error - } -} - -/** - * Export agent environment variables to a file - */ -export const exportAgentEnvironment = async ( - options: { - outputPath?: string - } & CommandOptions -): Promise => { - try { - // Check if agent is running - const status = await getAgentStatus() - - if (!status.running) { - throw new Error("SSH agent is not running") - } - - // Default output path - const outputPath = - options.outputPath || `${process.env.HOME}/.ssh-agent-env` - - // Create the environment file content - const envContent = `# SSH Agent environment variables exported by sshield - # Generated: ${new Date().toISOString()} - export SSH_AUTH_SOCK=${status.socket} - export SSH_AGENT_PID=${status.pid} - ` - - // Write the environment file - await fs.writeFile(outputPath, envContent) - - log.success(`SSH agent environment exported: ${outputPath}`) - log.info("To use these environment variables:") - log.info(` source ${outputPath}`) - } catch (error: any) { - log.error(`Failed to export agent environment: ${error.message}`) - throw error - } -} diff --git a/src/commands/connection.ts b/src/commands/connection.ts deleted file mode 100644 index 6fe3a42..0000000 --- a/src/commands/connection.ts +++ /dev/null @@ -1,563 +0,0 @@ -import { ServerConfig, CommandOptions } from "../types"; -import { v4 as uuidv4 } from "uuid"; -import { - connectToServer, - testConnection, - createSshTunnel, - closeSshTunnel, - generateRandomPort, -} from "../utils/ssh"; -import { - loadProject, - getActiveProject, - addServerToProject, - removeServerFromProject, - updateSshConfigWithProject, - saveProject, -} from "../utils/config"; -import { - log, - prompt, - createSpinner, - renderBox, - formatKeyValueList, - notify, -} from "../utils/ui"; -import { exec } from "child_process"; -import { promisify } from "util"; - -const execAsync = promisify(exec); - -/** - * Add a server to a project - */ -export const addServer = async ( - options: { - projectId?: string; - name: string; - hostname: string; - port?: number; - username: string; - keyId?: string; - testConnection?: boolean; - } & CommandOptions -): Promise => { - try { - // Get active project if not specified - const projectId = options.projectId || (await getActiveProject()); - - // Load the project - const project = await loadProject(projectId); - - // Check if server with the same name already exists - if (project.servers.some((s) => s.name === options.name)) { - throw new Error( - `Server with name ${options.name} already exists in project ${projectId}` - ); - } - - // Generate a unique ID for the server - const serverId = uuidv4(); - - // Create server config - const serverConfig: ServerConfig = { - id: serverId, - name: options.name, - hostname: options.hostname, - port: options.port || 22, - username: options.username, - keyId: options.keyId || "", - options: { - ServerAliveInterval: "60", - ServerAliveCountMax: "120", - }, - }; - - // Test connection if requested - if (options.testConnection) { - const spinner = createSpinner( - `Testing connection to ${options.hostname}...` - ); - spinner.start(); - - // If a key ID is provided, find the corresponding key - let keyPath = ""; - - if (options.keyId) { - const key = project.keys.find((k) => k.id === options.keyId); - if (key) { - keyPath = key.path; - } - } - - const success = await testConnection(options.hostname, { - username: options.username, - port: options.port || 22, - keyPath, - }); - - if (success) { - spinner.succeed(`Connection to ${options.hostname} successful`); - } else { - spinner.fail(`Connection to ${options.hostname} failed`); - - // Ask whether to continue if not in JSON mode - if (!options.json) { - const continue_ = await prompt.confirm( - "Connection test failed. Add the server anyway?", - false - ); - - if (!continue_) { - log.info("Operation cancelled."); - throw new Error("Connection test failed"); - } - } - } - } - - // Add the server to the project - const updatedProject = await addServerToProject(projectId, serverConfig); - - // Show success message - log.success(`Server "${options.name}" added to project ${project.name}`); - - // Show server details - if (!options.json) { - renderBox( - formatKeyValueList({ - "Server ID": serverConfig.id, - Name: serverConfig.name, - Hostname: serverConfig.hostname, - Port: serverConfig.port, - Username: serverConfig.username, - "SSH Key": serverConfig.keyId - ? updatedProject.keys.find((k) => k.id === serverConfig.keyId) - ?.name || serverConfig.keyId - : "None", - }), - "Server Added", - "green" - ); - } - - // Ask if the user wants to update SSH config - if (!options.json) { - const updateConfig = await prompt.confirm( - "Do you want to update your SSH config with this server?", - true - ); - - if (updateConfig) { - await updateSshConfigWithProject(projectId); - } - } - - return serverConfig; - } catch (error: any) { - log.error(`Failed to add server: ${error.message}`); - throw error; - } -}; - -/** - * List servers in a project - */ -export const listServers = async ( - options: { - projectId?: string; - } & CommandOptions -): Promise => { - try { - // Get active project if not specified - const projectId = options.projectId || (await getActiveProject()); - - // Load the project - const project = await loadProject(projectId); - - // Check if there are any servers - if (project.servers.length === 0) { - log.info(`No servers found in project ${project.name}`); - return []; - } - - // Show server list - if (!options.json) { - log.info(`Servers in project ${project.name} (${projectId}):`); - - const serverStrings = project.servers.map((server) => { - const key = project.keys.find((k) => k.id === server.keyId); - - return formatKeyValueList({ - "Server ID": server.id, - Name: server.name, - Hostname: server.hostname, - Port: server.port, - Username: server.username, - "SSH Key": key ? key.name : "None", - }); - }); - - renderBox(serverStrings.join("\n\n"), "Servers", "blue"); - } - - return project.servers; - } catch (error: any) { - log.error(`Failed to list servers: ${error.message}`); - throw error; - } -}; - -/** - * Delete a server from a project - */ -export const deleteServer = async ( - serverId: string, - options: { - projectId?: string; - } & CommandOptions -): Promise => { - try { - // Get active project if not specified - const projectId = options.projectId || (await getActiveProject()); - - // Load the project - const project = await loadProject(projectId); - - // Find the server - const server = project.servers.find((s) => s.id === serverId); - if (!server) { - throw new Error( - `Server with ID ${serverId} not found in project ${projectId}` - ); - } - - // Confirm deletion if not in JSON mode - if (!options.json) { - const confirmed = await prompt.confirm( - `Are you sure you want to delete server "${server.name}" (${server.hostname})? This cannot be undone.`, - false - ); - - if (!confirmed) { - log.info("Deletion cancelled."); - return; - } - } - - // Show a spinner while deleting the server - const spinner = createSpinner(`Deleting server "${server.name}"...`); - spinner.start(); - - // Remove the server from the project - await removeServerFromProject(projectId, serverId); - - spinner.succeed( - `Server "${server.name}" deleted from project ${project.name}` - ); - - // Ask if the user wants to update SSH config - if (!options.json) { - const updateConfig = await prompt.confirm( - "Do you want to update your SSH config to remove this server?", - true - ); - - if (updateConfig) { - await updateSshConfigWithProject(projectId); - } - } - } catch (error: any) { - log.error(`Failed to delete server: ${error.message}`); - throw error; - } -}; - -/** - * Connect to a server - */ -export const connectToServerCommand = async ( - serverNameOrId: string, - options: { - projectId?: string; - command?: string; - } & CommandOptions -): Promise => { - try { - // Get active project if not specified - const projectId = options.projectId || (await getActiveProject()); - - // Load the project - const project = await loadProject(projectId); - - // Find the server by name or ID - const server = project.servers.find( - (s) => s.id === serverNameOrId || s.name === serverNameOrId - ); - - if (!server) { - throw new Error( - `Server "${serverNameOrId}" not found in project ${projectId}` - ); - } - - // Find the key for this server - const key = server.keyId - ? project.keys.find((k) => k.id === server.keyId) - : null; - - // Show a spinner while connecting - const spinner = createSpinner(`Connecting to ${server.hostname}...`); - spinner.start(); - - // Connect to the server - const ssh = await connectToServer(server.hostname, { - username: server.username, - port: server.port, - keyPath: key?.path, - command: options.command, - }); - - spinner.succeed(`Connected to ${server.hostname}`); - - // Update server last used timestamp - server.lastUsed = new Date().toISOString(); - await addServerToProject(projectId, server); - - // Execute any additional logic here if needed - - // After a delay, close the connection - setTimeout(() => { - ssh.dispose(); - log.info(`Disconnected from ${server.hostname}`); - }, 5000); - } catch (error: any) { - log.error(`Failed to connect to server: ${error.message}`); - throw error; - } -}; - -/** - * Create an SSH tunnel - */ -export const createTunnel = async ( - serverNameOrId: string, - options: { - projectId?: string; - localPort?: number; - remoteHost: string; - remotePort: number; - } & CommandOptions -): Promise => { - try { - // Get active project if not specified - const projectId = options.projectId || (await getActiveProject()); - - // Load the project - const project = await loadProject(projectId); - - // Find the server by name or ID - const server = project.servers.find( - (s) => s.id === serverNameOrId || s.name === serverNameOrId - ); - - if (!server) { - throw new Error( - `Server "${serverNameOrId}" not found in project ${projectId}` - ); - } - - // Find the key for this server - const key = server.keyId - ? project.keys.find((k) => k.id === server.keyId) - : null; - - // Generate a random local port if not specified - const localPort = options.localPort || generateRandomPort(); - - // Show a spinner while creating the tunnel - const spinner = createSpinner( - `Creating SSH tunnel: localhost:${localPort} -> ${options.remoteHost}:${options.remotePort} via ${server.hostname}...` - ); - spinner.start(); - - // Create the tunnel - const tunnel = await createSshTunnel({ - localPort, - remoteHost: options.remoteHost, - remotePort: options.remotePort, - sshHost: server.hostname, - sshPort: server.port, - sshUser: server.username, - keyPath: key?.path, - }); - - spinner.succeed( - `SSH tunnel created: localhost:${localPort} -> ${options.remoteHost}:${options.remotePort} via ${server.hostname}` - ); - - // Notify the user - notify( - "SSH Tunnel Created", - `Tunnel: localhost:${localPort} -> ${options.remoteHost}:${options.remotePort}`, - "success" - ); - - // Keep the process running - log.info("Press Ctrl+C to close the tunnel"); - - // Handle process termination - process.on("SIGINT", () => { - log.info("Closing SSH tunnel..."); - closeSshTunnel(tunnel.process); - process.exit(0); - }); - } catch (error: any) { - log.error(`Failed to create SSH tunnel: ${error.message}`); - throw error; - } -}; - -/** - * Open an SSH session using the system's ssh command - */ -export const openSshSession = async ( - serverNameOrId: string, - options: { - projectId?: string; - command?: string; - } & CommandOptions -): Promise => { - try { - // Get active project if not specified - const projectId = options.projectId || (await getActiveProject()); - - // Load the project - const project = await loadProject(projectId); - - // Find the server by name or ID - const server = project.servers.find( - (s) => s.id === serverNameOrId || s.name === serverNameOrId - ); - - if (!server) { - throw new Error( - `Server "${serverNameOrId}" not found in project ${projectId}` - ); - } - - // Find the key for this server - const key = server.keyId - ? project.keys.find((k) => k.id === server.keyId) - : null; - - // Build the SSH command - let command = `ssh ${server.username}@${server.hostname}`; - - if (server.port !== 22) { - command += ` -p ${server.port}`; - } - - if (key) { - command += ` -i "${key.path}"`; - } - - if (options.command) { - command += ` "${options.command}"`; - } - - // Show the command being executed - log.info(`Executing: ${command}`); - - // Update server's lastUsed timestamp in the project BEFORE opening the connection - const serverIndex = project.servers.findIndex((s) => s.id === server.id); - if (serverIndex !== -1) { - project.servers[serverIndex].lastUsed = new Date().toISOString(); - // Save the updated project - await saveProject(project); - } - - // Use a more direct approach - execute the command via a shell - const { execSync } = require("child_process"); - - try { - // This will take over the terminal completely and block until the SSH session ends - execSync(command, { - stdio: "inherit", - shell: true, - encoding: "utf-8", - }); - } catch (error: any) { - // SSH returns non-zero exit codes sometimes even on successful sessions - // We can typically ignore these errors - if (error.status !== 0 && error.status !== 255) { - log.warn(`SSH process exited with code ${error.status}`); - } - } - } catch (error: any) { - log.error(`Failed to open SSH session: ${error.message}`); - throw error; - } -}; - -/** - * Generate an SSH command for a server - */ -export const generateSshCommand = async ( - serverNameOrId: string, - options: { - projectId?: string; - command?: string; - withKey?: boolean; - } & CommandOptions -): Promise => { - try { - // Get active project if not specified - const projectId = options.projectId || (await getActiveProject()); - - // Load the project - const project = await loadProject(projectId); - - // Find the server by name or ID - const server = project.servers.find( - (s) => s.id === serverNameOrId || s.name === serverNameOrId - ); - - if (!server) { - throw new Error( - `Server "${serverNameOrId}" not found in project ${projectId}` - ); - } - - // Find the key for this server - const key = - server.keyId && options.withKey - ? project.keys.find((k) => k.id === server.keyId) - : null; - - // Build the SSH command - let command = `ssh ${server.username}@${server.hostname}`; - - if (server.port !== 22) { - command += ` -p ${server.port}`; - } - - if (key) { - command += ` -i "${key.path}"`; - } - - if (options.command) { - command += ` "${options.command}"`; - } - - // Show the command - if (!options.json) { - renderBox(command, "SSH Command", "green"); - } - - return command; - } catch (error: any) { - log.error(`Failed to generate SSH command: ${error.message}`); - throw error; - } -}; diff --git a/src/commands/init.ts b/src/commands/init.ts deleted file mode 100644 index f32f148..0000000 --- a/src/commands/init.ts +++ /dev/null @@ -1,194 +0,0 @@ -/** @format */ - -import * as path from "path" -import * as os from "os" -import { CommandOptions } from "../types" -import { - BASE_DIR, - CONFIG_DIR, - KEYS_DIR, - LOGS_DIR, - PROJECTS_DIR, - DEFAULT_PROJECT, - APP_NAME, - APP_VERSION, -} from "../constants" -import { - initializeApp, - loadConfig, - createProject, - saveProject, - setActiveProject, -} from "../utils/config" -import { ensureDirectory } from "../utils/filesystem" -import { - log, - prompt, - createSpinner, - renderTitle, - renderBox, - formatKeyValueList, -} from "../utils/ui" - -/** - * Initialize the application - */ -export const initializeApplication = async ( - options: { - force?: boolean - projectName?: string - skipIntro?: boolean - } & CommandOptions -): Promise => { - try { - // Show app title - if (!options.skipIntro) { - renderTitle() - } - - // Show a welcome message - if (!options.skipIntro && !options.json) { - log.info(`Welcome to ${APP_NAME} v${APP_VERSION}!`) - log.info( - "This wizard will help you set up your SSH key management environment." - ) - console.log("") - } - - // Check if force flag is set or confirm initialization - const shouldInitialize = - options.force || - (!options.json && - (await prompt.confirm( - "This will initialize the application and create the necessary directories. Continue?", - true - ))) - - if (!shouldInitialize) { - log.info("Initialization cancelled.") - return - } - - // Show a spinner while initializing - const spinner = createSpinner("Initializing application...") - spinner.start() - - // Create required directories - await Promise.all([ - ensureDirectory(BASE_DIR), - ensureDirectory(CONFIG_DIR), - ensureDirectory(KEYS_DIR), - ensureDirectory(PROJECTS_DIR), - ensureDirectory(LOGS_DIR), - ]) - - // Initialize the application - await initializeApp(options.force) - - spinner.succeed("Application initialized successfully") - - // Create a project if name is provided or prompt for one - let projectName = options.projectName - - if (!projectName && !options.json) { - projectName = await prompt.input( - "Enter a name for your first project:", - "default" - ) - } - - if (projectName && projectName !== DEFAULT_PROJECT) { - const projectSpinner = createSpinner( - `Creating project "${projectName}"...` - ) - projectSpinner.start() - - // Create the project - const project = await createProject(projectName) - - // Set as active project - await setActiveProject(project.id) - - projectSpinner.succeed( - `Project "${projectName}" created and set as active` - ) - } - - // Show summary of the initialization - if (!options.json) { - renderBox( - formatKeyValueList({ - Application: `${APP_NAME} v${APP_VERSION}`, - "Base Directory": BASE_DIR, - "Config Directory": CONFIG_DIR, - "Keys Directory": KEYS_DIR, - "Projects Directory": PROJECTS_DIR, - "Active Project": projectName || DEFAULT_PROJECT, - }), - "Initialization Complete", - "green" - ) - - // Show next steps - log.info("\nNext Steps:") - log.info("1. Generate SSH keys using the `key generate` command") - log.info("2. Add servers using the `server add` command") - log.info("3. Connect to your servers using the `connect` command") - log.info("\nFor more information, run `sshield --help`") - } - } catch (error: any) { - log.error(`Failed to initialize application: ${error.message}`) - throw error - } -} - -/** - * Check if the application is already initialized - */ -export const isInitialized = async (): Promise => { - try { - await loadConfig() - return true - } catch { - return false - } -} - -/** - * Show application status - */ -export const showStatus = async ( - options: CommandOptions = {} -): Promise => { - try { - // Check if the application is initialized - const initialized = await isInitialized() - - if (!initialized) { - log.warn("Application is not initialized. Run `sshield init` to set up.") - return - } - - // Load configuration - const config = await loadConfig() - - // Show application status - if (!options.json) { - renderBox( - formatKeyValueList({ - Application: `${APP_NAME} v${APP_VERSION}`, - Status: "Initialized", - "Base Directory": BASE_DIR, - "Default Project": config.defaultProject, - "Active Project": config.activeProject || config.defaultProject, - Projects: config.projects.length, - }), - "Application Status", - "blue" - ) - } - } catch (error: any) { - log.error(`Failed to show application status: ${error.message}`) - throw error - } -} diff --git a/src/commands/key-manager.ts b/src/commands/key-manager.ts deleted file mode 100644 index 252e2e2..0000000 --- a/src/commands/key-manager.ts +++ /dev/null @@ -1,543 +0,0 @@ -/** @format */ - -import * as path from "path" -import * as fs from "fs-extra" -import { v7 as uuid } from "uuid" -import { SSHKey, KeyType, CommandOptions } from "../types" -import { exec } from "child_process" -import util from "util" -import { - KEYS_DIR, - DEFAULT_KEY_TYPE, - DEFAULT_KEY_BITS, - DEFAULT_KDF_ROUNDS, -} from "../constants" -import { - generateKey, - getKeyFingerprint, - addKeyToAgent, - removeKeyFromAgent, - generateKeyName, -} from "../utils/ssh" -import { - loadProject, - getActiveProject, - addKeyToProject, - removeKeyFromProject, -} from "../utils/config" -import { ensureDirectory, fileExists } from "../utils/filesystem" -import { - log, - prompt, - createSpinner, - renderBox, - formatKeyValueList, -} from "../utils/ui" - -/** - * Generate a new SSH key - */ -export const generateSshKey = async ( - options: { - projectId?: string - name?: string - type?: KeyType - bits?: number - kdfRounds?: number - comment?: string - passphrase?: string - force?: boolean - } & CommandOptions -): Promise => { - try { - // Get active project if not specified - const projectId = options.projectId || (await getActiveProject()) - - // Load the project - const project = await loadProject(projectId) - - // Get key details from options or prompt for them - const keyName = - options.name || - (await prompt.input( - "Enter a name for the key (e.g., production-server):", - `${projectId}-key-${new Date().getTime()}` - )) - - // Generate a unique ID for the key - const keyId = uuid() - - // Set key parameters - const keyType = options.type || DEFAULT_KEY_TYPE - const keyBits = options.bits || DEFAULT_KEY_BITS - const kdfRounds = options.kdfRounds || DEFAULT_KDF_ROUNDS - const comment = - options.comment || `${keyName} (${projectId}) created by sshield` - - // Get passphrase if not provided - let passphrase = options.passphrase - if (!passphrase && !options.json) { - passphrase = await prompt.password( - "Enter passphrase for the key (leave empty for no passphrase):" - ) - - // Confirm passphrase if not empty - if (passphrase) { - const confirmPassphrase = await prompt.password("Confirm passphrase:") - - if (passphrase !== confirmPassphrase) { - throw new Error("Passphrases do not match") - } - } - } - - // Create a unique file name for the key - const fileName = generateKeyName(keyName) - - // Create directory for the project's keys - const projectKeyDir = path.join(KEYS_DIR, projectId) - await ensureDirectory(projectKeyDir) - - // Path for the key - const keyPath = path.join(projectKeyDir, fileName) - - // Check if the key already exists - if ((await fileExists(keyPath)) && !options.force) { - throw new Error( - `Key file ${keyPath} already exists. Use --force to overwrite.` - ) - } - - // Show a spinner while generating the key - const spinner = createSpinner("Generating SSH key...") - spinner.start() - - // Generate the key - await generateKey(keyPath, { - type: keyType, - bits: keyBits, - kdfRounds, - passphrase, - comment, - }) - - // Get the key's fingerprint - const fingerprint = await getKeyFingerprint(keyPath) - - spinner.succeed("SSH key generated successfully") - - // Create the SSHKey object - const sshKey: SSHKey = { - id: keyId, - name: keyName, - type: keyType, - path: keyPath, - publicKeyPath: `${keyPath}.pub`, - fingerprint, - created: new Date().toISOString(), - comment, - bits: keyBits, - kdfRounds, - } - - // Add the key to the project - await addKeyToProject(projectId, sshKey) - - // Show key details - renderBox( - formatKeyValueList({ - "Key ID": sshKey.id, - "Key Name": sshKey.name, - Type: sshKey.type, - Bits: sshKey.bits, - Fingerprint: sshKey.fingerprint, - Path: sshKey.path, - "Public Key": sshKey.publicKeyPath, - Created: new Date(sshKey.created).toLocaleString(), - }), - "SSH Key Generated", - "green" - ) - - return sshKey - } catch (error: any) { - log.error(`Failed to generate SSH key: ${error.message}`) - throw error - } -} - -/** - * List all SSH keys for a project - */ -export const listSshKeys = async ( - options: { - projectId?: string - } & CommandOptions -): Promise => { - try { - // Get active project if not specified - const projectId = options.projectId || (await getActiveProject()) - - // Load the project - const project = await loadProject(projectId) - - // Check if there are any keys - if (project.keys.length === 0) { - log.info(`No SSH keys found for project ${projectId}.`) - return [] - } - - // Display the keys - if (!options.json) { - log.info(`SSH keys for project ${project.name} (${projectId}):`) - - const keyStrings = project.keys.map((key, index) => { - return formatKeyValueList({ - "Key ID": key.id, - "Key Name": key.name, - Type: key.type, - Fingerprint: key.fingerprint, - Created: new Date(key.created).toLocaleString(), - "Last Used": key.lastUsed - ? new Date(key.lastUsed).toLocaleString() - : "Never", - }) - }) - - renderBox(keyStrings.join("\n\n"), "SSH Keys", "blue") - } - - return project.keys - } catch (error: any) { - log.error(`Failed to list SSH keys: ${error.message}`) - throw error - } -} - -/** - * Delete an SSH key - */ -export const deleteSshKey = async ( - keyId: string, - options: { - projectId?: string - removeFiles?: boolean - } & CommandOptions -): Promise => { - try { - // Get active project if not specified - const projectId = options.projectId || (await getActiveProject()) - - // Load the project - const project = await loadProject(projectId) - - // Find the key - const key = project.keys.find(k => k.id === keyId) - if (!key) { - throw new Error(`Key with ID ${keyId} not found in project ${projectId}`) - } - - // Confirm deletion if not in JSON mode - if (!options.json) { - const confirmed = await prompt.confirm( - `Are you sure you want to delete the key "${key.name}" (${key.fingerprint})? This cannot be undone.`, - false - ) - - if (!confirmed) { - log.info("Deletion cancelled.") - return - } - } - // Remove the key from the SSH agent if it's loaded - try { - await removeKeyFromAgent(key.path) - } catch (error: any) { - // Ignore errors, the key might not be loaded - log.debug(`Failed to remove key from agent: ${error.message}`) - } - - // Remove the key files if requested - if (options.removeFiles) { - try { - await fs.unlink(key.path) - await fs.unlink(key.publicKeyPath) - log.success(`Key files deleted: ${key.path}`) - } catch (error: any) { - log.warn(`Failed to delete key files: ${error.message}`) - } - } - - // Remove the key from the project - await removeKeyFromProject(projectId, keyId) - - log.success(`Key "${key.name}" deleted from project ${project.name}`) - } catch (error: any) { - log.error(`Failed to delete SSH key: ${error.message}`) - throw error - } -} - -/** - * Get an SSH key by ID - */ -export const getSshKey = async ( - keyId: string, - options: { - projectId?: string - } & CommandOptions -): Promise => { - try { - // Get active project if not specified - const projectId = options.projectId || (await getActiveProject()) - - // Load the project - const project = await loadProject(projectId) - - // Find the key - const key = project.keys.find(k => k.id === keyId) - if (!key) { - throw new Error(`Key with ID ${keyId} not found in project ${projectId}`) - } - - // Display the key details - if (!options.json) { - renderBox( - formatKeyValueList({ - "Key ID": key.id, - "Key Name": key.name, - Type: key.type, - Bits: key.bits || "Unknown", - Fingerprint: key.fingerprint, - Path: key.path, - "Public Key": key.publicKeyPath, - Created: new Date(key.created).toLocaleString(), - "Last Used": key.lastUsed - ? new Date(key.lastUsed).toLocaleString() - : "Never", - Comment: key.comment || "None", - }), - `SSH Key: ${key.name}`, - "blue" - ) - } - - return key - } catch (error: any) { - log.error(`Failed to get SSH key: ${error.message}`) - throw error - } -} - -/** - * Add an SSH key to the agent - */ -export const addKeyToAgentCommand = async ( - keyId: string, - options: { - projectId?: string - lifetime?: number - passphrase?: string - } & CommandOptions -): Promise => { - try { - // Get active project if not specified - const projectId = options.projectId || (await getActiveProject()) - - // Load the project - const project = await loadProject(projectId) - - // Find the key - const key = project.keys.find(k => k.id === keyId) - if (!key) { - throw new Error(`Key with ID ${keyId} not found in project ${projectId}`) - } - - // Get passphrase if not provided - let passphrase = options.passphrase - if (!passphrase && !options.json) { - passphrase = await prompt.password( - `Enter passphrase for key "${key.name}" (leave empty if no passphrase):` - ) - } - - // Show a spinner while adding the key - const spinner = createSpinner(`Adding key "${key.name}" to SSH agent...`) - spinner.start() - - // Add the key to the agent - await addKeyToAgent(key.path, { - lifetime: options.lifetime, - passphrase, - }) - - spinner.succeed(`Key "${key.name}" added to SSH agent`) - - // Update the key's last used timestamp - key.lastUsed = new Date().toISOString() - await addKeyToProject(projectId, key) - } catch (error: any) { - log.error(`Failed to add key to agent: ${error.message}`) - throw error - } -} - -/** - * Show the public key - */ -export const showPublicKey = async ( - keyId: string, - options: { - projectId?: string - clipboard?: boolean - } & CommandOptions -): Promise => { - try { - // Get active project if not specified - const projectId = options.projectId || (await getActiveProject()) - - // Load the project - const project = await loadProject(projectId) - - // Find the key - const key = project.keys.find(k => k.id === keyId) - if (!key) { - throw new Error(`Key with ID ${keyId} not found in project ${projectId}`) - } - - // Read the public key - const publicKey = await fs.readFile(key.publicKeyPath, "utf8") - - // Copy to clipboard if requested - if (options.clipboard) { - try { - await fs.writeFile("/tmp/ssh-key-temp", publicKey) - await fs.chmod("/tmp/ssh-key-temp", 0o600) - - const execAsync = util.promisify(exec) - - await execAsync("cat /tmp/ssh-key-temp | xclip -selection clipboard") - await fs.unlink("/tmp/ssh-key-temp") - log.success("Public key copied to clipboard") - } catch (error: any) { - log.warn(`Failed to copy to clipboard: ${error.message}`) - log.info("Make sure xclip is installed: sudo apt install xclip") - } - } - // Display the public key - if (!options.json) { - renderBox(publicKey.trim(), `Public Key: ${key.name}`, "green") - } - - return publicKey - } catch (error: any) { - log.error(`Failed to show public key: ${error.message}`) - throw error - } -} - -/** - * Import an existing SSH key - */ -export const importSshKey = async ( - keyPath: string, - options: { - projectId?: string - name?: string - copy?: boolean - } & CommandOptions -): Promise => { - try { - // Get active project if not specified - const projectId = options.projectId || (await getActiveProject()) - - // Load the project - const project = await loadProject(projectId) - - // Check if the private key exists - if (!(await fileExists(keyPath))) { - throw new Error(`Key file ${keyPath} does not exist`) - } - - // Check if the public key exists - const publicKeyPath = `${keyPath}.pub` - if (!(await fileExists(publicKeyPath))) { - throw new Error(`Public key file ${publicKeyPath} does not exist`) - } - - // Generate a name for the key if not provided - const keyName = options.name || path.basename(keyPath) - - // Generate a unique ID for the key - const keyId = uuid() - - // Get the key's fingerprint - const fingerprint = await getKeyFingerprint(keyPath) - - // Determine the key type - const publicKey = await fs.readFile(publicKeyPath, "utf8") - const keyTypeMatch = publicKey.match(/^(ssh-[a-z0-9]+)/) - const keyType = (keyTypeMatch?.[1] || "unknown") as KeyType - - // Create a proper destination for the key if copying - let destKeyPath = keyPath - let destPublicKeyPath = publicKeyPath - - if (options.copy) { - // Create directory for the project's keys - const projectKeyDir = path.join(KEYS_DIR, projectId) - await ensureDirectory(projectKeyDir) - - // Create a unique file name for the key - const fileName = generateKeyName(keyName) - - // Path for the key - destKeyPath = path.join(projectKeyDir, fileName) - destPublicKeyPath = `${destKeyPath}.pub` - - // Copy the key files - await fs.copy(keyPath, destKeyPath) - await fs.copy(publicKeyPath, destPublicKeyPath) - - // Set proper permissions - await fs.chmod(destKeyPath, 0o600) - await fs.chmod(destPublicKeyPath, 0o644) - - log.success(`Key files copied to ${destKeyPath}`) - } - - // Create the SSHKey object - const sshKey: SSHKey = { - id: keyId, - name: keyName, - type: keyType, - path: destKeyPath, - publicKeyPath: destPublicKeyPath, - fingerprint, - created: new Date().toISOString(), - } - - // Add the key to the project - await addKeyToProject(projectId, sshKey) - - // Show key details - renderBox( - formatKeyValueList({ - "Key ID": sshKey.id, - "Key Name": sshKey.name, - Type: sshKey.type, - Fingerprint: sshKey.fingerprint, - Path: sshKey.path, - "Public Key": sshKey.publicKeyPath, - Created: new Date(sshKey.created).toLocaleString(), - }), - "SSH Key Imported", - "green" - ) - - return sshKey - } catch (error: any) { - log.error(`Failed to import SSH key: ${error.message}`) - throw error - } -} diff --git a/src/commands/project.ts b/src/commands/project.ts deleted file mode 100644 index db4a540..0000000 --- a/src/commands/project.ts +++ /dev/null @@ -1,470 +0,0 @@ -import { Project, CommandOptions } from "../types"; -import { - loadConfig, - createProject, - loadProject, - listProjects, - saveProject, - deleteProject, - setActiveProject, - getActiveProject, - updateSshConfigWithProject, -} from "../utils/config"; -import { - log, - prompt, - createSpinner, - renderBox, - formatKeyValueList, -} from "../utils/ui"; - -/** - * Create a new project - */ -export const createNewProject = async ( - name: string, - options: { - description?: string; - activate?: boolean; - } & CommandOptions -): Promise => { - try { - // Show a spinner while creating the project - const spinner = createSpinner(`Creating project "${name}"...`); - spinner.start(); - - // Create the project - const project = await createProject(name, options.description); - - spinner.succeed(`Project "${name}" created successfully`); - - // Set as active project if requested - if (options.activate) { - await setActiveProject(project.id); - log.success(`Project "${name}" set as active project`); - } - - // Show project details - renderBox( - formatKeyValueList({ - "Project ID": project.id, - Name: project.name, - Description: project.description || "No description", - Created: new Date(project.created).toLocaleString(), - "SSH Keys": 0, - Servers: 0, - }), - "Project Created", - "green" - ); - - return project; - } catch (error: any) { - log.error(`Failed to create project: ${error.message}`); - throw error; - } -}; - -/** - * List all projects - */ -export const listAllProjects = async ( - options: CommandOptions = {} -): Promise => { - try { - // Get active project - const activeProjectId = await getActiveProject(); - - // Show a spinner while listing projects - const spinner = createSpinner("Loading projects..."); - spinner.start(); - - // Get all projects - const projects = await listProjects(); - - spinner.succeed(`Loaded ${projects.length} projects`); - - // Show projects - if (!options.json) { - if (projects.length === 0) { - log.info("No projects found"); - } else { - log.info(`Projects (active: ${activeProjectId}):`); - - const projectStrings = projects.map((project) => { - const isActive = project.id === activeProjectId; - - return formatKeyValueList({ - "Project ID": project.id + (isActive ? " (active)" : ""), - Name: project.name, - Description: project.description || "No description", - Created: new Date(project.created).toLocaleString(), - "Last Used": project.lastUsed - ? new Date(project.lastUsed).toLocaleString() - : "Never", - "SSH Keys": project.keys.length, - Servers: project.servers.length, - }); - }); - - renderBox(projectStrings.join("\n\n"), "Projects", "blue"); - } - } - - return projects; - } catch (error: any) { - log.error(`Failed to list projects: ${error.message}`); - throw error; - } -}; - -/** - * Set active project - */ -export const setActiveProjectCommand = async ( - projectId: string, - options: CommandOptions = {} -): Promise => { - try { - // Check if project exists - const project = await loadProject(projectId); - - // Show a spinner while setting active project - const spinner = createSpinner( - `Setting project "${project.name}" as active...` - ); - spinner.start(); - - // Set active project - await setActiveProject(projectId); - - spinner.succeed(`Project "${project.name}" set as active project`); - - // Update last used timestamp - project.lastUsed = new Date().toISOString(); - await saveProject(project); - } catch (error: any) { - log.error(`Failed to set active project: ${error.message}`); - throw error; - } -}; - -/** - * Get project details - */ -export const getProjectDetails = async ( - projectId: string, - options: CommandOptions = {} -): Promise => { - try { - // Load the project - const project = await loadProject(projectId); - - // Show project details - if (!options.json) { - renderBox( - formatKeyValueList({ - "Project ID": project.id, - Name: project.name, - Description: project.description || "No description", - Created: new Date(project.created).toLocaleString(), - "Last Used": project.lastUsed - ? new Date(project.lastUsed).toLocaleString() - : "Never", - "SSH Keys": project.keys.length, - Servers: project.servers.length, - }), - `Project: ${project.name}`, - "blue" - ); - - // Show SSH keys if any - if (project.keys.length > 0) { - log.info("\nSSH Keys:"); - project.keys.forEach((key, index) => { - log.info(` ${index + 1}. ${key.name} (${key.fingerprint})`); - }); - } - - // Show servers if any - if (project.servers.length > 0) { - log.info("\nServers:"); - project.servers.forEach((server, index) => { - log.info( - ` ${index + 1}. ${server.name} (${server.hostname}:${server.port})` - ); - }); - } - } - - return project; - } catch (error: any) { - log.error(`Failed to get project details: ${error.message}`); - throw error; - } -}; - -/** - * Update project details - */ -export const updateProject = async ( - projectId: string, - options: { - name?: string; - description?: string; - } & CommandOptions -): Promise => { - try { - // Load the project - const project = await loadProject(projectId); - - // Update project details - if (options.name) { - project.name = options.name; - } - - if (options.description !== undefined) { - project.description = options.description; - } - - // Show a spinner while updating the project - const spinner = createSpinner(`Updating project "${project.name}"...`); - spinner.start(); - - // Save the project - await saveProject(project); - - spinner.succeed(`Project "${project.name}" updated successfully`); - - // Show updated project details - if (!options.json) { - renderBox( - formatKeyValueList({ - "Project ID": project.id, - Name: project.name, - Description: project.description || "No description", - Created: new Date(project.created).toLocaleString(), - "Last Used": project.lastUsed - ? new Date(project.lastUsed).toLocaleString() - : "Never", - "SSH Keys": project.keys.length, - Servers: project.servers.length, - }), - "Project Updated", - "green" - ); - } - - return project; - } catch (error: any) { - log.error(`Failed to update project: ${error.message}`); - throw error; - } -}; - -/** - * Delete a project - */ -export const deleteProjectCommand = async ( - projectId: string, - options: CommandOptions = {} -): Promise => { - try { - // Load the project - const project = await loadProject(projectId); - - // Confirm deletion if not in JSON mode - if (!options.json) { - const confirmed = await prompt.confirm( - `Are you sure you want to delete project "${project.name}"? This cannot be undone.`, - false - ); - - if (!confirmed) { - log.info("Deletion cancelled."); - return; - } - } - - // Get active project - const activeProjectId = await getActiveProject(); - - // Check if this is the active project - if (projectId === activeProjectId) { - log.warn( - "Cannot delete the active project. Set another project as active first." - ); - return; - } - - // Show a spinner while deleting the project - const spinner = createSpinner(`Deleting project "${project.name}"...`); - spinner.start(); - - // Delete the project - await deleteProject(projectId); - - spinner.succeed(`Project "${project.name}" deleted successfully`); - } catch (error: any) { - log.error(`Failed to delete project: ${error.message}`); - throw error; - } -}; - -/** - * Update SSH config with project servers - */ -export const updateSshConfigWithProjectCommand = async ( - options: { - projectId?: string; - } & CommandOptions -): Promise => { - try { - // Get active project if not specified - const projectId = options.projectId || (await getActiveProject()); - - // Load the project - const project = await loadProject(projectId); - - // Check if there are any servers - if (project.servers.length === 0) { - log.warn(`No servers found in project ${project.name}`); - return; - } - - // Show a spinner while updating SSH config - const spinner = createSpinner( - `Updating SSH config with ${project.servers.length} servers from project "${project.name}"...` - ); - spinner.start(); - - // Update SSH config - await updateSshConfigWithProject(projectId); - - spinner.succeed( - `SSH config updated with ${project.servers.length} servers from project "${project.name}"` - ); - } catch (error: any) { - log.error(`Failed to update SSH config: ${error.message}`); - throw error; - } -}; - -/** - * Export project data - */ -export const exportProject = async ( - projectId: string, - options: { - outputPath?: string; - includeKeys?: boolean; - } & CommandOptions -): Promise => { - try { - // Load the project - const project = await loadProject(projectId); - - // Create export object - const exportData = { - ...project, - exported: new Date().toISOString(), - }; - - // Remove sensitive information if not including keys - if (!options.includeKeys) { - exportData.keys = exportData.keys.map((key) => ({ - ...key, - // Remove path to private key file - path: "[REDACTED]", - })); - } - - // Default output path - const outputPath = options.outputPath || `${projectId}-export.json`; - - // Show a spinner while exporting - const spinner = createSpinner( - `Exporting project "${project.name}" to ${outputPath}...` - ); - spinner.start(); - - // Write export file - await require("fs-extra").writeJson(outputPath, exportData, { spaces: 2 }); - - spinner.succeed(`Project "${project.name}" exported to ${outputPath}`); - - // Show warning if including keys - if (options.includeKeys) { - log.warn( - "The export file contains sensitive information! Keep it secure." - ); - } - } catch (error: any) { - log.error(`Failed to export project: ${error.message}`); - throw error; - } -}; - -/** - * Import project data - */ -export const importProject = async ( - importPath: string, - options: { - overwrite?: boolean; - } & CommandOptions -): Promise => { - try { - // Read import file - const importData = await require("fs-extra").readJson(importPath); - - // Check if project already exists - const config = await loadConfig(); - const exists = config.projects.includes(importData.id); - - if (exists && !options.overwrite) { - throw new Error( - `Project with ID ${importData.id} already exists. Use --overwrite to replace it.` - ); - } - - // Show a spinner while importing - const spinner = createSpinner(`Importing project "${importData.name}"...`); - spinner.start(); - - // Update project data - const project: Project = { - ...importData, - imported: new Date().toISOString(), - }; - - // Save the project - await saveProject(project); - - spinner.succeed(`Project "${project.name}" imported successfully`); - - // Show imported project details - if (!options.json) { - renderBox( - formatKeyValueList({ - "Project ID": project.id, - Name: project.name, - Description: project.description || "No description", - Created: new Date(project.created).toLocaleString(), - Imported: project.imported - ? new Date(project.imported).toLocaleString() - : "N/A", - "SSH Keys": project.keys.length, - Servers: project.servers.length, - }), - "Project Imported", - "green" - ); - } - - return project; - } catch (error: any) { - log.error(`Failed to import project: ${error.message}`); - throw error; - } -}; diff --git a/src/constants.ts b/src/constants.ts deleted file mode 100644 index eaceb69..0000000 --- a/src/constants.ts +++ /dev/null @@ -1,56 +0,0 @@ -/** @format */ - -import * as os from "os" -import * as path from "path" - -// App name and version -export const APP_NAME = "sshield" -export const APP_VERSION = "1.0.0" - -// Base directories -export const HOME_DIR = os.homedir() -export const BASE_DIR = path.join(HOME_DIR, ".sshield") -export const KEYS_DIR = path.join(BASE_DIR, "keys") -export const CONFIG_DIR = path.join(BASE_DIR, "config") -export const LOGS_DIR = path.join(BASE_DIR, "logs") -export const PROJECTS_DIR = path.join(BASE_DIR, "projects") - -// Config files -export const CONFIG_FILE = path.join(CONFIG_DIR, "config.json") -export const ACTIVE_PROJECT_FILE = path.join(CONFIG_DIR, "active-project") -export const SSH_CONFIG_PATH = path.join(HOME_DIR, ".ssh", "config") -export const SSH_CONFIG_BACKUP_PATH = path.join( - HOME_DIR, - ".ssh", - "config.backup" -) - -// SSH key settings -export const DEFAULT_KEY_TYPE = "ed25519" -export const DEFAULT_KEY_BITS = 4096 -export const DEFAULT_KDF_ROUNDS = 100 - -// Project config -export const DEFAULT_PROJECT = "default" - -// Connection settings -export const SERVER_ALIVE_INTERVAL = 60 -export const SERVER_ALIVE_COUNT_MAX = 120 - -// Security settings -export const SSH_KEY_PERMISSIONS = 0o600 // Read/write for owner only -export const SSH_PUB_KEY_PERMISSIONS = 0o644 // Read for everyone, write for owner -export const SSH_DIR_PERMISSIONS = 0o700 // Read/write/execute for owner only - -// Agent settings -export const DEFAULT_AGENT_TIMEOUT = 28800 // 8 hours in seconds - -// UI settings -export const SPINNER_INTERVAL = 80 -export const LOG_LEVELS = { - DEBUG: "debug", - INFO: "info", - WARN: "warn", - ERROR: "error", - SUCCESS: "success", -} diff --git a/src/index.ts b/src/index.ts deleted file mode 100644 index fcae0ea..0000000 --- a/src/index.ts +++ /dev/null @@ -1,559 +0,0 @@ -#!/usr/bin/env node -/** @format */ - -import { Command } from "commander" -import { APP_NAME, APP_VERSION } from "./constants" -import { renderTitle, log } from "./utils/ui" - -// Import command modules -import { - initializeApplication, - isInitialized, - showStatus, -} from "./commands/init" -import { - generateSshKey, - listSshKeys, - deleteSshKey, - getSshKey, - addKeyToAgentCommand, - showPublicKey, - importSshKey, -} from "./commands/key-manager" -import { - createNewProject, - listAllProjects, - setActiveProjectCommand, - getProjectDetails, - updateProject, - deleteProjectCommand, - updateSshConfigWithProjectCommand, - exportProject, - importProject, -} from "./commands/project" -import { - startSshAgent, - stopSshAgent, - getSshAgentStatus, - addProjectKeysToAgent, - removeAllKeysFromAgentCommand, - generateAgentStartupScript, - exportAgentEnvironment, -} from "./commands/agent" -import { - addServer, - listServers, - deleteServer, - connectToServerCommand, - createTunnel, - openSshSession, - generateSshCommand, -} from "./commands/connection" -import { getActiveProject } from "./utils/config" - -// Create the command line interface -const program = new Command() - -// Configure the program -program - .name(APP_NAME) - .description("Secure SSH key management with project-based namespaces") - .version(APP_VERSION) - .option("-v, --verbose", "Show verbose output") - .option("-j, --json", "Output in JSON format") - .hook("preAction", async thisCommand => { - // Skip initialization check for init command - if (thisCommand.name() === "init") { - return - } - - // Check if the application is initialized - if (!(await isInitialized())) { - log.error("Application is not initialized. Run `sshield init` to set up.") - process.exit(1) - } - }) - -// Initialize command -program - .command("init") - .description("Initialize the application") - .option("-f, --force", "Force initialization even if already initialized") - .option("-p, --project-name ", "Name for the first project") - .option("--skip-intro", "Skip the introduction") - .action(async options => { - try { - await initializeApplication(options) - } catch (error: any) { - log.error(error.message) - process.exit(1) - } - }) - -// Status command -program - .command("status") - .description("Show application status") - .action(async options => { - try { - await showStatus(options) - } catch (error: any) { - log.error(error.message) - process.exit(1) - } - }) - -// Key management commands -const keyCommand = program.command("key").description("Manage SSH keys") - -keyCommand - .command("generate") - .description("Generate a new SSH key") - .option("-p, --project ", "Project ID") - .option("-n, --name ", "Key name") - .option("-t, --type ", "Key type (ed25519, ecdsa, rsa)") - .option("-b, --bits ", "Key bits (for RSA)") - .option("-a, --kdf-rounds ", "KDF rounds") - .option("-c, --comment ", "Key comment") - .option("-f, --force", "Force overwrite if key already exists") - .action(async options => { - try { - await generateSshKey(options) - } catch (error: any) { - log.error(error.message) - process.exit(1) - } - }) - -keyCommand - .command("list") - .description("List SSH keys") - .option("-p, --project ", "Project ID") - .action(async options => { - try { - await listSshKeys(options) - } catch (error: any) { - log.error(error.message) - process.exit(1) - } - }) - -keyCommand - .command("delete ") - .description("Delete an SSH key") - .option("-p, --project ", "Project ID") - .option("-r, --remove-files", "Remove key files") - .action(async (keyId, options) => { - try { - await deleteSshKey(keyId, options) - } catch (error: any) { - log.error(error.message) - process.exit(1) - } - }) - -keyCommand - .command("show ") - .description("Show SSH key details") - .option("-p, --project ", "Project ID") - .action(async (keyId, options) => { - try { - await getSshKey(keyId, options) - } catch (error: any) { - log.error(error.message) - process.exit(1) - } - }) - -keyCommand - .command("public ") - .description("Show SSH public key") - .option("-p, --project ", "Project ID") - .option("-c, --clipboard", "Copy to clipboard") - .action(async (keyId, options) => { - try { - await showPublicKey(keyId, options) - } catch (error: any) { - log.error(error.message) - process.exit(1) - } - }) - -keyCommand - .command("add ") - .description("Add SSH key to agent") - .option("-p, --project ", "Project ID") - .option("-t, --lifetime ", "Key lifetime in seconds") - .action(async (keyId, options) => { - try { - await addKeyToAgentCommand(keyId, options) - } catch (error: any) { - log.error(error.message) - process.exit(1) - } - }) - -keyCommand - .command("import ") - .description("Import an existing SSH key") - .option("-p, --project ", "Project ID") - .option("-n, --name ", "Key name") - .option("-c, --copy", "Copy the key instead of referencing it") - .action(async (keyPath, options) => { - try { - await importSshKey(keyPath, options) - } catch (error: any) { - log.error(error.message) - process.exit(1) - } - }) - -// Project management commands -const projectCommand = program.command("project").description("Manage projects") - -projectCommand - .command("create ") - .description("Create a new project") - .option("-d, --description ", "Project description") - .option("-a, --activate", "Set as active project") - .action(async (name, options) => { - try { - await createNewProject(name, options) - } catch (error: any) { - log.error(error.message) - process.exit(1) - } - }) - -projectCommand - .command("list") - .description("List all projects") - .action(async options => { - try { - await listAllProjects(options) - } catch (error: any) { - log.error(error.message) - process.exit(1) - } - }) - -projectCommand - .command("set-active ") - .description("Set active project") - .action(async (projectId, options) => { - try { - await setActiveProjectCommand(projectId, options) - } catch (error: any) { - log.error(error.message) - process.exit(1) - } - }) - -projectCommand - .command("show [project-id]") - .description("Show project details") - .action(async (projectId, options) => { - try { - if (!projectId) { - // If no project ID is provided, use the active project - projectId = await getActiveProject() - } - await getProjectDetails(projectId, options) - } catch (error: any) { - log.error(error.message) - process.exit(1) - } - }) - -projectCommand - .command("update ") - .description("Update project details") - .option("-n, --name ", "Project name") - .option("-d, --description ", "Project description") - .action(async (projectId, options) => { - try { - await updateProject(projectId, options) - } catch (error: any) { - log.error(error.message) - process.exit(1) - } - }) - -projectCommand - .command("delete ") - .description("Delete a project") - .action(async (projectId, options) => { - try { - await deleteProjectCommand(projectId, options) - } catch (error: any) { - log.error(error.message) - process.exit(1) - } - }) - -projectCommand - .command("update-ssh-config [project-id]") - .description("Update SSH config with project servers") - .action(async (projectId, options) => { - try { - await updateSshConfigWithProjectCommand({ projectId, ...options }) - } catch (error: any) { - log.error(error.message) - process.exit(1) - } - }) - -projectCommand - .command("export ") - .description("Export project data") - .option("-o, --output-path ", "Output file path") - .option("-k, --include-keys", "Include sensitive key information") - .action(async (projectId, options) => { - try { - await exportProject(projectId, options) - } catch (error: any) { - log.error(error.message) - process.exit(1) - } - }) - -projectCommand - .command("import ") - .description("Import project data") - .option("-o, --overwrite", "Overwrite existing project") - .action(async (importPath, options) => { - try { - await importProject(importPath, options) - } catch (error: any) { - log.error(error.message) - process.exit(1) - } - }) - -// Agent management commands -const agentCommand = program.command("agent").description("Manage SSH agent") - -agentCommand - .command("start") - .description("Start the SSH agent") - .option("-e, --set-env", "Show commands to set environment variables") - .action(async options => { - try { - await startSshAgent(options) - } catch (error: any) { - log.error(error.message) - process.exit(1) - } - }) - -agentCommand - .command("stop") - .description("Stop the SSH agent") - .action(async options => { - try { - await stopSshAgent(options) - } catch (error: any) { - log.error(error.message) - process.exit(1) - } - }) - -agentCommand - .command("status") - .description("Show SSH agent status") - .action(async options => { - try { - await getSshAgentStatus(options) - } catch (error: any) { - log.error(error.message) - process.exit(1) - } - }) - -agentCommand - .command("add-project-keys") - .description("Add all project keys to the SSH agent") - .option("-p, --project ", "Project ID") - .option("-t, --lifetime ", "Key lifetime in seconds") - .action(async options => { - try { - await addProjectKeysToAgent(options) - } catch (error: any) { - log.error(error.message) - process.exit(1) - } - }) - -agentCommand - .command("remove-all-keys") - .description("Remove all keys from the SSH agent") - .action(async options => { - try { - await removeAllKeysFromAgentCommand(options) - } catch (error: any) { - log.error(error.message) - process.exit(1) - } - }) - -agentCommand - .command("generate-startup-script") - .description("Generate an SSH agent startup script") - .option("-o, --output-path ", "Output file path") - .option("-p, --project ", "Project ID") - .option("-t, --lifetime ", "Key lifetime in seconds") - .action(async options => { - try { - await generateAgentStartupScript(options) - } catch (error: any) { - log.error(error.message) - process.exit(1) - } - }) - -agentCommand - .command("export-env") - .description("Export agent environment variables to a file") - .option("-o, --output-path ", "Output file path") - .action(async options => { - try { - await exportAgentEnvironment(options) - } catch (error: any) { - log.error(error.message) - process.exit(1) - } - }) - -// Server management commands -const serverCommand = program.command("server").description("Manage servers") - -serverCommand - .command("add") - .description("Add a server to a project") - .option("-p, --project ", "Project ID") - .option("-n, --name ", "Server name") - .option("-h, --hostname ", "Server hostname") - .option("--port ", "Server port") - .option("-u, --username ", "Username") - .option("-k, --key-id ", "SSH key ID") - .option("-t, --test-connection", "Test connection") - .action(async options => { - try { - // Require name, hostname, and username - if (!options.name) { - throw new Error("Server name is required") - } - if (!options.hostname) { - throw new Error("Server hostname is required") - } - if (!options.username) { - throw new Error("Username is required") - } - - await addServer(options) - } catch (error: any) { - log.error(error.message) - process.exit(1) - } - }) - -serverCommand - .command("list") - .description("List servers") - .option("-p, --project ", "Project ID") - .action(async options => { - try { - await listServers(options) - } catch (error: any) { - log.error(error.message) - process.exit(1) - } - }) - -serverCommand - .command("delete ") - .description("Delete a server") - .option("-p, --project ", "Project ID") - .action(async (serverId, options) => { - try { - await deleteServer(serverId, options) - } catch (error: any) { - log.error(error.message) - process.exit(1) - } - }) - -// Connection commands -program - .command("connect ") - .description("Connect to a server") - .option("-p, --project ", "Project ID") - .option("-c, --command ", "Command to execute") - .action(async (serverNameOrId, options) => { - try { - await openSshSession(serverNameOrId, options) - } catch (error: any) { - log.error(error.message) - process.exit(1) - } - }) - -program - .command("tunnel ") - .description("Create an SSH tunnel") - .option("-p, --project ", "Project ID") - .option("-l, --local-port ", "Local port") - .option("-r, --remote-host ", "Remote hostname") - .option("-P, --remote-port ", "Remote port") - .action(async (serverNameOrId, options) => { - try { - // Require remote host and port - if (!options.remoteHost) { - throw new Error("Remote hostname is required") - } - if (!options.remotePort) { - throw new Error("Remote port is required") - } - - await createTunnel(serverNameOrId, options) - } catch (error: any) { - log.error(error.message) - process.exit(1) - } - }) - -program - .command("ssh-command ") - .description("Generate an SSH command for a server") - .option("-p, --project ", "Project ID") - .option("-c, --command ", "Command to execute") - .option("-k, --with-key", "Include key path in command") - .action(async (serverNameOrId, options) => { - try { - await generateSshCommand(serverNameOrId, options) - } catch (error: any) { - log.error(error.message) - process.exit(1) - } - }) - -// TUI dashboard command -program - .command("dashboard") - .description("Open the interactive dashboard") - .action(async () => { - // This will be implemented separately with a TUI library - log.info("Interactive dashboard coming soon!") - }) - -// Execute the program -async function main() { - try { - await program.parseAsync(process.argv) - } catch (error: any) { - log.error(error.message) - process.exit(1) - } -} - -main() diff --git a/src/types/index.ts b/src/types/index.ts deleted file mode 100644 index 06ab281..0000000 --- a/src/types/index.ts +++ /dev/null @@ -1,78 +0,0 @@ -// SSH Key types -export type KeyType = "ed25519" | "ecdsa" | "rsa"; - -export interface SSHKey { - id: string; - name: string; - type: KeyType; - path: string; - publicKeyPath: string; - fingerprint?: string; - created: string; - lastUsed?: string; - comment?: string; - bits?: number; - kdfRounds?: number; -} - -// Server configuration -export interface ServerConfig { - id: string; - name: string; - hostname: string; - port: number; - username: string; - keyId: string; - options?: Record; - lastUsed?: string; -} - -// Project structure -export interface Project { - id: string; - name: string; - description?: string; - created: string; - lastUsed?: string; - imported?: string; - keys: SSHKey[]; - servers: ServerConfig[]; -} - -// App configuration -export interface AppConfig { - version: string; - defaultProject: string; - activeProject?: string; - projects: string[]; - agentSettings: { - autostart: boolean; - timeout: number; - }; - uiSettings: { - colorTheme: string; - logLevel: string; - }; -} - -// Command options -export interface CommandOptions { - verbose?: boolean; - force?: boolean; - json?: boolean; -} - -// Agent status -export interface AgentStatus { - running: boolean; - pid?: number; - socket?: string; - keys?: AgentKey[]; -} - -export interface AgentKey { - type: string; - fingerprint: string; - comment?: string; - added: string; -} diff --git a/src/utils/config.ts b/src/utils/config.ts deleted file mode 100644 index 0a96d3a..0000000 --- a/src/utils/config.ts +++ /dev/null @@ -1,505 +0,0 @@ -import * as path from "path"; -import { AppConfig, Project, SSHKey, ServerConfig } from "../types"; -import { - APP_NAME, - APP_VERSION, - BASE_DIR, - CONFIG_DIR, - CONFIG_FILE, - PROJECTS_DIR, - KEYS_DIR, - LOGS_DIR, - DEFAULT_PROJECT, - DEFAULT_AGENT_TIMEOUT, - SSH_CONFIG_PATH, - ACTIVE_PROJECT_FILE, -} from "../constants"; -import { - ensureDirectory, - writeJsonFile, - readJsonFile, - fileExists, - writeFile, - readFile, - backupFile, -} from "./filesystem"; -import { log } from "./ui"; -import { formatSshConfigEntry } from "./ssh"; - -/** - * Default configuration - */ -const defaultConfig: AppConfig = { - version: APP_VERSION, - defaultProject: DEFAULT_PROJECT, - projects: [DEFAULT_PROJECT], - agentSettings: { - autostart: true, - timeout: DEFAULT_AGENT_TIMEOUT, - }, - uiSettings: { - colorTheme: "default", - logLevel: "info", - }, -}; - -/** - * Initialize the application - */ -export const initializeApp = async (force = false): Promise => { - try { - // Create required directories - await Promise.all([ - ensureDirectory(BASE_DIR), - ensureDirectory(CONFIG_DIR), - ensureDirectory(KEYS_DIR), - ensureDirectory(PROJECTS_DIR), - ensureDirectory(LOGS_DIR), - ]); - - // Check if config already exists - const configExists = await fileExists(CONFIG_FILE); - if (configExists && !force) { - log.info("Configuration already exists. Use --force to reinitialize."); - return; - } - - // Create default config - await writeJsonFile(CONFIG_FILE, defaultConfig); - - // Create default project - const defaultProjectDir = path.join(PROJECTS_DIR, DEFAULT_PROJECT); - await ensureDirectory(defaultProjectDir); - - // Create default project config - const defaultProjectConfig: Project = { - id: DEFAULT_PROJECT, - name: "Default Project", - created: new Date().toISOString(), - keys: [], - servers: [], - }; - - await writeJsonFile( - path.join(defaultProjectDir, "project.json"), - defaultProjectConfig - ); - - // Set active project - await setActiveProject(DEFAULT_PROJECT); - - log.success(`${APP_NAME} initialized successfully.`); - } catch (error: any) { - log.error(`Failed to initialize app: ${error.message}`); - throw error; - } -}; - -/** - * Load application configuration - */ -export const loadConfig = async (): Promise => { - try { - // Check if config file exists - if (!(await fileExists(CONFIG_FILE))) { - // Initialize with default config - await initializeApp(); - } - - // Read config file - return await readJsonFile(CONFIG_FILE); - } catch (error: any) { - log.error(`Failed to load config: ${error.message}`); - throw error; - } -}; - -/** - * Save application configuration - */ -export const saveConfig = async (config: AppConfig): Promise => { - try { - await writeJsonFile(CONFIG_FILE, config); - } catch (error: any) { - log.error(`Failed to save config: ${error.message}`); - throw error; - } -}; - -/** - * Update application configuration - */ -export const updateConfig = async ( - updates: Partial -): Promise => { - try { - const config = await loadConfig(); - const updatedConfig = { ...config, ...updates }; - await saveConfig(updatedConfig); - return updatedConfig; - } catch (error: any) { - log.error(`Failed to update config: ${error.message}`); - throw error; - } -}; - -/** - * Get active project ID - */ -export const getActiveProject = async (): Promise => { - try { - if (await fileExists(ACTIVE_PROJECT_FILE)) { - return (await readFile(ACTIVE_PROJECT_FILE)).trim(); - } else { - // Use default project if no active project is set - const config = await loadConfig(); - return config.defaultProject; - } - } catch (error: any) { - log.error(`Failed to get active project: ${error.message}`); - throw error; - } -}; - -/** - * Set active project - */ -export const setActiveProject = async (projectId: string): Promise => { - try { - await writeFile(ACTIVE_PROJECT_FILE, projectId); - - // Update config as well - const config = await loadConfig(); - config.activeProject = projectId; - await saveConfig(config); - } catch (error: any) { - log.error(`Failed to set active project: ${error.message}`); - throw error; - } -}; - -/** - * List all projects - */ -export const listProjects = async (): Promise => { - try { - const config = await loadConfig(); - const projects: Project[] = []; - - for (const projectId of config.projects) { - const projectPath = path.join(PROJECTS_DIR, projectId, "project.json"); - if (await fileExists(projectPath)) { - const project = await readJsonFile(projectPath); - projects.push(project); - } - } - - return projects; - } catch (error: any) { - log.error(`Failed to list projects: ${error.message}`); - throw error; - } -}; - -/** - * Load a project - */ -export const loadProject = async (projectId: string): Promise => { - try { - const projectPath = path.join(PROJECTS_DIR, projectId, "project.json"); - - if (!(await fileExists(projectPath))) { - throw new Error(`Project ${projectId} does not exist`); - } - - return await readJsonFile(projectPath); - } catch (error: any) { - log.error(`Failed to load project ${projectId}: ${error.message}`); - throw error; - } -}; - -/** - * Save a project - */ -export const saveProject = async (project: Project): Promise => { - try { - // Create project directory if it doesn't exist - const projectDir = path.join(PROJECTS_DIR, project.id); - await ensureDirectory(projectDir); - - // Save project config - await writeJsonFile( - path.join(projectDir, "project.json"), - project - ); - - // Update app config to include this project if not already present - const config = await loadConfig(); - if (!config.projects.includes(project.id)) { - config.projects.push(project.id); - await saveConfig(config); - } - } catch (error: any) { - log.error(`Failed to save project ${project.id}: ${error.message}`); - throw error; - } -}; - -/** - * Create a new project - */ -export const createProject = async ( - name: string, - description?: string -): Promise => { - try { - // Generate a safe project ID from the name - const projectId = name - .toLowerCase() - .replace(/[^a-z0-9]/g, "-") - .replace(/-+/g, "-") - .replace(/^-|-$/g, ""); - - // Check if project already exists - const config = await loadConfig(); - if (config.projects.includes(projectId)) { - throw new Error(`Project with ID ${projectId} already exists`); - } - - // Create the project - const project: Project = { - id: projectId, - name, - description, - created: new Date().toISOString(), - keys: [], - servers: [], - }; - - // Save the project - await saveProject(project); - - return project; - } catch (error: any) { - log.error(`Failed to create project: ${error.message}`); - throw error; - } -}; - -/** - * Delete a project - */ -export const deleteProject = async (projectId: string): Promise => { - try { - // Check if it's the default project - const config = await loadConfig(); - if (projectId === config.defaultProject) { - throw new Error("Cannot delete the default project"); - } - - // Update the app config to remove this project - config.projects = config.projects.filter((id) => id !== projectId); - await saveConfig(config); - - // Remove project directory - // Note: We don't remove the actual files/keys for safety - // but we remove the project from the configuration - log.warn(`Project ${projectId} has been removed from configuration.`); - log.warn( - `The project files remain in ${path.join(PROJECTS_DIR, projectId)}.` - ); - } catch (error: any) { - log.error(`Failed to delete project ${projectId}: ${error.message}`); - throw error; - } -}; - -/** - * Add a key to a project - */ -export const addKeyToProject = async ( - projectId: string, - key: SSHKey -): Promise => { - try { - const project = await loadProject(projectId); - - // Check if key with same ID already exists - if (project.keys.some((k) => k.id === key.id)) { - throw new Error( - `Key with ID ${key.id} already exists in project ${projectId}` - ); - } - - // Add the key to the project - project.keys.push(key); - - // Save the project - await saveProject(project); - - return project; - } catch (error: any) { - log.error(`Failed to add key to project ${projectId}: ${error.message}`); - throw error; - } -}; - -/** - * Remove a key from a project - */ -export const removeKeyFromProject = async ( - projectId: string, - keyId: string -): Promise => { - try { - const project = await loadProject(projectId); - - // Remove the key from the project - project.keys = project.keys.filter((k) => k.id !== keyId); - - // Update any servers that were using this key - for (const server of project.servers) { - if (server.keyId === keyId) { - server.keyId = ""; - } - } - - // Save the project - await saveProject(project); - - return project; - } catch (error: any) { - log.error( - `Failed to remove key from project ${projectId}: ${error.message}` - ); - throw error; - } -}; - -/** - * Add a server to a project - */ -export const addServerToProject = async ( - projectId: string, - server: ServerConfig -): Promise => { - try { - const project = await loadProject(projectId); - - // Check if server with same ID already exists - if (project.servers.some((s) => s.id === server.id)) { - throw new Error( - `Server with ID ${server.id} already exists in project ${projectId}` - ); - } - - // Add the server to the project - project.servers.push(server); - - // Save the project - await saveProject(project); - - return project; - } catch (error: any) { - log.error(`Failed to add server to project ${projectId}: ${error.message}`); - throw error; - } -}; - -/** - * Remove a server from a project - */ -export const removeServerFromProject = async ( - projectId: string, - serverId: string -): Promise => { - try { - const project = await loadProject(projectId); - - // Remove the server from the project - project.servers = project.servers.filter((s) => s.id !== serverId); - - // Save the project - await saveProject(project); - - return project; - } catch (error: any) { - log.error( - `Failed to remove server from project ${projectId}: ${error.message}` - ); - throw error; - } -}; - -/** - * Update SSH config with project servers - */ -export const updateSshConfigWithProject = async ( - projectId: string -): Promise => { - try { - const project = await loadProject(projectId); - - // Backup current SSH config - await backupFile(SSH_CONFIG_PATH); - - // Generate SSH config entries for each server - const configEntries: string[] = []; - - for (const server of project.servers) { - // Find the key for this server - const key = project.keys.find((k) => k.id === server.keyId); - - configEntries.push( - formatSshConfigEntry(server.name, { - hostname: server.hostname, - user: server.username, - port: server.port, - identityFile: key ? key.path : undefined, - options: { - ServerAliveInterval: 60, - ServerAliveCountMax: 120, - ...server.options, - }, - }) - ); - } - - // Add a project header - const header = `# Project: ${project.name} (${project.id})\n`; - - // Read current config - let currentConfig = ""; - if (await fileExists(SSH_CONFIG_PATH)) { - currentConfig = await readFile(SSH_CONFIG_PATH); - } - - // Find any existing project sections and replace them - const projectRegex = new RegExp( - `# Project: .* \\(${projectId}\\)[\\s\\S]*?(?=# Project:|$)`, - "g" - ); - - if (projectRegex.test(currentConfig)) { - currentConfig = currentConfig.replace( - projectRegex, - header + configEntries.join("\n\n") + "\n\n" - ); - } else { - currentConfig += "\n\n" + header + configEntries.join("\n\n") + "\n\n"; - } - - // Write updated config - await writeFile(SSH_CONFIG_PATH, currentConfig); - - log.success( - `SSH config updated with ${project.servers.length} servers from project ${projectId}.` - ); - } catch (error: any) { - log.error( - `Failed to update SSH config with project ${projectId}: ${error.message}` - ); - throw error; - } -}; diff --git a/src/utils/filesystem.ts b/src/utils/filesystem.ts deleted file mode 100644 index e09734f..0000000 --- a/src/utils/filesystem.ts +++ /dev/null @@ -1,202 +0,0 @@ -import * as fs from "fs-extra"; -import * as path from "path"; -import { exec } from "child_process"; -import { promisify } from "util"; -import { - SSH_DIR_PERMISSIONS, - SSH_KEY_PERMISSIONS, - SSH_PUB_KEY_PERMISSIONS, -} from "../constants"; -import { log } from "./ui"; - -const execAsync = promisify(exec); - -/** - * Ensure a directory exists with the correct permissions - */ -export const ensureDirectory = async ( - dirPath: string, - permissions = SSH_DIR_PERMISSIONS -): Promise => { - try { - await fs.ensureDir(dirPath); - await fs.chmod(dirPath, permissions); - } catch (error: any) { - log.error(`Failed to create directory ${dirPath}: ${error.message}`); - throw error; - } -}; - -/** - * Write a file with the correct permissions - */ -export const writeFile = async ( - filePath: string, - content: string, - permissions = SSH_KEY_PERMISSIONS -): Promise => { - try { - await fs.writeFile(filePath, content); - await fs.chmod(filePath, permissions); - } catch (error: any) { - log.error(`Failed to write file ${filePath}: ${error.message}`); - throw error; - } -}; - -/** - * Read a file - */ -export const readFile = async (filePath: string): Promise => { - try { - return await fs.readFile(filePath, "utf8"); - } catch (error: any) { - log.error(`Failed to read file ${filePath}: ${error.message}`); - throw error; - } -}; - -/** - * Check if a file exists - */ -export const fileExists = async (filePath: string): Promise => { - try { - await fs.access(filePath); - return true; - } catch { - return false; - } -}; - -/** - * List all files in a directory - */ -export const listFiles = async ( - dirPath: string, - filter?: RegExp -): Promise => { - try { - const files = await fs.readdir(dirPath); - return filter ? files.filter((file) => filter.test(file)) : files; - } catch (error: any) { - log.error(`Failed to list files in ${dirPath}: ${error.message}`); - throw error; - } -}; - -/** - * Delete a file - */ -export const deleteFile = async (filePath: string): Promise => { - try { - await fs.remove(filePath); - } catch (error: any) { - log.error(`Failed to delete file ${filePath}: ${error.message}`); - throw error; - } -}; - -/** - * Read a JSON file - */ -export const readJsonFile = async (filePath: string): Promise => { - try { - return await fs.readJson(filePath); - } catch (error: any) { - log.error(`Failed to read JSON file ${filePath}: ${error.message}`); - throw error; - } -}; - -/** - * Write a JSON file - */ -export const writeJsonFile = async ( - filePath: string, - data: T, - permissions = SSH_KEY_PERMISSIONS -): Promise => { - try { - await fs.writeJson(filePath, data, { spaces: 2 }); - await fs.chmod(filePath, permissions); - } catch (error: any) { - log.error(`Failed to write JSON file ${filePath}: ${error.message}`); - throw error; - } -}; - -/** - * Move a file - */ -export const moveFile = async ( - source: string, - destination: string -): Promise => { - try { - await fs.move(source, destination, { overwrite: true }); - } catch (error: any) { - log.error( - `Failed to move file ${source} to ${destination}: ${error.message}` - ); - throw error; - } -}; - -/** - * Copy a file - */ -export const copyFile = async ( - source: string, - destination: string -): Promise => { - try { - await fs.copy(source, destination, { overwrite: true }); - } catch (error: any) { - log.error( - `Failed to copy file ${source} to ${destination}: ${error.message}` - ); - throw error; - } -}; - -/** - * Backup a file - */ -export const backupFile = async ( - filePath: string, - backupDir?: string -): Promise => { - try { - const fileName = path.basename(filePath); - const timestamp = new Date().toISOString().replace(/[:.]/g, "-"); - const backupPath = backupDir - ? path.join(backupDir, `${fileName}.${timestamp}`) - : `${filePath}.${timestamp}`; - - if (backupDir) { - await ensureDirectory(backupDir); - } - - await copyFile(filePath, backupPath); - return backupPath; - } catch (error: any) { - log.error(`Failed to backup file ${filePath}: ${error.message}`); - throw error; - } -}; - -/** - * Run a command and return the output - */ -export const runCommand = async (command: string): Promise => { - try { - const { stdout, stderr } = await execAsync(command); - if (stderr) { - log.warn(`Command stderr: ${stderr}`); - } - return stdout.trim(); - } catch (error: any) { - log.error(`Command failed: ${command}\n${error.message}`); - throw error; - } -}; diff --git a/src/utils/ssh.ts b/src/utils/ssh.ts deleted file mode 100644 index b885f22..0000000 --- a/src/utils/ssh.ts +++ /dev/null @@ -1,500 +0,0 @@ -/** @format */ - -import * as path from "path" -import { exec } from "child_process" -import { promisify } from "util" -import { SSHKey, KeyType, AgentStatus, AgentKey } from "../types" -import { - DEFAULT_KEY_TYPE, - DEFAULT_KEY_BITS, - DEFAULT_KDF_ROUNDS, - SSH_KEY_PERMISSIONS, - SSH_PUB_KEY_PERMISSIONS, -} from "../constants" -import { log } from "./ui" -import { runCommand, writeFile, readFile, fileExists } from "./filesystem" -import { NodeSSH } from "node-ssh" -import * as crypto from "crypto" -import { format } from "date-fns" - -const execAsync = promisify(exec) - -/** - * Generate a new SSH key pair with secure parameters - */ -export const generateKey = async ( - keyPath: string, - options: { - type?: KeyType - bits?: number - kdfRounds?: number - passphrase?: string - comment?: string - } = {} -): Promise<{ privateKey: string; publicKey: string }> => { - const { - type = DEFAULT_KEY_TYPE, - bits = DEFAULT_KEY_BITS, - kdfRounds = DEFAULT_KDF_ROUNDS, - passphrase = "", - comment = `generated by sshield on ${new Date().toISOString()}`, - } = options - - // Build the ssh-keygen command - let command = `ssh-keygen -t ${type}` - - // Add key-specific options - if (type === "rsa") { - command += ` -b ${bits}` - } - - // Add KDF rounds for stronger passphrase protection - command += ` -a ${kdfRounds}` - - // Add output file and other options - command += ` -f "${keyPath}" -C "${comment}"` - - // Use a temporary file for the passphrase to avoid it showing in process list - const passphraseFile = path.join(path.dirname(keyPath), ".passphrase-temp") - await writeFile(passphraseFile, passphrase) - - try { - // Use passphrase file - command += ` -N "$(cat "${passphraseFile}")"` - - // Execute the command - await runCommand(command) - - // Read the generated files - const privateKey = await readFile(keyPath) - const publicKey = await readFile(`${keyPath}.pub`) - - // Set correct permissions - await Promise.all([ - runCommand(`chmod ${SSH_KEY_PERMISSIONS.toString(8)} "${keyPath}"`), - runCommand( - `chmod ${SSH_PUB_KEY_PERMISSIONS.toString(8)} "${keyPath}.pub"` - ), - ]) - - return { privateKey, publicKey } - } catch (error: any) { - log.error(`Failed to generate SSH key: ${error.message}`) - throw error - } finally { - // Cleanup the passphrase file - try { - await runCommand(`rm -f "${passphraseFile}"`) - } catch (error: any) { - log.warn(`Failed to remove passphrase file: ${error.message}`) - } - } -} - -/** - * Get the fingerprint of an SSH key - */ -export const getKeyFingerprint = async (keyPath: string): Promise => { - try { - // Use ssh-keygen to get the fingerprint in MD5 format - const output = await runCommand(`ssh-keygen -l -E md5 -f "${keyPath}"`) - // Extract the fingerprint part (second field) - const match = output.match(/MD5:([a-f0-9:]+)/i) - return match ? match[1] : "" - } catch (error: any) { - log.error(`Failed to get key fingerprint: ${error.message}`) - throw error - } -} - -/** - * Start the SSH agent if not already running - */ -export const startAgent = async (): Promise<{ - agentPid: string - sshAuthSock: string -}> => { - try { - // Start the SSH agent and parse its output - const output = await runCommand("ssh-agent -s") - - // Extract SSH_AUTH_SOCK and SSH_AGENT_PID - const sshAuthSockMatch = output.match(/SSH_AUTH_SOCK=([^;]+)/) - const sshAgentPidMatch = output.match(/SSH_AGENT_PID=([^;]+)/) - - if (!sshAuthSockMatch || !sshAgentPidMatch) { - throw new Error("Failed to parse ssh-agent output") - } - - const sshAuthSock = sshAuthSockMatch[1] - const agentPid = sshAgentPidMatch[1] - - // Set environment variables for the current process - process.env.SSH_AUTH_SOCK = sshAuthSock - process.env.SSH_AGENT_PID = agentPid - - return { agentPid, sshAuthSock } - } catch (error: any) { - log.error(`Failed to start SSH agent: ${error.message}`) - throw error - } -} - -/** - * Stop the SSH agent - */ -export const stopAgent = async (): Promise => { - try { - await runCommand("ssh-agent -k") - delete process.env.SSH_AUTH_SOCK - delete process.env.SSH_AGENT_PID - } catch (error: any) { - log.error(`Failed to stop SSH agent: ${error.message}`) - throw error - } -} - -/** - * Get the status of the SSH agent - */ -export const getAgentStatus = async (): Promise => { - // Check if the SSH agent is running - if (!process.env.SSH_AUTH_SOCK || !process.env.SSH_AGENT_PID) { - return { running: false } - } - - try { - // Check if the agent has any keys - const output = await runCommand("ssh-add -l") - - // Parse output to get keys - const keys: AgentKey[] = [] - if (!output.includes("The agent has no identities")) { - const keyLines = output.split("\n") - - for (const line of keyLines) { - if (!line.trim()) continue - - // Parse each line (format: bits type fingerprint comment) - const parts = line.split(" ") - if (parts.length >= 3) { - const type = parts[1] - const fingerprint = parts[2] - const comment = parts.slice(3).join(" ") - - keys.push({ - type, - fingerprint, - comment, - added: new Date().toISOString(), - }) - } - } - } - - return { - running: true, - pid: parseInt(process.env.SSH_AGENT_PID, 10), - socket: process.env.SSH_AUTH_SOCK, - keys, - } - } catch (error: any) { - // If ssh-add fails, the agent may not be running correctly - return { running: false } - } -} - -/** - * Add a key to the SSH agent - */ -export const addKeyToAgent = async ( - keyPath: string, - options: { - lifetime?: number - passphrase?: string - } = {} -): Promise => { - const { lifetime } = options - - try { - let command = "ssh-add" - - // Add lifetime option if specified - if (lifetime) { - command += ` -t ${lifetime}` - } - - command += ` "${keyPath}"` - - // Execute the command - await runCommand(command) - } catch (error: any) { - log.error(`Failed to add key to agent: ${error.message}`) - throw error - } -} - -/** - * Remove a key from the SSH agent - */ -export const removeKeyFromAgent = async (keyPath: string): Promise => { - try { - await runCommand(`ssh-add -d "${keyPath}"`) - } catch (error: any) { - log.error(`Failed to remove key from agent: ${error.message}`) - throw error - } -} - -/** - * Remove all keys from the SSH agent - */ -export const removeAllKeysFromAgent = async (): Promise => { - try { - await runCommand("ssh-add -D") - } catch (error: any) { - log.error(`Failed to remove all keys from agent: ${error.message}`) - throw error - } -} - -/** - * Connect to a server using SSH - */ -export const connectToServer = async ( - hostname: string, - options: { - username: string - port?: number - keyPath?: string - passphrase?: string - command?: string - } -): Promise => { - const { username, port = 22, keyPath, passphrase, command } = options - - try { - const ssh = new NodeSSH() - - // Connect to the server - await ssh.connect({ - host: hostname, - port, - username, - privateKey: keyPath, - passphrase, - }) - - // Execute command if provided - if (command) { - const result = await ssh.execCommand(command) - log.info(`Command execution result: ${result.stdout}`) - if (result.stderr) { - log.warn(`Command stderr: ${result.stderr}`) - } - } - - return ssh - } catch (error: any) { - log.error(`Failed to connect to server ${hostname}: ${error.message}`) - throw error - } -} - -/** - * Test SSH connection - */ -export const testConnection = async ( - hostname: string, - options: { - username: string - port?: number - keyPath?: string - passphrase?: string - } -): Promise => { - try { - const ssh = await connectToServer(hostname, { - ...options, - command: 'echo "Connection successful"', - }) - ssh.dispose() - return true - } catch (error: any) { - log.error(`Connection test failed: ${error.message}`) - return false - } -} - -/** - * Generate a key name based on purpose and timestamp - */ -export const generateKeyName = ( - purpose: string, - timestamp = new Date() -): string => { - const formattedDate = format(timestamp, "yyyyMMdd-HHmmss") - const sanitizedPurpose = purpose.replace(/[^a-zA-Z0-9_-]/g, "_") - return `id_${DEFAULT_KEY_TYPE}_${sanitizedPurpose}_${formattedDate}` -} - -/** - * Parse an SSH public key - */ -export const parsePublicKey = ( - publicKeyContent: string -): { type: string; key: string; comment?: string } => { - const parts = publicKeyContent.trim().split(" ") - - if (parts.length < 2) { - throw new Error("Invalid public key format") - } - - const type = parts[0] - const key = parts[1] - const comment = parts.slice(2).join(" ") || undefined - - return { type, key, comment } -} - -/** - * Format an SSH key entry for .ssh/config - */ -export const formatSshConfigEntry = ( - host: string, - config: { - hostname: string - user: string - port?: number - identityFile?: string - options?: Record - } -): string => { - const { hostname, user, port, identityFile, options = {} } = config - - let entry = `Host ${host}\n` - entry += ` HostName ${hostname}\n` - entry += ` User ${user}\n` - - if (port) { - entry += ` Port ${port}\n` - } - - if (identityFile) { - entry += ` IdentityFile ${identityFile}\n` - } - - // Add all other options - for (const [key, value] of Object.entries(options)) { - // Skip entries that we've already handled - if (["HostName", "User", "Port", "IdentityFile"].includes(key)) { - continue - } - - // Format the value based on its type - let formattedValue: string - - if (typeof value === "boolean") { - formattedValue = value ? "yes" : "no" - } else { - formattedValue = String(value) - } - - entry += ` ${key} ${formattedValue}\n` - } - - return entry -} - -/** - * Update SSH config file with new entries - */ -export const updateSshConfig = async ( - configEntries: string[] -): Promise => { - try { - // Read existing config - const configPath = path.join(process.env.HOME || "", ".ssh", "config") - let configContent = "" - - if (await fileExists(configPath)) { - configContent = await readFile(configPath) - } - - // Add new entries - configContent += "\n\n# Added by sshield\n" - configContent += configEntries.join("\n\n") - - // Write updated config - await writeFile(configPath, configContent, SSH_KEY_PERMISSIONS) - } catch (error: any) { - log.error(`Failed to update SSH config: ${error.message}`) - throw error - } -} - -/** - * Generate a random port number for tunneling - */ -export const generateRandomPort = (): number => { - // Generate a random port number between 10000 and 65535 - return Math.floor(Math.random() * 55535) + 10000 -} - -/** - * Create an SSH tunnel - */ -export const createSshTunnel = async (options: { - localPort: number - remoteHost: string - remotePort: number - sshHost: string - sshPort?: number - sshUser: string - keyPath?: string -}): Promise<{ process: any; localPort: number }> => { - const { - localPort, - remoteHost, - remotePort, - sshHost, - sshPort = 22, - sshUser, - keyPath, - } = options - - try { - // Build SSH command for tunneling - let command = `ssh -N -L ${localPort}:${remoteHost}:${remotePort}` - - if (sshPort !== 22) { - command += ` -p ${sshPort}` - } - - if (keyPath) { - command += ` -i "${keyPath}"` - } - - command += ` ${sshUser}@${sshHost}` - - // Start the SSH tunnel as a background process - const child = exec(command) - - // Wait a bit to ensure the tunnel is established - await new Promise(resolve => setTimeout(resolve, 1000)) - - return { process: child, localPort } - } catch (error: any) { - log.error(`Failed to create SSH tunnel: ${error.message}`) - throw error - } -} - -/** - * Close an SSH tunnel - */ -export const closeSshTunnel = (process: any): void => { - if (process) { - process.kill() - } -} diff --git a/src/utils/ui.ts b/src/utils/ui.ts deleted file mode 100644 index 472e6ff..0000000 --- a/src/utils/ui.ts +++ /dev/null @@ -1,326 +0,0 @@ -/** @format */ - -import chalk from "chalk" -import ora, { Ora } from "ora" -import figlet from "figlet" -import gradient from "gradient-string" -import boxen from "boxen" -import inquirer from "inquirer" -import { LOG_LEVELS, SPINNER_INTERVAL } from "../constants" -import blessed from "blessed" -import * as notifier from "node-notifier" -import { format } from "date-fns" - -// Color palette -const colors = { - primary: "#36c5f0", - secondary: "#2eb67d", - warning: "#ecb22e", - error: "#e01e5a", - info: "#4a154b", - success: "#2eb67d", - muted: "#6c757d", -} - -// Create a beautiful gradient for the app title -export const renderTitle = (): void => { - const title = figlet.textSync("SSHield", { font: "Big" }) - const titleGradient = gradient(["#36c5f0", "#2eb67d", "#ecb22e", "#e01e5a"]) - - console.log(titleGradient(title)) - console.log(chalk.dim("Secure SSH Key Management | v1.0.0")) - console.log("") -} - -// Create a styled box for displaying information -export const renderBox = ( - content: string, - title?: string, - borderColor = "blue" -): void => { - console.log( - boxen(content, { - title, - titleAlignment: "center", - padding: 1, - margin: 1, - borderColor, - borderStyle: "round", - }) - ) -} - -// Create a spinner with the given text -export const createSpinner = (text: string): Ora => { - return ora({ - text, - spinner: "dots", - color: "cyan", - interval: SPINNER_INTERVAL, - }) -} - -// Create a standard way to log messages -export const log = { - debug: (message: string): void => { - console.log(chalk.dim(`[${getTimestamp()}] ${message}`)) - }, - info: (message: string): void => { - console.log(chalk.blue(`[${getTimestamp()}] ℹ️ ${message}`)) - }, - warn: (message: string): void => { - console.log(chalk.yellow(`[${getTimestamp()}] ⚠️ ${message}`)) - }, - error: (message: string): void => { - console.log(chalk.red(`[${getTimestamp()}] ❌ ${message}`)) - }, - success: (message: string): void => { - console.log(chalk.green(`[${getTimestamp()}] ✅ ${message}`)) - }, - table: (data: any[]): void => { - console.table(data) - }, -} - -// Get timestamp for logging -const getTimestamp = (): string => { - return format(new Date(), "HH:mm:ss") -} - -// Display a notification -export const notify = ( - title: string, - message: string, - type: "info" | "success" | "warning" | "error" = "info" -): void => { - notifier.notify({ - title, - message, - icon: getIconForType(type), - }) -} - -const getIconForType = ( - type: "info" | "success" | "warning" | "error" -): string => { - // Return platform-appropriate icons or empty string if not available - return "" -} - -// Interactive prompts -export const prompt = { - // Confirm action - confirm: async (message: string, defaultValue = false): Promise => { - const { result } = await inquirer.prompt([ - { - type: "confirm", - name: "result", - message, - default: defaultValue, - }, - ]) - return result - }, - - // Select from a list - select: async ( - message: string, - choices: Array<{ name: string; value: T }>, - defaultValue?: T - ): Promise => { - const { result } = await inquirer.prompt([ - { - type: "list", - name: "result", - message, - choices, - default: defaultValue, - }, - ]) - return result - }, - - // Input text - input: async ( - message: string, - defaultValue?: string, - validate?: (input: string) => boolean | string - ): Promise => { - const { result } = await inquirer.prompt([ - { - type: "input", - name: "result", - message, - default: defaultValue, - validate, - }, - ]) - return result - }, - - // Input password (masked) - password: async ( - message: string, - validate?: (input: string) => boolean | string - ): Promise => { - const { result } = await inquirer.prompt([ - { - type: "password", - name: "result", - message, - validate, - }, - ]) - return result - }, - - // Multiple selection - checkbox: async ( - message: string, - choices: Array<{ name: string; value: T; checked?: boolean }> - ): Promise => { - const { result } = await inquirer.prompt([ - { - type: "checkbox", - name: "result", - message, - choices, - }, - ]) - return result - }, -} - -// Create a simple terminal UI dashboard using blessed -export const createDashboard = (): blessed.Widgets.Screen => { - const screen = blessed.screen({ - smartCSR: true, - title: "SSHield Dashboard", - }) - - // Allow Ctrl+C to exit - screen.key(["C-c"], () => process.exit(0)) - - return screen -} - -// Create a dashboard box -export const createDashboardBox = ( - screen: blessed.Widgets.Screen, - title: string, - options: blessed.Widgets.BoxOptions = {} -): blessed.Widgets.BoxElement => { - const box = blessed.box({ - label: ` ${title} `, - border: { - type: "line", - }, - style: { - border: { - fg: "blue", - }, - header: { - fg: "white", - bold: true, - }, - }, - ...options, - }) - - screen.append(box) - return box -} - -// Create a dashboard list -export const createDashboardList = ( - screen: blessed.Widgets.Screen, - title: string, - items: string[], - options: blessed.Widgets.ListOptions = {} -): blessed.Widgets.ListElement => { - const list = blessed.list({ - label: ` ${title} `, - items, - border: { - type: "line", - }, - style: { - border: { - fg: "blue", - }, - selected: { - bg: "blue", - fg: "white", - bold: true, - }, - }, - keys: true, - vi: true, - mouse: true, - ...options, - }) - - screen.append(list) - return list -} - -// Format a list of key-value pairs for display -export const formatKeyValueList = ( - data: Record, - indent = 2 -): string => { - const indentStr = " ".repeat(indent) - return Object.entries(data) - .map(([key, value]) => { - const formattedKey = chalk.cyan(`${key}:`) - return `${indentStr}${formattedKey} ${formatValue(value)}` - }) - .join("\n") -} - -// Format a value for display -const formatValue = (value: any): string => { - if (value === undefined || value === null) { - return chalk.dim("Not set") - } - - if (typeof value === "boolean") { - return value ? chalk.green("Yes") : chalk.red("No") - } - - if (typeof value === "object") { - if (Array.isArray(value)) { - return value.length > 0 - ? chalk.yellow(`[${value.join(", ")}]`) - : chalk.dim("Empty array") - } - return JSON.stringify(value) - } - - return String(value) -} - -// Progress bar for long operations -export const createProgressBar = ( - screen: blessed.Widgets.Screen, - options: blessed.Widgets.ProgressBarOptions = {} -): blessed.Widgets.ProgressBarElement => { - const progressBar = blessed.progressbar({ - border: { - type: "line", - }, - style: { - border: { - fg: "blue", - }, - bar: { - bg: "blue", - }, - }, - height: 3, - ...options, - }) - - screen.append(progressBar) - return progressBar -} diff --git a/tools/generators/generators.json b/tools/generators/generators.json new file mode 100644 index 0000000..71c358e --- /dev/null +++ b/tools/generators/generators.json @@ -0,0 +1,12 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "name": "@sshield/workspace-generators", + "version": "1.0.0", + "generators": { + "package": { + "factory": "./package-scaffolder/index", + "schema": "./package-scaffolder/schema.json", + "description": "Scaffold a new SSHield package with @sshield/config integration" + } + } +} diff --git a/tools/generators/package-scaffolder/files/.mocharc.json__template__ b/tools/generators/package-scaffolder/files/.mocharc.json__template__ new file mode 100644 index 0000000..4e2d0f0 --- /dev/null +++ b/tools/generators/package-scaffolder/files/.mocharc.json__template__ @@ -0,0 +1,6 @@ +{ + "extension": ["ts"], + "spec": "src/**/*.spec.ts", + "require": ["ts-node/register"], + "node-option": ["loader=ts-node/esm"] +} diff --git a/tools/generators/package-scaffolder/files/.prettierrc.json__template__ b/tools/generators/package-scaffolder/files/.prettierrc.json__template__ new file mode 100644 index 0000000..0130798 --- /dev/null +++ b/tools/generators/package-scaffolder/files/.prettierrc.json__template__ @@ -0,0 +1,3 @@ +{ + "extends": "@sshield/config/prettier" +} diff --git a/tools/generators/package-scaffolder/files/README.md__template__ b/tools/generators/package-scaffolder/files/README.md__template__ new file mode 100644 index 0000000..d11cae3 --- /dev/null +++ b/tools/generators/package-scaffolder/files/README.md__template__ @@ -0,0 +1,37 @@ +# <%= projectName %> + +<%= description %> + +## Installation + +```bash +pnpm add <%= projectName %> +``` + +## Usage + +```typescript +import { hello } from '<%= projectName %>' + +console.log(hello()) +``` + +## Development + +```bash +# Build +pnpm nx build <%= projectName %> + +# Test +pnpm nx test <%= projectName %> + +# Lint +pnpm nx lint <%= projectName %> + +# Type check +pnpm nx typecheck <%= projectName %> +``` + +## License + +MIT diff --git a/tools/generators/package-scaffolder/files/eslint.config.mjs__template__ b/tools/generators/package-scaffolder/files/eslint.config.mjs__template__ new file mode 100644 index 0000000..197ca90 --- /dev/null +++ b/tools/generators/package-scaffolder/files/eslint.config.mjs__template__ @@ -0,0 +1,15 @@ +/** @format */ +import { eslintConfig } from "@sshield/config" + +export default [ + ...eslintConfig, + { + files: ["**/*.ts"], + languageOptions: { + parserOptions: { + project: "./tsconfig.json", + tsconfigRootDir: import.meta.dirname, + }, + }, + }, +] diff --git a/tools/generators/package-scaffolder/files/package.json__template__ b/tools/generators/package-scaffolder/files/package.json__template__ new file mode 100644 index 0000000..9bede34 --- /dev/null +++ b/tools/generators/package-scaffolder/files/package.json__template__ @@ -0,0 +1,21 @@ +{ + "name": "<%= projectName %>", + "version": "1.0.0", + "description": "<%= description %>", + "type": "commonjs", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "scripts": { + "build": "nx build", + "test": "nx test", + "lint": "nx lint", + "typecheck": "nx typecheck" + }, + "dependencies": {}, + "devDependencies": { + "@sshield/config": "workspace:^" + }, + "publishConfig": { + "access": "public" + } +} diff --git a/tools/generators/package-scaffolder/files/project.json__template__ b/tools/generators/package-scaffolder/files/project.json__template__ new file mode 100644 index 0000000..ade3fe3 --- /dev/null +++ b/tools/generators/package-scaffolder/files/project.json__template__ @@ -0,0 +1,35 @@ +{ + "name": "<%= projectName %>", + "$schema": "<%= offsetFromRoot %>node_modules/nx/schemas/project-schema.json", + "sourceRoot": "<%= projectRoot %>/src", + "projectType": "library", + "tags": [], + "targets": { + "build": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "cache": true, + "options": { + "outputPath": "<%= projectRoot %>/dist", + "main": "<%= projectRoot %>/src/index.ts", + "tsConfig": "<%= projectRoot %>/tsconfig.lib.json", + "assets": ["*.md"], + "clean": true + } + }<% if (addTests) { %>, + "test": { + "executor": "@nx/js:node", + "outputs": [], + "options": { + "command": "mocha --config <%= projectRoot %>/.mocharc.json '<%= projectRoot %>/src/**/*.spec.ts'" + } + }<% } %>, + "lint": { + "executor": "@nx/eslint:lint", + "outputs": ["{options.outputFile}"], + "options": { + "lintFilePatterns": ["<%= projectRoot %>/**/*.ts"] + } + } + } +} diff --git a/tools/generators/package-scaffolder/files/src/index.spec.ts__template__ b/tools/generators/package-scaffolder/files/src/index.spec.ts__template__ new file mode 100644 index 0000000..25cff6a --- /dev/null +++ b/tools/generators/package-scaffolder/files/src/index.spec.ts__template__ @@ -0,0 +1,13 @@ +/** @format */ +import { describe, it } from "mocha" +import { expect } from "chai" +import { hello } from "./index" + +describe("<%= projectName %>", () => { + describe("hello", () => { + it("should return a greeting message", () => { + const result = hello() + expect(result).to.equal("Hello from <%= projectName %>") + }) + }) +}) diff --git a/tools/generators/package-scaffolder/files/src/index.ts__template__ b/tools/generators/package-scaffolder/files/src/index.ts__template__ new file mode 100644 index 0000000..63a395c --- /dev/null +++ b/tools/generators/package-scaffolder/files/src/index.ts__template__ @@ -0,0 +1,10 @@ +/** @format */ + +/** + * <%= description %> + * @module <%= projectName %> + */ + +export function hello(): string { + return "Hello from <%= projectName %>" +} diff --git a/tools/generators/package-scaffolder/files/tsconfig.json__template__ b/tools/generators/package-scaffolder/files/tsconfig.json__template__ new file mode 100644 index 0000000..a7b55ae --- /dev/null +++ b/tools/generators/package-scaffolder/files/tsconfig.json__template__ @@ -0,0 +1,7 @@ +{ + "extends": "@sshield/config/ts/base", + "compilerOptions": { + "rootDir": "." + }, + "exclude": ["node_modules", "dist"] +} diff --git a/tools/generators/package-scaffolder/files/tsconfig.lib.json__template__ b/tools/generators/package-scaffolder/files/tsconfig.lib.json__template__ new file mode 100644 index 0000000..8a9a297 --- /dev/null +++ b/tools/generators/package-scaffolder/files/tsconfig.lib.json__template__ @@ -0,0 +1,11 @@ +{ + "extends": "@sshield/config/ts/lib", + "compilerOptions": { + "outDir": "./dist", + "rootDir": "./src", + "declaration": true, + "types": ["node"] + }, + "include": ["src/**/*.ts"], + "exclude": ["node_modules", "dist", "**/*.spec.ts"] +} diff --git a/tools/generators/package-scaffolder/generator.json b/tools/generators/package-scaffolder/generator.json new file mode 100644 index 0000000..6ece260 --- /dev/null +++ b/tools/generators/package-scaffolder/generator.json @@ -0,0 +1,41 @@ +{ + "$schema": "http://json-schema.org/schema", + "cli": "nx", + "id": "package-scaffolder", + "description": "Scaffold a new SSHield package with configuration", + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Package name (without @sshield prefix)", + "$default": { + "$source": "argv", + "index": 0 + }, + "x-prompt": "What is the package name?" + }, + "description": { + "type": "string", + "description": "Package description", + "x-prompt": "What is the package description?" + }, + "directory": { + "type": "string", + "description": "Directory where the package should be created", + "default": "packages", + "enum": ["packages", "plugins"] + }, + "bundler": { + "type": "string", + "description": "Build bundler to use", + "default": "rollup", + "enum": ["rollup", "tsup", "tsc"] + }, + "addTests": { + "type": "boolean", + "description": "Add test setup with Mocha", + "default": true + } + }, + "required": ["name"] +} diff --git a/tools/generators/package-scaffolder/index.ts b/tools/generators/package-scaffolder/index.ts new file mode 100644 index 0000000..35ad341 --- /dev/null +++ b/tools/generators/package-scaffolder/index.ts @@ -0,0 +1,57 @@ +/** @format */ +import { + formatFiles, + generateFiles, + names, + offsetFromRoot, + Tree, +} from "@nx/devkit" +import * as path from "path" + +interface PackageScaffolderSchema { + name: string + description: string + directory: "packages" | "plugins" + bundler: "rollup" | "tsup" | "tsc" + addTests: boolean +} + +export default async function (tree: Tree, options: PackageScaffolderSchema) { + const normalizedOptions = normalizeOptions(tree, options) + addFiles(tree, normalizedOptions) + await formatFiles(tree) +} + +function normalizeOptions(_tree: Tree, options: PackageScaffolderSchema) { + const name = names(options.name).fileName + const projectDirectory = options.directory || "packages" + const projectName = `@sshield/${name}` + const projectRoot = `${projectDirectory}/${name}` + const parsedTags: string[] = [] + + return { + ...options, + projectName, + projectRoot, + projectDirectory, + parsedTags, + name, + offset: offsetFromRoot(projectRoot), + } +} + +function addFiles(tree: Tree, options: ReturnType) { + const templateOptions = { + ...options, + ...names(options.name), + offsetFromRoot: offsetFromRoot(options.projectRoot), + template: "", + } + + generateFiles( + tree, + path.join(__dirname, "files"), + options.projectRoot, + templateOptions, + ) +} diff --git a/tools/generators/package-scaffolder/schema.json b/tools/generators/package-scaffolder/schema.json new file mode 100644 index 0000000..289b765 --- /dev/null +++ b/tools/generators/package-scaffolder/schema.json @@ -0,0 +1,41 @@ +{ + "$schema": "http://json-schema.org/schema", + "$id": "PackageScaffolder", + "title": "SSHield Package Scaffolder", + "description": "Scaffold a new package with @sshield/config integration", + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Package name (without @sshield prefix)", + "$default": { + "$source": "argv", + "index": 0 + }, + "x-prompt": "What is the package name?" + }, + "description": { + "type": "string", + "description": "Package description", + "x-prompt": "What is the package description?" + }, + "directory": { + "type": "string", + "description": "Directory where the package should be created", + "default": "packages", + "enum": ["packages", "plugins"] + }, + "bundler": { + "type": "string", + "description": "Build bundler to use", + "default": "rollup", + "enum": ["rollup", "tsup", "tsc"] + }, + "addTests": { + "type": "boolean", + "description": "Add test setup with Mocha", + "default": true + } + }, + "required": ["name"] +} diff --git a/tools/generators/tsconfig.json b/tools/generators/tsconfig.json new file mode 100644 index 0000000..90f8439 --- /dev/null +++ b/tools/generators/tsconfig.json @@ -0,0 +1,113 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + + /* Language and Environment */ + "target": "es2020", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "jsx": "preserve", /* Specify what JSX code is generated. */ + // "libReplacement": true, /* Enable lib replacement. */ + // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ + // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "commonjs", /* Specify what module code is generated. */ + "rootDir": ".", /* Specify the root folder within your source files. */ + // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ + // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ + // "rewriteRelativeImportExtensions": true, /* Rewrite '.ts', '.tsx', '.mts', and '.cts' file extensions in relative import paths to their JavaScript equivalent in output files. */ + // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ + // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ + // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ + // "noUncheckedSideEffectImports": true, /* Check side effect imports. */ + // "resolveJsonModule": true, /* Enable importing .json files. */ + // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ + // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ + "outDir": "dist", /* Specify an output folder for all emitted files. */ + // "removeComments": true, /* Disable emitting comments. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ + // "isolatedDeclarations": true, /* Require sufficient annotation on exports so other tools can trivially generate declaration files. */ + // "erasableSyntaxOnly": true, /* Do not allow runtime constructs that are not part of ECMAScript. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + "strict": true, /* Enable all strict type-checking options. */ + // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "strictBuiltinIteratorReturn": true, /* Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'. */ + // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ + // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + } +} diff --git a/tools/scripts/README.md b/tools/scripts/README.md new file mode 100644 index 0000000..d17cbf8 --- /dev/null +++ b/tools/scripts/README.md @@ -0,0 +1,121 @@ +# SSHield Package Scaffolder + +A script to quickly scaffold new packages in the SSHield monorepo with proper @sshield/config integration. + +## Usage + +```bash +pnpm scaffold [options] +``` + +### Options + +- `--directory, -d `: Directory where the package should be created (`packages` or `plugins`) [default: `packages`] +- `--description `: Package description +- `--no-tests`: Skip test setup (Mocha configuration will not be created) + +### Examples + +```bash +# Create a new package in packages/ +pnpm scaffold my-package --description "My awesome package" + +# Create a new plugin +pnpm scaffold my-plugin --directory plugins --description "My plugin" + +# Create a package without tests +pnpm scaffold utils --description "Utility functions" --no-tests +``` + +## What Gets Created + +The scaffolder creates a complete package structure with: + +### Files + +- `package.json` - Package manifest with @sshield/config dependency +- `project.json` - Nx project configuration +- `tsconfig.json` - TypeScript config extending @sshield/config/ts/base +- `tsconfig.lib.json` - Library-specific TypeScript config +- `eslint.config.mjs` - ESLint config using @sshield/config +- `.prettierrc.json` - Prettier config extending @sshield/config +- `README.md` - Package documentation template +- `src/index.ts` - Main entry point with example code +- `.mocharc.json` - Mocha test configuration (if --no-tests not specified) +- `src/index.spec.ts` - Example test file (if --no-tests not specified) + +### Configuration Integration + +All scaffolded packages automatically use configurations from `@sshield/config`: + +- **TypeScript**: Extends base and lib configs for consistent compilation settings +- **ESLint**: Uses shared ESLint configuration +- **Prettier**: Uses shared code formatting rules +- **Mocha**: Uses shared test framework configuration +- **NYC**: Coverage configuration (when used) + +### Nx Integration + +Packages are automatically: + +- Discovered by Nx +- Added to the project graph +- Configured with build, lint, typecheck, and test targets +- Set up with proper caching + +## After Scaffolding + +1. Install dependencies: + ```bash + pnpm install + ``` + +2. Build the package: + ```bash + pnpm nx build @sshield/ + ``` + +3. Run tests: + ```bash + pnpm nx test @sshield/ + ``` + +4. Lint the code: + ```bash + pnpm nx lint @sshield/ + ``` + +## Package Naming + +- Package names are automatically converted to kebab-case +- The full package name will be `@sshield/` +- Use descriptive, lowercase names with hyphens + +## Directory Structure + +``` +packages// +├── src/ +│ ├── index.ts +│ └── index.spec.ts (if tests enabled) +├── package.json +├── project.json +├── tsconfig.json +├── tsconfig.lib.json +├── eslint.config.mjs +├── .prettierrc.json +├── .mocharc.json (if tests enabled) +└── README.md +``` + +## Customization + +After scaffolding, you can customize: + +- Add more dependencies to `package.json` +- Extend build configuration in `project.json` +- Add custom TypeScript compiler options (extends will merge) +- Add project-specific ESLint rules +- Modify test configuration + +All customizations will inherit base configurations from `@sshield/config`. diff --git a/tools/scripts/package-dist.mjs b/tools/scripts/package-dist.mjs new file mode 100755 index 0000000..c2231aa --- /dev/null +++ b/tools/scripts/package-dist.mjs @@ -0,0 +1,255 @@ +#!/usr/bin/env node +/** @format */ + +import fs from "node:fs"; +import path from "node:path"; +import { execSync } from "node:child_process"; +import { fileURLToPath } from "node:url"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +/** + * Package distribution script + * Creates .deb, .rpm, .apk, and PKGBUILD for different package managers + */ + +// Get package info from package.json +const packageJsonPath = path.join(process.cwd(), "package.json"); +const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf-8")); + +const PACKAGE_NAME = packageJson.name.replace("@sshield/", ""); +const PACKAGE_VERSION = packageJson.version; +const PACKAGE_DESCRIPTION = packageJson.description || "SSHield package"; +const BINARY_NAME = packageJson.bin + ? Object.keys(packageJson.bin)[0] + : PACKAGE_NAME; + +console.log(`📦 Packaging ${PACKAGE_NAME}@${PACKAGE_VERSION}...`); + +/** + * Generate nfpm.yaml configuration + */ +function generateNfpmYaml() { + const nfpmYaml = `# nfpm configuration for ${PACKAGE_NAME} +# https://nfpm.goreleaser.com/configuration/ + +name: ${PACKAGE_NAME} +arch: amd64 +platform: linux +version: ${PACKAGE_VERSION} +version_schema: semver + +section: utils +priority: optional + +maintainer: SSHield Team +description: ${PACKAGE_DESCRIPTION} +vendor: SSHield +homepage: https://github.com/shaiknoorullah/sshield +license: MIT + +contents: + - src: ./dist/${BINARY_NAME} + dst: /usr/bin/${BINARY_NAME} + type: file + file_info: + mode: 0755 + + - src: ./README.md + dst: /usr/share/doc/${PACKAGE_NAME}/README.md + type: doc + + - src: ./LICENSE + dst: /usr/share/doc/${PACKAGE_NAME}/LICENSE + type: license + +scripts: + postinstall: | + #!/bin/sh + echo "${PACKAGE_NAME} has been installed successfully!" + echo "Run '${BINARY_NAME} --help' to get started." + preremove: | + #!/bin/sh + echo "Removing ${PACKAGE_NAME}..." + +deb: + fields: + Recommends: openssh-client + +rpm: + group: Productivity/Networking/SSH +`; + + const nfpmPath = path.join(process.cwd(), "nfpm.yaml"); + fs.writeFileSync(nfpmPath, nfpmYaml, "utf-8"); + console.log(`✅ Generated nfpm.yaml`); + return nfpmPath; +} + +/** + * Generate PKGBUILD for Arch Linux + */ +function generatePkgbuild() { + const pkgbuild = `# Maintainer: SSHield Team + +pkgname=${PACKAGE_NAME} +pkgver=${PACKAGE_VERSION} +pkgrel=1 +pkgdesc='${PACKAGE_DESCRIPTION}' +arch=('x86_64' 'aarch64') +url='https://github.com/shaiknoorullah/sshield' +license=('MIT') +depends=() +makedepends=() +provides=('${PACKAGE_NAME}') +conflicts=('${PACKAGE_NAME}-bin') +source=("\${pkgname}-\${pkgver}.tar.gz::https://github.com/shaiknoorullah/sshield/releases/download/v\${pkgver}/\${pkgname}-\${pkgver}.tar.gz") +sha256sums=('SKIP') + +build() { + cd "\${srcdir}/\${pkgname}-\${pkgver}" + # Pre-built binaries, no build needed + true +} + +check() { + cd "\${srcdir}/\${pkgname}-\${pkgver}" + # Run tests if available + true +} + +package() { + cd "\${srcdir}/\${pkgname}-\${pkgver}" + + # Install binary + install -Dm755 "\${pkgname}" "\${pkgdir}/usr/bin/\${pkgname}" + + # Install documentation + install -Dm644 README.md "\${pkgdir}/usr/share/doc/\${pkgname}/README.md" + install -Dm644 LICENSE "\${pkgdir}/usr/share/licenses/\${pkgname}/LICENSE" +} +`; + + const pkgbuildPath = path.join(process.cwd(), "PKGBUILD"); + fs.writeFileSync(pkgbuildPath, pkgbuild, "utf-8"); + console.log(`✅ Generated PKGBUILD`); + return pkgbuildPath; +} + +/** + * Generate binary PKGBUILD for Arch Linux + */ +function generateBinaryPkgbuild() { + const pkgbuild = `# Maintainer: SSHield Team + +pkgname=${PACKAGE_NAME}-bin +pkgver=${PACKAGE_VERSION} +pkgrel=1 +pkgdesc='${PACKAGE_DESCRIPTION} (binary release)' +arch=('x86_64' 'aarch64') +url='https://github.com/shaiknoorullah/sshield' +license=('MIT') +depends=() +provides=('${PACKAGE_NAME}') +conflicts=('${PACKAGE_NAME}') +source_x86_64=("\${pkgname%-bin}-\${pkgver}-x86_64::https://github.com/shaiknoorullah/sshield/releases/download/v\${pkgver}/\${pkgname%-bin}-linux-x64") +source_aarch64=("\${pkgname%-bin}-\${pkgver}-aarch64::https://github.com/shaiknoorullah/sshield/releases/download/v\${pkgver}/\${pkgname%-bin}-linux-arm64") +sha256sums_x86_64=('SKIP') +sha256sums_aarch64=('SKIP') + +package() { + # Determine architecture + if [ "\${CARCH}" = "x86_64" ]; then + _binary="\${pkgname%-bin}-\${pkgver}-x86_64" + elif [ "\${CARCH}" = "aarch64" ]; then + _binary="\${pkgname%-bin}-\${pkgver}-aarch64" + fi + + # Install binary + install -Dm755 "\${srcdir}/\${_binary}" "\${pkgdir}/usr/bin/\${pkgname%-bin}" +} +`; + + const pkgbuildBinPath = path.join(process.cwd(), "PKGBUILD.bin"); + fs.writeFileSync(pkgbuildBinPath, pkgbuild, "utf-8"); + console.log(`✅ Generated PKGBUILD.bin (for binary distribution)`); + return pkgbuildBinPath; +} + +/** + * Build packages with nfpm + */ +function buildPackages(nfpmPath) { + // Check if nfpm is installed + try { + execSync("which nfpm", { stdio: "ignore" }); + } catch { + console.warn( + "⚠️ nfpm not found. Install it from https://nfpm.goreleaser.com/install/", + ); + console.warn( + " Skipping package generation. PKGBUILD files have been created.", + ); + return; + } + + // Create dist directory if it doesn't exist + const distDir = path.join(process.cwd(), "dist"); + if (!fs.existsSync(distDir)) { + fs.mkdirSync(distDir, { recursive: true }); + } + + try { + // Build .deb package + console.log("🔨 Building .deb package..."); + execSync(`nfpm package --packager deb --config ${nfpmPath}`, { + stdio: "inherit", + }); + console.log("✅ Built .deb package"); + + // Build .rpm package + console.log("🔨 Building .rpm package..."); + execSync(`nfpm package --packager rpm --config ${nfpmPath}`, { + stdio: "inherit", + }); + console.log("✅ Built .rpm package"); + + // Build .apk package (Alpine Linux) + console.log("🔨 Building .apk package..."); + execSync(`nfpm package --packager apk --config ${nfpmPath}`, { + stdio: "inherit", + }); + console.log("✅ Built .apk package"); + } catch (error) { + console.error("❌ Error building packages:", error.message); + } +} + +/** + * Main function + */ +function main() { + console.log("🚀 Starting package distribution...\n"); + + // Generate configurations + const nfpmPath = generateNfpmYaml(); + generatePkgbuild(); + generateBinaryPkgbuild(); + + console.log(""); + + // Build packages + buildPackages(nfpmPath); + + console.log("\n✨ Package distribution complete!"); + console.log("\nGenerated files:"); + console.log(" - nfpm.yaml (nfpm configuration)"); + console.log(" - PKGBUILD (Arch Linux source package)"); + console.log(" - PKGBUILD.bin (Arch Linux binary package)"); + console.log(" - dist/*.deb (Debian/Ubuntu package)"); + console.log(" - dist/*.rpm (Fedora/RHEL package)"); + console.log(" - dist/*.apk (Alpine Linux package)"); +} + +main(); diff --git a/tools/scripts/scaffold-package.mjs b/tools/scripts/scaffold-package.mjs new file mode 100755 index 0000000..34ac0a9 --- /dev/null +++ b/tools/scripts/scaffold-package.mjs @@ -0,0 +1,578 @@ +#!/usr/bin/env node +/** @format */ + +import * as fs from "fs" +import * as path from "path" +import { fileURLToPath } from "url" + +const __filename = fileURLToPath(import.meta.url) +const __dirname = path.dirname(__filename) + +const args = process.argv.slice(2) + +function parseArgs() { + const options = { + name: null, + description: "", + directory: "packages", + addTests: true, + } + + for (let i = 0; i < args.length; i++) { + const arg = args[i] + if (arg === "--directory" || arg === "-d") { + options.directory = args[++i] + } else if (arg === "--description" || arg === "--desc") { + options.description = args[++i] + } else if (arg === "--no-tests") { + options.addTests = false + } else if (!arg.startsWith("-")) { + options.name = arg + } + } + + if (!options.name) { + console.error("Error: Package name is required") + console.log("Usage: pnpm scaffold [options]") + console.log("Options:") + console.log(" --directory, -d Directory (packages|plugins) [default: packages]") + console.log(" --description Package description") + console.log(" --no-tests Skip test setup") + process.exit(1) + } + + return options +} + +function toPascalCase(str) { + return str + .split(/[-_]/) + .map((word) => word.charAt(0).toUpperCase() + word.slice(1)) + .join("") +} + +function toKebabCase(str) { + return str.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase() +} + +function scaffoldPackage(options) { + const name = toKebabCase(options.name) + const scope = "sshield" + const projectName = `@${scope}/${name}` + const projectRoot = path.join(process.cwd(), options.directory, name) + + console.log(`\nScaffolding ${projectName}...`) + console.log(`Directory: ${projectRoot}\n`) + + // Create directories + fs.mkdirSync(projectRoot, { recursive: true }) + fs.mkdirSync(path.join(projectRoot, "src"), { recursive: true }) + + // Create package.json + const packageJson = { + name: projectName, + version: "1.0.0", + description: options.description || `${projectName} package`, + type: "commonjs", + main: "dist/index.js", + types: "dist/index.d.ts", + scripts: { + build: "nx build", + "build:bundle": "nx bundle", + "build:binary": "nx pkg", + "build:package": "nx package", + test: "nx test", + "test:coverage": "nx coverage", + docs: "nx docs", + release: "nx release", + lint: "nx lint", + typecheck: "nx typecheck", + }, + dependencies: {}, + devDependencies: { + "@sshield/config": "workspace:^", + "@types/chai": "^4.3.20", + "@types/mocha": "^10.0.10", + "@types/node": "^18.19.120", + "@types/react": "^18.3.0", + "@yao-pkg/pkg": "^6.0.0", + "c8": "^10.1.2", + "chai": "^4.5.0", + "ink-testing-library": "^4.0.0", + "mocha": "^10.8.2", + "react": "^18.3.1", + "react-devtools-core": "^5.3.2", + "release-it": "^19.0.0", + "ts-mocha": "^10.0.0", + "ts-node": "^10.9.2", + "tsup": "^8.5.0", + "typedoc": "^0.28.0", + "typedoc-plugin-markdown": "^4.9.0", + }, + publishConfig: { + access: "public", + }, + } + + fs.writeFileSync( + path.join(projectRoot, "package.json"), + JSON.stringify(packageJson, null, 2), + ) + + // Create project.json + const projectJson = { + name: projectName, + $schema: `../../node_modules/nx/schemas/project-schema.json`, + sourceRoot: `${options.directory}/${name}/src`, + projectType: "library", + tags: [], + targets: { + build: { + executor: "@nx/js:tsc", + outputs: ["{options.outputPath}"], + cache: true, + options: { + outputPath: `${options.directory}/${name}/dist`, + main: `${options.directory}/${name}/src/index.ts`, + tsConfig: `${options.directory}/${name}/tsconfig.lib.json`, + assets: ["*.md"], + clean: true, + }, + }, + bundle: { + executor: "nx:run-commands", + options: { + command: `pnpm --filter @${scope}/${name} exec tsup --config tsup.config.ts`, + }, + }, + lint: { + executor: "@nx/eslint:lint", + outputs: ["{options.outputFile}"], + options: { + lintFilePatterns: [`${options.directory}/${name}/**/*.ts`], + }, + }, + }, + } + + if (options.addTests) { + projectJson.targets.test = { + executor: "nx:run-commands", + outputs: [], + options: { + command: `pnpm --filter @${scope}/${name} exec ts-mocha --config .mocharc.json`, + }, + } + + projectJson.targets.coverage = { + executor: "nx:run-commands", + outputs: [`${options.directory}/${name}/coverage`], + options: { + command: `pnpm --filter @${scope}/${name} exec c8 --config .c8rc.json ts-mocha --config .mocharc.json`, + }, + } + } + + // Add TypeDoc documentation target + projectJson.targets.docs = { + executor: "nx:run-commands", + options: { + command: `pnpm --filter @${scope}/${name} exec typedoc --options typedoc.json`, + }, + } + + // Add release-it target + projectJson.targets.release = { + executor: "nx:run-commands", + options: { + command: `pnpm --filter @${scope}/${name} exec release-it`, + }, + } + + // Add pkg target for binary building + projectJson.targets.pkg = { + executor: "nx:run-commands", + dependsOn: ["build"], + outputs: [`${options.directory}/${name}/bin`], + options: { + command: `pnpm --filter @${scope}/${name} exec pkg dist/index.js --config pkg.config.json --output bin/${name}`, + }, + } + + // Add package target for distribution packages (.deb, .rpm, PKGBUILD) + projectJson.targets.package = { + executor: "nx:run-commands", + dependsOn: ["pkg"], + outputs: [`${options.directory}/${name}/dist`], + options: { + command: `node ../../tools/scripts/package-dist.mjs`, + cwd: `${options.directory}/${name}`, + }, + } + + fs.writeFileSync( + path.join(projectRoot, "project.json"), + JSON.stringify(projectJson, null, 2), + ) + + // Create tsconfig.json + const tsconfigJson = { + extends: "../../config/ts/tsconfig.base.json", + compilerOptions: { + rootDir: ".", + }, + exclude: ["node_modules", "dist"], + } + + fs.writeFileSync( + path.join(projectRoot, "tsconfig.json"), + JSON.stringify(tsconfigJson, null, 2), + ) + + // Create tsconfig.lib.json + const tsconfigLibJson = { + extends: "../../config/ts/tsconfig.lib.json", + compilerOptions: { + outDir: "./dist", + rootDir: "./src", + declaration: true, + types: ["node"], + }, + include: ["src/**/*.ts"], + exclude: ["node_modules", "dist", "**/*.spec.ts"], + } + + fs.writeFileSync( + path.join(projectRoot, "tsconfig.lib.json"), + JSON.stringify(tsconfigLibJson, null, 2), + ) + + // Create tsconfig.spec.json for testing + const tsconfigSpecJson = { + extends: "../../config/ts/tsconfig.spec.json", + compilerOptions: { + outDir: "./dist-spec", + rootDir: ".", + types: ["mocha", "chai", "node"], + }, + include: ["src/**/*.ts"], + exclude: ["node_modules", "dist"], + } + + fs.writeFileSync( + path.join(projectRoot, "tsconfig.spec.json"), + JSON.stringify(tsconfigSpecJson, null, 2), + ) + + // Create eslint.config.mjs + const eslintConfig = `/** @format */ +import { eslintConfig } from "@sshield/config" + +export default [ + ...eslintConfig, + { + files: ["**/*.ts"], + languageOptions: { + parserOptions: { + project: "./tsconfig.json", + tsconfigRootDir: import.meta.dirname, + }, + }, + }, +] +` + + fs.writeFileSync(path.join(projectRoot, "eslint.config.mjs"), eslintConfig) + + // Create .prettierrc.json + const prettierConfig = { + extends: "@sshield/config/prettier", + } + + fs.writeFileSync( + path.join(projectRoot, ".prettierrc.json"), + JSON.stringify(prettierConfig, null, 2), + ) + + // Create src/index.ts + const indexTs = `/** @format */ + +/** + * ${options.description || projectName} + * @module ${projectName} + */ + +export function hello(): string { + return "Hello from ${projectName}" +} +` + + fs.writeFileSync(path.join(projectRoot, "src", "index.ts"), indexTs) + + // Create README.md + const readme = `# ${projectName} + +${options.description || projectName} + +## Installation + +\`\`\`bash +pnpm add ${projectName} +\`\`\` + +## Usage + +\`\`\`typescript +import { hello } from '${projectName}' + +console.log(hello()) +\`\`\` + +## Development + +\`\`\`bash +# Build (TypeScript compilation) +pnpm nx build ${projectName} + +# Build (Bundle with tsup) +pnpm nx bundle ${projectName} + +# Build binary executables +pnpm nx pkg ${projectName} + +# Test +pnpm nx test ${projectName} + +# Test with coverage +pnpm nx coverage ${projectName} + +# Lint +pnpm nx lint ${projectName} + +# Type check +pnpm nx typecheck ${projectName} +\`\`\` + +## Configuration + +This package uses shared configurations from \`@sshield/config\`: + +- **TypeScript**: Base and library configs +- **ESLint**: Linting rules +- **Prettier**: Code formatting +- **Mocha + Chai**: Testing framework +- **NYC**: Code coverage +- **TSup**: Bundling +- **pkg**: Binary building + +## License + +MIT +` + + fs.writeFileSync(path.join(projectRoot, "README.md"), readme) + + // Create tsup.config.ts + const tsupConfig = `/** @format */ +import { defineConfig } from "tsup" +import baseTsupConfig from "@sshield/config/tsup" + +export default defineConfig({ + ...baseTsupConfig, + entry: ["src/index.ts"], +}) +` + + fs.writeFileSync(path.join(projectRoot, "tsup.config.ts"), tsupConfig) + + // Create pkg.config.json + const pkgConfigJson = { + scripts: ["dist/**/*.js"], + assets: ["package.json", "dist/**/*.json", "dist/**/*.md"], + targets: [ + "node18-linux-x64", + "node18-linux-arm64", + "node18-macos-x64", + "node18-macos-arm64", + "node18-win-x64", + "node18-win-arm64", + ], + outputPath: "bin", + compress: "Brotli", + } + + fs.writeFileSync( + path.join(projectRoot, "pkg.config.json"), + JSON.stringify(pkgConfigJson, null, 2), + ) + + // Create typedoc.json for API documentation + const typedocConfig = { + entryPoints: ["src/index.ts"], + out: "../../docs/content/docs/api/" + name, + plugin: ["typedoc-plugin-markdown"], + readme: "README.md", + includeVersion: true, + categorizeByGroup: true, + defaultCategory: "Other", + categoryOrder: [ + "Classes", + "Interfaces", + "Type Aliases", + "Functions", + "Variables", + "*", + ], + sort: ["source-order", "required-first", "kind"], + exclude: [ + "**/*.spec.ts", + "**/*.test.ts", + "**/*.test.tsx", + "**/node_modules/**", + "**/dist/**", + ], + excludePrivate: true, + excludeProtected: false, + excludeInternal: true, + hideGenerator: true, + cleanOutputDir: true, + gitRevision: "main", + basePath: ".", + excludeExternals: true, + excludeNotDocumented: false, + } + + fs.writeFileSync( + path.join(projectRoot, "typedoc.json"), + JSON.stringify(typedocConfig, null, 2), + ) + + // Create .release-it.json for release management + const releaseItConfig = { + git: { + commit: true, + tag: true, + push: true, + commitMessage: `release: ${projectName}@\${version}`, + tagName: `${projectName}@\${version}`, + requireCleanWorkingDir: false, + requireUpstream: true, + addUntrackedFiles: false, + }, + npm: { + publish: true, + publishPath: ".", + skipChecks: false, + ignoreVersion: false, + }, + github: { + release: false, + }, + plugins: { + "@release-it/conventional-changelog": { + preset: { + name: "conventionalcommits", + }, + infile: "CHANGELOG.md", + header: "# Changelog", + }, + }, + hooks: { + "before:init": ["pnpm run build", "pnpm run test"], + "after:bump": "echo Successfully bumped version to ${version}", + }, + } + + fs.writeFileSync( + path.join(projectRoot, ".release-it.json"), + JSON.stringify(releaseItConfig, null, 2), + ) + + if (options.addTests) { + // Create .mocharc.json with embedded configuration + const mochaConfig = { + extensions: ["ts"], + spec: ["src/**/*.spec.ts", "src/**/*.test.ts"], + recursive: true, + timeout: 5000, + reporter: "spec", + color: true, + exit: true, + watchFiles: ["src/**/*.ts", "src/**/*.spec.ts", "src/**/*.test.ts"], + bail: false, + fullTrace: false, + checkLeaks: false, + } + + fs.writeFileSync( + path.join(projectRoot, ".mocharc.json"), + JSON.stringify(mochaConfig, null, 2), + ) + + // Create .c8rc.json for code coverage + const c8Config = { + all: true, + "check-coverage": true, + lines: 90, + functions: 90, + branches: 90, + statements: 90, + include: ["src/**/*.ts", "src/**/*.tsx"], + exclude: [ + "**/*.spec.ts", + "**/*.test.ts", + "**/*.test.tsx", + "**/*.d.ts", + "**/node_modules/**", + "**/dist/**", + "**/coverage/**", + "**/*.config.ts", + "**/*.config.js", + ], + extension: [".ts", ".tsx"], + reporter: ["text", "lcov", "html", "json-summary"], + "report-dir": "./coverage", + "temp-directory": "./.c8", + clean: true, + "skip-full": false, + src: ["src"], + "exclude-after-remap": true, + } + + fs.writeFileSync( + path.join(projectRoot, ".c8rc.json"), + JSON.stringify(c8Config, null, 2), + ) + + // Create src/index.spec.ts + const indexSpecTs = `/** @format */ +import { describe, it } from "mocha" +import { expect } from "chai" +import { hello } from "./index" + +describe("${projectName}", () => { + describe("hello", () => { + it("should return a greeting message", () => { + const result = hello() + expect(result).to.equal("Hello from ${projectName}") + }) + }) +}) +` + + fs.writeFileSync( + path.join(projectRoot, "src", "index.spec.ts"), + indexSpecTs, + ) + } + + console.log(`✅ Successfully scaffolded ${projectName}`) + console.log(`\nNext steps:`) + console.log(` 1. cd ${options.directory}/${name}`) + console.log(` 2. pnpm install`) + console.log(` 3. pnpm nx build ${projectName}`) + console.log(``) +} + +const options = parseArgs() +scaffoldPackage(options) diff --git a/tools/scripts/tsconfig.json b/tools/scripts/tsconfig.json new file mode 100644 index 0000000..b821c24 --- /dev/null +++ b/tools/scripts/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "module": "esnext", + "target": "es2020", + "lib": ["ES2020"], + "moduleResolution": "bundler", + "types": ["node"] + }, + "include": ["**/*.ts"], + "exclude": ["node_modules"] +} diff --git a/tools/scripts/typedoc-to-fuma.ts b/tools/scripts/typedoc-to-fuma.ts new file mode 100644 index 0000000..7d43f36 --- /dev/null +++ b/tools/scripts/typedoc-to-fuma.ts @@ -0,0 +1,147 @@ +#!/usr/bin/env node +/** @format */ + +import fs from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +/** + * TypeDoc to Fuma-docs converter + * Processes TypeDoc-generated Markdown files to be compatible with Fuma-docs + */ + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +const DOCS_API_DIR = path.join(__dirname, "../../docs/content/docs/api"); + +interface FumaMeta { + title: string; + description?: string; +} + +/** + * Process a single Markdown file to add Fuma-docs frontmatter + */ +function processMarkdownFile(filePath: string): void { + try { + const content = fs.readFileSync(filePath, "utf-8"); + + // Skip if already has frontmatter + if (content.startsWith("---")) { + console.log( + `⏭️ Skipping ${path.basename(filePath)} (already processed)`, + ); + return; + } + + // Extract title from first heading + const titleMatch = content.match(/^#\s+(.+)$/m); + const title = titleMatch ? titleMatch[1] : path.basename(filePath, ".mdx"); + + // Create frontmatter + const frontmatter: FumaMeta = { + title, + description: `API documentation for ${title}`, + }; + + const frontmatterStr = `--- +title: "${frontmatter.title}" +description: "${frontmatter.description}" +--- + +`; + + // Write updated content + const updatedContent = frontmatterStr + content; + fs.writeFileSync(filePath, updatedContent, "utf-8"); + + console.log(`✅ Processed ${path.basename(filePath)}`); + } catch (error) { + console.error(`❌ Error processing ${filePath}:`, error); + } +} + +/** + * Recursively process all Markdown files in a directory + */ +function processDirectory(dirPath: string): void { + if (!fs.existsSync(dirPath)) { + console.log(`📁 Directory ${dirPath} does not exist yet`); + return; + } + + const entries = fs.readdirSync(dirPath, { withFileTypes: true }); + + for (const entry of entries) { + const fullPath = path.join(dirPath, entry.name); + + if (entry.isDirectory()) { + processDirectory(fullPath); + } else if ( + entry.isFile() && + (entry.name.endsWith(".md") || entry.name.endsWith(".mdx")) + ) { + processMarkdownFile(fullPath); + } + } +} + +/** + * Create meta.json files for Fuma-docs navigation + */ +function createMetaFiles(dirPath: string): void { + if (!fs.existsSync(dirPath)) { + return; + } + + const entries = fs.readdirSync(dirPath, { withFileTypes: true }); + const pages: string[] = []; + + for (const entry of entries) { + const fullPath = path.join(dirPath, entry.name); + + if (entry.isDirectory()) { + pages.push(entry.name); + createMetaFiles(fullPath); // Recursively create meta files + } else if (entry.isFile() && entry.name.endsWith(".mdx")) { + const pageName = path.basename(entry.name, ".mdx"); + if (pageName !== "index") { + pages.push(pageName); + } + } + } + + if (pages.length > 0) { + const metaPath = path.join(dirPath, "meta.json"); + const meta = { + pages: pages.sort(), + }; + fs.writeFileSync(metaPath, JSON.stringify(meta, null, 2), "utf-8"); + console.log(`📝 Created ${metaPath}`); + } +} + +/** + * Main function + */ +function main() { + console.log("🚀 Starting TypeDoc to Fuma-docs conversion..."); + console.log(`📂 Processing directory: ${DOCS_API_DIR}`); + + // Process all Markdown files + processDirectory(DOCS_API_DIR); + + // Create meta.json files for navigation + console.log("\n📋 Creating meta.json files..."); + createMetaFiles(DOCS_API_DIR); + + console.log("\n✨ Conversion complete!"); +} + +// Run if executed directly +if (import.meta.url === `file://${process.argv[1]}`) { + main(); +} + +export { processMarkdownFile, processDirectory, createMetaFiles }; diff --git a/tsconfig.json b/tsconfig.json index 41f5bd5..4c1d185 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,27 +1,28 @@ { - "compilerOptions": { - "target": "ES2020", - "module": "commonjs", - "lib": [ - "ES2020" - ], - "declaration": true, - "outDir": "dist", - "rootDir": "src", - "strict": true, - "esModuleInterop": true, - "skipLibCheck": true, - "forceConsistentCasingInFileNames": true, - "resolveJsonModule": true, - "moduleResolution": "node", - "sourceMap": true - }, - "include": [ - "src/**/*" - ], + "compilerOptions": { + "target": "es2015", + "rootDir": ".", + "module": "commonjs", + "lib": ["ES2020"], + "moduleResolution": "node", + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "importHelpers": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "forceConsistentCasingInFileNames": true, + "skipLibCheck": true, + "skipDefaultLibCheck": true + }, "exclude": [ "node_modules", - "**/*.test.ts", - "dist" - ] -} \ No newline at end of file + "dist", + "coverage", + "tools/scripts/**/*.ts", + "docs" + ], + "references": [] +}