diff --git a/.vscode/mcp.json b/.vscode/mcp.json
index 69d970f..f8f67db 100644
--- a/.vscode/mcp.json
+++ b/.vscode/mcp.json
@@ -23,4 +23,4 @@
}
}
}
-}
\ No newline at end of file
+}
diff --git a/README.md b/README.md
index 62ca288..f45cb31 100644
--- a/README.md
+++ b/README.md
@@ -80,16 +80,56 @@ import { transactionService } from '../../../../data/db.service';
### Enforcing Path Aliases with Biome.js
-This project uses [Biome.js](https://biomejs.dev/) for code formatting and linting. Biome enforces the use of path aliases instead of relative imports. To run Biome checks:
+This project uses [Biome.js](https://biomejs.dev/) for code formatting and linting. Biome enforces the use of path aliases instead of relative imports.
+## Code Quality Tools
+
+This project uses Biome.js for maintaining code quality, formatting, and linting. Biome provides fast, reliable tooling for JavaScript and TypeScript projects.
+
+### Available Commands
+
+#### Quick Commands (via npm scripts):
```bash
+# Format all files (fixes formatting only)
+npm run format
+
+# Lint all files (shows issues without fixing)
+npm run lint
+
+# Check and fix all auto-fixable issues (recommended)
npm run check
```
-To automatically fix issues:
-
+#### Direct Biome Commands:
```bash
-npm run check -- --apply
+# Format with write
+npx biome format --write .
+
+# Lint only (no fixes)
+npx biome lint .
+
+# Check and apply safe fixes
+npx biome check --write .
+
+# Check and apply all fixes (including unsafe ones)
+npx biome check --write --unsafe .
```
-The Biome configuration (in `biome.json`) includes rules for import sorting and path alias enforcement. To customize the rules, edit the `biome.json` file.
\ No newline at end of file
+### What Biome.js Enforces:
+
+- **Path Aliases**: Enforces use of `@components/*`, `@types`, etc. instead of relative imports
+- **Node.js Import Protocols**: Requires `node:path` instead of `path` for Node.js built-ins
+- **Code Formatting**: Consistent indentation, quotes, semicolons, and line width (100 chars)
+- **Import Organization**: Automatic sorting and organization of imports
+- **TypeScript Best Practices**: Warns about `any` types, unused imports, excessive complexity
+
+### Pre-commit Hooks
+
+This project uses Husky for Git hooks. Biome.js checks run automatically before commits to ensure code quality.
+
+### Configuration
+
+Biome.js configuration is in `biome.json`. Key settings:
+- **Formatter**: 2-space indentation, single quotes, 100-character line width
+- **Linter**: Recommended rules plus custom rules for path aliases and Node.js protocols
+- **Ignored Files**: `dist/`, `node_modules/`, coverage reports
\ No newline at end of file
diff --git a/astro.config.mjs b/astro.config.mjs
deleted file mode 100644
index b338785..0000000
--- a/astro.config.mjs
+++ /dev/null
@@ -1,36 +0,0 @@
-// @ts-check
-import { defineConfig } from 'astro/config';
-
-import node from '@astrojs/node';
-
-import react from '@astrojs/react';
-
-// https://astro.build/config
-export default defineConfig({
- output: 'server',
- adapter: node({
- mode: 'standalone',
- }),
- integrations: [react()],
- vite: {
- resolve: {
- alias: {
- '@': '/src',
- '@components': '/src/components',
- '@layouts': '/src/layouts',
- '@data': '/src/data',
- '@pages': '/src/pages',
- '@styles': '/src/styles',
- '@stores': '/src/stores',
- '@utils': '/src/utils',
- '@types': '/src/types.ts',
- // Use the browser version of react-dom/server for client-side rendering
- 'react-dom/server.browser': 'react-dom/cjs/react-dom-server.browser.production.min.js',
- },
- },
- // Prevent server-only modules from being bundled for client side
- ssr: {
- noExternal: ['react-dom/server'],
- },
- },
-});
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..ccd03c3
--- /dev/null
+++ b/index.html
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+ Finance App
+
+
+
+
+
+
+
+
+
diff --git a/package-lock.json b/package-lock.json
index af900e3..6e46419 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -8,9 +8,6 @@
"name": "finance",
"version": "0.0.1",
"dependencies": {
- "@astrojs/cloudflare": "^12.5.3",
- "@astrojs/node": "^9.2.2",
- "@astrojs/react": "^4.3.0",
"@fortawesome/fontawesome-free": "^6.7.2",
"@nanostores/react": "^1.0.0",
"@prisma/client": "^6.8.2",
@@ -21,27 +18,35 @@
"@radix-ui/react-toast": "^1.2.14",
"@types/react": "^19.1.5",
"@types/react-dom": "^19.1.5",
- "astro": "^5.8.0",
+ "cors": "^2.8.5",
+ "dotenv": "^16.5.0",
+ "express": "^4.21.2",
"nanostores": "^1.0.1",
"react": "^19.1.0",
- "react-dom": "^19.1.0"
+ "react-dom": "^19.1.0",
+ "react-router-dom": "^6.23.0"
},
"devDependencies": {
"@biomejs/biome": "^1.9.4",
"@testing-library/dom": "^10.4.0",
"@testing-library/jest-dom": "^6.6.3",
"@testing-library/react": "^16.3.0",
+ "@types/cors": "^2.8.17",
+ "@types/express": "^5.0.0",
"@types/node": "^22.15.21",
"@types/supertest": "^6.0.3",
"@vitejs/plugin-react": "^4.5.0",
"@vitest/coverage-v8": "^3.1.4",
+ "concurrently": "^8.2.2",
"husky": "^9.1.7",
"jsdom": "^26.1.0",
"prisma": "^6.8.2",
"supertest": "^7.1.1",
"ts-node": "^10.9.2",
- "vitest": "^3.1.4",
- "wrangler": "^4.16.1"
+ "tsx": "^4.7.1",
+ "typescript": "^5.7.3",
+ "vite": "^5.2.0",
+ "vitest": "^3.1.4"
}
},
"node_modules/@adobe/css-tools": {
@@ -51,6 +56,7 @@
},
"node_modules/@ampproject/remapping": {
"version": "2.3.0",
+ "dev": true,
"license": "Apache-2.0",
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.5",
@@ -77,130 +83,9 @@
"dev": true,
"license": "ISC"
},
- "node_modules/@astrojs/cloudflare": {
- "version": "12.5.3",
- "resolved": "https://registry.npmjs.org/@astrojs/cloudflare/-/cloudflare-12.5.3.tgz",
- "integrity": "sha512-QYA6gkF+s3LpDNT0KoURgJeByjiSvUABK1VXBpi9yzqUQfWm3kSAtn0aBXX8EkRlE5UaJ0CkArizfgfqr9zBhA==",
- "license": "MIT",
- "dependencies": {
- "@astrojs/internal-helpers": "0.6.1",
- "@astrojs/underscore-redirects": "0.6.1",
- "@cloudflare/workers-types": "^4.20250507.0",
- "tinyglobby": "^0.2.13",
- "vite": "^6.3.5",
- "wrangler": "^4.14.1"
- },
- "peerDependencies": {
- "astro": "^5.0.0"
- }
- },
- "node_modules/@astrojs/compiler": {
- "version": "2.12.0",
- "license": "MIT"
- },
- "node_modules/@astrojs/internal-helpers": {
- "version": "0.6.1",
- "license": "MIT"
- },
- "node_modules/@astrojs/markdown-remark": {
- "version": "6.3.2",
- "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-6.3.2.tgz",
- "integrity": "sha512-bO35JbWpVvyKRl7cmSJD822e8YA8ThR/YbUsciWNA7yTcqpIAL2hJDToWP5KcZBWxGT6IOdOkHSXARSNZc4l/Q==",
- "license": "MIT",
- "dependencies": {
- "@astrojs/internal-helpers": "0.6.1",
- "@astrojs/prism": "3.3.0",
- "github-slugger": "^2.0.0",
- "hast-util-from-html": "^2.0.3",
- "hast-util-to-text": "^4.0.2",
- "import-meta-resolve": "^4.1.0",
- "js-yaml": "^4.1.0",
- "mdast-util-definitions": "^6.0.0",
- "rehype-raw": "^7.0.0",
- "rehype-stringify": "^10.0.1",
- "remark-gfm": "^4.0.1",
- "remark-parse": "^11.0.0",
- "remark-rehype": "^11.1.2",
- "remark-smartypants": "^3.0.2",
- "shiki": "^3.2.1",
- "smol-toml": "^1.3.1",
- "unified": "^11.0.5",
- "unist-util-remove-position": "^5.0.0",
- "unist-util-visit": "^5.0.0",
- "unist-util-visit-parents": "^6.0.1",
- "vfile": "^6.0.3"
- }
- },
- "node_modules/@astrojs/node": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/@astrojs/node/-/node-9.2.2.tgz",
- "integrity": "sha512-PtLPuuojmcl9O3CEvXqL/D+wB4x5DlbrGOvP0MeTAh/VfKFprYAzgw1+45xsnTO+QvPWb26l1cT+ZQvvohmvMw==",
- "license": "MIT",
- "dependencies": {
- "@astrojs/internal-helpers": "0.6.1",
- "send": "^1.2.0",
- "server-destroy": "^1.0.1"
- },
- "peerDependencies": {
- "astro": "^5.3.0"
- }
- },
- "node_modules/@astrojs/prism": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-3.3.0.tgz",
- "integrity": "sha512-q8VwfU/fDZNoDOf+r7jUnMC2//H2l0TuQ6FkGJL8vD8nw/q5KiL3DS1KKBI3QhI9UQhpJ5dc7AtqfbXWuOgLCQ==",
- "license": "MIT",
- "dependencies": {
- "prismjs": "^1.30.0"
- },
- "engines": {
- "node": "18.20.8 || ^20.3.0 || >=22.0.0"
- }
- },
- "node_modules/@astrojs/react": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/@astrojs/react/-/react-4.3.0.tgz",
- "integrity": "sha512-N02aj52Iezn69qHyx5+XvPqgsPMEnel9mI5JMbGiRMTzzLMuNaxRVoQTaq2024Dpr7BLsxCjqMkNvelqMDhaHA==",
- "license": "MIT",
- "dependencies": {
- "@vitejs/plugin-react": "^4.4.1",
- "ultrahtml": "^1.6.0",
- "vite": "^6.3.5"
- },
- "engines": {
- "node": "18.20.8 || ^20.3.0 || >=22.0.0"
- },
- "peerDependencies": {
- "@types/react": "^17.0.50 || ^18.0.21 || ^19.0.0",
- "@types/react-dom": "^17.0.17 || ^18.0.6 || ^19.0.0",
- "react": "^17.0.2 || ^18.0.0 || ^19.0.0",
- "react-dom": "^17.0.2 || ^18.0.0 || ^19.0.0"
- }
- },
- "node_modules/@astrojs/telemetry": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.3.0.tgz",
- "integrity": "sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ==",
- "license": "MIT",
- "dependencies": {
- "ci-info": "^4.2.0",
- "debug": "^4.4.0",
- "dlv": "^1.1.3",
- "dset": "^3.1.4",
- "is-docker": "^3.0.0",
- "is-wsl": "^3.1.0",
- "which-pm-runs": "^1.1.0"
- },
- "engines": {
- "node": "18.20.8 || ^20.3.0 || >=22.0.0"
- }
- },
- "node_modules/@astrojs/underscore-redirects": {
- "version": "0.6.1",
- "license": "MIT"
- },
"node_modules/@babel/code-frame": {
"version": "7.27.1",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-validator-identifier": "^7.27.1",
@@ -213,6 +98,7 @@
},
"node_modules/@babel/compat-data": {
"version": "7.27.2",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
@@ -220,6 +106,7 @@
},
"node_modules/@babel/core": {
"version": "7.27.1",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@ampproject/remapping": "^2.2.0",
@@ -248,6 +135,7 @@
},
"node_modules/@babel/generator": {
"version": "7.27.1",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@babel/parser": "^7.27.1",
@@ -262,6 +150,7 @@
},
"node_modules/@babel/helper-compilation-targets": {
"version": "7.27.2",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@babel/compat-data": "^7.27.2",
@@ -276,6 +165,7 @@
},
"node_modules/@babel/helper-module-imports": {
"version": "7.27.1",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@babel/traverse": "^7.27.1",
@@ -287,6 +177,7 @@
},
"node_modules/@babel/helper-module-transforms": {
"version": "7.27.1",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-module-imports": "^7.27.1",
@@ -302,6 +193,7 @@
},
"node_modules/@babel/helper-plugin-utils": {
"version": "7.27.1",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
@@ -309,6 +201,7 @@
},
"node_modules/@babel/helper-string-parser": {
"version": "7.27.1",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
@@ -316,6 +209,7 @@
},
"node_modules/@babel/helper-validator-identifier": {
"version": "7.27.1",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
@@ -323,6 +217,7 @@
},
"node_modules/@babel/helper-validator-option": {
"version": "7.27.1",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
@@ -330,6 +225,7 @@
},
"node_modules/@babel/helpers": {
"version": "7.27.1",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@babel/template": "^7.27.1",
@@ -341,6 +237,7 @@
},
"node_modules/@babel/parser": {
"version": "7.27.2",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@babel/types": "^7.27.1"
@@ -354,6 +251,7 @@
},
"node_modules/@babel/plugin-transform-react-jsx-self": {
"version": "7.27.1",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.27.1"
@@ -367,6 +265,7 @@
},
"node_modules/@babel/plugin-transform-react-jsx-source": {
"version": "7.27.1",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.27.1"
@@ -388,6 +287,7 @@
},
"node_modules/@babel/template": {
"version": "7.27.2",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.27.1",
@@ -400,6 +300,7 @@
},
"node_modules/@babel/traverse": {
"version": "7.27.1",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.27.1",
@@ -416,6 +317,7 @@
},
"node_modules/@babel/types": {
"version": "7.27.1",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-string-parser": "^7.27.1",
@@ -593,136 +495,9 @@
"node": ">=14.21.3"
}
},
- "node_modules/@capsizecss/unpack": {
- "version": "2.4.0",
- "license": "MIT",
- "dependencies": {
- "blob-to-buffer": "^1.2.8",
- "cross-fetch": "^3.0.4",
- "fontkit": "^2.0.2"
- }
- },
- "node_modules/@cloudflare/kv-asset-handler": {
- "version": "0.4.0",
- "license": "MIT OR Apache-2.0",
- "dependencies": {
- "mime": "^3.0.0"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@cloudflare/kv-asset-handler/node_modules/mime": {
- "version": "3.0.0",
- "license": "MIT",
- "bin": {
- "mime": "cli.js"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/@cloudflare/unenv-preset": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/@cloudflare/unenv-preset/-/unenv-preset-2.3.2.tgz",
- "integrity": "sha512-MtUgNl+QkQyhQvv5bbWP+BpBC1N0me4CHHuP2H4ktmOMKdB/6kkz/lo+zqiA4mEazb4y+1cwyNjVrQ2DWeE4mg==",
- "license": "MIT OR Apache-2.0",
- "peerDependencies": {
- "unenv": "2.0.0-rc.17",
- "workerd": "^1.20250508.0"
- },
- "peerDependenciesMeta": {
- "workerd": {
- "optional": true
- }
- }
- },
- "node_modules/@cloudflare/workerd-darwin-64": {
- "version": "1.20250508.0",
- "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20250508.0.tgz",
- "integrity": "sha512-9x09MrA9Y5RQs3zqWvWns8xHgM2pVNXWpeJ+3hQYu4PrwPFZXtTD6b/iMmOnlYKzINlREq1RGeEybMFyWEUlUg==",
- "cpu": [
- "x64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=16"
- }
- },
- "node_modules/@cloudflare/workerd-darwin-arm64": {
- "version": "1.20250508.0",
- "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20250508.0.tgz",
- "integrity": "sha512-0Ili+nE2LLRzYue/yPc1pepSyNNg6LxR3/ng/rlQzVQUxPXIXldHFkJ/ynsYwQnAcf6OxasSi/kbTm6yvDoSAQ==",
- "cpu": [
- "arm64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=16"
- }
- },
- "node_modules/@cloudflare/workerd-linux-64": {
- "version": "1.20250508.0",
- "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20250508.0.tgz",
- "integrity": "sha512-5saVrZ3uVwYxvBa7BaonXjeqB6X0YF3ak05qvBaWcmZ3FNmnarMm2W8842cnbhnckDVBpB/iDo51Sy6Y7y1jcw==",
- "cpu": [
- "x64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=16"
- }
- },
- "node_modules/@cloudflare/workerd-linux-arm64": {
- "version": "1.20250508.0",
- "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20250508.0.tgz",
- "integrity": "sha512-muQe1pkxRi3eaq1Q417xvfGd2SlktbLTzNhT5Yftsx8OecWrYuB8i4ttR6Nr5ER06bfEj0FqQjqJJhcp6wLLUQ==",
- "cpu": [
- "arm64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=16"
- }
- },
- "node_modules/@cloudflare/workerd-windows-64": {
- "version": "1.20250508.0",
- "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20250508.0.tgz",
- "integrity": "sha512-EJj8iTWFMqjgvZUxxNvzK7frA1JMFi3y/9eDIdZPL/OaQh3cmk5Lai5DCXsKYUxfooMBZWYTp53zOLrvuJI8VQ==",
- "cpu": [
- "x64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=16"
- }
- },
- "node_modules/@cloudflare/workers-types": {
- "version": "4.20250517.0",
- "license": "MIT OR Apache-2.0"
- },
"node_modules/@cspotcode/source-map-support": {
"version": "0.8.1",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/trace-mapping": "0.3.9"
@@ -733,6 +508,7 @@
},
"node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": {
"version": "0.3.9",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/resolve-uri": "^3.0.3",
@@ -844,12 +620,276 @@
"node": ">=18"
}
},
- "node_modules/@emnapi/runtime": {
- "version": "1.4.3",
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
+ "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
"license": "MIT",
"optional": true,
- "dependencies": {
- "tslib": "^2.4.0"
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
+ "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
+ "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
+ "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
+ "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
+ "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
+ "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
+ "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
+ "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
+ "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
+ "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
+ "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
+ "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
+ "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
+ "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
+ "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
}
},
"node_modules/@esbuild/linux-x64": {
@@ -857,6 +897,7 @@
"cpu": [
"x64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -866,13 +907,106 @@
"node": ">=18"
}
},
- "node_modules/@fastify/busboy": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz",
- "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==",
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
+ "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
"license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
"engines": {
- "node": ">=14"
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
+ "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
+ "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
+ "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
+ "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
+ "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
}
},
"node_modules/@floating-ui/core": {
@@ -922,40 +1056,6 @@
"node": ">=6"
}
},
- "node_modules/@img/sharp-libvips-linux-x64": {
- "version": "1.0.4",
- "cpu": [
- "x64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-linux-x64": {
- "version": "0.33.5",
- "cpu": [
- "x64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linux-x64": "1.0.4"
- }
- },
"node_modules/@isaacs/cliui": {
"version": "8.0.2",
"dev": true,
@@ -1030,6 +1130,7 @@
},
"node_modules/@jridgewell/gen-mapping": {
"version": "0.3.8",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/set-array": "^1.2.1",
@@ -1042,6 +1143,7 @@
},
"node_modules/@jridgewell/resolve-uri": {
"version": "3.1.2",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=6.0.0"
@@ -1049,6 +1151,7 @@
},
"node_modules/@jridgewell/set-array": {
"version": "1.2.1",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=6.0.0"
@@ -1056,10 +1159,12 @@
},
"node_modules/@jridgewell/sourcemap-codec": {
"version": "1.5.0",
+ "dev": true,
"license": "MIT"
},
"node_modules/@jridgewell/trace-mapping": {
"version": "0.3.25",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/resolve-uri": "^3.1.0",
@@ -1094,10 +1199,6 @@
"url": "https://paulmillr.com/funding/"
}
},
- "node_modules/@oslojs/encoding": {
- "version": "1.1.0",
- "license": "MIT"
- },
"node_modules/@paralleldrive/cuid2": {
"version": "2.2.2",
"dev": true,
@@ -1898,34 +1999,20 @@
"integrity": "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==",
"license": "MIT"
},
+ "node_modules/@remix-run/router": {
+ "version": "1.23.0",
+ "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.23.0.tgz",
+ "integrity": "sha512-O3rHJzAQKamUz1fvE0Qaw0xSFqsA/yafi2iqeE0pvdFtCO1viYx8QL6f3Ln/aCCTLxs68SLf0KPM9eSeM8yBnA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
"node_modules/@rolldown/pluginutils": {
"version": "1.0.0-beta.9",
"resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.9.tgz",
"integrity": "sha512-e9MeMtVWo186sgvFFJOPGy7/d2j2mZhLJIdVW0C/xDluuOvymEATqz6zKsP0ZmXGzQtqlyjz5sC1sYQUoJG98w==",
- "license": "MIT"
- },
- "node_modules/@rollup/pluginutils": {
- "version": "5.1.4",
- "license": "MIT",
- "dependencies": {
- "@types/estree": "^1.0.0",
- "estree-walker": "^2.0.2",
- "picomatch": "^4.0.2"
- },
- "engines": {
- "node": ">=14.0.0"
- },
- "peerDependencies": {
- "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
- },
- "peerDependenciesMeta": {
- "rollup": {
- "optional": true
- }
- }
- },
- "node_modules/@rollup/pluginutils/node_modules/estree-walker": {
- "version": "2.0.2",
+ "dev": true,
"license": "MIT"
},
"node_modules/@rollup/rollup-linux-x64-gnu": {
@@ -1933,86 +2020,13 @@
"cpu": [
"x64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
]
},
- "node_modules/@shikijs/core": {
- "version": "3.4.2",
- "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.4.2.tgz",
- "integrity": "sha512-AG8vnSi1W2pbgR2B911EfGqtLE9c4hQBYkv/x7Z+Kt0VxhgQKcW7UNDVYsu9YxwV6u+OJrvdJrMq6DNWoBjihQ==",
- "license": "MIT",
- "dependencies": {
- "@shikijs/types": "3.4.2",
- "@shikijs/vscode-textmate": "^10.0.2",
- "@types/hast": "^3.0.4",
- "hast-util-to-html": "^9.0.5"
- }
- },
- "node_modules/@shikijs/engine-javascript": {
- "version": "3.4.2",
- "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.4.2.tgz",
- "integrity": "sha512-1/adJbSMBOkpScCE/SB6XkjJU17ANln3Wky7lOmrnpl+zBdQ1qXUJg2GXTYVHRq+2j3hd1DesmElTXYDgtfSOQ==",
- "license": "MIT",
- "dependencies": {
- "@shikijs/types": "3.4.2",
- "@shikijs/vscode-textmate": "^10.0.2",
- "oniguruma-to-es": "^4.3.3"
- }
- },
- "node_modules/@shikijs/engine-oniguruma": {
- "version": "3.4.2",
- "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.4.2.tgz",
- "integrity": "sha512-zcZKMnNndgRa3ORja6Iemsr3DrLtkX3cAF7lTJkdMB6v9alhlBsX9uNiCpqofNrXOvpA3h6lHcLJxgCIhVOU5Q==",
- "license": "MIT",
- "dependencies": {
- "@shikijs/types": "3.4.2",
- "@shikijs/vscode-textmate": "^10.0.2"
- }
- },
- "node_modules/@shikijs/langs": {
- "version": "3.4.2",
- "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.4.2.tgz",
- "integrity": "sha512-H6azIAM+OXD98yztIfs/KH5H4PU39t+SREhmM8LaNXyUrqj2mx+zVkr8MWYqjceSjDw9I1jawm1WdFqU806rMA==",
- "license": "MIT",
- "dependencies": {
- "@shikijs/types": "3.4.2"
- }
- },
- "node_modules/@shikijs/themes": {
- "version": "3.4.2",
- "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.4.2.tgz",
- "integrity": "sha512-qAEuAQh+brd8Jyej2UDDf+b4V2g1Rm8aBIdvt32XhDPrHvDkEnpb7Kzc9hSuHUxz0Iuflmq7elaDuQAP9bHIhg==",
- "license": "MIT",
- "dependencies": {
- "@shikijs/types": "3.4.2"
- }
- },
- "node_modules/@shikijs/types": {
- "version": "3.4.2",
- "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.4.2.tgz",
- "integrity": "sha512-zHC1l7L+eQlDXLnxvM9R91Efh2V4+rN3oMVS2swCBssbj2U/FBwybD1eeLaq8yl/iwT+zih8iUbTBCgGZOYlVg==",
- "license": "MIT",
- "dependencies": {
- "@shikijs/vscode-textmate": "^10.0.2",
- "@types/hast": "^3.0.4"
- }
- },
- "node_modules/@shikijs/vscode-textmate": {
- "version": "10.0.2",
- "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz",
- "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==",
- "license": "MIT"
- },
- "node_modules/@swc/helpers": {
- "version": "0.5.17",
- "license": "Apache-2.0",
- "dependencies": {
- "tslib": "^2.8.0"
- }
- },
"node_modules/@testing-library/dom": {
"version": "10.4.0",
"dev": true,
@@ -2120,6 +2134,7 @@
},
"node_modules/@types/babel__core": {
"version": "7.20.5",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@babel/parser": "^7.20.7",
@@ -2131,6 +2146,7 @@
},
"node_modules/@types/babel__generator": {
"version": "7.27.0",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@babel/types": "^7.0.0"
@@ -2138,6 +2154,7 @@
},
"node_modules/@types/babel__template": {
"version": "7.4.4",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@babel/parser": "^7.1.0",
@@ -2146,75 +2163,138 @@
},
"node_modules/@types/babel__traverse": {
"version": "7.20.7",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@babel/types": "^7.20.7"
}
},
+ "node_modules/@types/body-parser": {
+ "version": "1.19.5",
+ "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz",
+ "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/connect": "*",
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/connect": {
+ "version": "3.4.38",
+ "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz",
+ "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
"node_modules/@types/cookiejar": {
"version": "2.1.5",
"dev": true,
"license": "MIT"
},
+ "node_modules/@types/cors": {
+ "version": "2.8.18",
+ "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.18.tgz",
+ "integrity": "sha512-nX3d0sxJW41CqQvfOzVG1NCTXfFDrDWIghCZncpHeWlVFd81zxB/DLhg7avFg6eHLCRX7ckBmoIIcqa++upvJA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
"node_modules/@types/debug": {
"version": "4.1.12",
+ "dev": true,
"license": "MIT",
+ "optional": true,
+ "peer": true,
"dependencies": {
"@types/ms": "*"
}
},
"node_modules/@types/estree": {
"version": "1.0.7",
+ "dev": true,
"license": "MIT"
},
- "node_modules/@types/fontkit": {
- "version": "2.0.8",
+ "node_modules/@types/express": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.2.tgz",
+ "integrity": "sha512-BtjL3ZwbCQriyb0DGw+Rt12qAXPiBTPs815lsUvtt1Grk0vLRMZNMUZ741d5rjk+UQOxfDiBZ3dxpX00vSkK3g==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@types/node": "*"
+ "@types/body-parser": "*",
+ "@types/express-serve-static-core": "^5.0.0",
+ "@types/serve-static": "*"
}
},
- "node_modules/@types/hast": {
- "version": "3.0.4",
+ "node_modules/@types/express-serve-static-core": {
+ "version": "5.0.6",
+ "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz",
+ "integrity": "sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "@types/unist": "*"
+ "@types/node": "*",
+ "@types/qs": "*",
+ "@types/range-parser": "*",
+ "@types/send": "*"
}
},
- "node_modules/@types/mdast": {
- "version": "4.0.4",
- "license": "MIT",
- "dependencies": {
- "@types/unist": "*"
- }
+ "node_modules/@types/http-errors": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz",
+ "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@types/methods": {
"version": "1.1.4",
"dev": true,
"license": "MIT"
},
- "node_modules/@types/ms": {
- "version": "2.1.0",
+ "node_modules/@types/mime": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz",
+ "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==",
+ "dev": true,
"license": "MIT"
},
- "node_modules/@types/nlcst": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-2.0.3.tgz",
- "integrity": "sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==",
+ "node_modules/@types/ms": {
+ "version": "2.1.0",
+ "dev": true,
"license": "MIT",
- "dependencies": {
- "@types/unist": "*"
- }
+ "optional": true,
+ "peer": true
},
"node_modules/@types/node": {
"version": "22.15.21",
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.21.tgz",
"integrity": "sha512-EV/37Td6c+MgKAbkcLG6vqZ2zEYHD7bvSrzqqs2RIhbA6w3x+Dqz8MZM3sP6kGTeLrdoOgKZe+Xja7tUB2DNkQ==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"undici-types": "~6.21.0"
}
},
+ "node_modules/@types/qs": {
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz",
+ "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/range-parser": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz",
+ "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@types/react": {
"version": "19.1.5",
"resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.5.tgz",
@@ -2231,6 +2311,29 @@
"@types/react": "^19.0.0"
}
},
+ "node_modules/@types/send": {
+ "version": "0.17.4",
+ "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz",
+ "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/mime": "^1",
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/serve-static": {
+ "version": "1.15.7",
+ "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz",
+ "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/http-errors": "*",
+ "@types/node": "*",
+ "@types/send": "*"
+ }
+ },
"node_modules/@types/superagent": {
"version": "8.1.9",
"dev": true,
@@ -2251,18 +2354,11 @@
"@types/superagent": "^8.1.0"
}
},
- "node_modules/@types/unist": {
- "version": "3.0.3",
- "license": "MIT"
- },
- "node_modules/@ungap/structured-clone": {
- "version": "1.3.0",
- "license": "ISC"
- },
"node_modules/@vitejs/plugin-react": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.5.0.tgz",
"integrity": "sha512-JuLWaEqypaJmOJPLWwO335Ig6jSgC1FTONCWAxnqcQthLTK/Yc9aH6hr9z/87xciejbQcnP3GnA1FWUSWeXaeg==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@babel/core": "^7.26.10",
@@ -2425,8 +2521,22 @@
"url": "https://opencollective.com/vitest"
}
},
+ "node_modules/accepts": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
+ "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
+ "license": "MIT",
+ "dependencies": {
+ "mime-types": "~2.1.34",
+ "negotiator": "0.6.3"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/acorn": {
"version": "8.14.1",
+ "dev": true,
"license": "MIT",
"bin": {
"acorn": "bin/acorn"
@@ -2454,41 +2564,9 @@
"node": ">= 14"
}
},
- "node_modules/ansi-align": {
- "version": "3.0.1",
- "license": "ISC",
- "dependencies": {
- "string-width": "^4.1.0"
- }
- },
- "node_modules/ansi-align/node_modules/emoji-regex": {
- "version": "8.0.0",
- "license": "MIT"
- },
- "node_modules/ansi-align/node_modules/string-width": {
- "version": "4.2.3",
- "license": "MIT",
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ansi-align/node_modules/strip-ansi": {
- "version": "6.0.1",
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/ansi-regex": {
"version": "5.0.1",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
@@ -2508,38 +2586,11 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/anymatch": {
- "version": "3.1.3",
- "license": "ISC",
- "dependencies": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/anymatch/node_modules/picomatch": {
- "version": "2.3.1",
- "license": "MIT",
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
"node_modules/arg": {
"version": "4.1.3",
"dev": true,
"license": "MIT"
},
- "node_modules/argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "license": "Python-2.0"
- },
"node_modules/aria-hidden": {
"version": "1.2.4",
"license": "MIT",
@@ -2558,24 +2609,11 @@
"dequal": "^2.0.3"
}
},
- "node_modules/array-iterate": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-2.0.1.tgz",
- "integrity": "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==",
- "license": "MIT",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/as-table": {
- "version": "1.0.55",
- "resolved": "https://registry.npmjs.org/as-table/-/as-table-1.0.55.tgz",
- "integrity": "sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==",
- "license": "MIT",
- "dependencies": {
- "printable-characters": "^1.0.42"
- }
+ "node_modules/array-flatten": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+ "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
+ "license": "MIT"
},
"node_modules/asap": {
"version": "2.0.6",
@@ -2592,204 +2630,80 @@
"node": ">=12"
}
},
- "node_modules/astro": {
- "version": "5.8.0",
- "resolved": "https://registry.npmjs.org/astro/-/astro-5.8.0.tgz",
- "integrity": "sha512-G57ELkdIntDiSrucA5lQaRtBOjquaZ9b9NIwoz2f471ZuuJcynLjWgItgBzlrz5UMY4WqnFbVWUCKlJb7nt9bA==",
- "license": "MIT",
- "dependencies": {
- "@astrojs/compiler": "^2.11.0",
- "@astrojs/internal-helpers": "0.6.1",
- "@astrojs/markdown-remark": "6.3.2",
- "@astrojs/telemetry": "3.3.0",
- "@capsizecss/unpack": "^2.4.0",
- "@oslojs/encoding": "^1.1.0",
- "@rollup/pluginutils": "^5.1.4",
- "acorn": "^8.14.1",
- "aria-query": "^5.3.2",
- "axobject-query": "^4.1.0",
- "boxen": "8.0.1",
- "ci-info": "^4.2.0",
- "clsx": "^2.1.1",
- "common-ancestor-path": "^1.0.1",
- "cookie": "^1.0.2",
- "cssesc": "^3.0.0",
- "debug": "^4.4.0",
- "deterministic-object-hash": "^2.0.2",
- "devalue": "^5.1.1",
- "diff": "^5.2.0",
- "dlv": "^1.1.3",
- "dset": "^3.1.4",
- "es-module-lexer": "^1.6.0",
- "esbuild": "^0.25.0",
- "estree-walker": "^3.0.3",
- "flattie": "^1.1.1",
- "fontace": "~0.3.0",
- "github-slugger": "^2.0.0",
- "html-escaper": "3.0.3",
- "http-cache-semantics": "^4.1.1",
- "import-meta-resolve": "^4.1.0",
- "js-yaml": "^4.1.0",
- "kleur": "^4.1.5",
- "magic-string": "^0.30.17",
- "magicast": "^0.3.5",
- "mrmime": "^2.0.1",
- "neotraverse": "^0.6.18",
- "p-limit": "^6.2.0",
- "p-queue": "^8.1.0",
- "package-manager-detector": "^1.1.0",
- "picomatch": "^4.0.2",
- "prompts": "^2.4.2",
- "rehype": "^13.0.2",
- "semver": "^7.7.1",
- "shiki": "^3.2.1",
- "tinyexec": "^0.3.2",
- "tinyglobby": "^0.2.12",
- "tsconfck": "^3.1.5",
- "ultrahtml": "^1.6.0",
- "unifont": "~0.5.0",
- "unist-util-visit": "^5.0.0",
- "unstorage": "^1.15.0",
- "vfile": "^6.0.3",
- "vite": "^6.3.4",
- "vitefu": "^1.0.6",
- "xxhash-wasm": "^1.1.0",
- "yargs-parser": "^21.1.1",
- "yocto-spinner": "^0.2.1",
- "zod": "^3.24.2",
- "zod-to-json-schema": "^3.24.5",
- "zod-to-ts": "^1.2.0"
- },
- "bin": {
- "astro": "astro.js"
- },
- "engines": {
- "node": "18.20.8 || ^20.3.0 || >=22.0.0",
- "npm": ">=9.6.5",
- "pnpm": ">=7.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/astrodotbuild"
- },
- "optionalDependencies": {
- "sharp": "^0.33.3"
- }
- },
- "node_modules/astro/node_modules/aria-query": {
- "version": "5.3.2",
- "license": "Apache-2.0",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/astro/node_modules/semver": {
- "version": "7.7.2",
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/asynckit": {
"version": "0.4.0",
"dev": true,
"license": "MIT"
},
- "node_modules/axobject-query": {
- "version": "4.1.0",
- "license": "Apache-2.0",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/bail": {
- "version": "2.0.2",
- "license": "MIT",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
"node_modules/balanced-match": {
"version": "1.0.2",
"dev": true,
"license": "MIT"
},
- "node_modules/base-64": {
- "version": "1.0.0",
- "license": "MIT"
- },
- "node_modules/base64-js": {
- "version": "1.5.1",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT"
- },
- "node_modules/blake3-wasm": {
- "version": "2.1.5",
- "license": "MIT"
- },
- "node_modules/blob-to-buffer": {
- "version": "1.2.9",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT"
- },
- "node_modules/boxen": {
- "version": "8.0.1",
+ "node_modules/body-parser": {
+ "version": "1.20.3",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",
+ "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==",
"license": "MIT",
"dependencies": {
- "ansi-align": "^3.0.1",
- "camelcase": "^8.0.0",
- "chalk": "^5.3.0",
- "cli-boxes": "^3.0.0",
- "string-width": "^7.2.0",
- "type-fest": "^4.21.0",
- "widest-line": "^5.0.0",
- "wrap-ansi": "^9.0.0"
+ "bytes": "3.1.2",
+ "content-type": "~1.0.5",
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
+ "http-errors": "2.0.0",
+ "iconv-lite": "0.4.24",
+ "on-finished": "2.4.1",
+ "qs": "6.13.0",
+ "raw-body": "2.5.2",
+ "type-is": "~1.6.18",
+ "unpipe": "1.0.0"
},
"engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">= 0.8",
+ "npm": "1.2.8000 || >= 1.4.16"
}
},
- "node_modules/boxen/node_modules/chalk": {
- "version": "5.4.1",
+ "node_modules/body-parser/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"license": "MIT",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/body-parser/node_modules/iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "license": "MIT",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ },
"engines": {
- "node": "^12.17.0 || ^14.13 || >=16.0.0"
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/body-parser/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "license": "MIT"
+ },
+ "node_modules/body-parser/node_modules/qs": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
+ "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "side-channel": "^1.0.6"
+ },
+ "engines": {
+ "node": ">=0.6"
},
"funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
+ "url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/brace-expansion": {
@@ -2800,15 +2714,9 @@
"balanced-match": "^1.0.0"
}
},
- "node_modules/brotli": {
- "version": "1.3.3",
- "license": "MIT",
- "dependencies": {
- "base64-js": "^1.1.2"
- }
- },
"node_modules/browserslist": {
"version": "4.24.5",
+ "dev": true,
"funding": [
{
"type": "opencollective",
@@ -2837,6 +2745,15 @@
"node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
}
},
+ "node_modules/bytes": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/cac": {
"version": "6.7.14",
"resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz",
@@ -2849,7 +2766,6 @@
},
"node_modules/call-bind-apply-helpers": {
"version": "1.0.2",
- "dev": true,
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0",
@@ -2861,7 +2777,6 @@
},
"node_modules/call-bound": {
"version": "1.0.4",
- "dev": true,
"license": "MIT",
"dependencies": {
"call-bind-apply-helpers": "^1.0.2",
@@ -2874,18 +2789,9 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/camelcase": {
- "version": "8.0.0",
- "license": "MIT",
- "engines": {
- "node": ">=16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/caniuse-lite": {
"version": "1.0.30001718",
+ "dev": true,
"funding": [
{
"type": "opencollective",
@@ -2902,14 +2808,6 @@
],
"license": "CC-BY-4.0"
},
- "node_modules/ccount": {
- "version": "2.0.1",
- "license": "MIT",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
"node_modules/chai": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/chai/-/chai-5.2.0.tgz",
@@ -2942,32 +2840,6 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "node_modules/character-entities": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz",
- "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==",
- "license": "MIT",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/character-entities-html4": {
- "version": "2.1.0",
- "license": "MIT",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/character-entities-legacy": {
- "version": "3.0.0",
- "license": "MIT",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
"node_modules/check-error": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz",
@@ -2978,71 +2850,77 @@
"node": ">= 16"
}
},
- "node_modules/chokidar": {
- "version": "4.0.3",
- "license": "MIT",
+ "node_modules/cliui": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+ "dev": true,
+ "license": "ISC",
"dependencies": {
- "readdirp": "^4.0.1"
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^7.0.0"
},
"engines": {
- "node": ">= 14.16.0"
- },
- "funding": {
- "url": "https://paulmillr.com/funding/"
+ "node": ">=12"
}
},
- "node_modules/ci-info": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz",
- "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/sibiraj-s"
- }
- ],
+ "node_modules/cliui/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/cliui/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
"license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
"engines": {
"node": ">=8"
}
},
- "node_modules/cli-boxes": {
- "version": "3.0.0",
+ "node_modules/cliui/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
"license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cliui/node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
"engines": {
"node": ">=10"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/clone": {
- "version": "2.1.2",
- "license": "MIT",
- "engines": {
- "node": ">=0.8"
- }
- },
- "node_modules/clsx": {
- "version": "2.1.1",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/color": {
- "version": "4.2.3",
- "license": "MIT",
- "dependencies": {
- "color-convert": "^2.0.1",
- "color-string": "^1.9.0"
- },
- "engines": {
- "node": ">=12.5.0"
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
"node_modules/color-convert": {
"version": "2.0.1",
+ "dev": true,
"license": "MIT",
"dependencies": {
"color-name": "~1.1.4"
@@ -3053,16 +2931,9 @@
},
"node_modules/color-name": {
"version": "1.1.4",
+ "dev": true,
"license": "MIT"
},
- "node_modules/color-string": {
- "version": "1.9.1",
- "license": "MIT",
- "dependencies": {
- "color-name": "^1.0.0",
- "simple-swizzle": "^0.2.2"
- }
- },
"node_modules/combined-stream": {
"version": "1.0.8",
"dev": true,
@@ -3074,18 +2945,6 @@
"node": ">= 0.8"
}
},
- "node_modules/comma-separated-tokens": {
- "version": "2.0.3",
- "license": "MIT",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/common-ancestor-path": {
- "version": "1.0.1",
- "license": "ISC"
- },
"node_modules/component-emitter": {
"version": "1.3.1",
"dev": true,
@@ -3094,19 +2953,80 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/convert-source-map": {
- "version": "2.0.0",
- "license": "MIT"
- },
- "node_modules/cookie": {
- "version": "1.0.2",
+ "node_modules/concurrently": {
+ "version": "8.2.2",
+ "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.2.2.tgz",
+ "integrity": "sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==",
+ "dev": true,
"license": "MIT",
+ "dependencies": {
+ "chalk": "^4.1.2",
+ "date-fns": "^2.30.0",
+ "lodash": "^4.17.21",
+ "rxjs": "^7.8.1",
+ "shell-quote": "^1.8.1",
+ "spawn-command": "0.0.2",
+ "supports-color": "^8.1.1",
+ "tree-kill": "^1.2.2",
+ "yargs": "^17.7.2"
+ },
+ "bin": {
+ "conc": "dist/bin/concurrently.js",
+ "concurrently": "dist/bin/concurrently.js"
+ },
"engines": {
- "node": ">=18"
+ "node": "^14.13.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/open-cli-tools/concurrently?sponsor=1"
}
},
- "node_modules/cookie-es": {
- "version": "1.2.2",
+ "node_modules/concurrently/node_modules/supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "node_modules/content-disposition": {
+ "version": "0.5.4",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
+ "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
+ "license": "MIT",
+ "dependencies": {
+ "safe-buffer": "5.2.1"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/content-type": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
+ "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/convert-source-map": {
+ "version": "2.0.0",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/cookie-signature": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==",
"license": "MIT"
},
"node_modules/cookiejar": {
@@ -3114,18 +3034,24 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/cors": {
+ "version": "2.8.5",
+ "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
+ "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
+ "license": "MIT",
+ "dependencies": {
+ "object-assign": "^4",
+ "vary": "^1"
+ },
+ "engines": {
+ "node": ">= 0.10"
+ }
+ },
"node_modules/create-require": {
"version": "1.1.1",
"dev": true,
"license": "MIT"
},
- "node_modules/cross-fetch": {
- "version": "3.2.0",
- "license": "MIT",
- "dependencies": {
- "node-fetch": "^2.7.0"
- }
- },
"node_modules/cross-spawn": {
"version": "7.0.6",
"dev": true,
@@ -3139,39 +3065,11 @@
"node": ">= 8"
}
},
- "node_modules/crossws": {
- "version": "0.3.5",
- "license": "MIT",
- "dependencies": {
- "uncrypto": "^0.1.3"
- }
- },
- "node_modules/css-tree": {
- "version": "3.1.0",
- "license": "MIT",
- "dependencies": {
- "mdn-data": "2.12.2",
- "source-map-js": "^1.0.1"
- },
- "engines": {
- "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
- }
- },
"node_modules/css.escape": {
"version": "1.5.1",
"dev": true,
"license": "MIT"
},
- "node_modules/cssesc": {
- "version": "3.0.0",
- "license": "MIT",
- "bin": {
- "cssesc": "bin/cssesc"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/cssstyle": {
"version": "4.3.1",
"dev": true,
@@ -3188,12 +3086,6 @@
"version": "3.1.3",
"license": "MIT"
},
- "node_modules/data-uri-to-buffer": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-2.0.2.tgz",
- "integrity": "sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==",
- "license": "MIT"
- },
"node_modules/data-urls": {
"version": "5.0.0",
"dev": true,
@@ -3206,8 +3098,26 @@
"node": ">=18"
}
},
+ "node_modules/date-fns": {
+ "version": "2.30.0",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz",
+ "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.21.0"
+ },
+ "engines": {
+ "node": ">=0.11"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/date-fns"
+ }
+ },
"node_modules/debug": {
"version": "4.4.1",
+ "dev": true,
"license": "MIT",
"dependencies": {
"ms": "^2.1.3"
@@ -3226,19 +3136,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/decode-named-character-reference": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.1.0.tgz",
- "integrity": "sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==",
- "license": "MIT",
- "dependencies": {
- "character-entities": "^2.0.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
"node_modules/deep-eql": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz",
@@ -3249,10 +3146,6 @@
"node": ">=6"
}
},
- "node_modules/defu": {
- "version": "6.1.4",
- "license": "MIT"
- },
"node_modules/delayed-stream": {
"version": "1.0.0",
"dev": true,
@@ -3270,51 +3163,26 @@
},
"node_modules/dequal": {
"version": "2.0.3",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
- "node_modules/destr": {
- "version": "2.0.5",
- "license": "MIT"
- },
- "node_modules/detect-libc": {
- "version": "2.0.4",
- "license": "Apache-2.0",
+ "node_modules/destroy": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
+ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
+ "license": "MIT",
"engines": {
- "node": ">=8"
+ "node": ">= 0.8",
+ "npm": "1.2.8000 || >= 1.4.16"
}
},
"node_modules/detect-node-es": {
"version": "1.1.0",
"license": "MIT"
},
- "node_modules/deterministic-object-hash": {
- "version": "2.0.2",
- "license": "MIT",
- "dependencies": {
- "base-64": "^1.0.0"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/devalue": {
- "version": "5.1.1",
- "license": "MIT"
- },
- "node_modules/devlop": {
- "version": "1.1.0",
- "license": "MIT",
- "dependencies": {
- "dequal": "^2.0.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
"node_modules/dezalgo": {
"version": "1.0.4",
"dev": true,
@@ -3324,40 +3192,25 @@
"wrappy": "1"
}
},
- "node_modules/dfa": {
- "version": "1.2.0",
- "license": "MIT"
- },
- "node_modules/diff": {
- "version": "5.2.0",
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.3.1"
- }
- },
- "node_modules/dlv": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
- "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
- "license": "MIT"
- },
"node_modules/dom-accessibility-api": {
"version": "0.5.16",
"dev": true,
"license": "MIT"
},
- "node_modules/dset": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.4.tgz",
- "integrity": "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==",
- "license": "MIT",
+ "node_modules/dotenv": {
+ "version": "16.5.0",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz",
+ "integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==",
+ "license": "BSD-2-Clause",
"engines": {
- "node": ">=4"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://dotenvx.com"
}
},
"node_modules/dunder-proto": {
"version": "1.0.1",
- "dev": true,
"license": "MIT",
"dependencies": {
"call-bind-apply-helpers": "^1.0.1",
@@ -3379,12 +3232,9 @@
},
"node_modules/electron-to-chromium": {
"version": "1.5.155",
+ "dev": true,
"license": "ISC"
},
- "node_modules/emoji-regex": {
- "version": "10.4.0",
- "license": "MIT"
- },
"node_modules/encodeurl": {
"version": "2.0.0",
"license": "MIT",
@@ -3394,6 +3244,7 @@
},
"node_modules/entities": {
"version": "6.0.0",
+ "dev": true,
"license": "BSD-2-Clause",
"engines": {
"node": ">=0.12"
@@ -3404,7 +3255,6 @@
},
"node_modules/es-define-property": {
"version": "1.0.1",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
@@ -3412,7 +3262,6 @@
},
"node_modules/es-errors": {
"version": "1.3.0",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
@@ -3420,11 +3269,11 @@
},
"node_modules/es-module-lexer": {
"version": "1.7.0",
+ "dev": true,
"license": "MIT"
},
"node_modules/es-object-atoms": {
"version": "1.1.1",
- "dev": true,
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0"
@@ -3449,6 +3298,7 @@
},
"node_modules/esbuild": {
"version": "0.25.4",
+ "dev": true,
"hasInstallScript": true,
"license": "MIT",
"bin": {
@@ -3492,6 +3342,7 @@
"cpu": [
"ppc64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -3508,6 +3359,7 @@
"cpu": [
"arm"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -3524,6 +3376,7 @@
"cpu": [
"arm64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -3540,6 +3393,7 @@
"cpu": [
"x64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -3556,6 +3410,7 @@
"cpu": [
"arm64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -3572,6 +3427,7 @@
"cpu": [
"x64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -3588,6 +3444,7 @@
"cpu": [
"arm64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -3604,6 +3461,7 @@
"cpu": [
"x64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -3620,6 +3478,7 @@
"cpu": [
"arm"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -3636,6 +3495,7 @@
"cpu": [
"arm64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -3652,6 +3512,7 @@
"cpu": [
"ia32"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -3668,6 +3529,7 @@
"cpu": [
"loong64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -3684,6 +3546,7 @@
"cpu": [
"mips64el"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -3700,6 +3563,7 @@
"cpu": [
"ppc64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -3716,6 +3580,7 @@
"cpu": [
"riscv64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -3732,6 +3597,7 @@
"cpu": [
"s390x"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -3748,6 +3614,7 @@
"cpu": [
"arm64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -3764,6 +3631,7 @@
"cpu": [
"x64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -3780,6 +3648,7 @@
"cpu": [
"arm64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -3796,6 +3665,7 @@
"cpu": [
"x64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -3812,6 +3682,7 @@
"cpu": [
"x64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -3828,6 +3699,7 @@
"cpu": [
"arm64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -3844,6 +3716,7 @@
"cpu": [
"ia32"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -3860,6 +3733,7 @@
"cpu": [
"x64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -3871,6 +3745,7 @@
},
"node_modules/escalade": {
"version": "3.2.0",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
@@ -3880,20 +3755,9 @@
"version": "1.0.3",
"license": "MIT"
},
- "node_modules/escape-string-regexp": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
- "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/estree-walker": {
"version": "3.0.3",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@types/estree": "^1.0.0"
@@ -3906,22 +3770,6 @@
"node": ">= 0.6"
}
},
- "node_modules/eventemitter3": {
- "version": "5.0.1",
- "license": "MIT"
- },
- "node_modules/exit-hook": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-2.2.1.tgz",
- "integrity": "sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/expect-type": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.1.tgz",
@@ -3932,19 +3780,150 @@
"node": ">=12.0.0"
}
},
- "node_modules/exsolve": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.5.tgz",
- "integrity": "sha512-pz5dvkYYKQ1AHVrgOzBKWeP4u4FRb3a6DNK2ucr0OoNwYIU4QWsJ+NM36LLzORT+z845MzKHHhpXiUF5nvQoJg==",
+ "node_modules/express": {
+ "version": "4.21.2",
+ "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz",
+ "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==",
+ "license": "MIT",
+ "dependencies": {
+ "accepts": "~1.3.8",
+ "array-flatten": "1.1.1",
+ "body-parser": "1.20.3",
+ "content-disposition": "0.5.4",
+ "content-type": "~1.0.4",
+ "cookie": "0.7.1",
+ "cookie-signature": "1.0.6",
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "encodeurl": "~2.0.0",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "finalhandler": "1.3.1",
+ "fresh": "0.5.2",
+ "http-errors": "2.0.0",
+ "merge-descriptors": "1.0.3",
+ "methods": "~1.1.2",
+ "on-finished": "2.4.1",
+ "parseurl": "~1.3.3",
+ "path-to-regexp": "0.1.12",
+ "proxy-addr": "~2.0.7",
+ "qs": "6.13.0",
+ "range-parser": "~1.2.1",
+ "safe-buffer": "5.2.1",
+ "send": "0.19.0",
+ "serve-static": "1.16.2",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
+ "type-is": "~1.6.18",
+ "utils-merge": "1.0.1",
+ "vary": "~1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.10.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
+ }
+ },
+ "node_modules/express/node_modules/cookie": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz",
+ "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/express/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/express/node_modules/debug/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
"license": "MIT"
},
- "node_modules/extend": {
- "version": "3.0.2",
+ "node_modules/express/node_modules/fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/express/node_modules/mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "license": "MIT",
+ "bin": {
+ "mime": "cli.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/express/node_modules/path-to-regexp": {
+ "version": "0.1.12",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz",
+ "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==",
"license": "MIT"
},
- "node_modules/fast-deep-equal": {
- "version": "3.1.3",
- "license": "MIT"
+ "node_modules/express/node_modules/qs": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
+ "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "side-channel": "^1.0.6"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/express/node_modules/send": {
+ "version": "0.19.0",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz",
+ "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",
+ "license": "MIT",
+ "dependencies": {
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "2.0.0",
+ "mime": "1.6.0",
+ "ms": "2.1.3",
+ "on-finished": "2.4.1",
+ "range-parser": "~1.2.1",
+ "statuses": "2.0.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/express/node_modules/send/node_modules/encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
},
"node_modules/fast-safe-stringify": {
"version": "2.1.1",
@@ -3953,6 +3932,7 @@
},
"node_modules/fdir": {
"version": "6.4.4",
+ "dev": true,
"license": "MIT",
"peerDependencies": {
"picomatch": "^3 || ^4"
@@ -3963,35 +3943,38 @@
}
}
},
- "node_modules/flattie": {
- "version": "1.1.1",
+ "node_modules/finalhandler": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz",
+ "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==",
"license": "MIT",
+ "dependencies": {
+ "debug": "2.6.9",
+ "encodeurl": "~2.0.0",
+ "escape-html": "~1.0.3",
+ "on-finished": "2.4.1",
+ "parseurl": "~1.3.3",
+ "statuses": "2.0.1",
+ "unpipe": "~1.0.0"
+ },
"engines": {
- "node": ">=8"
+ "node": ">= 0.8"
}
},
- "node_modules/fontace": {
- "version": "0.3.0",
+ "node_modules/finalhandler/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"license": "MIT",
"dependencies": {
- "@types/fontkit": "^2.0.8",
- "fontkit": "^2.0.4"
+ "ms": "2.0.0"
}
},
- "node_modules/fontkit": {
- "version": "2.0.4",
- "license": "MIT",
- "dependencies": {
- "@swc/helpers": "^0.5.12",
- "brotli": "^1.3.2",
- "clone": "^2.1.2",
- "dfa": "^1.2.0",
- "fast-deep-equal": "^3.1.3",
- "restructure": "^3.0.0",
- "tiny-inflate": "^1.0.3",
- "unicode-properties": "^1.4.0",
- "unicode-trie": "^2.0.0"
- }
+ "node_modules/finalhandler/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "license": "MIT"
},
"node_modules/foreground-child": {
"version": "3.3.1",
@@ -4038,16 +4021,32 @@
"url": "https://ko-fi.com/tunnckoCore/commissions"
}
},
- "node_modules/fresh": {
- "version": "2.0.0",
+ "node_modules/forwarded": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
+ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
"license": "MIT",
"engines": {
- "node": ">= 0.8"
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
}
},
"node_modules/function-bind": {
"version": "1.1.2",
- "dev": true,
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -4055,24 +4054,24 @@
},
"node_modules/gensync": {
"version": "1.0.0-beta.2",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
- "node_modules/get-east-asian-width": {
- "version": "1.3.0",
- "license": "MIT",
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true,
+ "license": "ISC",
"engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": "6.* || 8.* || >= 10.*"
}
},
"node_modules/get-intrinsic": {
"version": "1.3.0",
- "dev": true,
"license": "MIT",
"dependencies": {
"call-bind-apply-helpers": "^1.0.2",
@@ -4102,7 +4101,6 @@
},
"node_modules/get-proto": {
"version": "1.0.1",
- "dev": true,
"license": "MIT",
"dependencies": {
"dunder-proto": "^1.0.1",
@@ -4112,22 +4110,19 @@
"node": ">= 0.4"
}
},
- "node_modules/get-source": {
- "version": "2.0.12",
- "resolved": "https://registry.npmjs.org/get-source/-/get-source-2.0.12.tgz",
- "integrity": "sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==",
- "license": "Unlicense",
+ "node_modules/get-tsconfig": {
+ "version": "4.10.1",
+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.1.tgz",
+ "integrity": "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "data-uri-to-buffer": "^2.0.0",
- "source-map": "^0.6.1"
+ "resolve-pkg-maps": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
}
},
- "node_modules/github-slugger": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz",
- "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==",
- "license": "ISC"
- },
"node_modules/glob": {
"version": "10.4.5",
"dev": true,
@@ -4147,14 +4142,9 @@
"url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/glob-to-regexp": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
- "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
- "license": "BSD-2-Clause"
- },
"node_modules/globals": {
"version": "11.12.0",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
@@ -4162,7 +4152,6 @@
},
"node_modules/gopd": {
"version": "1.2.0",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
@@ -4171,21 +4160,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/h3": {
- "version": "1.15.3",
- "license": "MIT",
- "dependencies": {
- "cookie-es": "^1.2.2",
- "crossws": "^0.3.4",
- "defu": "^6.1.4",
- "destr": "^2.0.5",
- "iron-webcrypto": "^1.2.1",
- "node-mock-http": "^1.0.0",
- "radix3": "^1.1.2",
- "ufo": "^1.6.1",
- "uncrypto": "^0.1.3"
- }
- },
"node_modules/has-flag": {
"version": "4.0.0",
"dev": true,
@@ -4196,7 +4170,6 @@
},
"node_modules/has-symbols": {
"version": "1.1.0",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
@@ -4221,7 +4194,6 @@
},
"node_modules/hasown": {
"version": "2.0.2",
- "dev": true,
"license": "MIT",
"dependencies": {
"function-bind": "^1.1.2"
@@ -4230,181 +4202,6 @@
"node": ">= 0.4"
}
},
- "node_modules/hast-util-from-html": {
- "version": "2.0.3",
- "license": "MIT",
- "dependencies": {
- "@types/hast": "^3.0.0",
- "devlop": "^1.1.0",
- "hast-util-from-parse5": "^8.0.0",
- "parse5": "^7.0.0",
- "vfile": "^6.0.0",
- "vfile-message": "^4.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/hast-util-from-parse5": {
- "version": "8.0.3",
- "license": "MIT",
- "dependencies": {
- "@types/hast": "^3.0.0",
- "@types/unist": "^3.0.0",
- "devlop": "^1.0.0",
- "hastscript": "^9.0.0",
- "property-information": "^7.0.0",
- "vfile": "^6.0.0",
- "vfile-location": "^5.0.0",
- "web-namespaces": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/hast-util-is-element": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz",
- "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==",
- "license": "MIT",
- "dependencies": {
- "@types/hast": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/hast-util-parse-selector": {
- "version": "4.0.0",
- "license": "MIT",
- "dependencies": {
- "@types/hast": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/hast-util-raw": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz",
- "integrity": "sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==",
- "license": "MIT",
- "dependencies": {
- "@types/hast": "^3.0.0",
- "@types/unist": "^3.0.0",
- "@ungap/structured-clone": "^1.0.0",
- "hast-util-from-parse5": "^8.0.0",
- "hast-util-to-parse5": "^8.0.0",
- "html-void-elements": "^3.0.0",
- "mdast-util-to-hast": "^13.0.0",
- "parse5": "^7.0.0",
- "unist-util-position": "^5.0.0",
- "unist-util-visit": "^5.0.0",
- "vfile": "^6.0.0",
- "web-namespaces": "^2.0.0",
- "zwitch": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/hast-util-to-html": {
- "version": "9.0.5",
- "license": "MIT",
- "dependencies": {
- "@types/hast": "^3.0.0",
- "@types/unist": "^3.0.0",
- "ccount": "^2.0.0",
- "comma-separated-tokens": "^2.0.0",
- "hast-util-whitespace": "^3.0.0",
- "html-void-elements": "^3.0.0",
- "mdast-util-to-hast": "^13.0.0",
- "property-information": "^7.0.0",
- "space-separated-tokens": "^2.0.0",
- "stringify-entities": "^4.0.0",
- "zwitch": "^2.0.4"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/hast-util-to-parse5": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz",
- "integrity": "sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==",
- "license": "MIT",
- "dependencies": {
- "@types/hast": "^3.0.0",
- "comma-separated-tokens": "^2.0.0",
- "devlop": "^1.0.0",
- "property-information": "^6.0.0",
- "space-separated-tokens": "^2.0.0",
- "web-namespaces": "^2.0.0",
- "zwitch": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/hast-util-to-parse5/node_modules/property-information": {
- "version": "6.5.0",
- "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz",
- "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==",
- "license": "MIT",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/hast-util-to-text": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz",
- "integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==",
- "license": "MIT",
- "dependencies": {
- "@types/hast": "^3.0.0",
- "@types/unist": "^3.0.0",
- "hast-util-is-element": "^3.0.0",
- "unist-util-find-after": "^5.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/hast-util-whitespace": {
- "version": "3.0.0",
- "license": "MIT",
- "dependencies": {
- "@types/hast": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/hastscript": {
- "version": "9.0.1",
- "license": "MIT",
- "dependencies": {
- "@types/hast": "^3.0.0",
- "comma-separated-tokens": "^2.0.0",
- "hast-util-parse-selector": "^4.0.0",
- "property-information": "^7.0.0",
- "space-separated-tokens": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
"node_modules/html-encoding-sniffer": {
"version": "4.0.0",
"dev": true,
@@ -4416,22 +4213,6 @@
"node": ">=18"
}
},
- "node_modules/html-escaper": {
- "version": "3.0.3",
- "license": "MIT"
- },
- "node_modules/html-void-elements": {
- "version": "3.0.0",
- "license": "MIT",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/http-cache-semantics": {
- "version": "4.2.0",
- "license": "BSD-2-Clause"
- },
"node_modules/http-errors": {
"version": "2.0.0",
"license": "MIT",
@@ -4495,16 +4276,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/import-meta-resolve": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz",
- "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==",
- "license": "MIT",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
"node_modules/indent-string": {
"version": "4.0.0",
"dev": true,
@@ -4517,87 +4288,28 @@
"version": "2.0.4",
"license": "ISC"
},
- "node_modules/iron-webcrypto": {
- "version": "1.2.1",
+ "node_modules/ipaddr.js": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
"license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/brc-dd"
- }
- },
- "node_modules/is-arrayish": {
- "version": "0.3.2",
- "license": "MIT"
- },
- "node_modules/is-docker": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz",
- "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==",
- "license": "MIT",
- "bin": {
- "is-docker": "cli.js"
- },
"engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">= 0.10"
}
},
"node_modules/is-fullwidth-code-point": {
"version": "3.0.0",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
- "node_modules/is-inside-container": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz",
- "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==",
- "license": "MIT",
- "dependencies": {
- "is-docker": "^3.0.0"
- },
- "bin": {
- "is-inside-container": "cli.js"
- },
- "engines": {
- "node": ">=14.16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-plain-obj": {
- "version": "4.1.0",
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/is-potential-custom-element-name": {
"version": "1.0.1",
"dev": true,
"license": "MIT"
},
- "node_modules/is-wsl": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz",
- "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==",
- "license": "MIT",
- "dependencies": {
- "is-inside-container": "^1.0.0"
- },
- "engines": {
- "node": ">=16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/isexe": {
"version": "2.0.0",
"dev": true,
@@ -4678,20 +4390,9 @@
},
"node_modules/js-tokens": {
"version": "4.0.0",
+ "dev": true,
"license": "MIT"
},
- "node_modules/js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "license": "MIT",
- "dependencies": {
- "argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
"node_modules/jsdom": {
"version": "26.1.0",
"dev": true,
@@ -4732,6 +4433,7 @@
},
"node_modules/jsesc": {
"version": "3.1.0",
+ "dev": true,
"license": "MIT",
"bin": {
"jsesc": "bin/jsesc"
@@ -4742,6 +4444,7 @@
},
"node_modules/json5": {
"version": "2.2.3",
+ "dev": true,
"license": "MIT",
"bin": {
"json5": "lib/cli.js"
@@ -4750,28 +4453,11 @@
"node": ">=6"
}
},
- "node_modules/kleur": {
- "version": "4.1.5",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/lodash": {
"version": "4.17.21",
"dev": true,
"license": "MIT"
},
- "node_modules/longest-streak": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz",
- "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==",
- "license": "MIT",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
"node_modules/loupe": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.3.tgz",
@@ -4781,6 +4467,7 @@
},
"node_modules/lru-cache": {
"version": "5.1.1",
+ "dev": true,
"license": "ISC",
"dependencies": {
"yallist": "^3.0.2"
@@ -4796,6 +4483,7 @@
},
"node_modules/magic-string": {
"version": "0.30.17",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/sourcemap-codec": "^1.5.0"
@@ -4803,6 +4491,7 @@
},
"node_modules/magicast": {
"version": "0.3.5",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@babel/parser": "^7.25.4",
@@ -4840,812 +4529,38 @@
"dev": true,
"license": "ISC"
},
- "node_modules/markdown-table": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz",
- "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==",
- "license": "MIT",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
"node_modules/math-intrinsics": {
"version": "1.1.0",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
}
},
- "node_modules/mdast-util-definitions": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-6.0.0.tgz",
- "integrity": "sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==",
- "license": "MIT",
- "dependencies": {
- "@types/mdast": "^4.0.0",
- "@types/unist": "^3.0.0",
- "unist-util-visit": "^5.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-find-and-replace": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz",
- "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==",
- "license": "MIT",
- "dependencies": {
- "@types/mdast": "^4.0.0",
- "escape-string-regexp": "^5.0.0",
- "unist-util-is": "^6.0.0",
- "unist-util-visit-parents": "^6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-from-markdown": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz",
- "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==",
- "license": "MIT",
- "dependencies": {
- "@types/mdast": "^4.0.0",
- "@types/unist": "^3.0.0",
- "decode-named-character-reference": "^1.0.0",
- "devlop": "^1.0.0",
- "mdast-util-to-string": "^4.0.0",
- "micromark": "^4.0.0",
- "micromark-util-decode-numeric-character-reference": "^2.0.0",
- "micromark-util-decode-string": "^2.0.0",
- "micromark-util-normalize-identifier": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0",
- "unist-util-stringify-position": "^4.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-gfm": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz",
- "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==",
- "license": "MIT",
- "dependencies": {
- "mdast-util-from-markdown": "^2.0.0",
- "mdast-util-gfm-autolink-literal": "^2.0.0",
- "mdast-util-gfm-footnote": "^2.0.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.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-gfm-autolink-literal": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz",
- "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==",
- "license": "MIT",
- "dependencies": {
- "@types/mdast": "^4.0.0",
- "ccount": "^2.0.0",
- "devlop": "^1.0.0",
- "mdast-util-find-and-replace": "^3.0.0",
- "micromark-util-character": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-gfm-footnote": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz",
- "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==",
- "license": "MIT",
- "dependencies": {
- "@types/mdast": "^4.0.0",
- "devlop": "^1.1.0",
- "mdast-util-from-markdown": "^2.0.0",
- "mdast-util-to-markdown": "^2.0.0",
- "micromark-util-normalize-identifier": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-gfm-strikethrough": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz",
- "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==",
- "license": "MIT",
- "dependencies": {
- "@types/mdast": "^4.0.0",
- "mdast-util-from-markdown": "^2.0.0",
- "mdast-util-to-markdown": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-gfm-table": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz",
- "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==",
- "license": "MIT",
- "dependencies": {
- "@types/mdast": "^4.0.0",
- "devlop": "^1.0.0",
- "markdown-table": "^3.0.0",
- "mdast-util-from-markdown": "^2.0.0",
- "mdast-util-to-markdown": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-gfm-task-list-item": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz",
- "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==",
- "license": "MIT",
- "dependencies": {
- "@types/mdast": "^4.0.0",
- "devlop": "^1.0.0",
- "mdast-util-from-markdown": "^2.0.0",
- "mdast-util-to-markdown": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-phrasing": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz",
- "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==",
- "license": "MIT",
- "dependencies": {
- "@types/mdast": "^4.0.0",
- "unist-util-is": "^6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-to-hast": {
- "version": "13.2.0",
- "license": "MIT",
- "dependencies": {
- "@types/hast": "^3.0.0",
- "@types/mdast": "^4.0.0",
- "@ungap/structured-clone": "^1.0.0",
- "devlop": "^1.0.0",
- "micromark-util-sanitize-uri": "^2.0.0",
- "trim-lines": "^3.0.0",
- "unist-util-position": "^5.0.0",
- "unist-util-visit": "^5.0.0",
- "vfile": "^6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-to-markdown": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz",
- "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==",
- "license": "MIT",
- "dependencies": {
- "@types/mdast": "^4.0.0",
- "@types/unist": "^3.0.0",
- "longest-streak": "^3.0.0",
- "mdast-util-phrasing": "^4.0.0",
- "mdast-util-to-string": "^4.0.0",
- "micromark-util-classify-character": "^2.0.0",
- "micromark-util-decode-string": "^2.0.0",
- "unist-util-visit": "^5.0.0",
- "zwitch": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-to-string": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz",
- "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==",
- "license": "MIT",
- "dependencies": {
- "@types/mdast": "^4.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdn-data": {
- "version": "2.12.2",
- "license": "CC0-1.0"
- },
- "node_modules/methods": {
- "version": "1.1.2",
- "dev": true,
+ "node_modules/media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
"license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
- "node_modules/micromark": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz",
- "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
+ "node_modules/merge-descriptors": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
+ "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==",
"license": "MIT",
- "dependencies": {
- "@types/debug": "^4.0.0",
- "debug": "^4.0.0",
- "decode-named-character-reference": "^1.0.0",
- "devlop": "^1.0.0",
- "micromark-core-commonmark": "^2.0.0",
- "micromark-factory-space": "^2.0.0",
- "micromark-util-character": "^2.0.0",
- "micromark-util-chunked": "^2.0.0",
- "micromark-util-combine-extensions": "^2.0.0",
- "micromark-util-decode-numeric-character-reference": "^2.0.0",
- "micromark-util-encode": "^2.0.0",
- "micromark-util-normalize-identifier": "^2.0.0",
- "micromark-util-resolve-all": "^2.0.0",
- "micromark-util-sanitize-uri": "^2.0.0",
- "micromark-util-subtokenize": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/micromark-core-commonmark": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz",
- "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "decode-named-character-reference": "^1.0.0",
- "devlop": "^1.0.0",
- "micromark-factory-destination": "^2.0.0",
- "micromark-factory-label": "^2.0.0",
- "micromark-factory-space": "^2.0.0",
- "micromark-factory-title": "^2.0.0",
- "micromark-factory-whitespace": "^2.0.0",
- "micromark-util-character": "^2.0.0",
- "micromark-util-chunked": "^2.0.0",
- "micromark-util-classify-character": "^2.0.0",
- "micromark-util-html-tag-name": "^2.0.0",
- "micromark-util-normalize-identifier": "^2.0.0",
- "micromark-util-resolve-all": "^2.0.0",
- "micromark-util-subtokenize": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/micromark-extension-gfm": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz",
- "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==",
- "license": "MIT",
- "dependencies": {
- "micromark-extension-gfm-autolink-literal": "^2.0.0",
- "micromark-extension-gfm-footnote": "^2.0.0",
- "micromark-extension-gfm-strikethrough": "^2.0.0",
- "micromark-extension-gfm-table": "^2.0.0",
- "micromark-extension-gfm-tagfilter": "^2.0.0",
- "micromark-extension-gfm-task-list-item": "^2.0.0",
- "micromark-util-combine-extensions": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- },
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/micromark-extension-gfm-autolink-literal": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz",
- "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==",
+ "node_modules/methods": {
+ "version": "1.1.2",
"license": "MIT",
- "dependencies": {
- "micromark-util-character": "^2.0.0",
- "micromark-util-sanitize-uri": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
+ "engines": {
+ "node": ">= 0.6"
}
},
- "node_modules/micromark-extension-gfm-footnote": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz",
- "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==",
- "license": "MIT",
- "dependencies": {
- "devlop": "^1.0.0",
- "micromark-core-commonmark": "^2.0.0",
- "micromark-factory-space": "^2.0.0",
- "micromark-util-character": "^2.0.0",
- "micromark-util-normalize-identifier": "^2.0.0",
- "micromark-util-sanitize-uri": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/micromark-extension-gfm-strikethrough": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz",
- "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==",
- "license": "MIT",
- "dependencies": {
- "devlop": "^1.0.0",
- "micromark-util-chunked": "^2.0.0",
- "micromark-util-classify-character": "^2.0.0",
- "micromark-util-resolve-all": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/micromark-extension-gfm-table": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz",
- "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==",
- "license": "MIT",
- "dependencies": {
- "devlop": "^1.0.0",
- "micromark-factory-space": "^2.0.0",
- "micromark-util-character": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/micromark-extension-gfm-tagfilter": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz",
- "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==",
- "license": "MIT",
- "dependencies": {
- "micromark-util-types": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/micromark-extension-gfm-task-list-item": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz",
- "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==",
- "license": "MIT",
- "dependencies": {
- "devlop": "^1.0.0",
- "micromark-factory-space": "^2.0.0",
- "micromark-util-character": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/micromark-factory-destination": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz",
- "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "micromark-util-character": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/micromark-factory-label": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz",
- "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "devlop": "^1.0.0",
- "micromark-util-character": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/micromark-factory-space": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz",
- "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "micromark-util-character": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/micromark-factory-title": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz",
- "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "micromark-factory-space": "^2.0.0",
- "micromark-util-character": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/micromark-factory-whitespace": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz",
- "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "micromark-factory-space": "^2.0.0",
- "micromark-util-character": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/micromark-util-character": {
- "version": "2.1.1",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/micromark-util-chunked": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz",
- "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "micromark-util-symbol": "^2.0.0"
- }
- },
- "node_modules/micromark-util-classify-character": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz",
- "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "micromark-util-character": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/micromark-util-combine-extensions": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz",
- "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "micromark-util-chunked": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/micromark-util-decode-numeric-character-reference": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz",
- "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "micromark-util-symbol": "^2.0.0"
- }
- },
- "node_modules/micromark-util-decode-string": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz",
- "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "decode-named-character-reference": "^1.0.0",
- "micromark-util-character": "^2.0.0",
- "micromark-util-decode-numeric-character-reference": "^2.0.0",
- "micromark-util-symbol": "^2.0.0"
- }
- },
- "node_modules/micromark-util-encode": {
- "version": "2.0.1",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "license": "MIT"
- },
- "node_modules/micromark-util-html-tag-name": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz",
- "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "license": "MIT"
- },
- "node_modules/micromark-util-normalize-identifier": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz",
- "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "micromark-util-symbol": "^2.0.0"
- }
- },
- "node_modules/micromark-util-resolve-all": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz",
- "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/micromark-util-sanitize-uri": {
- "version": "2.0.1",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "micromark-util-character": "^2.0.0",
- "micromark-util-encode": "^2.0.0",
- "micromark-util-symbol": "^2.0.0"
- }
- },
- "node_modules/micromark-util-subtokenize": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz",
- "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "devlop": "^1.0.0",
- "micromark-util-chunked": "^2.0.0",
- "micromark-util-symbol": "^2.0.0",
- "micromark-util-types": "^2.0.0"
- }
- },
- "node_modules/micromark-util-symbol": {
- "version": "2.0.1",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "license": "MIT"
- },
- "node_modules/micromark-util-types": {
- "version": "2.0.2",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "license": "MIT"
- },
"node_modules/mime": {
"version": "2.6.0",
"dev": true,
@@ -5659,7 +4574,6 @@
},
"node_modules/mime-db": {
"version": "1.52.0",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.6"
@@ -5667,7 +4581,6 @@
},
"node_modules/mime-types": {
"version": "2.1.35",
- "dev": true,
"license": "MIT",
"dependencies": {
"mime-db": "1.52.0"
@@ -5684,83 +4597,6 @@
"node": ">=4"
}
},
- "node_modules/miniflare": {
- "version": "4.20250508.3",
- "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-4.20250508.3.tgz",
- "integrity": "sha512-43oTmZ0CCmUcieetI5YDDyX0IiwhOcVIWzdBBCqWXK3F1XgQwg4d3fTqRyJnCmHIoaYx9CE1kTEKZC1UahPQhA==",
- "license": "MIT",
- "dependencies": {
- "@cspotcode/source-map-support": "0.8.1",
- "acorn": "8.14.0",
- "acorn-walk": "8.3.2",
- "exit-hook": "2.2.1",
- "glob-to-regexp": "0.4.1",
- "sharp": "^0.33.5",
- "stoppable": "1.1.0",
- "undici": "^5.28.5",
- "workerd": "1.20250508.0",
- "ws": "8.18.0",
- "youch": "3.3.4",
- "zod": "3.22.3"
- },
- "bin": {
- "miniflare": "bootstrap.js"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/miniflare/node_modules/acorn": {
- "version": "8.14.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
- "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
- "license": "MIT",
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/miniflare/node_modules/acorn-walk": {
- "version": "8.3.2",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz",
- "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==",
- "license": "MIT",
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/miniflare/node_modules/ws": {
- "version": "8.18.0",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz",
- "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==",
- "license": "MIT",
- "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
- }
- }
- },
- "node_modules/miniflare/node_modules/zod": {
- "version": "3.22.3",
- "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.3.tgz",
- "integrity": "sha512-EjIevzuJRiRPbVH4mGc8nApb/lVLKVpmUhAaR5R5doKGfAnGJ6Gr3CViAVjP+4FWSxCsybeWQdcgCtbX+7oZug==",
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/colinhacks"
- }
- },
"node_modules/minimatch": {
"version": "9.0.5",
"dev": true,
@@ -5783,28 +4619,13 @@
"node": ">=16 || 14 >=14.17"
}
},
- "node_modules/mrmime": {
- "version": "2.0.1",
- "license": "MIT",
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/ms": {
"version": "2.1.3",
"license": "MIT"
},
- "node_modules/mustache": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz",
- "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==",
- "license": "MIT",
- "bin": {
- "mustache": "bin/mustache"
- }
- },
"node_modules/nanoid": {
"version": "3.3.11",
+ "dev": true,
"funding": [
{
"type": "github",
@@ -5832,87 +4653,36 @@
"node": "^20.0.0 || >=22.0.0"
}
},
- "node_modules/neotraverse": {
- "version": "0.6.18",
+ "node_modules/negotiator": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
"license": "MIT",
"engines": {
- "node": ">= 10"
+ "node": ">= 0.6"
}
},
- "node_modules/nlcst-to-string": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-4.0.0.tgz",
- "integrity": "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==",
- "license": "MIT",
- "dependencies": {
- "@types/nlcst": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/node-fetch": {
- "version": "2.7.0",
- "license": "MIT",
- "dependencies": {
- "whatwg-url": "^5.0.0"
- },
- "engines": {
- "node": "4.x || >=6.0.0"
- },
- "peerDependencies": {
- "encoding": "^0.1.0"
- },
- "peerDependenciesMeta": {
- "encoding": {
- "optional": true
- }
- }
- },
- "node_modules/node-fetch-native": {
- "version": "1.6.6",
- "license": "MIT"
- },
- "node_modules/node-fetch/node_modules/tr46": {
- "version": "0.0.3",
- "license": "MIT"
- },
- "node_modules/node-fetch/node_modules/webidl-conversions": {
- "version": "3.0.1",
- "license": "BSD-2-Clause"
- },
- "node_modules/node-fetch/node_modules/whatwg-url": {
- "version": "5.0.0",
- "license": "MIT",
- "dependencies": {
- "tr46": "~0.0.3",
- "webidl-conversions": "^3.0.0"
- }
- },
- "node_modules/node-mock-http": {
- "version": "1.0.0",
- "license": "MIT"
- },
"node_modules/node-releases": {
"version": "2.0.19",
+ "dev": true,
"license": "MIT"
},
- "node_modules/normalize-path": {
- "version": "3.0.0",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/nwsapi": {
"version": "2.2.20",
"dev": true,
"license": "MIT"
},
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/object-inspect": {
"version": "1.13.4",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
@@ -5921,19 +4691,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/ofetch": {
- "version": "1.4.1",
- "license": "MIT",
- "dependencies": {
- "destr": "^2.0.3",
- "node-fetch-native": "^1.6.4",
- "ufo": "^1.5.4"
- }
- },
- "node_modules/ohash": {
- "version": "2.0.11",
- "license": "MIT"
- },
"node_modules/on-finished": {
"version": "2.4.1",
"license": "MIT",
@@ -5952,93 +4709,14 @@
"wrappy": "1"
}
},
- "node_modules/oniguruma-parser": {
- "version": "0.12.1",
- "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.1.tgz",
- "integrity": "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==",
- "license": "MIT"
- },
- "node_modules/oniguruma-to-es": {
- "version": "4.3.3",
- "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.3.tgz",
- "integrity": "sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==",
- "license": "MIT",
- "dependencies": {
- "oniguruma-parser": "^0.12.1",
- "regex": "^6.0.1",
- "regex-recursion": "^6.0.2"
- }
- },
- "node_modules/p-limit": {
- "version": "6.2.0",
- "license": "MIT",
- "dependencies": {
- "yocto-queue": "^1.1.1"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-queue": {
- "version": "8.1.0",
- "license": "MIT",
- "dependencies": {
- "eventemitter3": "^5.0.1",
- "p-timeout": "^6.1.2"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-timeout": {
- "version": "6.1.4",
- "license": "MIT",
- "engines": {
- "node": ">=14.16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/package-json-from-dist": {
"version": "1.0.1",
"dev": true,
"license": "BlueOak-1.0.0"
},
- "node_modules/package-manager-detector": {
- "version": "1.3.0",
- "license": "MIT"
- },
- "node_modules/pako": {
- "version": "0.2.9",
- "license": "MIT"
- },
- "node_modules/parse-latin": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/parse-latin/-/parse-latin-7.0.0.tgz",
- "integrity": "sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==",
- "license": "MIT",
- "dependencies": {
- "@types/nlcst": "^2.0.0",
- "@types/unist": "^3.0.0",
- "nlcst-to-string": "^4.0.0",
- "unist-util-modify-children": "^4.0.0",
- "unist-util-visit-children": "^3.0.0",
- "vfile": "^6.0.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
"node_modules/parse5": {
"version": "7.3.0",
+ "dev": true,
"license": "MIT",
"dependencies": {
"entities": "^6.0.0"
@@ -6047,6 +4725,15 @@
"url": "https://github.com/inikulin/parse5?sponsor=1"
}
},
+ "node_modules/parseurl": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/path-key": {
"version": "3.1.1",
"dev": true,
@@ -6075,12 +4762,9 @@
"dev": true,
"license": "ISC"
},
- "node_modules/path-to-regexp": {
- "version": "6.3.0",
- "license": "MIT"
- },
"node_modules/pathe": {
"version": "2.0.3",
+ "dev": true,
"license": "MIT"
},
"node_modules/pathval": {
@@ -6095,10 +4779,12 @@
},
"node_modules/picocolors": {
"version": "1.1.1",
+ "dev": true,
"license": "ISC"
},
"node_modules/picomatch": {
"version": "4.0.2",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=12"
@@ -6109,6 +4795,7 @@
},
"node_modules/postcss": {
"version": "8.5.3",
+ "dev": true,
"funding": [
{
"type": "opencollective",
@@ -6157,12 +4844,6 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/printable-characters": {
- "version": "1.0.42",
- "resolved": "https://registry.npmjs.org/printable-characters/-/printable-characters-1.0.42.tgz",
- "integrity": "sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==",
- "license": "Unlicense"
- },
"node_modules/prisma": {
"version": "6.8.2",
"devOptional": true,
@@ -6187,39 +4868,17 @@
}
}
},
- "node_modules/prismjs": {
- "version": "1.30.0",
- "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz",
- "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/prompts": {
- "version": "2.4.2",
+ "node_modules/proxy-addr": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
+ "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
"license": "MIT",
"dependencies": {
- "kleur": "^3.0.3",
- "sisteransi": "^1.0.5"
+ "forwarded": "0.2.0",
+ "ipaddr.js": "1.9.1"
},
"engines": {
- "node": ">= 6"
- }
- },
- "node_modules/prompts/node_modules/kleur": {
- "version": "3.0.3",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/property-information": {
- "version": "7.1.0",
- "license": "MIT",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
+ "node": ">= 0.10"
}
},
"node_modules/punycode": {
@@ -6244,10 +4903,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/radix3": {
- "version": "1.1.2",
- "license": "MIT"
- },
"node_modules/range-parser": {
"version": "1.2.1",
"license": "MIT",
@@ -6255,6 +4910,33 @@
"node": ">= 0.6"
}
},
+ "node_modules/raw-body": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
+ "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
+ "license": "MIT",
+ "dependencies": {
+ "bytes": "3.1.2",
+ "http-errors": "2.0.0",
+ "iconv-lite": "0.4.24",
+ "unpipe": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/raw-body/node_modules/iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "license": "MIT",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/react": {
"version": "19.1.0",
"license": "MIT",
@@ -6279,6 +4961,7 @@
},
"node_modules/react-refresh": {
"version": "0.17.0",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
@@ -6327,6 +5010,38 @@
}
}
},
+ "node_modules/react-router": {
+ "version": "6.30.1",
+ "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.30.1.tgz",
+ "integrity": "sha512-X1m21aEmxGXqENEPG3T6u0Th7g0aS4ZmoNynhbs+Cn+q+QGTLt+d5IQ2bHAXKzKcxGJjxACpVbnYQSCRcfxHlQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@remix-run/router": "1.23.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.8"
+ }
+ },
+ "node_modules/react-router-dom": {
+ "version": "6.30.1",
+ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.30.1.tgz",
+ "integrity": "sha512-llKsgOkZdbPU1Eg3zK8lCn+sjD9wMRZZPuzmdWWX5SUs8OFkN5HnFVC0u5KMeMaC9aoancFI/KoLuKPqN+hxHw==",
+ "license": "MIT",
+ "dependencies": {
+ "@remix-run/router": "1.23.0",
+ "react-router": "6.30.1"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.8",
+ "react-dom": ">=16.8"
+ }
+ },
"node_modules/react-style-singleton": {
"version": "2.2.3",
"license": "MIT",
@@ -6347,17 +5062,6 @@
}
}
},
- "node_modules/readdirp": {
- "version": "4.1.2",
- "license": "MIT",
- "engines": {
- "node": ">= 14.18.0"
- },
- "funding": {
- "type": "individual",
- "url": "https://paulmillr.com/funding/"
- }
- },
"node_modules/redent": {
"version": "3.0.0",
"dev": true,
@@ -6370,233 +5074,29 @@
"node": ">=8"
}
},
- "node_modules/regex": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/regex/-/regex-6.0.1.tgz",
- "integrity": "sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==",
+ "node_modules/require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+ "dev": true,
"license": "MIT",
- "dependencies": {
- "regex-utilities": "^2.3.0"
- }
- },
- "node_modules/regex-recursion": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-6.0.2.tgz",
- "integrity": "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==",
- "license": "MIT",
- "dependencies": {
- "regex-utilities": "^2.3.0"
- }
- },
- "node_modules/regex-utilities": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz",
- "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==",
- "license": "MIT"
- },
- "node_modules/rehype": {
- "version": "13.0.2",
- "license": "MIT",
- "dependencies": {
- "@types/hast": "^3.0.0",
- "rehype-parse": "^9.0.0",
- "rehype-stringify": "^10.0.0",
- "unified": "^11.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/rehype-parse": {
- "version": "9.0.1",
- "license": "MIT",
- "dependencies": {
- "@types/hast": "^3.0.0",
- "hast-util-from-html": "^2.0.0",
- "unified": "^11.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/rehype-raw": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz",
- "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==",
- "license": "MIT",
- "dependencies": {
- "@types/hast": "^3.0.0",
- "hast-util-raw": "^9.0.0",
- "vfile": "^6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/rehype-stringify": {
- "version": "10.0.1",
- "license": "MIT",
- "dependencies": {
- "@types/hast": "^3.0.0",
- "hast-util-to-html": "^9.0.0",
- "unified": "^11.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/remark-gfm": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz",
- "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==",
- "license": "MIT",
- "dependencies": {
- "@types/mdast": "^4.0.0",
- "mdast-util-gfm": "^3.0.0",
- "micromark-extension-gfm": "^3.0.0",
- "remark-parse": "^11.0.0",
- "remark-stringify": "^11.0.0",
- "unified": "^11.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/remark-parse": {
- "version": "11.0.0",
- "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz",
- "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==",
- "license": "MIT",
- "dependencies": {
- "@types/mdast": "^4.0.0",
- "mdast-util-from-markdown": "^2.0.0",
- "micromark-util-types": "^2.0.0",
- "unified": "^11.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/remark-rehype": {
- "version": "11.1.2",
- "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz",
- "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==",
- "license": "MIT",
- "dependencies": {
- "@types/hast": "^3.0.0",
- "@types/mdast": "^4.0.0",
- "mdast-util-to-hast": "^13.0.0",
- "unified": "^11.0.0",
- "vfile": "^6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/remark-smartypants": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/remark-smartypants/-/remark-smartypants-3.0.2.tgz",
- "integrity": "sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==",
- "license": "MIT",
- "dependencies": {
- "retext": "^9.0.0",
- "retext-smartypants": "^6.0.0",
- "unified": "^11.0.4",
- "unist-util-visit": "^5.0.0"
- },
"engines": {
- "node": ">=16.0.0"
+ "node": ">=0.10.0"
}
},
- "node_modules/remark-stringify": {
- "version": "11.0.0",
- "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz",
- "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==",
+ "node_modules/resolve-pkg-maps": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
+ "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
+ "dev": true,
"license": "MIT",
- "dependencies": {
- "@types/mdast": "^4.0.0",
- "mdast-util-to-markdown": "^2.0.0",
- "unified": "^11.0.0"
- },
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/restructure": {
- "version": "3.0.2",
- "license": "MIT"
- },
- "node_modules/retext": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/retext/-/retext-9.0.0.tgz",
- "integrity": "sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==",
- "license": "MIT",
- "dependencies": {
- "@types/nlcst": "^2.0.0",
- "retext-latin": "^4.0.0",
- "retext-stringify": "^4.0.0",
- "unified": "^11.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/retext-latin": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/retext-latin/-/retext-latin-4.0.0.tgz",
- "integrity": "sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==",
- "license": "MIT",
- "dependencies": {
- "@types/nlcst": "^2.0.0",
- "parse-latin": "^7.0.0",
- "unified": "^11.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/retext-smartypants": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/retext-smartypants/-/retext-smartypants-6.2.0.tgz",
- "integrity": "sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==",
- "license": "MIT",
- "dependencies": {
- "@types/nlcst": "^2.0.0",
- "nlcst-to-string": "^4.0.0",
- "unist-util-visit": "^5.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/retext-stringify": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/retext-stringify/-/retext-stringify-4.0.0.tgz",
- "integrity": "sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==",
- "license": "MIT",
- "dependencies": {
- "@types/nlcst": "^2.0.0",
- "nlcst-to-string": "^4.0.0",
- "unified": "^11.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
+ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
}
},
"node_modules/rollup": {
"version": "4.40.2",
+ "dev": true,
"license": "MIT",
"dependencies": {
"@types/estree": "1.0.7"
@@ -6639,6 +5139,7 @@
"cpu": [
"arm"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -6652,6 +5153,7 @@
"cpu": [
"arm64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -6665,6 +5167,7 @@
"cpu": [
"arm64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -6678,6 +5181,7 @@
"cpu": [
"x64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -6691,6 +5195,7 @@
"cpu": [
"arm64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -6704,6 +5209,7 @@
"cpu": [
"x64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -6717,6 +5223,7 @@
"cpu": [
"arm"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -6730,6 +5237,7 @@
"cpu": [
"arm"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -6743,6 +5251,7 @@
"cpu": [
"arm64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -6756,6 +5265,7 @@
"cpu": [
"arm64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -6769,6 +5279,7 @@
"cpu": [
"loong64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -6782,6 +5293,7 @@
"cpu": [
"ppc64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -6795,6 +5307,7 @@
"cpu": [
"riscv64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -6808,6 +5321,7 @@
"cpu": [
"riscv64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -6821,6 +5335,7 @@
"cpu": [
"s390x"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -6834,6 +5349,7 @@
"cpu": [
"x64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -6847,6 +5363,7 @@
"cpu": [
"arm64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -6860,6 +5377,7 @@
"cpu": [
"ia32"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -6873,34 +5391,50 @@
"cpu": [
"x64"
],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
"win32"
]
},
- "node_modules/rollup/node_modules/fsevents": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "hasInstallScript": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
"node_modules/rrweb-cssom": {
"version": "0.8.0",
"dev": true,
"license": "MIT"
},
+ "node_modules/rxjs": {
+ "version": "7.8.2",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz",
+ "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.1.0"
+ }
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
"node_modules/safer-buffer": {
"version": "2.1.2",
- "dev": true,
"license": "MIT"
},
"node_modules/saxes": {
@@ -6920,426 +5454,100 @@
},
"node_modules/semver": {
"version": "6.3.1",
+ "dev": true,
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
}
},
- "node_modules/send": {
- "version": "1.2.0",
+ "node_modules/serve-static": {
+ "version": "1.16.2",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz",
+ "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==",
"license": "MIT",
"dependencies": {
- "debug": "^4.3.5",
- "encodeurl": "^2.0.0",
- "escape-html": "^1.0.3",
- "etag": "^1.8.1",
- "fresh": "^2.0.0",
- "http-errors": "^2.0.0",
- "mime-types": "^3.0.1",
- "ms": "^2.1.3",
- "on-finished": "^2.4.1",
- "range-parser": "^1.2.1",
- "statuses": "^2.0.1"
+ "encodeurl": "~2.0.0",
+ "escape-html": "~1.0.3",
+ "parseurl": "~1.3.3",
+ "send": "0.19.0"
},
"engines": {
- "node": ">= 18"
+ "node": ">= 0.8.0"
}
},
- "node_modules/send/node_modules/mime-db": {
- "version": "1.54.0",
+ "node_modules/serve-static/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/serve-static/node_modules/debug/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "license": "MIT"
+ },
+ "node_modules/serve-static/node_modules/fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
"license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
- "node_modules/send/node_modules/mime-types": {
- "version": "3.0.1",
+ "node_modules/serve-static/node_modules/mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
"license": "MIT",
- "dependencies": {
- "mime-db": "^1.54.0"
+ "bin": {
+ "mime": "cli.js"
},
"engines": {
- "node": ">= 0.6"
+ "node": ">=4"
}
},
- "node_modules/server-destroy": {
- "version": "1.0.1",
- "license": "ISC"
+ "node_modules/serve-static/node_modules/send": {
+ "version": "0.19.0",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz",
+ "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",
+ "license": "MIT",
+ "dependencies": {
+ "debug": "2.6.9",
+ "depd": "2.0.0",
+ "destroy": "1.2.0",
+ "encodeurl": "~1.0.2",
+ "escape-html": "~1.0.3",
+ "etag": "~1.8.1",
+ "fresh": "0.5.2",
+ "http-errors": "2.0.0",
+ "mime": "1.6.0",
+ "ms": "2.1.3",
+ "on-finished": "2.4.1",
+ "range-parser": "~1.2.1",
+ "statuses": "2.0.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/serve-static/node_modules/send/node_modules/encodeurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
},
"node_modules/setprototypeof": {
"version": "1.2.0",
"license": "ISC"
},
- "node_modules/sharp": {
- "version": "0.33.5",
- "hasInstallScript": true,
- "license": "Apache-2.0",
- "dependencies": {
- "color": "^4.2.3",
- "detect-libc": "^2.0.3",
- "semver": "^7.6.3"
- },
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-darwin-arm64": "0.33.5",
- "@img/sharp-darwin-x64": "0.33.5",
- "@img/sharp-libvips-darwin-arm64": "1.0.4",
- "@img/sharp-libvips-darwin-x64": "1.0.4",
- "@img/sharp-libvips-linux-arm": "1.0.5",
- "@img/sharp-libvips-linux-arm64": "1.0.4",
- "@img/sharp-libvips-linux-s390x": "1.0.4",
- "@img/sharp-libvips-linux-x64": "1.0.4",
- "@img/sharp-libvips-linuxmusl-arm64": "1.0.4",
- "@img/sharp-libvips-linuxmusl-x64": "1.0.4",
- "@img/sharp-linux-arm": "0.33.5",
- "@img/sharp-linux-arm64": "0.33.5",
- "@img/sharp-linux-s390x": "0.33.5",
- "@img/sharp-linux-x64": "0.33.5",
- "@img/sharp-linuxmusl-arm64": "0.33.5",
- "@img/sharp-linuxmusl-x64": "0.33.5",
- "@img/sharp-wasm32": "0.33.5",
- "@img/sharp-win32-ia32": "0.33.5",
- "@img/sharp-win32-x64": "0.33.5"
- }
- },
- "node_modules/sharp/node_modules/@img/sharp-darwin-arm64": {
- "version": "0.33.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz",
- "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==",
- "cpu": [
- "arm64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-darwin-arm64": "1.0.4"
- }
- },
- "node_modules/sharp/node_modules/@img/sharp-darwin-x64": {
- "version": "0.33.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz",
- "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==",
- "cpu": [
- "x64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-darwin-x64": "1.0.4"
- }
- },
- "node_modules/sharp/node_modules/@img/sharp-libvips-darwin-arm64": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz",
- "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==",
- "cpu": [
- "arm64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "darwin"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/sharp/node_modules/@img/sharp-libvips-darwin-x64": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz",
- "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==",
- "cpu": [
- "x64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "darwin"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/sharp/node_modules/@img/sharp-libvips-linux-arm": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz",
- "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==",
- "cpu": [
- "arm"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/sharp/node_modules/@img/sharp-libvips-linux-arm64": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz",
- "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==",
- "cpu": [
- "arm64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/sharp/node_modules/@img/sharp-libvips-linux-s390x": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz",
- "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==",
- "cpu": [
- "s390x"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/sharp/node_modules/@img/sharp-libvips-linuxmusl-arm64": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz",
- "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==",
- "cpu": [
- "arm64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/sharp/node_modules/@img/sharp-libvips-linuxmusl-x64": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz",
- "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==",
- "cpu": [
- "x64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/sharp/node_modules/@img/sharp-linux-arm": {
- "version": "0.33.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz",
- "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==",
- "cpu": [
- "arm"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linux-arm": "1.0.5"
- }
- },
- "node_modules/sharp/node_modules/@img/sharp-linux-arm64": {
- "version": "0.33.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz",
- "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==",
- "cpu": [
- "arm64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linux-arm64": "1.0.4"
- }
- },
- "node_modules/sharp/node_modules/@img/sharp-linux-s390x": {
- "version": "0.33.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz",
- "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==",
- "cpu": [
- "s390x"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linux-s390x": "1.0.4"
- }
- },
- "node_modules/sharp/node_modules/@img/sharp-linuxmusl-arm64": {
- "version": "0.33.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz",
- "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==",
- "cpu": [
- "arm64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linuxmusl-arm64": "1.0.4"
- }
- },
- "node_modules/sharp/node_modules/@img/sharp-linuxmusl-x64": {
- "version": "0.33.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz",
- "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==",
- "cpu": [
- "x64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linuxmusl-x64": "1.0.4"
- }
- },
- "node_modules/sharp/node_modules/@img/sharp-wasm32": {
- "version": "0.33.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz",
- "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==",
- "cpu": [
- "wasm32"
- ],
- "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT",
- "optional": true,
- "dependencies": {
- "@emnapi/runtime": "^1.2.0"
- },
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/sharp/node_modules/@img/sharp-win32-ia32": {
- "version": "0.33.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz",
- "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==",
- "cpu": [
- "ia32"
- ],
- "license": "Apache-2.0 AND LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/sharp/node_modules/@img/sharp-win32-x64": {
- "version": "0.33.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz",
- "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==",
- "cpu": [
- "x64"
- ],
- "license": "Apache-2.0 AND LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/sharp/node_modules/semver": {
- "version": "7.7.2",
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/shebang-command": {
"version": "2.0.0",
"dev": true,
@@ -7359,25 +5567,21 @@
"node": ">=8"
}
},
- "node_modules/shiki": {
- "version": "3.4.2",
- "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.4.2.tgz",
- "integrity": "sha512-wuxzZzQG8kvZndD7nustrNFIKYJ1jJoWIPaBpVe2+KHSvtzMi4SBjOxrigs8qeqce/l3U0cwiC+VAkLKSunHQQ==",
+ "node_modules/shell-quote": {
+ "version": "1.8.3",
+ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz",
+ "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==",
+ "dev": true,
"license": "MIT",
- "dependencies": {
- "@shikijs/core": "3.4.2",
- "@shikijs/engine-javascript": "3.4.2",
- "@shikijs/engine-oniguruma": "3.4.2",
- "@shikijs/langs": "3.4.2",
- "@shikijs/themes": "3.4.2",
- "@shikijs/types": "3.4.2",
- "@shikijs/vscode-textmate": "^10.0.2",
- "@types/hast": "^3.0.4"
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/side-channel": {
"version": "1.1.0",
- "dev": true,
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0",
@@ -7395,7 +5599,6 @@
},
"node_modules/side-channel-list": {
"version": "1.0.0",
- "dev": true,
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0",
@@ -7410,7 +5613,6 @@
},
"node_modules/side-channel-map": {
"version": "1.0.1",
- "dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.2",
@@ -7427,7 +5629,6 @@
},
"node_modules/side-channel-weakmap": {
"version": "1.0.2",
- "dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.2",
@@ -7461,52 +5662,19 @@
"url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/simple-swizzle": {
- "version": "0.2.2",
- "license": "MIT",
- "dependencies": {
- "is-arrayish": "^0.3.1"
- }
- },
- "node_modules/sisteransi": {
- "version": "1.0.5",
- "license": "MIT"
- },
- "node_modules/smol-toml": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.3.4.tgz",
- "integrity": "sha512-UOPtVuYkzYGee0Bd2Szz8d2G3RfMfJ2t3qVdZUAozZyAk+a0Sxa+QKix0YCwjL/A1RR0ar44nCxaoN9FxdJGwA==",
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">= 18"
- },
- "funding": {
- "url": "https://github.com/sponsors/cyyynthia"
- }
- },
- "node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/source-map-js": {
"version": "1.2.1",
+ "dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
}
},
- "node_modules/space-separated-tokens": {
- "version": "2.0.2",
- "license": "MIT",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
+ "node_modules/spawn-command": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz",
+ "integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==",
+ "dev": true
},
"node_modules/stackback": {
"version": "0.0.2",
@@ -7515,16 +5683,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/stacktracey": {
- "version": "2.1.8",
- "resolved": "https://registry.npmjs.org/stacktracey/-/stacktracey-2.1.8.tgz",
- "integrity": "sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==",
- "license": "Unlicense",
- "dependencies": {
- "as-table": "^1.0.36",
- "get-source": "^2.0.12"
- }
- },
"node_modules/statuses": {
"version": "2.0.1",
"license": "MIT",
@@ -7539,31 +5697,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/stoppable": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz",
- "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==",
- "license": "MIT",
- "engines": {
- "node": ">=4",
- "npm": ">=6"
- }
- },
- "node_modules/string-width": {
- "version": "7.2.0",
- "license": "MIT",
- "dependencies": {
- "emoji-regex": "^10.3.0",
- "get-east-asian-width": "^1.0.0",
- "strip-ansi": "^7.1.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/string-width-cjs": {
"name": "string-width",
"version": "4.2.3",
@@ -7594,20 +5727,9 @@
"node": ">=8"
}
},
- "node_modules/stringify-entities": {
- "version": "4.0.4",
- "license": "MIT",
- "dependencies": {
- "character-entities-html4": "^2.0.0",
- "character-entities-legacy": "^3.0.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
"node_modules/strip-ansi": {
"version": "7.1.0",
+ "dev": true,
"license": "MIT",
"dependencies": {
"ansi-regex": "^6.0.1"
@@ -7633,6 +5755,7 @@
},
"node_modules/strip-ansi/node_modules/ansi-regex": {
"version": "6.1.0",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=12"
@@ -7712,10 +5835,6 @@
"node": ">=18"
}
},
- "node_modules/tiny-inflate": {
- "version": "1.0.3",
- "license": "MIT"
- },
"node_modules/tinybench": {
"version": "2.9.0",
"resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz",
@@ -7725,10 +5844,12 @@
},
"node_modules/tinyexec": {
"version": "0.3.2",
+ "dev": true,
"license": "MIT"
},
"node_modules/tinyglobby": {
"version": "0.2.13",
+ "dev": true,
"license": "MIT",
"dependencies": {
"fdir": "^6.4.4",
@@ -7816,20 +5937,14 @@
"node": ">=18"
}
},
- "node_modules/trim-lines": {
- "version": "3.0.1",
+ "node_modules/tree-kill": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
+ "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
+ "dev": true,
"license": "MIT",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/trough": {
- "version": "2.2.0",
- "license": "MIT",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
+ "bin": {
+ "tree-kill": "cli.js"
}
},
"node_modules/ts-node": {
@@ -7882,42 +5997,47 @@
"node": ">=0.3.1"
}
},
- "node_modules/tsconfck": {
- "version": "3.1.5",
- "license": "MIT",
- "bin": {
- "tsconfck": "bin/tsconfck.js"
- },
- "engines": {
- "node": "^18 || >=20"
- },
- "peerDependencies": {
- "typescript": "^5.0.0"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
"node_modules/tslib": {
"version": "2.8.1",
"license": "0BSD"
},
- "node_modules/type-fest": {
- "version": "4.41.0",
- "license": "(MIT OR CC0-1.0)",
- "engines": {
- "node": ">=16"
+ "node_modules/tsx": {
+ "version": "4.19.4",
+ "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.4.tgz",
+ "integrity": "sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "esbuild": "~0.25.0",
+ "get-tsconfig": "^4.7.5"
},
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "bin": {
+ "tsx": "dist/cli.mjs"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ }
+ },
+ "node_modules/type-is": {
+ "version": "1.6.18",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+ "license": "MIT",
+ "dependencies": {
+ "media-typer": "0.3.0",
+ "mime-types": "~2.1.24"
+ },
+ "engines": {
+ "node": ">= 0.6"
}
},
"node_modules/typescript": {
"version": "5.8.3",
+ "devOptional": true,
"license": "Apache-2.0",
- "peer": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -7926,299 +6046,25 @@
"node": ">=14.17"
}
},
- "node_modules/ufo": {
- "version": "1.6.1",
- "license": "MIT"
- },
- "node_modules/ultrahtml": {
- "version": "1.6.0",
- "license": "MIT"
- },
- "node_modules/uncrypto": {
- "version": "0.1.3",
- "license": "MIT"
- },
- "node_modules/undici": {
- "version": "5.29.0",
- "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz",
- "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==",
- "license": "MIT",
- "dependencies": {
- "@fastify/busboy": "^2.0.0"
- },
- "engines": {
- "node": ">=14.0"
- }
- },
"node_modules/undici-types": {
"version": "6.21.0",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
"integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
+ "dev": true,
"license": "MIT"
},
- "node_modules/unenv": {
- "version": "2.0.0-rc.17",
- "resolved": "https://registry.npmjs.org/unenv/-/unenv-2.0.0-rc.17.tgz",
- "integrity": "sha512-B06u0wXkEd+o5gOCMl/ZHl5cfpYbDZKAT+HWTL+Hws6jWu7dCiqBBXXXzMFcFVJb8D4ytAnYmxJA83uwOQRSsg==",
+ "node_modules/unpipe": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
"license": "MIT",
- "dependencies": {
- "defu": "^6.1.4",
- "exsolve": "^1.0.4",
- "ohash": "^2.0.11",
- "pathe": "^2.0.3",
- "ufo": "^1.6.1"
+ "engines": {
+ "node": ">= 0.8"
}
},
- "node_modules/unicode-properties": {
- "version": "1.4.1",
- "license": "MIT",
- "dependencies": {
- "base64-js": "^1.3.0",
- "unicode-trie": "^2.0.0"
- }
- },
- "node_modules/unicode-trie": {
- "version": "2.0.0",
- "license": "MIT",
- "dependencies": {
- "pako": "^0.2.5",
- "tiny-inflate": "^1.0.0"
- }
- },
- "node_modules/unified": {
- "version": "11.0.5",
- "license": "MIT",
- "dependencies": {
- "@types/unist": "^3.0.0",
- "bail": "^2.0.0",
- "devlop": "^1.0.0",
- "extend": "^3.0.0",
- "is-plain-obj": "^4.0.0",
- "trough": "^2.0.0",
- "vfile": "^6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unifont": {
- "version": "0.5.0",
- "license": "MIT",
- "dependencies": {
- "css-tree": "^3.0.0",
- "ohash": "^2.0.0"
- }
- },
- "node_modules/unist-util-find-after": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz",
- "integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==",
- "license": "MIT",
- "dependencies": {
- "@types/unist": "^3.0.0",
- "unist-util-is": "^6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unist-util-is": {
- "version": "6.0.0",
- "license": "MIT",
- "dependencies": {
- "@types/unist": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unist-util-modify-children": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-4.0.0.tgz",
- "integrity": "sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==",
- "license": "MIT",
- "dependencies": {
- "@types/unist": "^3.0.0",
- "array-iterate": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unist-util-position": {
- "version": "5.0.0",
- "license": "MIT",
- "dependencies": {
- "@types/unist": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unist-util-remove-position": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz",
- "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==",
- "license": "MIT",
- "dependencies": {
- "@types/unist": "^3.0.0",
- "unist-util-visit": "^5.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unist-util-stringify-position": {
- "version": "4.0.0",
- "license": "MIT",
- "dependencies": {
- "@types/unist": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unist-util-visit": {
- "version": "5.0.0",
- "license": "MIT",
- "dependencies": {
- "@types/unist": "^3.0.0",
- "unist-util-is": "^6.0.0",
- "unist-util-visit-parents": "^6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unist-util-visit-children": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/unist-util-visit-children/-/unist-util-visit-children-3.0.0.tgz",
- "integrity": "sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==",
- "license": "MIT",
- "dependencies": {
- "@types/unist": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unist-util-visit-parents": {
- "version": "6.0.1",
- "license": "MIT",
- "dependencies": {
- "@types/unist": "^3.0.0",
- "unist-util-is": "^6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unstorage": {
- "version": "1.16.0",
- "license": "MIT",
- "dependencies": {
- "anymatch": "^3.1.3",
- "chokidar": "^4.0.3",
- "destr": "^2.0.5",
- "h3": "^1.15.2",
- "lru-cache": "^10.4.3",
- "node-fetch-native": "^1.6.6",
- "ofetch": "^1.4.1",
- "ufo": "^1.6.1"
- },
- "peerDependencies": {
- "@azure/app-configuration": "^1.8.0",
- "@azure/cosmos": "^4.2.0",
- "@azure/data-tables": "^13.3.0",
- "@azure/identity": "^4.6.0",
- "@azure/keyvault-secrets": "^4.9.0",
- "@azure/storage-blob": "^12.26.0",
- "@capacitor/preferences": "^6.0.3 || ^7.0.0",
- "@deno/kv": ">=0.9.0",
- "@netlify/blobs": "^6.5.0 || ^7.0.0 || ^8.1.0",
- "@planetscale/database": "^1.19.0",
- "@upstash/redis": "^1.34.3",
- "@vercel/blob": ">=0.27.1",
- "@vercel/kv": "^1.0.1",
- "aws4fetch": "^1.0.20",
- "db0": ">=0.2.1",
- "idb-keyval": "^6.2.1",
- "ioredis": "^5.4.2",
- "uploadthing": "^7.4.4"
- },
- "peerDependenciesMeta": {
- "@azure/app-configuration": {
- "optional": true
- },
- "@azure/cosmos": {
- "optional": true
- },
- "@azure/data-tables": {
- "optional": true
- },
- "@azure/identity": {
- "optional": true
- },
- "@azure/keyvault-secrets": {
- "optional": true
- },
- "@azure/storage-blob": {
- "optional": true
- },
- "@capacitor/preferences": {
- "optional": true
- },
- "@deno/kv": {
- "optional": true
- },
- "@netlify/blobs": {
- "optional": true
- },
- "@planetscale/database": {
- "optional": true
- },
- "@upstash/redis": {
- "optional": true
- },
- "@vercel/blob": {
- "optional": true
- },
- "@vercel/kv": {
- "optional": true
- },
- "aws4fetch": {
- "optional": true
- },
- "db0": {
- "optional": true
- },
- "idb-keyval": {
- "optional": true
- },
- "ioredis": {
- "optional": true
- },
- "uploadthing": {
- "optional": true
- }
- }
- },
- "node_modules/unstorage/node_modules/lru-cache": {
- "version": "10.4.3",
- "license": "ISC"
- },
"node_modules/update-browserslist-db": {
"version": "1.1.3",
+ "dev": true,
"funding": [
{
"type": "opencollective",
@@ -8284,63 +6130,45 @@
}
}
},
+ "node_modules/utils-merge": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+ "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
"node_modules/v8-compile-cache-lib": {
"version": "3.0.1",
"dev": true,
"license": "MIT"
},
- "node_modules/vfile": {
- "version": "6.0.3",
+ "node_modules/vary": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
"license": "MIT",
- "dependencies": {
- "@types/unist": "^3.0.0",
- "vfile-message": "^4.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/vfile-location": {
- "version": "5.0.3",
- "license": "MIT",
- "dependencies": {
- "@types/unist": "^3.0.0",
- "vfile": "^6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/vfile-message": {
- "version": "4.0.2",
- "license": "MIT",
- "dependencies": {
- "@types/unist": "^3.0.0",
- "unist-util-stringify-position": "^4.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
+ "engines": {
+ "node": ">= 0.8"
}
},
"node_modules/vite": {
- "version": "6.3.5",
+ "version": "5.4.19",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.19.tgz",
+ "integrity": "sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==",
+ "dev": true,
"license": "MIT",
"dependencies": {
- "esbuild": "^0.25.0",
- "fdir": "^6.4.4",
- "picomatch": "^4.0.2",
- "postcss": "^8.5.3",
- "rollup": "^4.34.9",
- "tinyglobby": "^0.2.13"
+ "esbuild": "^0.21.3",
+ "postcss": "^8.4.43",
+ "rollup": "^4.20.0"
},
"bin": {
"vite": "bin/vite.js"
},
"engines": {
- "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
+ "node": "^18.0.0 || >=20.0.0"
},
"funding": {
"url": "https://github.com/vitejs/vite?sponsor=1"
@@ -8349,25 +6177,19 @@
"fsevents": "~2.3.3"
},
"peerDependencies": {
- "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
- "jiti": ">=1.21.0",
+ "@types/node": "^18.0.0 || >=20.0.0",
"less": "*",
"lightningcss": "^1.21.0",
"sass": "*",
"sass-embedded": "*",
"stylus": "*",
"sugarss": "*",
- "terser": "^5.16.0",
- "tsx": "^4.8.1",
- "yaml": "^2.4.2"
+ "terser": "^5.4.0"
},
"peerDependenciesMeta": {
"@types/node": {
"optional": true
},
- "jiti": {
- "optional": true
- },
"less": {
"optional": true
},
@@ -8388,12 +6210,6 @@
},
"terser": {
"optional": true
- },
- "tsx": {
- "optional": true
- },
- "yaml": {
- "optional": true
}
}
},
@@ -8420,34 +6236,60 @@
"url": "https://opencollective.com/vitest"
}
},
- "node_modules/vite/node_modules/fsevents": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "hasInstallScript": true,
+ "node_modules/vite/node_modules/@esbuild/linux-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
+ "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
"license": "MIT",
"optional": true,
"os": [
- "darwin"
+ "linux"
],
"engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ "node": ">=12"
}
},
- "node_modules/vitefu": {
- "version": "1.0.6",
+ "node_modules/vite/node_modules/esbuild": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
+ "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
+ "dev": true,
+ "hasInstallScript": true,
"license": "MIT",
- "workspaces": [
- "tests/deps/*",
- "tests/projects/*"
- ],
- "peerDependencies": {
- "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0"
+ "bin": {
+ "esbuild": "bin/esbuild"
},
- "peerDependenciesMeta": {
- "vite": {
- "optional": true
- }
+ "engines": {
+ "node": ">=12"
+ },
+ "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"
}
},
"node_modules/vitest": {
@@ -8532,14 +6374,6 @@
"node": ">=18"
}
},
- "node_modules/web-namespaces": {
- "version": "2.0.1",
- "license": "MIT",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
"node_modules/webidl-conversions": {
"version": "7.0.0",
"dev": true,
@@ -8593,15 +6427,6 @@
"node": ">= 8"
}
},
- "node_modules/which-pm-runs": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz",
- "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==",
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/why-is-node-running": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz",
@@ -8619,103 +6444,6 @@
"node": ">=8"
}
},
- "node_modules/widest-line": {
- "version": "5.0.0",
- "license": "MIT",
- "dependencies": {
- "string-width": "^7.0.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/workerd": {
- "version": "1.20250508.0",
- "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20250508.0.tgz",
- "integrity": "sha512-ffLxe7dXSuGoA6jb3Qx2SClIV1aLHfJQ6RhGhzYHjQgv7dL6fdUOSIIGgzmu2mRKs+WFSujp6c8WgKquco6w3w==",
- "hasInstallScript": true,
- "license": "Apache-2.0",
- "bin": {
- "workerd": "bin/workerd"
- },
- "engines": {
- "node": ">=16"
- },
- "optionalDependencies": {
- "@cloudflare/workerd-darwin-64": "1.20250508.0",
- "@cloudflare/workerd-darwin-arm64": "1.20250508.0",
- "@cloudflare/workerd-linux-64": "1.20250508.0",
- "@cloudflare/workerd-linux-arm64": "1.20250508.0",
- "@cloudflare/workerd-windows-64": "1.20250508.0"
- }
- },
- "node_modules/wrangler": {
- "version": "4.16.1",
- "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-4.16.1.tgz",
- "integrity": "sha512-YiLdWXcaQva2K/bqokpsZbySPmoT8TJFyJPsQPZumnkgimM9+/g/yoXArByA+pf+xU8jhw7ybQ8X1yBGXv731g==",
- "license": "MIT OR Apache-2.0",
- "dependencies": {
- "@cloudflare/kv-asset-handler": "0.4.0",
- "@cloudflare/unenv-preset": "2.3.2",
- "blake3-wasm": "2.1.5",
- "esbuild": "0.25.4",
- "miniflare": "4.20250508.3",
- "path-to-regexp": "6.3.0",
- "unenv": "2.0.0-rc.17",
- "workerd": "1.20250508.0"
- },
- "bin": {
- "wrangler": "bin/wrangler.js",
- "wrangler2": "bin/wrangler.js"
- },
- "engines": {
- "node": ">=18.0.0"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.2",
- "sharp": "^0.33.5"
- },
- "peerDependencies": {
- "@cloudflare/workers-types": "^4.20250508.0"
- },
- "peerDependenciesMeta": {
- "@cloudflare/workers-types": {
- "optional": true
- }
- }
- },
- "node_modules/wrangler/node_modules/fsevents": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "hasInstallScript": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
- "node_modules/wrap-ansi": {
- "version": "9.0.0",
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^6.2.1",
- "string-width": "^7.0.0",
- "strip-ansi": "^7.1.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
"node_modules/wrap-ansi-cjs": {
"name": "wrap-ansi",
"version": "7.0.0",
@@ -8762,16 +6490,6 @@
"node": ">=8"
}
},
- "node_modules/wrap-ansi/node_modules/ansi-styles": {
- "version": "6.2.1",
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
"node_modules/wrappy": {
"version": "1.0.2",
"dev": true,
@@ -8810,21 +6528,83 @@
"dev": true,
"license": "MIT"
},
- "node_modules/xxhash-wasm": {
- "version": "1.1.0",
- "license": "MIT"
+ "node_modules/y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=10"
+ }
},
"node_modules/yallist": {
"version": "3.1.1",
+ "dev": true,
"license": "ISC"
},
+ "node_modules/yargs": {
+ "version": "17.7.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cliui": "^8.0.1",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.3",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^21.1.1"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
"node_modules/yargs-parser": {
"version": "21.1.1",
+ "dev": true,
"license": "ISC",
"engines": {
"node": ">=12"
}
},
+ "node_modules/yargs/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/yargs/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/yargs/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/yn": {
"version": "3.1.1",
"dev": true,
@@ -8832,88 +6612,6 @@
"engines": {
"node": ">=6"
}
- },
- "node_modules/yocto-queue": {
- "version": "1.2.1",
- "license": "MIT",
- "engines": {
- "node": ">=12.20"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/yocto-spinner": {
- "version": "0.2.2",
- "license": "MIT",
- "dependencies": {
- "yoctocolors": "^2.1.1"
- },
- "engines": {
- "node": ">=18.19"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/yoctocolors": {
- "version": "2.1.1",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/youch": {
- "version": "3.3.4",
- "resolved": "https://registry.npmjs.org/youch/-/youch-3.3.4.tgz",
- "integrity": "sha512-UeVBXie8cA35DS6+nBkls68xaBBXCye0CNznrhszZjTbRVnJKQuNsyLKBTTL4ln1o1rh2PKtv35twV7irj5SEg==",
- "license": "MIT",
- "dependencies": {
- "cookie": "^0.7.1",
- "mustache": "^4.2.0",
- "stacktracey": "^2.1.8"
- }
- },
- "node_modules/youch/node_modules/cookie": {
- "version": "0.7.2",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",
- "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/zod": {
- "version": "3.24.4",
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/colinhacks"
- }
- },
- "node_modules/zod-to-json-schema": {
- "version": "3.24.5",
- "license": "ISC",
- "peerDependencies": {
- "zod": "^3.24.1"
- }
- },
- "node_modules/zod-to-ts": {
- "version": "1.2.0",
- "peerDependencies": {
- "typescript": "^4.9.4 || ^5.0.2",
- "zod": "^3"
- }
- },
- "node_modules/zwitch": {
- "version": "2.0.4",
- "license": "MIT",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
}
}
}
diff --git a/package.json b/package.json
index ad55c2f..9028ce8 100644
--- a/package.json
+++ b/package.json
@@ -3,10 +3,14 @@
"type": "module",
"version": "0.0.1",
"scripts": {
- "dev": "astro dev",
- "build": "astro build",
- "preview": "astro preview",
- "astro": "astro",
+ "dev": "concurrently \"npm run server:dev\" \"npm run client:dev\"",
+ "client:dev": "vite",
+ "server:dev": "tsx watch server/index.ts",
+ "build": "npm run client:build && npm run server:build",
+ "client:build": "vite build",
+ "server:build": "tsc --project server/tsconfig.json",
+ "preview": "npm run build && npm start",
+ "start": "node dist/server/index.js",
"test": "vitest run",
"test:watch": "vitest",
"test:coverage": "vitest run --coverage",
@@ -21,9 +25,6 @@
"prepare": "husky"
},
"dependencies": {
- "@astrojs/cloudflare": "^12.5.3",
- "@astrojs/node": "^9.2.2",
- "@astrojs/react": "^4.3.0",
"@fortawesome/fontawesome-free": "^6.7.2",
"@nanostores/react": "^1.0.0",
"@prisma/client": "^6.8.2",
@@ -34,27 +35,35 @@
"@radix-ui/react-toast": "^1.2.14",
"@types/react": "^19.1.5",
"@types/react-dom": "^19.1.5",
- "astro": "^5.8.0",
+ "cors": "^2.8.5",
+ "dotenv": "^16.5.0",
+ "express": "^4.21.2",
"nanostores": "^1.0.1",
"react": "^19.1.0",
- "react-dom": "^19.1.0"
+ "react-dom": "^19.1.0",
+ "react-router-dom": "^6.23.0"
},
"devDependencies": {
"@biomejs/biome": "^1.9.4",
"@testing-library/dom": "^10.4.0",
"@testing-library/jest-dom": "^6.6.3",
"@testing-library/react": "^16.3.0",
+ "@types/cors": "^2.8.17",
+ "@types/express": "^5.0.0",
"@types/node": "^22.15.21",
"@types/supertest": "^6.0.3",
"@vitejs/plugin-react": "^4.5.0",
"@vitest/coverage-v8": "^3.1.4",
+ "concurrently": "^8.2.2",
"husky": "^9.1.7",
"jsdom": "^26.1.0",
"prisma": "^6.8.2",
"supertest": "^7.1.1",
"ts-node": "^10.9.2",
- "vitest": "^3.1.4",
- "wrangler": "^4.16.1"
+ "tsx": "^4.7.1",
+ "typescript": "^5.7.3",
+ "vite": "^5.2.0",
+ "vitest": "^3.1.4"
},
"prisma": {
"seed": "node prisma/seed.js"
diff --git a/server/data/db.service.ts b/server/data/db.service.ts
new file mode 100644
index 0000000..2883839
--- /dev/null
+++ b/server/data/db.service.ts
@@ -0,0 +1,283 @@
+import type { Account, Transaction } from '../types.js';
+import { prisma } from './prisma';
+
+// Define the enums ourselves since Prisma isn't exporting them
+export enum AccountType {
+ CHECKING = 'CHECKING',
+ SAVINGS = 'SAVINGS',
+ CREDIT_CARD = 'CREDIT_CARD',
+ INVESTMENT = 'INVESTMENT',
+ OTHER = 'OTHER',
+}
+
+export enum AccountStatus {
+ ACTIVE = 'ACTIVE',
+ CLOSED = 'CLOSED',
+}
+
+export enum TransactionStatus {
+ PENDING = 'PENDING',
+ CLEARED = 'CLEARED',
+}
+
+export enum TransactionType {
+ DEPOSIT = 'DEPOSIT',
+ WITHDRAWAL = 'WITHDRAWAL',
+ TRANSFER = 'TRANSFER',
+ UNSPECIFIED = 'UNSPECIFIED',
+}
+
+// Account services
+export const accountService = {
+ /**
+ * Get all accounts
+ */
+ async getAll(): Promise {
+ return prisma.account.findMany({
+ orderBy: { name: 'asc' },
+ }) as Promise;
+ },
+
+ /**
+ * Get account by ID
+ */
+ async getById(id: string): Promise {
+ return prisma.account.findUnique({
+ where: { id },
+ }) as Promise;
+ },
+
+ /**
+ * Create a new account
+ */
+ async create(data: {
+ bankName: string;
+ accountNumber: string;
+ name: string;
+ type?: AccountType;
+ status?: AccountStatus;
+ currency?: string;
+ balance?: number;
+ notes?: string;
+ }): Promise {
+ return prisma.account.create({
+ data,
+ }) as Promise;
+ },
+
+ /**
+ * Update an account
+ */
+ async update(
+ id: string,
+ data: {
+ bankName?: string;
+ accountNumber?: string;
+ name?: string;
+ type?: AccountType;
+ status?: AccountStatus;
+ currency?: string;
+ balance?: number;
+ notes?: string;
+ },
+ ): Promise {
+ return prisma.account.update({
+ where: { id },
+ data,
+ }) as Promise;
+ },
+
+ /**
+ * Delete an account
+ */
+ async delete(id: string): Promise {
+ return prisma.account.delete({
+ where: { id },
+ }) as Promise;
+ },
+
+ /**
+ * Update account balance
+ */
+ async updateBalance(id: string, amount: number): Promise {
+ const account = await prisma.account.findUnique({
+ where: { id },
+ });
+
+ if (!account) return null;
+
+ return prisma.account.update({
+ where: { id },
+ data: {
+ balance: {
+ increment: amount,
+ },
+ },
+ }) as Promise;
+ },
+
+ /**
+ * Get transactions for an account
+ */
+ async getTransactions(accountId: string): Promise {
+ return prisma.transaction.findMany({
+ where: { accountId },
+ orderBy: { date: 'desc' },
+ }) as Promise;
+ },
+};
+
+// Transaction services
+export const transactionService = {
+ /**
+ * Get all transactions
+ */
+ async getAll(): Promise {
+ return prisma.transaction.findMany({
+ orderBy: { date: 'desc' },
+ }) as Promise;
+ },
+
+ /**
+ * Get transactions by account ID
+ */
+ async getByAccountId(accountId: string): Promise {
+ return prisma.transaction.findMany({
+ where: { accountId },
+ orderBy: { date: 'desc' },
+ }) as Promise;
+ },
+
+ /**
+ * Get transaction by ID
+ */
+ async getById(id: string): Promise {
+ return prisma.transaction.findUnique({
+ where: { id },
+ }) as Promise;
+ },
+
+ /**
+ * Create a new transaction and update account balance
+ */
+ async create(data: {
+ accountId: string;
+ date: Date;
+ description: string;
+ amount: number;
+ category?: string;
+ status?: TransactionStatus;
+ type?: TransactionType;
+ notes?: string;
+ tags?: string;
+ }): Promise {
+ // Use a transaction to ensure data consistency
+ return prisma.$transaction(async (tx) => {
+ // Create the transaction
+ const transaction = await tx.transaction.create({
+ data,
+ });
+
+ // Update the account balance
+ await tx.account.update({
+ where: { id: data.accountId },
+ data: {
+ balance: {
+ increment: data.amount,
+ },
+ },
+ });
+
+ return transaction as Transaction;
+ });
+ },
+
+ /**
+ * Update a transaction and adjust account balance
+ */
+ async update(
+ id: string,
+ data: {
+ accountId?: string;
+ date?: Date;
+ description?: string;
+ amount?: number;
+ category?: string;
+ status?: TransactionStatus;
+ type?: TransactionType;
+ notes?: string;
+ tags?: string;
+ },
+ ): Promise {
+ // If amount is changing, we need to adjust the account balance
+ if (typeof data.amount !== 'undefined') {
+ return prisma.$transaction(async (tx) => {
+ // Get the current transaction to calculate difference
+ const currentTxn = await tx.transaction.findUnique({
+ where: { id },
+ });
+
+ if (!currentTxn) return null;
+
+ // Amount is guaranteed to be defined at this point since we checked above
+ const amount = data.amount as number; // Use type assertion instead of non-null assertion
+ const amountDifference = amount - Number(currentTxn.amount);
+
+ // Update transaction
+ const updatedTxn = await tx.transaction.update({
+ where: { id },
+ data,
+ });
+
+ // Update account balance
+ await tx.account.update({
+ where: { id: data.accountId || currentTxn.accountId },
+ data: {
+ balance: {
+ increment: amountDifference,
+ },
+ },
+ });
+
+ return updatedTxn as Transaction;
+ });
+ }
+
+ // If amount isn't changing, just update the transaction
+ return prisma.transaction.update({
+ where: { id },
+ data,
+ }) as Promise;
+ },
+
+ /**
+ * Delete a transaction and adjust account balance
+ */
+ async delete(id: string): Promise {
+ return prisma.$transaction(async (tx) => {
+ // Get transaction before deleting
+ const transaction = await tx.transaction.findUnique({
+ where: { id },
+ });
+
+ if (!transaction) return null;
+
+ // Delete the transaction
+ const deletedTxn = await tx.transaction.delete({
+ where: { id },
+ });
+
+ // Adjust the account balance (reverse the transaction amount)
+ await tx.account.update({
+ where: { id: transaction.accountId },
+ data: {
+ balance: {
+ decrement: Number(transaction.amount),
+ },
+ },
+ });
+
+ return deletedTxn as Transaction;
+ });
+ },
+};
diff --git a/server/data/prisma.ts b/server/data/prisma.ts
new file mode 100644
index 0000000..3d6b60b
--- /dev/null
+++ b/server/data/prisma.ts
@@ -0,0 +1,13 @@
+import { PrismaClient } from '@prisma/client';
+
+// Prevent multiple instances of Prisma Client in development
+declare global {
+ // eslint-disable-next-line no-var
+ var prismaClient: PrismaClient | undefined;
+}
+
+export const prisma = global.prismaClient || new PrismaClient();
+
+if (process.env.NODE_ENV !== 'production') {
+ global.prismaClient = prisma;
+}
diff --git a/server/index.ts b/server/index.ts
new file mode 100644
index 0000000..bd89bb2
--- /dev/null
+++ b/server/index.ts
@@ -0,0 +1,39 @@
+import { dirname, join } from 'node:path';
+import { fileURLToPath } from 'node:url';
+import cors from 'cors';
+import { config } from 'dotenv';
+import express from 'express';
+
+// Load environment variables
+config();
+
+// Import API routes
+import accountsRouter from './routes/accounts.js';
+import transactionsRouter from './routes/transactions.js';
+
+const __filename = fileURLToPath(import.meta.url);
+const __dirname = dirname(__filename);
+
+const app = express();
+const PORT = process.env.PORT || 3001;
+
+// Middleware
+app.use(cors());
+app.use(express.json());
+
+// API routes
+app.use('/api/accounts', accountsRouter);
+app.use('/api/transactions', transactionsRouter);
+
+// Serve static files in production
+if (process.env.NODE_ENV === 'production') {
+ app.use(express.static(join(__dirname, '../client')));
+
+ app.get('*', (req, res) => {
+ res.sendFile(join(__dirname, '../client/index.html'));
+ });
+}
+
+app.listen(PORT, () => {
+ console.log(`Server running on port ${PORT}`);
+});
diff --git a/server/routes/accounts.ts b/server/routes/accounts.ts
new file mode 100644
index 0000000..9820c40
--- /dev/null
+++ b/server/routes/accounts.ts
@@ -0,0 +1,98 @@
+import { Router } from 'express';
+import { AccountStatus, AccountType, accountService } from '../data/db.service.js';
+import type { Account } from '../types.js';
+
+const router = Router();
+
+// GET /api/accounts - Get all accounts
+// biome-ignore lint/suspicious/noExplicitAny: Express handler types require any for req/res
+router.get('/', async (req: any, res: any) => {
+ try {
+ console.log('GET /api/accounts - Fetching all accounts');
+ const accounts = await accountService.getAll();
+ console.log('GET /api/accounts - Found accounts:', accounts?.length ?? 0);
+
+ res.json(accounts || []);
+ } catch (error) {
+ console.error('Error fetching accounts:', error);
+ res.status(500).json({
+ error: 'Failed to fetch accounts',
+ details: error instanceof Error ? error.message : 'Unknown error',
+ });
+ }
+});
+
+// POST /api/accounts - Create new account
+// biome-ignore lint/suspicious/noExplicitAny: Express handler types require any for req/res
+router.post('/', async (req: any, res: any) => {
+ try {
+ const accountData = req.body as Omit;
+
+ // Validate required fields
+ if (!accountData.name || !accountData.bankName || !accountData.accountNumber) {
+ return res.status(400).json({
+ error: 'Missing required fields: name, bankName, and accountNumber are required',
+ });
+ }
+
+ // Set default values and ensure proper type casting
+ const data = {
+ ...accountData,
+ balance: accountData.balance ? Number(accountData.balance) : 0,
+ type: (accountData.type as AccountType) || AccountType.CHECKING,
+ status: (accountData.status as AccountStatus) || AccountStatus.ACTIVE,
+ notes: accountData.notes || undefined,
+ };
+
+ // Create the account
+ const newAccount = await accountService.create(data);
+
+ res.status(201).json(newAccount);
+ } catch (error) {
+ console.error('Error creating account:', error);
+ res.status(500).json({ error: 'Failed to create account' });
+ }
+});
+
+// GET /api/accounts/:id - Get single account
+// biome-ignore lint/suspicious/noExplicitAny: Express handler types require any for req/res
+router.get('/:id', async (req: any, res: any) => {
+ try {
+ const { id } = req.params;
+
+ if (!id) {
+ return res.status(400).json({ error: 'Account ID is required' });
+ }
+
+ const account = await accountService.getById(id);
+
+ if (!account) {
+ return res.status(404).json({ error: 'Account not found' });
+ }
+
+ res.json(account);
+ } catch (error) {
+ console.error('Error fetching account:', error);
+ res.status(500).json({ error: 'Failed to fetch account' });
+ }
+});
+
+// GET /api/accounts/:id/transactions - Get transactions for account
+// biome-ignore lint/suspicious/noExplicitAny: Express handler types require any for req/res
+router.get('/:id/transactions', async (req: any, res: any) => {
+ try {
+ const { id } = req.params;
+
+ if (!id) {
+ return res.status(400).json({ error: 'Account ID is required' });
+ }
+
+ const transactions = await accountService.getTransactions(id);
+ res.json(transactions || []);
+ } catch (error) {
+ console.error('Error fetching account transactions:', error);
+ res.status(500).json({ error: 'Failed to fetch account transactions' });
+ }
+});
+
+export default router;
diff --git a/server/routes/transactions.ts b/server/routes/transactions.ts
new file mode 100644
index 0000000..9b4ca08
--- /dev/null
+++ b/server/routes/transactions.ts
@@ -0,0 +1,189 @@
+import { Router } from 'express';
+import { accountService, transactionService } from '../data/db.service.js';
+import type { Transaction, TransactionStatus, TransactionType } from '../types.js';
+
+const router = Router();
+
+// Helper function to transform update data
+function transformUpdateData(updateData: Partial>) {
+ const typedUpdateData: {
+ accountId?: string;
+ date?: Date;
+ description?: string;
+ amount?: number;
+ category?: string;
+ status?: TransactionStatus;
+ type?: TransactionType;
+ notes?: string;
+ tags?: string;
+ } = {};
+
+ // Convert string date to Date object if provided
+ if (updateData.date) {
+ typedUpdateData.date =
+ typeof updateData.date === 'string' ? new Date(updateData.date) : updateData.date;
+ }
+
+ // Convert amount to number if provided
+ if (updateData.amount !== undefined) {
+ typedUpdateData.amount = Number(updateData.amount);
+ }
+
+ // Copy other fields
+ if (updateData.accountId) typedUpdateData.accountId = updateData.accountId;
+ if (updateData.description) typedUpdateData.description = updateData.description;
+ if (updateData.category !== undefined)
+ typedUpdateData.category = updateData.category || undefined;
+ if (updateData.status) typedUpdateData.status = updateData.status as TransactionStatus;
+ if (updateData.type) typedUpdateData.type = updateData.type as TransactionType;
+ if (updateData.notes !== undefined) typedUpdateData.notes = updateData.notes || undefined;
+ if (updateData.tags !== undefined) typedUpdateData.tags = updateData.tags || undefined;
+
+ return typedUpdateData;
+}
+
+// POST /api/transactions - Create new transaction
+// biome-ignore lint/suspicious/noExplicitAny: Express handler types require any for req/res
+router.post('/', async (req: any, res: any) => {
+ try {
+ const transaction = req.body as Omit;
+
+ // Validate required fields
+ if (
+ !transaction.accountId ||
+ !transaction.date ||
+ !transaction.description ||
+ transaction.amount === undefined
+ ) {
+ return res.status(400).json({ error: 'Missing required fields' });
+ }
+
+ // Validate account exists
+ const account = await accountService.getById(transaction.accountId);
+ if (!account) {
+ return res.status(404).json({ error: 'Account not found' });
+ }
+
+ // Convert string date to Date object if needed
+ const transactionDate =
+ typeof transaction.date === 'string' ? new Date(transaction.date) : transaction.date;
+
+ // Create new transaction with database service
+ const newTransaction = await transactionService.create({
+ accountId: transaction.accountId,
+ date: transactionDate,
+ description: transaction.description,
+ amount: Number(transaction.amount),
+ category: transaction.category || undefined,
+ status: transaction.status as TransactionStatus,
+ type: transaction.type as TransactionType,
+ notes: transaction.notes || undefined,
+ tags: transaction.tags || undefined,
+ });
+
+ // Convert Decimal to number for response
+ const response = {
+ ...newTransaction,
+ amount: Number(newTransaction.amount),
+ };
+
+ res.status(201).json(response);
+ } catch (error) {
+ console.error('Error creating transaction:', error);
+ res.status(500).json({ error: 'Failed to create transaction' });
+ }
+});
+
+// GET /api/transactions/:id - Get single transaction
+// biome-ignore lint/suspicious/noExplicitAny: Express handler types require any for req/res
+router.get('/:id', async (req: any, res: any) => {
+ try {
+ const { id } = req.params;
+
+ if (!id) {
+ return res.status(400).json({ error: 'Transaction ID is required' });
+ }
+
+ const transaction = await transactionService.getById(id);
+
+ if (!transaction) {
+ return res.status(404).json({ error: 'Transaction not found' });
+ }
+
+ // Convert Decimal to number for response
+ const response = {
+ ...transaction,
+ amount: Number(transaction.amount),
+ };
+
+ res.json(response);
+ } catch (error) {
+ console.error('Error fetching transaction:', error);
+ res.status(500).json({ error: 'Failed to fetch transaction' });
+ }
+});
+
+// PUT /api/transactions/:id - Update transaction
+// biome-ignore lint/suspicious/noExplicitAny: Express handler types require any for req/res
+router.put('/:id', async (req: any, res: any) => {
+ try {
+ const { id } = req.params;
+
+ if (!id) {
+ return res.status(400).json({ error: 'Transaction ID is required' });
+ }
+
+ // Check if transaction exists
+ const existingTransaction = await transactionService.getById(id);
+ if (!existingTransaction) {
+ return res.status(404).json({ error: 'Transaction not found' });
+ }
+
+ const updateData = req.body as Partial>;
+ const typedUpdateData = transformUpdateData(updateData);
+
+ const updatedTransaction = await transactionService.update(id, typedUpdateData);
+
+ if (!updatedTransaction) {
+ return res.status(404).json({ error: 'Transaction not found or could not be updated' });
+ }
+
+ // Convert Decimal to number for response
+ const response = {
+ ...updatedTransaction,
+ amount: Number(updatedTransaction.amount),
+ };
+
+ res.json(response);
+ } catch (error) {
+ console.error('Error updating transaction:', error);
+ res.status(500).json({ error: 'Failed to update transaction' });
+ }
+});
+
+// DELETE /api/transactions/:id - Delete transaction
+// biome-ignore lint/suspicious/noExplicitAny: Express handler types require any for req/res
+router.delete('/:id', async (req: any, res: any) => {
+ try {
+ const { id } = req.params;
+
+ if (!id) {
+ return res.status(400).json({ error: 'Transaction ID is required' });
+ }
+
+ // Check if transaction exists
+ const existingTransaction = await transactionService.getById(id);
+ if (!existingTransaction) {
+ return res.status(404).json({ error: 'Transaction not found' });
+ }
+
+ await transactionService.delete(id);
+
+ res.status(204).send();
+ } catch (error) {
+ console.error('Error deleting transaction:', error);
+ res.status(500).json({ error: 'Failed to delete transaction' });
+ }
+});
+
+export default router;
diff --git a/server/tsconfig.json b/server/tsconfig.json
new file mode 100644
index 0000000..094d79a
--- /dev/null
+++ b/server/tsconfig.json
@@ -0,0 +1,30 @@
+{
+ "compilerOptions": {
+ "target": "ES2022",
+ "module": "ESNext",
+ "moduleResolution": "node",
+ "strict": true,
+ "esModuleInterop": true,
+ "allowSyntheticDefaultImports": true,
+ "skipLibCheck": true,
+ "forceConsistentCasingInFileNames": true,
+ "outDir": "../dist/server",
+ "rootDir": ".",
+ "declaration": true,
+ "declarationMap": true,
+ "sourceMap": true,
+ "types": [
+ "node"
+ ],
+ "resolveJsonModule": true,
+ "allowJs": true
+ },
+ "include": [
+ "**/*"
+ ],
+ "exclude": [
+ "node_modules",
+ "../dist",
+ "../src"
+ ]
+}
\ No newline at end of file
diff --git a/server/types.ts b/server/types.ts
new file mode 100644
index 0000000..ef17963
--- /dev/null
+++ b/server/types.ts
@@ -0,0 +1,56 @@
+import type { Decimal } from '@prisma/client/runtime/library';
+
+export interface Account {
+ id: string;
+ bankName: string;
+ accountNumber: string; // Last 6 digits
+ name: string; // Friendly name
+ type?: string; // CHECKING, SAVINGS, etc.
+ status?: string; // ACTIVE, CLOSED
+ currency?: string; // Default: USD
+ balance: number | Decimal; // Current balance - can be Prisma Decimal or number
+ notes?: string | null; // Optional notes - accepts null for Prisma compatibility
+ createdAt?: Date;
+ updatedAt?: Date;
+}
+
+export interface Transaction {
+ id: string;
+ accountId: string;
+ date: string | Date; // ISO date string or Date object
+ description: string;
+ amount: number | Decimal; // Amount - can be Prisma Decimal or number
+ category?: string | null; // Optional category - accepts null for Prisma compatibility
+ status?: string; // PENDING, CLEARED
+ type?: string; // DEPOSIT, WITHDRAWAL, TRANSFER
+ notes?: string | null; // Optional notes - accepts null for Prisma compatibility
+ tags?: string | null; // Optional comma-separated tags - accepts null for Prisma compatibility
+ createdAt?: Date;
+ updatedAt?: Date;
+}
+
+// Type definitions for Transaction status and type enums to match db.service.ts
+export enum TransactionStatus {
+ PENDING = 'PENDING',
+ CLEARED = 'CLEARED',
+}
+
+export enum TransactionType {
+ DEPOSIT = 'DEPOSIT',
+ WITHDRAWAL = 'WITHDRAWAL',
+ TRANSFER = 'TRANSFER',
+ UNSPECIFIED = 'UNSPECIFIED',
+}
+
+export enum AccountType {
+ CHECKING = 'CHECKING',
+ SAVINGS = 'SAVINGS',
+ CREDIT_CARD = 'CREDIT_CARD',
+ INVESTMENT = 'INVESTMENT',
+ OTHER = 'OTHER',
+}
+
+export enum AccountStatus {
+ ACTIVE = 'ACTIVE',
+ CLOSED = 'CLOSED',
+}
diff --git a/src/App.tsx b/src/App.tsx
new file mode 100644
index 0000000..24bac2f
--- /dev/null
+++ b/src/App.tsx
@@ -0,0 +1,14 @@
+import { Route, Routes } from 'react-router-dom';
+import Dashboard from './pages/Dashboard.tsx';
+
+function App() {
+ return (
+
+
+ } />
+
+
+ );
+}
+
+export default App;
diff --git a/src/components/AccountSummary.astro b/src/components/AccountSummary.astro
deleted file mode 100644
index b0cb8bd..0000000
--- a/src/components/AccountSummary.astro
+++ /dev/null
@@ -1,19 +0,0 @@
----
-import type { Account } from "@types";
-// biome-ignore lint/correctness/noUnusedImports: formatCurrency is used in the template
-import { formatCurrency } from "@utils";
-
-interface Props {
- account: Account;
-}
-const { account } = Astro.props;
----
-
-
-
Account Summary
-
- Balance: {formatCurrency(Number(account.balance))}
-
-
diff --git a/src/components/MainContent.astro b/src/components/MainContent.astro
deleted file mode 100644
index 6fcf052..0000000
--- a/src/components/MainContent.astro
+++ /dev/null
@@ -1,22 +0,0 @@
----
-import type { Account, Transaction } from "@types";
-import TransactionTable from "./TransactionTable";
-
-interface Props {
- account: Account;
- transactions: Transaction[];
-}
-
-const { account, transactions } = Astro.props;
----
-
-
-
-
- Transactions for {account.name} (***{account.accountNumber.slice(-3)})
-
-
-
-
diff --git a/src/components/MainContent.tsx b/src/components/MainContent.tsx
new file mode 100644
index 0000000..bfa3cb4
--- /dev/null
+++ b/src/components/MainContent.tsx
@@ -0,0 +1,34 @@
+import { useStore } from '@nanostores/react';
+import { currentAccount } from '@stores/transactionStore';
+import TransactionTable from './TransactionTable';
+
+export default function MainContent() {
+ const account = useStore(currentAccount);
+
+ if (!account) {
+ return (
+
+
+
+ Please select an account from the sidebar to view transactions.
+
+
+ );
+ }
+
+ return (
+
+
+
+ Transactions for{' '}
+
+ {account.name} (***{account.accountNumber.slice(-3)})
+
+
+
+
+
+ );
+}
diff --git a/src/components/Sidebar.astro b/src/components/Sidebar.astro
deleted file mode 100644
index 6dcbd9c..0000000
--- a/src/components/Sidebar.astro
+++ /dev/null
@@ -1,206 +0,0 @@
----
-import type { Account } from "@types";
-import AddTransactionForm from "./AddTransactionForm";
-import AccountSummary from "./AccountSummary";
-
-interface Props {
- accounts: Account[];
- initialAccount: Account;
-}
-
-const { accounts, initialAccount } = Astro.props;
----
-
-
-
-
-
-
-
-
-
diff --git a/src/components/Sidebar.tsx b/src/components/Sidebar.tsx
new file mode 100644
index 0000000..c0e927a
--- /dev/null
+++ b/src/components/Sidebar.tsx
@@ -0,0 +1,94 @@
+import { useStore } from '@nanostores/react';
+import { currentAccountId, loadTransactionsForAccount } from '@stores/transactionStore';
+import type { Account } from '@types';
+import { useState } from 'react';
+import AccountSummary from './AccountSummary';
+import AddTransactionForm from './AddTransactionForm';
+
+interface Props {
+ accounts: Account[];
+ initialAccount: Account;
+}
+
+export default function Sidebar({ accounts, initialAccount }: Props) {
+ const [isFormExpanded, setIsFormExpanded] = useState(false);
+ const [isSidebarCollapsed, setIsSidebarCollapsed] = useState(false);
+ const accountId = useStore(currentAccountId);
+
+ const handleAccountChange = (event: React.ChangeEvent) => {
+ const selectedAccountId = event.target.value;
+ if (selectedAccountId) {
+ loadTransactionsForAccount(selectedAccountId);
+ }
+ };
+
+ const toggleForm = () => {
+ setIsFormExpanded(!isFormExpanded);
+ };
+
+ const toggleSidebar = () => {
+ setIsSidebarCollapsed(!isSidebarCollapsed);
+ };
+
+ return (
+ <>
+
+
+
+ >
+ );
+}
diff --git a/src/components/TransactionTable.astro b/src/components/TransactionTable.astro
deleted file mode 100644
index 3060153..0000000
--- a/src/components/TransactionTable.astro
+++ /dev/null
@@ -1,77 +0,0 @@
----
-import type { Transaction } from "@types";
-import { formatDate, formatCurrency } from "@utils";
-
-interface Props {
- transactions: Transaction[];
-}
-
-const { transactions } = Astro.props;
-
-// Sort transactions by date descending for display
-const sortedTransactions = [...transactions].sort(
- (a, b) => new Date(b.date).getTime() - new Date(a.date).getTime(),
-);
-
-// TODO: UI/UX Improvements
-// - Add sorting functionality for all columns
-// - Implement pagination for large transaction lists
-// - Add transaction filtering capabilities
-// - Implement row hover actions
-// - Add transaction details expansion/collapse
-// - Consider adding bulk actions (delete, categorize)
----
-
-
-
-
-
- | Date |
- Description |
- Amount |
- Actions |
-
-
-
- {
- sortedTransactions.map((txn) => (
-
- | {formatDate(txn.date)} |
- {txn.description} |
- = 0 ? "amount-positive" : "amount-negative"}`}
- >
- {formatCurrency(Number(txn.amount))}
- |
-
-
-
- |
-
- ))
- }
- {
- sortedTransactions.length === 0 && (
-
- |
- No transactions found for this account.
- |
-
- )
- }
-
-
-
diff --git a/src/layouts/BaseLayout.astro b/src/layouts/BaseLayout.astro
deleted file mode 100644
index a5d863c..0000000
--- a/src/layouts/BaseLayout.astro
+++ /dev/null
@@ -1,39 +0,0 @@
----
-export interface Props {
- title: string;
-}
-
-// TODO: Accessibility Improvements
-// - Add ARIA landmarks for main regions
-// - Implement keyboard navigation
-// - Add skip navigation links
-// - Ensure proper heading hierarchy
-// - Add focus management for modals/dialogs
-// - Implement proper announcements for dynamic content
-// - Add high contrast theme support
-
-const { title } = Astro.props;
----
-
-
-
-
-
-
-
-
-
- {title}
-
-
-
-
-
-
-
-
-
-
diff --git a/src/main.tsx b/src/main.tsx
new file mode 100644
index 0000000..f21d2d9
--- /dev/null
+++ b/src/main.tsx
@@ -0,0 +1,16 @@
+import { StrictMode } from 'react';
+import { createRoot } from 'react-dom/client';
+import { BrowserRouter } from 'react-router-dom';
+import App from './App';
+
+const rootElement = document.getElementById('root');
+if (!rootElement) {
+ throw new Error('Root element not found');
+}
+createRoot(rootElement).render(
+
+
+
+
+ ,
+);
diff --git a/src/pages/Dashboard.tsx b/src/pages/Dashboard.tsx
new file mode 100644
index 0000000..68da798
--- /dev/null
+++ b/src/pages/Dashboard.tsx
@@ -0,0 +1,79 @@
+import MainContent from '@components/MainContent';
+import Sidebar from '@components/Sidebar';
+import { useStore } from '@nanostores/react';
+import {
+ currentAccountId,
+ loadAccounts,
+ loadTransactionsForAccount,
+} from '@stores/transactionStore';
+import type { Account } from '@types';
+import { useEffect, useState } from 'react';
+
+export default function Dashboard() {
+ const [accounts, setAccounts] = useState([]);
+ const [loading, setLoading] = useState(true);
+ const [error, setError] = useState(null);
+ const accountId = useStore(currentAccountId);
+
+ // Load accounts on component mount
+ useEffect(() => {
+ const fetchAccounts = async () => {
+ try {
+ const response = await fetch('/api/accounts');
+ if (!response.ok) {
+ throw new Error('Failed to fetch accounts');
+ }
+ const fetchedAccounts = await response.json();
+ setAccounts(fetchedAccounts);
+
+ // Load accounts into store
+ loadAccounts(fetchedAccounts);
+
+ // Set initial account if available
+ if (fetchedAccounts.length > 0 && !accountId) {
+ loadTransactionsForAccount(fetchedAccounts[0].id);
+ }
+ } catch (err) {
+ console.error('Error fetching accounts:', err);
+ setError(err instanceof Error ? err.message : 'Failed to load accounts');
+ } finally {
+ setLoading(false);
+ }
+ };
+
+ fetchAccounts();
+ }, [accountId]);
+
+ if (loading) {
+ return (
+
+ );
+ }
+
+ if (error) {
+ return (
+
+ );
+ }
+
+ const initialAccount: Account = accounts[0] || {
+ id: '',
+ name: 'No accounts available',
+ accountNumber: '000000',
+ balance: 0,
+ bankName: '',
+ };
+
+ return (
+
+
+
+
+
+
+ );
+}
diff --git a/src/pages/api/accounts/[id]/index.ts b/src/pages/api/accounts/[id]/index.ts
deleted file mode 100644
index 38a6234..0000000
--- a/src/pages/api/accounts/[id]/index.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-import { accountService } from '@data/db.service';
-import type { APIRoute } from 'astro';
-
-export const GET: APIRoute = async ({ params }) => {
- try {
- const account = await accountService.getById(params.id as string);
-
- if (!account) {
- return new Response(JSON.stringify({ error: 'Account not found' }), {
- status: 404,
- headers: {
- 'Content-Type': 'application/json',
- },
- });
- }
-
- return new Response(JSON.stringify(account), {
- status: 200,
- headers: {
- 'Content-Type': 'application/json',
- },
- });
- } catch (error) {
- console.error('Error fetching account details:', error);
- return new Response(JSON.stringify({ error: 'Failed to fetch account details' }), {
- status: 500,
- headers: {
- 'Content-Type': 'application/json',
- },
- });
- }
-};
diff --git a/src/pages/api/accounts/[id]/transactions/index.ts b/src/pages/api/accounts/[id]/transactions/index.ts
deleted file mode 100644
index c99d20e..0000000
--- a/src/pages/api/accounts/[id]/transactions/index.ts
+++ /dev/null
@@ -1,29 +0,0 @@
-import { transactionService } from '@data/db.service';
-import type { APIRoute } from 'astro';
-
-export const GET: APIRoute = async ({ params }) => {
- try {
- const accountTransactions = await transactionService.getByAccountId(params.id as string);
-
- // Convert Decimal to number for each transaction in response
- const response = accountTransactions.map((transaction) => ({
- ...transaction,
- amount: Number(transaction.amount),
- }));
-
- return new Response(JSON.stringify(response), {
- status: 200,
- headers: {
- 'Content-Type': 'application/json',
- },
- });
- } catch (error) {
- console.error('Error fetching account transactions:', error);
- return new Response(JSON.stringify({ error: 'Failed to fetch account transactions' }), {
- status: 500,
- headers: {
- 'Content-Type': 'application/json',
- },
- });
- }
-};
diff --git a/src/pages/api/accounts/index.ts b/src/pages/api/accounts/index.ts
deleted file mode 100644
index 9b8e2b0..0000000
--- a/src/pages/api/accounts/index.ts
+++ /dev/null
@@ -1,75 +0,0 @@
-import { AccountStatus, AccountType, accountService } from '@data/db.service';
-import type { Account } from '@types';
-import type { APIRoute } from 'astro';
-
-export const GET: APIRoute = async ({ params, request }) => {
- try {
- console.log('GET /api/accounts - Fetching all accounts');
- const accounts = await accountService.getAll();
- console.log('GET /api/accounts - Found accounts:', accounts?.length ?? 0);
-
- return new Response(JSON.stringify(accounts || []), {
- status: 200,
- headers: {
- 'Content-Type': 'application/json',
- },
- });
- } catch (error) {
- console.error('Error fetching accounts:', error);
- // Always return a proper JSON response, even in error cases
- return new Response(
- JSON.stringify({
- error: 'Failed to fetch accounts',
- details: error instanceof Error ? error.message : 'Unknown error',
- }),
- {
- status: 500,
- headers: {
- 'Content-Type': 'application/json',
- },
- },
- );
- }
-};
-
-export const POST: APIRoute = async ({ request }) => {
- try {
- const accountData = (await request.json()) as Omit;
-
- // Validate required fields
- if (!accountData.name || !accountData.bankName || !accountData.accountNumber) {
- return new Response(
- JSON.stringify({
- error: 'Missing required fields: name, bankName, and accountNumber are required',
- }),
- {
- status: 400,
- headers: { 'Content-Type': 'application/json' },
- },
- );
- }
-
- // Set default values and ensure proper type casting
- const data = {
- ...accountData,
- balance: accountData.balance ? Number(accountData.balance) : 0,
- type: (accountData.type as AccountType) || AccountType.CHECKING,
- status: (accountData.status as AccountStatus) || AccountStatus.ACTIVE,
- notes: accountData.notes || undefined,
- };
-
- // Create the account
- const newAccount = await accountService.create(data);
-
- return new Response(JSON.stringify(newAccount), {
- status: 201,
- headers: { 'Content-Type': 'application/json' },
- });
- } catch (error) {
- console.error('Error creating account:', error);
- return new Response(JSON.stringify({ error: 'Failed to create account' }), {
- status: 500,
- headers: { 'Content-Type': 'application/json' },
- });
- }
-};
diff --git a/src/pages/api/transactions/[id]/index.ts b/src/pages/api/transactions/[id]/index.ts
deleted file mode 100644
index a06dd05..0000000
--- a/src/pages/api/transactions/[id]/index.ts
+++ /dev/null
@@ -1,161 +0,0 @@
-import { transactionService } from '@data/db.service';
-import type { Transaction, TransactionStatus, TransactionType } from '@types';
-import type { APIRoute } from 'astro';
-
-export const GET: APIRoute = async ({ params }) => {
- try {
- const transaction = await transactionService.getById(params.id as string);
-
- if (!transaction) {
- return new Response(JSON.stringify({ error: 'Transaction not found' }), {
- status: 404,
- headers: { 'Content-Type': 'application/json' },
- });
- }
-
- // Convert Decimal to number for response
- const response = {
- ...transaction,
- amount: Number(transaction.amount),
- };
-
- return new Response(JSON.stringify(response), {
- status: 200,
- headers: { 'Content-Type': 'application/json' },
- });
- } catch (error) {
- console.error('Error fetching transaction:', error);
- return new Response(JSON.stringify({ error: 'Failed to fetch transaction' }), {
- status: 500,
- headers: { 'Content-Type': 'application/json' },
- });
- }
-};
-
-const validateRequestParams = (id: string | undefined) => {
- if (!id) {
- return new Response(JSON.stringify({ error: 'Transaction ID is required' }), {
- status: 400,
- headers: { 'Content-Type': 'application/json' },
- });
- }
- return null;
-};
-
-const validateTransaction = async (
- id: string,
- transactionService: typeof import('@data/db.service').transactionService,
-) => {
- const existingTransaction = await transactionService.getById(id);
- if (!existingTransaction) {
- return new Response(JSON.stringify({ error: 'Transaction not found' }), {
- status: 404,
- headers: { 'Content-Type': 'application/json' },
- });
- }
- return existingTransaction;
-};
-
-const prepareUpdateData = (updates: Partial) => {
- const updatedData: Partial<{
- accountId: string;
- date: Date;
- description: string;
- amount: number;
- category: string | undefined;
- status: TransactionStatus | undefined;
- type: TransactionType | undefined;
- notes: string | undefined;
- tags: string | undefined;
- }> = {};
-
- if (updates.accountId !== undefined) updatedData.accountId = updates.accountId;
- if (updates.description !== undefined) updatedData.description = updates.description;
- if (updates.amount !== undefined) updatedData.amount = Number(updates.amount);
- if (updates.category !== undefined) updatedData.category = updates.category || undefined;
- if (updates.notes !== undefined) updatedData.notes = updates.notes || undefined;
- if (updates.tags !== undefined) updatedData.tags = updates.tags || undefined;
-
- if (updates.date !== undefined) {
- updatedData.date = typeof updates.date === 'string' ? new Date(updates.date) : updates.date;
- }
-
- if (updates.status !== undefined) {
- updatedData.status = updates.status as TransactionStatus;
- }
-
- if (updates.type !== undefined) {
- updatedData.type = updates.type as TransactionType;
- }
-
- return updatedData;
-};
-
-export const PUT: APIRoute = async ({ request, params }) => {
- const validationError = validateRequestParams(params.id);
- if (validationError) return validationError;
-
- try {
- const updates = (await request.json()) as Partial;
- const existingTransaction = await validateTransaction(params.id as string, transactionService);
- if (existingTransaction instanceof Response) return existingTransaction;
-
- const updatedData = prepareUpdateData(updates);
- const updatedTransaction = await transactionService.update(params.id as string, updatedData);
-
- if (!updatedTransaction) {
- return new Response(JSON.stringify({ error: 'Failed to update transaction' }), {
- status: 500,
- headers: { 'Content-Type': 'application/json' },
- });
- }
-
- const response = {
- ...updatedTransaction,
- amount: Number(updatedTransaction.amount),
- };
-
- return new Response(JSON.stringify(response), {
- status: 200,
- headers: { 'Content-Type': 'application/json' },
- });
- } catch (error) {
- console.error('Error updating transaction:', error);
- return new Response(JSON.stringify({ error: 'Failed to update transaction' }), {
- status: 500,
- headers: { 'Content-Type': 'application/json' },
- });
- }
-};
-
-export const DELETE: APIRoute = async ({ params }) => {
- const { id } = params;
-
- if (!id) {
- return new Response(JSON.stringify({ error: 'Transaction ID is required' }), {
- status: 400,
- headers: { 'Content-Type': 'application/json' },
- });
- }
-
- try {
- // Delete the transaction using the service
- // The service will automatically handle account balance adjustments
- const deletedTransaction = await transactionService.delete(id);
-
- if (!deletedTransaction) {
- return new Response(JSON.stringify({ error: 'Transaction not found' }), {
- status: 404,
- headers: { 'Content-Type': 'application/json' },
- });
- }
-
- return new Response(null, { status: 204 });
- } catch (error) {
- console.error('Error deleting transaction:', error);
- return new Response(JSON.stringify({ error: 'Failed to delete transaction' }), {
- status: 500,
- headers: { 'Content-Type': 'application/json' },
- });
- }
-};
diff --git a/src/pages/api/transactions/index.ts b/src/pages/api/transactions/index.ts
deleted file mode 100644
index 8dfc5bd..0000000
--- a/src/pages/api/transactions/index.ts
+++ /dev/null
@@ -1,89 +0,0 @@
-/**
- * TODO: Security Improvements
- * - Add input validation and sanitization
- * - Implement rate limiting for API endpoints
- * - Add request authentication
- * - Implement CSRF protection
- * - Add request logging and monitoring
- * - Implement secure session management
- * - Add API versioning
- * - Set up proper CORS configuration
- */
-
-import { accountService, transactionService } from '@data/db.service';
-import type { Transaction, TransactionStatus, TransactionType } from '@types';
-import type { APIRoute } from 'astro';
-
-/**
- * TODO: API Improvements
- * - Add request rate limiting
- * - Implement proper API authentication
- * - Add input sanitization
- * - Implement request validation middleware
- * - Add API versioning
- * - Consider implementing GraphQL for more flexible queries
- * - Add proper logging and monitoring
- */
-
-export const POST: APIRoute = async ({ request }) => {
- try {
- const transaction = (await request.json()) as Omit;
-
- // Validate required fields
- if (
- !transaction.accountId ||
- !transaction.date ||
- !transaction.description ||
- transaction.amount === undefined
- ) {
- return new Response(JSON.stringify({ error: 'Missing required fields' }), {
- status: 400,
- headers: { 'Content-Type': 'application/json' },
- });
- }
-
- // Validate account exists
- const account = await accountService.getById(transaction.accountId);
- if (!account) {
- return new Response(JSON.stringify({ error: 'Account not found' }), {
- status: 404,
- headers: { 'Content-Type': 'application/json' },
- });
- }
-
- // Convert string date to Date object if needed
- const transactionDate =
- typeof transaction.date === 'string' ? new Date(transaction.date) : transaction.date;
-
- // Create new transaction with database service
- // The database service will also update the account balance
- const newTransaction = await transactionService.create({
- accountId: transaction.accountId,
- date: transactionDate,
- description: transaction.description,
- amount: Number(transaction.amount),
- category: transaction.category || undefined,
- status: transaction.status as TransactionStatus,
- type: transaction.type as TransactionType,
- notes: transaction.notes || undefined,
- tags: transaction.tags || undefined,
- });
-
- // Convert Decimal to number for response
- const response = {
- ...newTransaction,
- amount: Number(newTransaction.amount),
- };
-
- return new Response(JSON.stringify(response), {
- status: 201,
- headers: { 'Content-Type': 'application/json' },
- });
- } catch (error) {
- console.error('Error creating transaction:', error);
- return new Response(JSON.stringify({ error: 'Failed to create transaction' }), {
- status: 500,
- headers: { 'Content-Type': 'application/json' },
- });
- }
-};
diff --git a/src/pages/index.astro b/src/pages/index.astro
deleted file mode 100644
index ddb6394..0000000
--- a/src/pages/index.astro
+++ /dev/null
@@ -1,284 +0,0 @@
----
-import BaseLayout from "@layouts/BaseLayout.astro";
-import MainContent from "@components/MainContent.astro";
-import Sidebar from "@components/Sidebar.astro";
-import AddTransactionForm from "@components/AddTransactionForm";
-import type { Account, Transaction } from "@types";
-
-// Create an instance of Astro's built-in fetch which handles SSR correctly
-let accounts: Account[] = [];
-try {
- const accountsResponse = await fetch(new URL("/api/accounts", Astro.url));
- if (!accountsResponse.ok) {
- const error = await accountsResponse.text();
- console.error("Failed to fetch accounts:", error);
- // Continue with empty accounts array
- } else {
- accounts = await accountsResponse.json();
- }
-} catch (error) {
- console.error("Error fetching accounts:", error);
- // Continue with empty accounts array
-}
-
-// Initialize with first account or empty account if none exist
-const initialAccount: Account = accounts[0] || {
- id: "",
- name: "No accounts available",
- accountNumber: "000000",
- balance: 0,
- bankName: "",
-};
-
-// Fetch initial transactions if we have an account
-let initialTransactions: Transaction[] = [];
-if (initialAccount.id) {
- const transactionsResponse = await fetch(
- new URL(`/api/accounts/${initialAccount.id}/transactions`, Astro.url),
- );
- initialTransactions = await transactionsResponse.json();
-}
----
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/stores/transactionStore.ts b/src/stores/transactionStore.ts
index a1ba7be..46de29d 100644
--- a/src/stores/transactionStore.ts
+++ b/src/stores/transactionStore.ts
@@ -1,9 +1,15 @@
-import type { Transaction } from '@types';
+import type { Account, Transaction } from '@types';
import { atom } from 'nanostores';
// Atom to hold the ID of the currently selected account
export const currentAccountId = atom(null);
+// Atom to hold the current account object
+export const currentAccount = atom(null);
+
+// Atom to hold all available accounts
+export const allAccounts = atom([]);
+
// Atom to hold the current transactions
export const currentTransactions = atom([]);
@@ -82,9 +88,21 @@ export async function loadTransactionsForAccount(accountId: string) {
if (!accountId) {
console.warn('No account ID provided, clearing transactions');
currentTransactions.set([]);
+ currentAccountId.set(null);
+ currentAccount.set(null);
return [];
}
+ // Set the current account ID
+ currentAccountId.set(accountId);
+
+ // Find and set the current account from allAccounts
+ const accounts = allAccounts.get();
+ const account = accounts.find((acc) => acc.id === accountId);
+ if (account) {
+ currentAccount.set(account);
+ }
+
console.log(`Fetching transactions from API for account: ${accountId}`);
const response = await fetch(`/api/accounts/${accountId}/transactions`);
if (!response.ok) {
@@ -110,6 +128,32 @@ export async function loadTransactionsForAccount(accountId: string) {
}
}
+// Helper function to load all accounts
+export async function loadAccounts(accounts?: Account[]) {
+ if (accounts) {
+ // Use provided accounts
+ allAccounts.set(accounts);
+ return accounts;
+ }
+
+ try {
+ console.log('Fetching accounts from API');
+ const response = await fetch('/api/accounts');
+ if (!response.ok) {
+ throw new Error(`Failed to fetch accounts: ${response.statusText}`);
+ }
+
+ const fetchedAccounts: Account[] = await response.json();
+ console.log(`Loaded ${fetchedAccounts.length} accounts:`, fetchedAccounts);
+
+ allAccounts.set(fetchedAccounts);
+ return fetchedAccounts;
+ } catch (error) {
+ console.error('Error loading accounts:', error);
+ throw error;
+ }
+}
+
// Helper to create a new transaction
export async function createTransaction(transaction: Omit) {
try {
@@ -180,3 +224,38 @@ export async function updateTransaction(id: string, transaction: Partial ({ error: 'Unknown error' }));
+ throw new Error(errorData.error || `Failed to delete transaction: ${response.statusText}`);
+ }
+
+ console.log('Transaction deleted successfully');
+
+ // Remove the transaction from the existing list
+ const currentList = currentTransactions.get();
+ const updatedList = currentList.filter((t) => t.id !== id);
+ currentTransactions.set(updatedList);
+
+ // Clear edit state if the deleted transaction was being edited
+ if (transactionToEdit.get()?.id === id) {
+ transactionToEdit.set(null);
+ }
+
+ // Trigger refresh to update other components
+ triggerRefresh();
+
+ return true;
+ } catch (error) {
+ console.error('Error deleting transaction:', error);
+ throw error;
+ }
+}
diff --git a/tsconfig.json b/tsconfig.json
index f546930..01d0b76 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,10 +1,21 @@
{
- "extends": "astro/tsconfigs/strict",
- "include": [".astro/types.d.ts", "**/*"],
- "exclude": ["dist"],
"compilerOptions": {
+ "target": "ES2022",
+ "useDefineForClassFields": true,
+ "lib": ["ES2022", "DOM", "DOM.Iterable"],
+ "allowJs": false,
+ "skipLibCheck": true,
+ "esModuleInterop": false,
+ "allowSyntheticDefaultImports": true,
+ "strict": true,
+ "forceConsistentCasingInFileNames": true,
+ "module": "ESNext",
+ "moduleResolution": "bundler",
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "noEmit": true,
"jsx": "react-jsx",
- "jsxImportSource": "react",
+ "allowImportingTsExtensions": true,
"baseUrl": ".",
"paths": {
"@/*": ["src/*"],
@@ -14,8 +25,9 @@
"@pages/*": ["src/pages/*"],
"@styles/*": ["src/styles/*"],
"@stores/*": ["src/stores/*"],
- "@utils": ["src/utils"],
+ "@utils": ["src/utils.ts"],
"@types": ["src/types.ts"]
}
- }
+ },
+ "include": ["src"]
}
diff --git a/vite.config.ts b/vite.config.ts
new file mode 100644
index 0000000..159a886
--- /dev/null
+++ b/vite.config.ts
@@ -0,0 +1,33 @@
+import { resolve } from 'node:path';
+import react from '@vitejs/plugin-react';
+import { defineConfig } from 'vite';
+
+// https://vitejs.dev/config/
+export default defineConfig({
+ plugins: [react()],
+ resolve: {
+ alias: {
+ '@': resolve(__dirname, './src'),
+ '@components': resolve(__dirname, './src/components'),
+ '@layouts': resolve(__dirname, './src/layouts'),
+ '@data': resolve(__dirname, './src/data'),
+ '@pages': resolve(__dirname, './src/pages'),
+ '@styles': resolve(__dirname, './src/styles'),
+ '@stores': resolve(__dirname, './src/stores'),
+ '@utils': resolve(__dirname, './src/utils'),
+ '@types': resolve(__dirname, './src/types.ts'),
+ },
+ },
+ server: {
+ port: 4321,
+ proxy: {
+ '/api': {
+ target: 'http://localhost:3000',
+ changeOrigin: true,
+ },
+ },
+ },
+ build: {
+ outDir: 'dist/client',
+ },
+});