diff --git a/examples/sentry/.env.example b/examples/sentry/.env.example new file mode 100644 index 00000000..143d0b45 --- /dev/null +++ b/examples/sentry/.env.example @@ -0,0 +1,7 @@ +# Required: Your Sentry DSN (public, safe to expose to the browser) +PUBLIC_ENV__SENTRY_DSN=https://xxxxx@xxxxx.ingest.sentry.io/xxxxx + +# Required for source map upload: Sentry Auth Token +# Create at https://sentry.io/settings/account/api/auth-tokens/ +# Required scopes: project:read, project:releases, project:write +SENTRY_AUTH_TOKEN=sntryu_xxxxx diff --git a/examples/sentry/.gitignore b/examples/sentry/.gitignore new file mode 100644 index 00000000..c24c6c95 --- /dev/null +++ b/examples/sentry/.gitignore @@ -0,0 +1,8 @@ +dist/ +node_modules/ +.DS_Store +*.log +.env +.env.local +.env.production + diff --git a/examples/sentry/README.md b/examples/sentry/README.md new file mode 100644 index 00000000..a3c628d8 --- /dev/null +++ b/examples/sentry/README.md @@ -0,0 +1,62 @@ +# Vike + React + Sentry Example + +This example demonstrates how to integrate Sentry error tracking with a Vike + React application. + +## Features + +- ✅ Client-side error tracking +- ✅ Server-side error tracking +- ✅ Automatic error boundaries +- ✅ Distributed tracing (server → client) +- ✅ Source map uploads for production debugging + +## Setup + +1. Install dependencies: + +```bash +pnpm install +``` + +2. Configure Sentry DSN in `pages/+config.ts` + +3. Run development server: + +```bash +pnpm dev +``` + +4. Build for production: + +```bash +pnpm build +pnpm prod +``` + +## Configuration + +Edit `pages/+config.ts` to configure Sentry options: + +```typescript +sentry: { + dsn: 'YOUR_SENTRY_DSN', + environment: 'production', + client: { + // Client-specific options + }, + server: { + // Server-specific options + }, + vitePlugin: { + // Sourcemap upload options + org: 'your-org', + project: 'your-project', + authToken: process.env.SENTRY_AUTH_TOKEN + } +} +``` + +## Learn More + +- [Vike Documentation](https://vike.dev) +- [Sentry Documentation](https://docs.sentry.io) diff --git a/examples/sentry/package.json b/examples/sentry/package.json new file mode 100644 index 00000000..aab59d03 --- /dev/null +++ b/examples/sentry/package.json @@ -0,0 +1,26 @@ +{ + "scripts": { + "dev": "vike dev", + "build": "vike build", + "prod": "vike build && node ./dist/server/index.mjs" + }, + "dependencies": { + "@photonjs/hono": "^0.1.7", + "@sentry/react": "^10.22.0", + "@sentry/node": "^10.22.0", + "@sentry/vite-plugin": "^4.6.0", + "@types/react": "^19.1.13", + "@types/react-dom": "^19.1.9", + "@vitejs/plugin-react": "^5.0.3", + "hono": "^4.7.14", + "react": "^19.2.0", + "react-dom": "^19.2.0", + "typescript": "^5.9.2", + "vike": "^0.4.252", + "vike-photon": "^0.1.20", + "vike-react": "0.6.10", + "vike-react-sentry": "0.1.0", + "vite": "^7.1.7" + }, + "type": "module" +} diff --git a/examples/sentry/pages/+config.ts b/examples/sentry/pages/+config.ts new file mode 100644 index 00000000..3ef184e0 --- /dev/null +++ b/examples/sentry/pages/+config.ts @@ -0,0 +1,15 @@ +export { config } + +import type { Config } from 'vike/types' +import vikeReact from 'vike-react/config' +import vikePhoton from 'vike-photon/config' +import vikeReactSentry from 'vike-react-sentry/config' + +const config = { + title: 'Vike + React + Sentry Example', + extends: [vikeReact, vikePhoton, vikeReactSentry], + // Photon configuration + photon: { + server: '../server/index.ts', + }, +} satisfies Config diff --git a/examples/sentry/pages/index/+Page.tsx b/examples/sentry/pages/index/+Page.tsx new file mode 100644 index 00000000..af27bad1 --- /dev/null +++ b/examples/sentry/pages/index/+Page.tsx @@ -0,0 +1,76 @@ +export { Page } + +import { useState } from 'react' + +function Page() { + const [count, setCount] = useState(0) + + const throwError = () => { + throw new Error('This is a test error sent to Sentry!') + } + + const throwAsyncError = async () => { + await new Promise((resolve) => setTimeout(resolve, 100)) + throw new Error('This is an async error sent to Sentry!') + } + + return ( +
+

Vike + React + Sentry Example

+ +

This example demonstrates Sentry error tracking integration with Vike.

+ +
+

Counter: {count}

+ +
+ +
+

Test Error Tracking

+

Click these buttons to send test errors to Sentry:

+ +
+ + + +
+
+ +
+

Configuration

+

+ Edit pages/+config.ts to configure your Sentry DSN and options. +

+ +
+
+ ) +} diff --git a/examples/sentry/server/index.ts b/examples/sentry/server/index.ts new file mode 100644 index 00000000..a0a826fa --- /dev/null +++ b/examples/sentry/server/index.ts @@ -0,0 +1,13 @@ +import { Hono } from 'hono' +import { apply, serve } from '@photonjs/hono' + +function startServer() { + const app = new Hono() + + // Apply Vike and Vike extensions middleware + apply(app) + + return serve(app) +} + +export default startServer() diff --git a/examples/sentry/tsconfig.json b/examples/sentry/tsconfig.json new file mode 100644 index 00000000..8df2db5f --- /dev/null +++ b/examples/sentry/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "strict": true, + "module": "ES2020", + "moduleResolution": "bundler", + "target": "ES2020", + "lib": ["DOM", "DOM.Iterable", "ESNext"], + "types": ["vite/client"], + "jsx": "react-jsx", + "skipLibCheck": true, + "esModuleInterop": true + }, + "include": [ + "**/*", + // Include .test* files + // https://github.com/microsoft/TypeScript/issues/49555 + "**/.*" + ] +} diff --git a/examples/sentry/vite.config.ts b/examples/sentry/vite.config.ts new file mode 100644 index 00000000..991ded96 --- /dev/null +++ b/examples/sentry/vite.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' +import vike from 'vike/plugin' + +export default defineConfig({ + plugins: [react(), vike()], +}) diff --git a/package.json b/package.json index 885f29f8..78c77856 100644 --- a/package.json +++ b/package.json @@ -31,5 +31,10 @@ "playwright-chromium": "^1.57.0", "prettier": "^3.2.5" }, - "packageManager": "pnpm@9.4.0" + "packageManager": "pnpm@9.4.0", + "pnpm": { + "overrides": { + "vike": "0.4.252-commit-7f781cf" + } + } } diff --git a/packages/vike-react-query/package.json b/packages/vike-react-query/package.json index 2e9675c2..af5c0157 100644 --- a/packages/vike-react-query/package.json +++ b/packages/vike-react-query/package.json @@ -23,7 +23,7 @@ "@tanstack/react-query": ">=5.0.0", "react": ">=18.0.0", "react-streaming": ">=0.4.6", - "vike": ">=0.4.242", + "vike": ">=0.4.252", "vike-react": ">=0.6.8" }, "devDependencies": { diff --git a/packages/vike-react-sentry/.gitignore b/packages/vike-react-sentry/.gitignore new file mode 100644 index 00000000..b0a5c349 --- /dev/null +++ b/packages/vike-react-sentry/.gitignore @@ -0,0 +1,2 @@ +/node_modules/ +/dist/ diff --git a/packages/vike-react-sentry/CHANGELOG.md b/packages/vike-react-sentry/CHANGELOG.md new file mode 100644 index 00000000..c8d9314c --- /dev/null +++ b/packages/vike-react-sentry/CHANGELOG.md @@ -0,0 +1,6 @@ +# Changelog + +## 0.1.0 + +Initial release. + diff --git a/packages/vike-react-sentry/README.md b/packages/vike-react-sentry/README.md new file mode 100644 index 00000000..654a5f07 --- /dev/null +++ b/packages/vike-react-sentry/README.md @@ -0,0 +1,200 @@ + + +[![npm version](https://img.shields.io/npm/v/vike-react-sentry)](https://www.npmjs.com/package/vike-react-sentry) + +# `vike-react-sentry` + +Integrates [Sentry](https://sentry.io) error tracking and performance monitoring into your [`vike-react`](https://vike.dev/vike-react) app. + +Features: +- Browser and server error tracking +- Performance monitoring and tracing +- Automatic source map upload +- Works out of the box with minimal configuration + +
+ +**Table of Contents** + +[Installation](#installation) +[Basic usage](#basic-usage) +[Example](#example) +[Customization](#customization) +[Settings](#settings) +[Version history](#version-history) +[See also](#see-also) + +
+ +## Installation + +1. `npm install vike-react-sentry @sentry/react @sentry/node @sentry/vite-plugin` +2. Extend `+config.js`: + ```js + // pages/+config.js + + import vikeReact from 'vike-react/config' + import vikeReactSentry from 'vike-react-sentry/config' + + export default { + // ... + extends: [vikeReact, vikeReactSentry] + } + ``` +3. Add environment variables to your `.env` file: + ```bash + # Required: Your Sentry DSN (public, safe to expose to the browser) + PUBLIC_ENV__SENTRY_DSN=https://xxxxx@xxxxx.ingest.sentry.io/xxxxx + + # Required for source map upload: Sentry Auth Token + # Create at https://sentry.io/settings/account/api/auth-tokens/ + # Required scopes: project:read, project:releases, project:write + SENTRY_AUTH_TOKEN=sntryu_xxxxx + ``` + +> [!NOTE] +> The `vike-react-sentry` extension requires [`vike-react`](https://vike.dev/vike-react). + +
+ +## Basic usage + +That's it! With the configuration above, `vike-react-sentry` will automatically: +- Initialize Sentry on both client and server +- Track errors and exceptions +- Instrument Vike hooks using [onHookCall](https://vike.dev/onHookCall) +- Enable browser tracing for performance monitoring +- Upload source maps during production builds (when `SENTRY_AUTH_TOKEN` is set) + +You can optionally configure Sentry options in your `+config.js`: + +```js +// pages/+config.js + +export default { + sentry: { + tracesSampleRate: 1.0, // Capture 100% of transactions for tracing + debug: true, // Enable debug mode during development + } +} +``` + +
+ +## Example + +See [examples/sentry](https://github.com/vikejs/vike-react/tree/main/examples/sentry) for a full working example. + +
+ +## Customization + +For advanced customization, you can create Sentry configuration files: + +### `+sentry.js` (shared configuration) + +```js +// pages/+sentry.js +// Environment: client, server + +export default (globalContext) => ({ + tracesSampleRate: 1.0, + environment: globalContext.isProduction ? 'production' : 'development', +}) +``` + +### `+sentry.client.js` (client-only configuration) + +```js +// pages/+sentry.client.js +// Environment: client + +export default (globalContext) => ({ + // Client-specific integrations + integrations: [ + // Add custom browser integrations here + ], +}) +``` + +### `+sentry.server.js` (server-only configuration) + +```js +// pages/+sentry.server.js +// Environment: server + +export default (globalContext) => ({ + // Server-specific integrations + integrations: [ + // Add custom Node.js integrations here + ], +}) +``` + +
+ +## Settings + +### `sentry` + +Sentry SDK configuration options shared between client and server: + +```ts +interface SentryOptions { + dsn?: string // Sentry DSN (can also use PUBLIC_ENV__SENTRY_DSN env var) + environment?: string // Environment name (e.g., 'production', 'staging') + release?: string // Release version + debug?: boolean // Enable debug mode + sampleRate?: number // Error sample rate (0.0 to 1.0) + tracesSampleRate?: number // Transaction sample rate (0.0 to 1.0) + enabled?: boolean // Enable/disable Sentry + maxBreadcrumbs?: number // Maximum number of breadcrumbs + sendDefaultPii?: boolean // Send default PII data +} +``` + +### `sentryVite` + +Sentry Vite plugin configuration for source map upload. This is automatically configured when `SENTRY_AUTH_TOKEN` is set, but can be customized: + +```js +// pages/+config.js + +export default { + sentryVite: { + authToken: process.env.SENTRY_AUTH_TOKEN, // Auto-detected from env + org: 'your-org', // Auto-detected from DSN + project: 'your-project', // Auto-detected from DSN + // ... other @sentry/vite-plugin options + } +} +``` + +> [!NOTE] +> When using a **personal auth token** with `SENTRY_AUTH_TOKEN`, `org` and `project` are automatically detected from your DSN using the Sentry API. Organization-scoped tokens don't support the required API permissions, so you'll need to set `SENTRY_PROJECT` manually if using those. + +### Environment Variables + +| Variable | Description | +|----------|-------------| +| `PUBLIC_ENV__SENTRY_DSN` | Your Sentry DSN (required). Public and safe for browser. | +| `SENTRY_AUTH_TOKEN` | Auth token for source map upload. Create at [Sentry Auth Tokens](https://sentry.io/settings/auth-tokens/). Required scopes: `project:read`, `project:releases`, `project:write`. | +| `SENTRY_ORG` | Organization slug (optional, auto-detected from DSN). | +| `SENTRY_PROJECT` | Project slug (optional, auto-detected from DSN). | +| `SENTRY_URL` | Custom Sentry URL for self-hosted instances. | + +
+ +## Version history + +See [CHANGELOG.md](https://github.com/vikejs/vike-react/blob/main/packages/vike-react-sentry/CHANGELOG.md). + +
+ +## See also + +- [Sentry Documentation](https://docs.sentry.io/) +- [Sentry React SDK](https://docs.sentry.io/platforms/javascript/guides/react/) +- [Sentry Node SDK](https://docs.sentry.io/platforms/javascript/guides/node/) +- [Vike Documentation](https://vike.dev) +- [`vike-react`](https://github.com/vikejs/vike-react/tree/main/packages/vike-react#readme) diff --git a/packages/vike-react-sentry/package.json b/packages/vike-react-sentry/package.json new file mode 100644 index 00000000..c5afb31c --- /dev/null +++ b/packages/vike-react-sentry/package.json @@ -0,0 +1,83 @@ +{ + "name": "vike-react-sentry", + "version": "0.1.0", + "homepage": "https://github.com/vikejs/vike-react/tree/main/packages/vike-react-sentry#readme", + "type": "module", + "exports": { + "./config": "./dist/integration/+config.js", + "./plugin": "./dist/plugin/index.js", + "./types": "./dist/types.js", + "./__internal/integration/Head": "./dist/integration/Head.js", + "./__internal/integration/onCreateGlobalContext.server": "./dist/integration/onCreateGlobalContext.server.js", + "./__internal/integration/onCreateGlobalContext.client": "./dist/integration/onCreateGlobalContext.client.js", + "./__internal/integration/onHookCall.server": "./dist/integration/onHookCall.server.js", + "./__internal/integration/onHookCall.client": "./dist/integration/onHookCall.client.js", + "./__internal/integration/onError": "./dist/integration/onError.js" + }, + "scripts": { + "dev": "tsc --watch", + "build": "rimraf dist/ && tsc", + "release": "release-me patch", + "release:minor": "release-me minor", + "release:commit": "release-me commit" + }, + "peerDependencies": { + "@brillout/vite-plugin-server-entry": ">=0.7.0", + "@sentry/react": ">=10.0.0", + "@sentry/node": ">=10.0.0", + "@sentry/vite-plugin": ">=4.0.0", + "react": ">=18.0.0", + "react-dom": ">=18.0.0", + "vike-react": ">=0.6.4" + }, + "devDependencies": { + "@brillout/release-me": "^0.4.8", + "@brillout/vite-plugin-server-entry": "^0.7.15", + "@sentry/react": "^10.22.0", + "@sentry/node": "^10.22.0", + "@sentry/vite-plugin": "^4.6.0", + "@types/node": "^24.0.8", + "@types/react": "^19.1.13", + "@types/react-dom": "^19.1.9", + "@universal-middleware/core": "^0.4.13", + "react": "^19.2.0", + "react-dom": "^19.2.0", + "rimraf": "^5.0.5", + "typescript": "^5.9.2", + "vike": "^0.4.252", + "vike-react": "0.6.10", + "vite": "^7.1.7" + }, + "dependencies": { + "@universal-middleware/core": "^0.4.13" + }, + "typesVersions": { + "*": { + "config": [ + "dist/integration/+config.d.ts" + ], + "plugin": [ + "dist/plugin/index.d.ts" + ], + "types": [ + "dist/types.d.ts" + ], + "__internal/integration/onCreateGlobalContext": [ + "dist/integration/onCreateGlobalContext.d.ts" + ], + "__internal/integration/client": [ + "dist/integration/client.d.ts" + ], + "__internal/integration/onError": [ + "dist/integration/onError.d.ts" + ], + "__internal/integration/onHookCall": [ + "dist/integration/onHookCall.d.ts" + ] + } + }, + "files": [ + "dist" + ], + "license": "MIT" +} diff --git a/packages/vike-react-sentry/src/integration/+config.ts b/packages/vike-react-sentry/src/integration/+config.ts new file mode 100644 index 00000000..e56ac7dc --- /dev/null +++ b/packages/vike-react-sentry/src/integration/+config.ts @@ -0,0 +1,59 @@ +export { config as default } + +import type { Config } from 'vike/types' +import { getViteConfig } from '../plugin/index.js' +import 'vike-react/config' +import { SentryOptions } from '../types.js' +import type { SentryVitePluginOptions } from '@sentry/vite-plugin' + +const config = { + name: 'vike-react-sentry', + require: { + 'vike-react': '>=0.6.4', + }, + Head: 'import:vike-react-sentry/__internal/integration/Head:Head', + onCreateGlobalContext: [ + 'import:vike-react-sentry/__internal/integration/onCreateGlobalContext.server:onCreateGlobalContext', + 'import:vike-react-sentry/__internal/integration/onCreateGlobalContext.client:onCreateGlobalContext', + ], + onError: 'import:vike-react-sentry/__internal/integration/onError:onError', + onHookCall: [ + 'import:vike-react-sentry/__internal/integration/onHookCall.server:onHookCall', + 'import:vike-react-sentry/__internal/integration/onHookCall.client:onHookCall', + ], + meta: { + sentry: { + env: { + server: true, + client: true, + config: true, + }, + global: true, + cumulative: true, + }, + sentryVite: { + env: { + server: false, + client: false, + config: true, + }, + global: true, + cumulative: false, + }, + }, + vite: getViteConfig, +} satisfies Config + +declare global { + namespace Vike { + interface Config { + sentry?: SentryOptions | ((globalContext: GlobalContext) => SentryOptions) + sentryVite?: SentryVitePluginOptions + } + + interface ConfigResolved { + sentry?: (SentryOptions | ((globalContext: GlobalContext) => SentryOptions))[] + sentryVite?: SentryVitePluginOptions + } + } +} diff --git a/packages/vike-react-sentry/src/integration/Head.tsx b/packages/vike-react-sentry/src/integration/Head.tsx new file mode 100644 index 00000000..0e203e59 --- /dev/null +++ b/packages/vike-react-sentry/src/integration/Head.tsx @@ -0,0 +1,28 @@ +export { Head } + +import React from 'react' +import * as Sentry from '@sentry/node' + +// Inject Sentry trace meta tags into the HTML head for distributed tracing +// This allows the client-side SDK to continue the trace started on the server +function Head() { + if (!Sentry.getClient()) { + return null + } + + // Get trace data from Sentry + const traceData = Sentry.getTraceData() + + // Return the meta tags as proper React elements + // Fields may include: + // - sentry-trace: Sentry's proprietary trace header + // - baggage: Dynamic sampling context + // - traceparent: W3C Trace Context header + return ( + <> + {traceData['sentry-trace'] && } + {traceData.baggage && } + {traceData.traceparent && } + + ) +} diff --git a/packages/vike-react-sentry/src/integration/constants.ts b/packages/vike-react-sentry/src/integration/constants.ts new file mode 100644 index 00000000..a2aa6ee4 --- /dev/null +++ b/packages/vike-react-sentry/src/integration/constants.ts @@ -0,0 +1,2 @@ +export const TRACE_DEFAULT_SAMPLE_RATE = 0.2 +export const TRACE_DEFAULT_SAMPLE_RATE_ERROR = 1.0 diff --git a/packages/vike-react-sentry/src/integration/defaults-client.ts b/packages/vike-react-sentry/src/integration/defaults-client.ts new file mode 100644 index 00000000..d7f26a50 --- /dev/null +++ b/packages/vike-react-sentry/src/integration/defaults-client.ts @@ -0,0 +1,20 @@ +import { SentryReactOptions } from '../types.js' +import { resolveDsn } from '../utils/resolveDsn.js' +import * as SentryReact from '@sentry/react' +import { TRACE_DEFAULT_SAMPLE_RATE, TRACE_DEFAULT_SAMPLE_RATE_ERROR } from './constants.js' + +export const DEFAULT_SENTRY_CLIENT_SETTINGS = (clientConfig: SentryReactOptions) => + ({ + environment: clientConfig.environment || import.meta.env.MODE || 'production', + replaysSessionSampleRate: 0.1, + replaysOnErrorSampleRate: 1.0, + integrations: [SentryReact.browserTracingIntegration(), SentryReact.replayIntegration()], + dsn: resolveDsn(clientConfig.dsn), + tracesSampler: (samplingContext) => { + const { attributes, inheritOrSampleWith } = samplingContext + if (attributes?.hasRecentErrors === true) { + return TRACE_DEFAULT_SAMPLE_RATE_ERROR + } + return inheritOrSampleWith(clientConfig.tracesSampleRate || TRACE_DEFAULT_SAMPLE_RATE) + }, + }) as SentryReactOptions diff --git a/packages/vike-react-sentry/src/integration/defaults-server.ts b/packages/vike-react-sentry/src/integration/defaults-server.ts new file mode 100644 index 00000000..81e9ca62 --- /dev/null +++ b/packages/vike-react-sentry/src/integration/defaults-server.ts @@ -0,0 +1,16 @@ +import { SentryNodeOptions } from '../types.js' +import { resolveDsn } from '../utils/resolveDsn.js' +import { TRACE_DEFAULT_SAMPLE_RATE, TRACE_DEFAULT_SAMPLE_RATE_ERROR } from './constants.js' + +export const DEFAULT_SENTRY_SERVER_SETTINGS = (serverConfig: SentryNodeOptions) => + ({ + environment: serverConfig.environment || import.meta.env.MODE || 'production', + dsn: resolveDsn(serverConfig.dsn), + tracesSampler: (samplingContext) => { + const { attributes, inheritOrSampleWith } = samplingContext + if (attributes?.hasRecentErrors === true) { + return TRACE_DEFAULT_SAMPLE_RATE_ERROR + } + return inheritOrSampleWith(serverConfig.tracesSampleRate || TRACE_DEFAULT_SAMPLE_RATE) + }, + }) as SentryNodeOptions diff --git a/packages/vike-react-sentry/src/integration/onCreateGlobalContext.client.ts b/packages/vike-react-sentry/src/integration/onCreateGlobalContext.client.ts new file mode 100644 index 00000000..d16a2e08 --- /dev/null +++ b/packages/vike-react-sentry/src/integration/onCreateGlobalContext.client.ts @@ -0,0 +1,23 @@ +export { onCreateGlobalContext } + +import * as SentryReact from '@sentry/react' +import type { GlobalContextClient } from 'vike/types' +import { assignDeep } from '../utils/assignDeep.js' +import { SentryOptions } from '../types.js' +import { DEFAULT_SENTRY_CLIENT_SETTINGS } from './defaults-client.js' + +async function onCreateGlobalContext(globalContext: GlobalContextClient): Promise { + const clientConfig = (globalContext.config.sentry || []).reverse().reduce((acc, curr) => { + if (typeof curr === 'function') { + curr = curr(globalContext) + } + return assignDeep(acc, curr) + }, {}) as SentryOptions + + if (!SentryReact.getClient()) { + SentryReact.init({ + ...DEFAULT_SENTRY_CLIENT_SETTINGS(clientConfig), + ...clientConfig, + }) + } +} diff --git a/packages/vike-react-sentry/src/integration/onCreateGlobalContext.server.ts b/packages/vike-react-sentry/src/integration/onCreateGlobalContext.server.ts new file mode 100644 index 00000000..e386db2c --- /dev/null +++ b/packages/vike-react-sentry/src/integration/onCreateGlobalContext.server.ts @@ -0,0 +1,23 @@ +export { onCreateGlobalContext } + +import * as SentryNode from '@sentry/node' +import type { GlobalContextServer } from 'vike/types' +import { SentryOptions } from '../types.js' +import { assignDeep } from '../utils/assignDeep.js' +import { DEFAULT_SENTRY_SERVER_SETTINGS } from './defaults-server.js' + +async function onCreateGlobalContext(globalContext: GlobalContextServer): Promise { + const serverConfig = (globalContext.config.sentry || []).reverse().reduce((acc, curr) => { + if (typeof curr === 'function') { + curr = curr(globalContext) + } + return assignDeep(acc, curr) + }, {}) as SentryOptions + + if (!SentryNode.getClient()) { + SentryNode.init({ + ...DEFAULT_SENTRY_SERVER_SETTINGS(serverConfig), + ...serverConfig, + }) + } +} diff --git a/packages/vike-react-sentry/src/integration/onError.ts b/packages/vike-react-sentry/src/integration/onError.ts new file mode 100644 index 00000000..af145818 --- /dev/null +++ b/packages/vike-react-sentry/src/integration/onError.ts @@ -0,0 +1,17 @@ +import * as Sentry from '@sentry/node' +import { isErrorSeen } from '../utils/error.js' +import type { Config } from 'vike/types' +import { assert } from '../utils/assert.js' + +// Handle errors on the server side +export const onError: Config['onError'] = (error) => { + assert( + error && typeof error === 'object' && 'getOriginalError' in error && typeof error.getOriginalError === 'function', + ) + const original = error.getOriginalError() + if (Sentry.getClient() && !isErrorSeen(original)) { + { + Sentry.captureException(original) + } + } +} diff --git a/packages/vike-react-sentry/src/integration/onHookCall.client.ts b/packages/vike-react-sentry/src/integration/onHookCall.client.ts new file mode 100644 index 00000000..f1b8370b --- /dev/null +++ b/packages/vike-react-sentry/src/integration/onHookCall.client.ts @@ -0,0 +1,55 @@ +import { Config } from 'vike/types' +import * as Sentry from '@sentry/react' +import { markErrorAsSeen, recordError, hasRecentErrors } from '../utils/error.js' + +/** + * Vike onHookCall configuration for Sentry integration (client-side). + * Provides automatic tracing and error capture for all Vike hooks. + */ +export const onHookCall: Config['onHookCall'] = async (hook, pageContext) => { + if (!Sentry.getClient() || hook.name === 'onError') { + return hook.call() + } + + // Extract useful context for Sentry + const url = pageContext?.urlOriginal ?? 'unknown' + const pageId = pageContext?.pageId ?? 'unknown' + + // withScope ensures any error captured during hook execution has Vike context + return Sentry.withScope((scope) => { + scope.setTag('vike.hook', hook.name) + scope.setTag('vike.page', pageId) + scope.setContext('vike', { + hook: hook.name, + filePath: hook.filePath, + pageId, + url, + }) + + return Sentry.startSpan( + { + name: hook.name, + op: 'vike.hook', + attributes: { + 'vike.hook.name': hook.name, + 'vike.hook.file': hook.filePath, + 'vike.page.id': pageId, + 'vike.url': url, + hasRecentErrors: hasRecentErrors(), + }, + }, + async (span) => { + try { + await hook.call() + } catch (error) { + markErrorAsSeen(error) + recordError() + span.setStatus({ + code: 2, + }) + Sentry.captureException(error) + } + }, + ) + }) +} diff --git a/packages/vike-react-sentry/src/integration/onHookCall.server.ts b/packages/vike-react-sentry/src/integration/onHookCall.server.ts new file mode 100644 index 00000000..0cfa2088 --- /dev/null +++ b/packages/vike-react-sentry/src/integration/onHookCall.server.ts @@ -0,0 +1,54 @@ +import { Config } from 'vike/types' +import * as Sentry from '@sentry/node' +import { hasRecentErrors, markErrorAsSeen } from '../utils/error.js' + +/** + * Vike onHookCall configuration for Sentry integration. + * Provides automatic tracing and error capture for all Vike hooks. + */ +export const onHookCall: Config['onHookCall'] = async (hook, pageContext) => { + if (!Sentry.getClient() || hook.name === 'onError') { + return hook.call() + } + + // Extract useful context for Sentry + const url = pageContext?.urlOriginal ?? 'unknown' + const pageId = pageContext?.pageId ?? 'unknown' + + // withScope ensures any error captured during hook execution has Vike context + return Sentry.withScope((scope) => { + scope.setTag('vike.hook', hook.name) + scope.setTag('vike.page', pageId) + scope.setContext('vike', { + hook: hook.name, + filePath: hook.filePath, + pageId, + url, + }) + + return Sentry.startSpan( + { + name: hook.name, + op: 'vike.hook', + attributes: { + 'vike.hook.name': hook.name, + 'vike.hook.file': hook.filePath, + 'vike.page.id': pageId, + 'vike.url': url, + hasRecentErrors: hasRecentErrors(), + }, + }, + async (span) => { + try { + await hook.call() + } catch (error) { + markErrorAsSeen(error) + span.setStatus({ + code: 2, + }) + Sentry.captureException(error) + } + }, + ) + }) +} diff --git a/packages/vike-react-sentry/src/plugin/index.ts b/packages/vike-react-sentry/src/plugin/index.ts new file mode 100644 index 00000000..5d3ce647 --- /dev/null +++ b/packages/vike-react-sentry/src/plugin/index.ts @@ -0,0 +1,183 @@ +export { getViteConfig } + +import { sentryVitePlugin, SentryVitePluginOptions } from '@sentry/vite-plugin' +import { serverProductionEntryPlugin } from '@brillout/vite-plugin-server-entry/plugin' +import { getVikeConfig } from 'vike/plugin' +import type { Plugin, InlineConfig } from 'vite' +import { assertUsage } from '../utils/assert.js' +import { assignDeep } from '../utils/assignDeep.js' +import { SentryOptions } from '../types.js' + +// Cache for auto-detected project info to avoid multiple API calls (global to survive module reloads) +declare global { + var __vike_react_sentry_vite_options_promise: Promise | undefined +} + +async function getViteConfig(): Promise { + const plugins: Plugin[] = [] + plugins.push({ + enforce: 'post', + name: 'vike-react-sentry:config-resolver', + configResolved() { + globalThis.__vike_react_sentry_vite_options_promise ??= (async () => { + const vikeConfig = getVikeConfig() + const sentryConfigRaw = vikeConfig.config.sentry || [] + + const sentryConfig = sentryConfigRaw.toReversed().reduce((acc, curr) => { + // skip function configs + if (typeof curr === 'function') { + curr = {} + } + return assignDeep(acc, curr) + }, {}) as SentryOptions + + // Assumes the client and server uses the same DSN + // If different DSNs are needed, we can enable SENTRY_DSN later + assertUsage( + !process.env['SENTRY_DSN'], + 'SENTRY_DSN is not supported. Use PUBLIC_ENV__SENTRY_DSN instead, or set dsn in your sentry config.', + ) + const effectiveDsn = sentryConfig.dsn || process.env['PUBLIC_ENV__SENTRY_DSN'] + assertUsage( + effectiveDsn, + 'Sentry DSN is required. Set PUBLIC_ENV__SENTRY_DSN env var, or set dsn in your sentry config.', + ) + + let vitePluginOptions = vikeConfig.config.sentryVite + // Resolve env fallbacks for vitePlugin options (effect doesn't have access to .env file vars) + if (vitePluginOptions || process.env['SENTRY_AUTH_TOKEN']) { + vitePluginOptions = { + ...vitePluginOptions, + authToken: vitePluginOptions?.authToken || process.env['SENTRY_AUTH_TOKEN'], + org: vitePluginOptions?.org || process.env['SENTRY_ORG'], + project: vitePluginOptions?.project || process.env['SENTRY_PROJECT'], + url: vitePluginOptions?.url || process.env['SENTRY_URL'], + } + } + + if (vitePluginOptions && sentryConfig.release) { + vitePluginOptions = { + ...vitePluginOptions, + release: { + name: sentryConfig.release, + ...vitePluginOptions.release, + }, + } + } + + // Auto-detect project and org slug from DSN if not provided + if (vitePluginOptions && !vitePluginOptions.project && !vitePluginOptions.org) { + const authToken = vitePluginOptions.authToken + const sentryUrl = vitePluginOptions.url + const projectId = getProjectIdFromDsn(effectiveDsn) + + if (authToken && projectId) { + const projectInfo = await getProjectInfoFromApi(authToken, projectId, effectiveDsn, sentryUrl) + if (projectInfo) { + vitePluginOptions = { + ...vitePluginOptions, + project: projectInfo.projectSlug, + org: projectInfo.orgSlug, + } + } + } + } + + // Cache resolved config globally to make it accessible in onCreateGlobalContext + return vitePluginOptions + })() + }, + }) + + if (!globalThis.__vike_react_sentry_vite_options_promise) { + return { + plugins, + } + } + const vitePluginOptions = await globalThis.__vike_react_sentry_vite_options_promise + if (vitePluginOptions) { + const sentryPlugins = sentryVitePlugin(vitePluginOptions) + plugins.push(...sentryPlugins) + } + + plugins.push( + ...serverProductionEntryPlugin({ + getServerProductionEntry: () => { + return ` +// vike-react-sentry: Preload OpenTelemetry instrumentation for ESM +// The actual Sentry.init() with config will be called later via onCreateGlobalContext +// https://docs.sentry.io/platforms/javascript/guides/node/install/esm-without-import/ +import { preloadOpenTelemetry } from '@sentry/node'; +preloadOpenTelemetry(); +` + }, + libraryName: 'vike-react-sentry', + }), + ) + + return { + resolve: { + noExternal: 'vike-react-sentry', + }, + plugins, + ...(vitePluginOptions && { + build: { + sourcemap: true, + }, + }), + } +} + +/** Parse project ID from DSN. Format: https://{PUBLIC_KEY}@{HOST}/{PROJECT_ID} */ +function getProjectIdFromDsn(dsn: string): string | undefined { + const match = dsn.match(/\/(\d+)$/) + return match?.[1] +} + +/** + * Extract API base URL from DSN + * DSN host like "o123.ingest.de.sentry.io" -> "https://de.sentry.io" + */ +function getApiUrlFromDsn(dsn: string): string | undefined { + try { + const url = new URL(dsn) + const match = url.hostname.match(/ingest\.(.+)$/) + return match ? `https://${match[1]}` : undefined + } catch { + return undefined + } +} + +/** Fetch project and org slug from Sentry API. Results are cached globally. */ +async function getProjectInfoFromApi( + authToken: string, + projectId: string, + dsn: string, + url?: string, +): Promise<{ projectSlug: string; orgSlug: string } | null> { + const effectiveUrl = url || getApiUrlFromDsn(dsn) || 'https://sentry.io' + + try { + const response = await fetch(`${effectiveUrl}/api/0/projects/`, { + headers: { Authorization: `Bearer ${authToken}` }, + }) + if (!response.ok) { + return null + } + const projects = (await response.json()) as Array<{ + id: string + slug: string + organization: { slug: string } + }> + const project = projects.find((p) => p.id === projectId) + if (!project) { + return null + } + return { + projectSlug: project.slug, + orgSlug: project.organization.slug, + } + } catch { + return null + } +} diff --git a/packages/vike-react-sentry/src/types.ts b/packages/vike-react-sentry/src/types.ts new file mode 100644 index 00000000..ab7b6fb1 --- /dev/null +++ b/packages/vike-react-sentry/src/types.ts @@ -0,0 +1,19 @@ +import type * as SentryReact from '@sentry/react' +import type * as SentryNode from '@sentry/node' + +export interface SentryNodeOptions extends SentryNode.NodeOptions {} +export interface SentryReactOptions extends SentryReact.BrowserOptions {} +export type SentryOptions = Pick< + SentryNodeOptions & SentryReactOptions, + | 'dsn' + | 'environment' + | 'release' + | 'debug' + | 'sampleRate' + | 'tracesSampleRate' + | 'enabled' + | 'maxBreadcrumbs' + | 'sendDefaultPii' + | 'replaysSessionSampleRate' + | 'replaysOnErrorSampleRate' +> diff --git a/packages/vike-react-sentry/src/utils/assert.ts b/packages/vike-react-sentry/src/utils/assert.ts new file mode 100644 index 00000000..504c011e --- /dev/null +++ b/packages/vike-react-sentry/src/utils/assert.ts @@ -0,0 +1,14 @@ +export { assertUsage } +export { assert } + +function assertUsage(condition: unknown, message: string): asserts condition { + if (!condition) { + throw new Error(`[vike-react-sentry] ${message}`) + } +} + +function assert(condition: unknown, message?: string): asserts condition { + if (!condition) { + throw new Error(`[vike-react-sentry] ${message}`) + } +} diff --git a/packages/vike-react-sentry/src/utils/assignDeep.ts b/packages/vike-react-sentry/src/utils/assignDeep.ts new file mode 100644 index 00000000..ce3f340c --- /dev/null +++ b/packages/vike-react-sentry/src/utils/assignDeep.ts @@ -0,0 +1,32 @@ +// Credits: https://github.com/radashi-org/radashi/blob/main/src/object/assign.ts + +export { assignDeep } + +function assignDeep(initial: Record, override: Record) { + if (!initial || !override) { + return initial ?? override ?? {} + } + for (const key of Object.keys(override)) { + initial[key] = + isPlainObject(initial[key]) && isPlainObject(override[key]) + ? assignDeep(initial[key], override[key]) + : override[key] + } + return initial +} + +function isPlainObject(value: any): value is object { + if (typeof value !== 'object' || value === null) { + return false + } + + const prototype = Object.getPrototypeOf(value) + return ( + // Fast path for most common objects. + prototype === Object.prototype || + // Support objects created without a prototype. + prototype === null || + // Support plain objects from other realms. + Object.getPrototypeOf(prototype) === null + ) +} diff --git a/packages/vike-react-sentry/src/utils/error.ts b/packages/vike-react-sentry/src/utils/error.ts new file mode 100644 index 00000000..b7157567 --- /dev/null +++ b/packages/vike-react-sentry/src/utils/error.ts @@ -0,0 +1,23 @@ +const seenError = Symbol.for('vike-react-sentry-seen-error') + +export const markErrorAsSeen = (error: unknown): void => { + if (typeof error === 'object' && error !== null) { + ;(error as any)[seenError] = true + } +} + +export const isErrorSeen = (error: unknown): boolean => { + return typeof error === 'object' && error !== null && Boolean((error as any)[seenError]) +} + +// Track recent errors for adaptive sampling +let lastErrorTimestamp: number | null = null +const RECENT_ERROR_WINDOW = 5 * 60 * 1000 // 5 minutes + +export const hasRecentErrors = (): boolean => { + return lastErrorTimestamp !== null && Date.now() - lastErrorTimestamp < RECENT_ERROR_WINDOW +} + +export const recordError = (): void => { + lastErrorTimestamp = Date.now() +} diff --git a/packages/vike-react-sentry/src/utils/resolveDsn.ts b/packages/vike-react-sentry/src/utils/resolveDsn.ts new file mode 100644 index 00000000..f14137c0 --- /dev/null +++ b/packages/vike-react-sentry/src/utils/resolveDsn.ts @@ -0,0 +1,3 @@ +export function resolveDsn(configDsn: string | undefined): string | undefined { + return configDsn || import.meta.env.PUBLIC_ENV__SENTRY_DSN +} diff --git a/packages/vike-react-sentry/tsconfig.json b/packages/vike-react-sentry/tsconfig.json new file mode 100644 index 00000000..d29d2c4b --- /dev/null +++ b/packages/vike-react-sentry/tsconfig.json @@ -0,0 +1,28 @@ +{ + "include": ["./src"], + "exclude": ["**/*.spec.ts"], + "compilerOptions": { + // Misc + "skipLibCheck": true, + "noErrorTruncation": true, + // Strictness + "strict": true, + "noUncheckedIndexedAccess": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + // Resolution + "esModuleInterop": true, + "moduleResolution": "Node16", + // Libs + "lib": ["DOM", "DOM.Iterable", "ES2023"], + "types": ["vite/client", "vike-react"], + // Output + "target": "ES2020", + "module": "Node16", + "outDir": "./dist/", + "rootDir": "./src/", + "declaration": true, + // React + "jsx": "react" + } +} diff --git a/packages/vike-react-zustand/package.json b/packages/vike-react-zustand/package.json index a731f1a8..0404ba4b 100644 --- a/packages/vike-react-zustand/package.json +++ b/packages/vike-react-zustand/package.json @@ -20,7 +20,7 @@ "react": ">=18.0.0", "react-dom": ">=18.0.0", "react-streaming": ">=0.3.42", - "vike": ">=0.4.242", + "vike": ">=0.4.252", "vike-react": ">=0.4.13", "zustand": ">=5.0.0" }, diff --git a/packages/vike-react/package.json b/packages/vike-react/package.json index ba74bb6f..fc77abfa 100644 --- a/packages/vike-react/package.json +++ b/packages/vike-react/package.json @@ -32,7 +32,7 @@ "peerDependencies": { "react": ">=19", "react-dom": ">=19", - "vike": ">=0.4.242" + "vike": ">=0.4.252" }, "scripts": { "dev": "tsc --watch", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 17d15811..3917da1d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,6 +4,9 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false +overrides: + vike: 0.4.252-commit-7f781cf + importers: .: @@ -54,8 +57,8 @@ importers: specifier: ^5.9.2 version: 5.9.3 vike: - specifier: ^0.4.249 - version: 0.4.249(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + specifier: 0.4.252-commit-7f781cf + version: 0.4.252-commit-7f781cf(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) vike-react: specifier: 0.6.15 version: link:../../packages/vike-react @@ -93,8 +96,8 @@ importers: specifier: ^5.9.3 version: 5.9.3 vike: - specifier: ^0.4.249 - version: 0.4.249(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + specifier: 0.4.252-commit-7f781cf + version: 0.4.252-commit-7f781cf(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) vike-react: specifier: 0.6.15 version: link:../../packages/vike-react @@ -114,8 +117,8 @@ importers: specifier: ^19.2.1 version: 19.2.1(react@19.2.1) vike: - specifier: ^0.4.249 - version: 0.4.249(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + specifier: 0.4.252-commit-7f781cf + version: 0.4.252-commit-7f781cf(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) vike-react: specifier: 0.6.15 version: link:../../packages/vike-react @@ -147,8 +150,8 @@ importers: specifier: ^5.9.2 version: 5.9.3 vike: - specifier: ^0.4.249 - version: 0.4.249(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + specifier: 0.4.252-commit-7f781cf + version: 0.4.252-commit-7f781cf(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) vike-react: specifier: 0.6.15 version: link:../../packages/vike-react @@ -186,8 +189,8 @@ importers: specifier: ^5.9.2 version: 5.9.3 vike: - specifier: ^0.4.249 - version: 0.4.249(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + specifier: 0.4.252-commit-7f781cf + version: 0.4.252-commit-7f781cf(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) vike-react: specifier: 0.6.15 version: link:../../packages/vike-react @@ -198,6 +201,57 @@ importers: specifier: ^7.3.0 version: 7.3.0(@types/node@24.0.8) + examples/sentry: + dependencies: + '@photonjs/hono': + specifier: ^0.1.7 + version: 0.1.7(hono@4.10.7)(srvx@0.9.6)(vite@7.3.0(@types/node@24.0.8)) + '@sentry/node': + specifier: ^10.22.0 + version: 10.27.0 + '@sentry/react': + specifier: ^10.22.0 + version: 10.27.0(react@19.2.1) + '@sentry/vite-plugin': + specifier: ^4.6.0 + version: 4.6.1 + '@types/react': + specifier: ^19.1.13 + version: 19.2.7 + '@types/react-dom': + specifier: ^19.1.9 + version: 19.2.3(@types/react@19.2.7) + '@vitejs/plugin-react': + specifier: ^5.0.3 + version: 5.1.1(vite@7.3.0(@types/node@24.0.8)) + hono: + specifier: ^4.7.14 + version: 4.10.7 + react: + specifier: ^19.2.0 + version: 19.2.1 + react-dom: + specifier: ^19.2.0 + version: 19.2.1(react@19.2.1) + typescript: + specifier: ^5.9.2 + version: 5.9.3 + vike: + specifier: 0.4.252-commit-7f781cf + version: 0.4.252-commit-7f781cf(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + vike-photon: + specifier: ^0.1.20 + version: 0.1.23(@photonjs/core@0.1.13(hono@4.10.7)(srvx@0.9.6)(vite@7.3.0(@types/node@24.0.8)))(@photonjs/runtime@0.1.10(hono@4.10.7)(rollup@4.46.2)(vite@7.3.0(@types/node@24.0.8)))(hono@4.10.7)(rollup@4.46.2)(srvx@0.9.6)(vike@0.4.252-commit-7f781cf(react-streaming@0.4.15(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)))(vite@7.3.0(@types/node@24.0.8)) + vike-react: + specifier: 0.6.10 + version: 0.6.10(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(vike@0.4.252-commit-7f781cf(react-streaming@0.4.15(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(vite@7.3.0(@types/node@24.0.8))) + vike-react-sentry: + specifier: 0.1.0 + version: link:../../packages/vike-react-sentry + vite: + specifier: ^7.1.7 + version: 7.3.0(@types/node@24.0.8) + examples/zustand: dependencies: '@types/react': @@ -222,8 +276,8 @@ importers: specifier: ^5.9.3 version: 5.9.3 vike: - specifier: ^0.4.249 - version: 0.4.249(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + specifier: 0.4.252-commit-7f781cf + version: 0.4.252-commit-7f781cf(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) vike-react: specifier: 0.6.15 version: link:../../packages/vike-react @@ -271,8 +325,8 @@ importers: specifier: ^5.9.2 version: 5.9.3 vike: - specifier: ^0.4.249 - version: 0.4.249(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + specifier: 0.4.252-commit-7f781cf + version: 0.4.252-commit-7f781cf(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) vite: specifier: ^7.3.0 version: 7.3.0(@types/node@24.0.8) @@ -301,8 +355,8 @@ importers: specifier: ^5.9.2 version: 5.9.3 vike: - specifier: ^0.4.249 - version: 0.4.249(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + specifier: 0.4.252-commit-7f781cf + version: 0.4.252-commit-7f781cf(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) vike-react: specifier: 0.6.15 version: link:../vike-react @@ -353,8 +407,8 @@ importers: specifier: ^5.9.2 version: 5.9.3 vike: - specifier: ^0.4.249 - version: 0.4.249(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + specifier: 0.4.252-commit-7f781cf + version: 0.4.252-commit-7f781cf(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) vike-react: specifier: 0.6.15 version: link:../vike-react @@ -386,8 +440,8 @@ importers: specifier: ^5.9.2 version: 5.9.3 vike: - specifier: ^0.4.249 - version: 0.4.249(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + specifier: 0.4.252-commit-7f781cf + version: 0.4.252-commit-7f781cf(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) vike-react: specifier: 0.6.15 version: link:../vike-react @@ -435,8 +489,8 @@ importers: specifier: ^5.9.2 version: 5.9.3 vike: - specifier: ^0.4.249 - version: 0.4.249(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + specifier: 0.4.252-commit-7f781cf + version: 0.4.252-commit-7f781cf(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) vike-react: specifier: 0.6.15 version: link:../vike-react @@ -472,8 +526,8 @@ importers: specifier: ^5.9.2 version: 5.9.3 vike: - specifier: ^0.4.249 - version: 0.4.249(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + specifier: 0.4.252-commit-7f781cf + version: 0.4.252-commit-7f781cf(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) vike-react: specifier: 0.6.15 version: link:../vike-react @@ -481,6 +535,58 @@ importers: specifier: ^7.3.0 version: 7.3.0(@types/node@24.0.8) + packages/vike-react-sentry: + dependencies: + '@universal-middleware/core': + specifier: ^0.4.13 + version: 0.4.13(hono@4.10.7)(srvx@0.9.6) + devDependencies: + '@brillout/release-me': + specifier: ^0.4.8 + version: 0.4.12(conventional-commits-filter@5.0.0) + '@brillout/vite-plugin-server-entry': + specifier: ^0.7.15 + version: 0.7.15 + '@sentry/node': + specifier: ^10.22.0 + version: 10.27.0 + '@sentry/react': + specifier: ^10.22.0 + version: 10.27.0(react@19.2.1) + '@sentry/vite-plugin': + specifier: ^4.6.0 + version: 4.6.1 + '@types/node': + specifier: ^24.0.8 + version: 24.0.8 + '@types/react': + specifier: ^19.1.13 + version: 19.2.7 + '@types/react-dom': + specifier: ^19.1.9 + version: 19.2.3(@types/react@19.2.7) + react: + specifier: ^19.2.0 + version: 19.2.1 + react-dom: + specifier: ^19.2.0 + version: 19.2.1(react@19.2.1) + rimraf: + specifier: ^5.0.5 + version: 5.0.10 + typescript: + specifier: ^5.9.2 + version: 5.9.3 + vike: + specifier: 0.4.252-commit-7f781cf + version: 0.4.252-commit-7f781cf(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + vike-react: + specifier: 0.6.10 + version: 0.6.10(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(vike@0.4.252-commit-7f781cf(react-streaming@0.4.15(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(vite@7.3.0(@types/node@24.0.8))) + vite: + specifier: ^7.1.7 + version: 7.3.0(@types/node@24.0.8) + packages/vike-react-styled-components: devDependencies: '@brillout/release-me': @@ -502,8 +608,8 @@ importers: specifier: ^5.9.2 version: 5.9.3 vike: - specifier: ^0.4.249 - version: 0.4.249(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + specifier: 0.4.252-commit-7f781cf + version: 0.4.252-commit-7f781cf(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) vike-react: specifier: 0.6.15 version: link:../vike-react @@ -527,13 +633,13 @@ importers: version: 5.0.10 styled-jsx: specifier: ^5.1.6 - version: 5.1.6(react@19.2.1) + version: 5.1.6(@babel/core@7.28.5)(react@19.2.1) typescript: specifier: ^5.9.2 version: 5.9.3 vike: - specifier: ^0.4.249 - version: 0.4.249(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + specifier: 0.4.252-commit-7f781cf + version: 0.4.252-commit-7f781cf(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) vike-react: specifier: 0.6.15 version: link:../vike-react @@ -584,8 +690,8 @@ importers: specifier: ^5.9.2 version: 5.9.3 vike: - specifier: ^0.4.249 - version: 0.4.249(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + specifier: 0.4.252-commit-7f781cf + version: 0.4.252-commit-7f781cf(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) vike-react: specifier: 0.6.15 version: link:../vike-react @@ -632,6 +738,12 @@ packages: peerDependencies: react: '>=16.9.0' + '@apm-js-collab/code-transformer@0.8.2': + resolution: {integrity: sha512-YRjJjNq5KFSjDUoqu5pFUWrrsvGOxl6c3bu+uMFc9HNNptZ2rNU/TI2nLw4jnhQNtka972Ee2m3uqbvDQtPeCA==} + + '@apm-js-collab/tracing-hooks@0.3.1': + resolution: {integrity: sha512-Vu1CbmPURlN5fTboVuKMoJjbO5qcq9fA5YXpskx3dXe/zTBvjODFoerw+69rVBlRLrJpwPqSDqEuJDEKIrTldw==} + '@apollo/client-react-streaming@0.11.11': resolution: {integrity: sha512-h7u/D5GDq5mn2BXaWBiK9z+i90mzmBCnOeRt4Iarc1qwTt40Q4u2yEXPw8ma1BywZ2uLJyVuAb6EyA605eqeEQ==} peerDependencies: @@ -819,6 +931,9 @@ packages: '@brillout/picocolors@1.0.29': resolution: {integrity: sha512-EKkqdFJD+CeP6GfpZNcWcCCXS5o0HFXhwISoN5JnHG/kplVE2MmF23eKtl4JRKU1rkR7s3kFIKiJf15aV/Uodg==} + '@brillout/picocolors@1.0.30': + resolution: {integrity: sha512-xJjdgyN1H0qh2nB2xlzazIipiDixuUd9oD5msh/Qv5bXJG9j8MSD/m4lREt6Z10ej6FF31b8vB4tdT7lDUbiyA==} + '@brillout/release-me@0.4.12': resolution: {integrity: sha512-0ONZeh7jt+7sZ94bZs0tnGaCQxFTgj7XFybG4jZkQxJJV81DXxzS1WT8aw86j37vO9irw9sShnqJzWE8/aPEqQ==} hasBin: true @@ -839,6 +954,9 @@ packages: '@brillout/vite-plugin-server-entry@0.7.15': resolution: {integrity: sha512-0ClgcmjkhJoHbI6KhbjZlXMeA9qn/EPLXEVssjCE6IVYnVb4bTYuq635c44n7jV3GkjcgFHCQWBmNw0OAGiUvQ==} + '@brillout/vite-plugin-server-entry@0.7.17': + resolution: {integrity: sha512-MfvSytYl51J2B+RrHvRXMdRNc1U2lHG/K9Gw05/jdPY2iYU2YQKdEzsPswfEWnt3fd1TrXF27h/fx5DIRn19jw==} + '@chakra-ui/react@3.13.0': resolution: {integrity: sha512-HqFXuVhiQCftQT5+/9F6w0aZufHgvaSr7jJoMP+BUxihF6uaSSW2YHy2eKK4a5SWNLMOnZHYQbUUrC3WSGcYxg==} peerDependencies: @@ -886,6 +1004,15 @@ packages: resolution: {integrity: sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==} engines: {node: '>=18'} + '@emnapi/core@1.7.1': + resolution: {integrity: sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==} + + '@emnapi/runtime@1.7.1': + resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==} + + '@emnapi/wasi-threads@1.1.0': + resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} + '@emotion/babel-plugin@11.13.5': resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==} @@ -951,12 +1078,6 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.25.1': - resolution: {integrity: sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - '@esbuild/aix-ppc64@0.27.2': resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==} engines: {node: '>=18'} @@ -969,12 +1090,6 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.25.1': - resolution: {integrity: sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - '@esbuild/android-arm64@0.27.2': resolution: {integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==} engines: {node: '>=18'} @@ -987,12 +1102,6 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-arm@0.25.1': - resolution: {integrity: sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - '@esbuild/android-arm@0.27.2': resolution: {integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==} engines: {node: '>=18'} @@ -1005,12 +1114,6 @@ packages: cpu: [x64] os: [android] - '@esbuild/android-x64@0.25.1': - resolution: {integrity: sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - '@esbuild/android-x64@0.27.2': resolution: {integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==} engines: {node: '>=18'} @@ -1023,12 +1126,6 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.25.1': - resolution: {integrity: sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - '@esbuild/darwin-arm64@0.27.2': resolution: {integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==} engines: {node: '>=18'} @@ -1041,12 +1138,6 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.25.1': - resolution: {integrity: sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - '@esbuild/darwin-x64@0.27.2': resolution: {integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==} engines: {node: '>=18'} @@ -1059,12 +1150,6 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.25.1': - resolution: {integrity: sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - '@esbuild/freebsd-arm64@0.27.2': resolution: {integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==} engines: {node: '>=18'} @@ -1077,12 +1162,6 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.1': - resolution: {integrity: sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - '@esbuild/freebsd-x64@0.27.2': resolution: {integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==} engines: {node: '>=18'} @@ -1095,12 +1174,6 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.25.1': - resolution: {integrity: sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - '@esbuild/linux-arm64@0.27.2': resolution: {integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==} engines: {node: '>=18'} @@ -1113,12 +1186,6 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.25.1': - resolution: {integrity: sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - '@esbuild/linux-arm@0.27.2': resolution: {integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==} engines: {node: '>=18'} @@ -1131,12 +1198,6 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.25.1': - resolution: {integrity: sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - '@esbuild/linux-ia32@0.27.2': resolution: {integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==} engines: {node: '>=18'} @@ -1149,12 +1210,6 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.25.1': - resolution: {integrity: sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - '@esbuild/linux-loong64@0.27.2': resolution: {integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==} engines: {node: '>=18'} @@ -1167,12 +1222,6 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.25.1': - resolution: {integrity: sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - '@esbuild/linux-mips64el@0.27.2': resolution: {integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==} engines: {node: '>=18'} @@ -1185,12 +1234,6 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.25.1': - resolution: {integrity: sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - '@esbuild/linux-ppc64@0.27.2': resolution: {integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==} engines: {node: '>=18'} @@ -1203,12 +1246,6 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.25.1': - resolution: {integrity: sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - '@esbuild/linux-riscv64@0.27.2': resolution: {integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==} engines: {node: '>=18'} @@ -1221,12 +1258,6 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.25.1': - resolution: {integrity: sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - '@esbuild/linux-s390x@0.27.2': resolution: {integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==} engines: {node: '>=18'} @@ -1239,24 +1270,12 @@ packages: cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.25.1': - resolution: {integrity: sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - '@esbuild/linux-x64@0.27.2': resolution: {integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.1': - resolution: {integrity: sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - '@esbuild/netbsd-arm64@0.27.2': resolution: {integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==} engines: {node: '>=18'} @@ -1269,12 +1288,6 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.1': - resolution: {integrity: sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - '@esbuild/netbsd-x64@0.27.2': resolution: {integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==} engines: {node: '>=18'} @@ -1287,12 +1300,6 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-arm64@0.25.1': - resolution: {integrity: sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - '@esbuild/openbsd-arm64@0.27.2': resolution: {integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==} engines: {node: '>=18'} @@ -1305,12 +1312,6 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.1': - resolution: {integrity: sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - '@esbuild/openbsd-x64@0.27.2': resolution: {integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==} engines: {node: '>=18'} @@ -1329,12 +1330,6 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.25.1': - resolution: {integrity: sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - '@esbuild/sunos-x64@0.27.2': resolution: {integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==} engines: {node: '>=18'} @@ -1347,12 +1342,6 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.25.1': - resolution: {integrity: sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - '@esbuild/win32-arm64@0.27.2': resolution: {integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==} engines: {node: '>=18'} @@ -1365,12 +1354,6 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.25.1': - resolution: {integrity: sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - '@esbuild/win32-ia32@0.27.2': resolution: {integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==} engines: {node: '>=18'} @@ -1383,12 +1366,6 @@ packages: cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.25.1': - resolution: {integrity: sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - '@esbuild/win32-x64@0.27.2': resolution: {integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==} engines: {node: '>=18'} @@ -1419,6 +1396,10 @@ packages: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} + '@isaacs/fs-minipass@4.0.1': + resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} + engines: {node: '>=18.0.0'} + '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -1432,9 +1413,20 @@ packages: '@jridgewell/sourcemap-codec@1.5.0': resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + '@jridgewell/trace-mapping@0.3.30': resolution: {integrity: sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==} + '@mapbox/node-pre-gyp@2.0.3': + resolution: {integrity: sha512-uwPAhccfFJlsfCxMYTwOdVfOz3xqyj8xYL3zJj8f0pb30tLohnnFPhLuqp4/qoEz8sNxe4SESZedcBojRefIzg==} + engines: {node: '>=18'} + hasBin: true + + '@napi-rs/wasm-runtime@1.0.7': + resolution: {integrity: sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -1447,9 +1439,231 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@opentelemetry/api-logs@0.208.0': + resolution: {integrity: sha512-CjruKY9V6NMssL/T1kAFgzosF1v9o6oeN+aX5JB/C/xPNtmgIJqcXHG7fA82Ou1zCpWGl4lROQUKwUNE1pMCyg==} + engines: {node: '>=8.0.0'} + + '@opentelemetry/api@1.9.0': + resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} + engines: {node: '>=8.0.0'} + + '@opentelemetry/context-async-hooks@2.2.0': + resolution: {integrity: sha512-qRkLWiUEZNAmYapZ7KGS5C4OmBLcP/H2foXeOEaowYCR0wi89fHejrfYfbuLVCMLp/dWZXKvQusdbUEZjERfwQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/core@2.2.0': + resolution: {integrity: sha512-FuabnnUm8LflnieVxs6eP7Z383hgQU4W1e3KJS6aOG3RxWxcHyBxH8fDMHNgu/gFx/M2jvTOW/4/PHhLz6bjWw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/instrumentation-amqplib@0.55.0': + resolution: {integrity: sha512-5ULoU8p+tWcQw5PDYZn8rySptGSLZHNX/7srqo2TioPnAAcvTy6sQFQXsNPrAnyRRtYGMetXVyZUy5OaX1+IfA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-connect@0.52.0': + resolution: {integrity: sha512-GXPxfNB5szMbV3I9b7kNWSmQBoBzw7MT0ui6iU/p+NIzVx3a06Ri2cdQO7tG9EKb4aKSLmfX9Cw5cKxXqX6Ohg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-dataloader@0.26.0': + resolution: {integrity: sha512-P2BgnFfTOarZ5OKPmYfbXfDFjQ4P9WkQ1Jji7yH5/WwB6Wm/knynAoA1rxbjWcDlYupFkyT0M1j6XLzDzy0aCA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-express@0.57.0': + resolution: {integrity: sha512-HAdx/o58+8tSR5iW+ru4PHnEejyKrAy9fYFhlEI81o10nYxrGahnMAHWiSjhDC7UQSY3I4gjcPgSKQz4rm/asg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-fs@0.28.0': + resolution: {integrity: sha512-FFvg8fq53RRXVBRHZViP+EMxMR03tqzEGpuq55lHNbVPyFklSVfQBN50syPhK5UYYwaStx0eyCtHtbRreusc5g==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-generic-pool@0.52.0': + resolution: {integrity: sha512-ISkNcv5CM2IwvsMVL31Tl61/p2Zm2I2NAsYq5SSBgOsOndT0TjnptjufYVScCnD5ZLD1tpl4T3GEYULLYOdIdQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-graphql@0.56.0': + resolution: {integrity: sha512-IPvNk8AFoVzTAM0Z399t34VDmGDgwT6rIqCUug8P9oAGerl2/PEIYMPOl/rerPGu+q8gSWdmbFSjgg7PDVRd3Q==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-hapi@0.55.0': + resolution: {integrity: sha512-prqAkRf9e4eEpy4G3UcR32prKE8NLNlA90TdEU1UsghOTg0jUvs40Jz8LQWFEs5NbLbXHYGzB4CYVkCI8eWEVQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-http@0.208.0': + resolution: {integrity: sha512-rhmK46DRWEbQQB77RxmVXGyjs6783crXCnFjYQj+4tDH/Kpv9Rbg3h2kaNyp5Vz2emF1f9HOQQvZoHzwMWOFZQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-ioredis@0.56.0': + resolution: {integrity: sha512-XSWeqsd3rKSsT3WBz/JKJDcZD4QYElZEa0xVdX8f9dh4h4QgXhKRLorVsVkK3uXFbC2sZKAS2Ds+YolGwD83Dg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-kafkajs@0.18.0': + resolution: {integrity: sha512-KCL/1HnZN5zkUMgPyOxfGjLjbXjpd4odDToy+7c+UsthIzVLFf99LnfIBE8YSSrYE4+uS7OwJMhvhg3tWjqMBg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-knex@0.53.0': + resolution: {integrity: sha512-xngn5cH2mVXFmiT1XfQ1aHqq1m4xb5wvU6j9lSgLlihJ1bXzsO543cpDwjrZm2nMrlpddBf55w8+bfS4qDh60g==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-koa@0.57.0': + resolution: {integrity: sha512-3JS8PU/D5E3q295mwloU2v7c7/m+DyCqdu62BIzWt+3u9utjxC9QS7v6WmUNuoDN3RM+Q+D1Gpj13ERo+m7CGg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.9.0 + + '@opentelemetry/instrumentation-lru-memoizer@0.53.0': + resolution: {integrity: sha512-LDwWz5cPkWWr0HBIuZUjslyvijljTwmwiItpMTHujaULZCxcYE9eU44Qf/pbVC8TulT0IhZi+RoGvHKXvNhysw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-mongodb@0.61.0': + resolution: {integrity: sha512-OV3i2DSoY5M/pmLk+68xr5RvkHU8DRB3DKMzYJdwDdcxeLs62tLbkmRyqJZsYf3Ht7j11rq35pHOWLuLzXL7pQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-mongoose@0.55.0': + resolution: {integrity: sha512-5afj0HfF6aM6Nlqgu6/PPHFk8QBfIe3+zF9FGpX76jWPS0/dujoEYn82/XcLSaW5LPUDW8sni+YeK0vTBNri+w==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-mysql2@0.55.0': + resolution: {integrity: sha512-0cs8whQG55aIi20gnK8B7cco6OK6N+enNhW0p5284MvqJ5EPi+I1YlWsWXgzv/V2HFirEejkvKiI4Iw21OqDWg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-mysql@0.54.0': + resolution: {integrity: sha512-bqC1YhnwAeWmRzy1/Xf9cDqxNG2d/JDkaxnqF5N6iJKN1eVWI+vg7NfDkf52/Nggp3tl1jcC++ptC61BD6738A==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-pg@0.61.0': + resolution: {integrity: sha512-UeV7KeTnRSM7ECHa3YscoklhUtTQPs6V6qYpG283AB7xpnPGCUCUfECFT9jFg6/iZOQTt3FHkB1wGTJCNZEvPw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-redis@0.57.0': + resolution: {integrity: sha512-bCxTHQFXzrU3eU1LZnOZQ3s5LURxQPDlU3/upBzlWY77qOI1GZuGofazj3jtzjctMJeBEJhNwIFEgRPBX1kp/Q==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-tedious@0.27.0': + resolution: {integrity: sha512-jRtyUJNZppPBjPae4ZjIQ2eqJbcRaRfJkr0lQLHFmOU/no5A6e9s1OHLd5XZyZoBJ/ymngZitanyRRA5cniseA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-undici@0.19.0': + resolution: {integrity: sha512-Pst/RhR61A2OoZQZkn6OLpdVpXp6qn3Y92wXa6umfJe9rV640r4bc6SWvw4pPN6DiQqPu2c8gnSSZPDtC6JlpQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.7.0 + + '@opentelemetry/instrumentation@0.208.0': + resolution: {integrity: sha512-Eju0L4qWcQS+oXxi6pgh7zvE2byogAkcsVv0OjHF/97iOz1N/aKE6etSGowYkie+YA1uo6DNwdSxaaNnLvcRlA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/redis-common@0.38.2': + resolution: {integrity: sha512-1BCcU93iwSRZvDAgwUxC/DV4T/406SkMfxGqu5ojc3AvNI+I9GhV7v0J1HljsczuuhcnFLYqD5VmwVXfCGHzxA==} + engines: {node: ^18.19.0 || >=20.6.0} + + '@opentelemetry/resources@2.2.0': + resolution: {integrity: sha512-1pNQf/JazQTMA0BiO5NINUzH0cbLbbl7mntLa4aJNmCCXSj0q03T5ZXXL0zw4G55TjdL9Tz32cznGClf+8zr5A==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/sdk-trace-base@2.2.0': + resolution: {integrity: sha512-xWQgL0Bmctsalg6PaXExmzdedSp3gyKV8mQBwK/j9VGdCDu2fmXIb2gAehBKbkXCpJ4HPkgv3QfoJWRT4dHWbw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/semantic-conventions@1.38.0': + resolution: {integrity: sha512-kocjix+/sSggfJhwXqClZ3i9Y/MI0fp7b+g7kCRm6psy2dsf8uApTRclwG18h8Avm7C9+fnt+O36PspJ/OzoWg==} + engines: {node: '>=14'} + + '@opentelemetry/sql-common@0.41.2': + resolution: {integrity: sha512-4mhWm3Z8z+i508zQJ7r6Xi7y4mmoJpdvH0fZPFRkWrdp5fq7hhZ2HhYokEOLkfqSMgPR4Z9EyB3DBkbKGOqZiQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.1.0 + + '@oxc-project/types@0.98.0': + resolution: {integrity: sha512-Vzmd6FsqVuz5HQVcRC/hrx7Ujo3WEVeQP7C2UNP5uy1hUY4SQvMB+93jxkI1KRHz9a/6cni3glPOtvteN+zpsw==} + '@pandacss/is-valid-prop@0.41.0': resolution: {integrity: sha512-BE6h6CsJk14ugIRrsazJtN3fcg+KDFRat1Bs93YFKH6jd4DOb1yUyVvC70jKqPVvg70zEcV8acZ7VdcU5TLu+w==} + '@photonjs/core@0.1.13': + resolution: {integrity: sha512-lAYBNK3fpCv3zX2rp980X3cBCCHkapeT8dDptQsM+lZGvWthXd1xN7PgoTCCNl9tiyxh3EIp5FzGi5d78aU1Nw==} + peerDependencies: + vite: '>=7.1' + peerDependenciesMeta: + vite: + optional: true + + '@photonjs/hono@0.1.7': + resolution: {integrity: sha512-ZuSedHVzjiXadLvWmpMk5oIGyr2b7mrDLzX1T/TPICaN4+JPUu5F1Iam28t2lxOZCVF55zD8d1MsT3YhuEEmWQ==} + peerDependencies: + '@hono/node-server': ^1 + vite: '>=7.1' + peerDependenciesMeta: + '@hono/node-server': + optional: true + vite: + optional: true + + '@photonjs/runtime@0.1.10': + resolution: {integrity: sha512-aDWUNHkiD/dcmJn2x6Q4+Pl2I4Pa5elIFI/aSgRccIJip1Zle1Eh7s4S6s0k6uF85uD25ux4uViQFkL4QjZZuw==} + peerDependencies: + vite: '>=7.1' + peerDependenciesMeta: + vite: + optional: true + + '@photonjs/srvx@0.1.7': + resolution: {integrity: sha512-gXuTcr/jGRcEq0ocpUi71ytF08OLFfspcXcimnbpY4CD54XxnYQQpAsA3tqvrrzkBL9ll3JbiNCWocbCLdYerg==} + peerDependencies: + vite: '>=7.1' + peerDependenciesMeta: + vite: + optional: true + '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -1457,6 +1671,11 @@ packages: '@polka/url@1.0.0-next.28': resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==} + '@prisma/instrumentation@6.19.0': + resolution: {integrity: sha512-QcuYy25pkXM8BJ37wVFBO7Zh34nyRV1GOb2n3lPkkbRYfl4hWl3PTcImP41P0KrzVXfa/45p6eVCos27x3exIg==} + peerDependencies: + '@opentelemetry/api': ^1.8 + '@rc-component/async-validator@5.0.4': resolution: {integrity: sha512-qgGdcVIF604M9EqjNF0hbUTz42bz/RDtxWdWuU5EQe3hi7M8ob54B6B35rOsvX5eSvIHIzT9iH1R3n+hk3CGfg==} engines: {node: '>=14.x'} @@ -1523,12 +1742,107 @@ packages: react-redux: optional: true - '@rolldown/pluginutils@1.0.0-beta.47': - resolution: {integrity: sha512-8QagwMH3kNCuzD8EWL8R2YPW5e4OrHNSAHRFDdmFqEwEaD/KcNKjVoumo+gP2vW5eKB2UPbM6vTYiGZX0ixLnw==} - - '@rollup/rollup-android-arm-eabi@4.46.2': - resolution: {integrity: sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA==} - cpu: [arm] + '@rolldown/binding-android-arm64@1.0.0-beta.51': + resolution: {integrity: sha512-Ctn8FUXKWWQI9pWC61P1yumS9WjQtelNS9riHwV7oCkknPGaAry4o7eFx2KgoLMnI2BgFJYpW7Im8/zX3BuONg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@rolldown/binding-darwin-arm64@1.0.0-beta.51': + resolution: {integrity: sha512-EL1aRW2Oq15ShUEkBPsDtLMO8GTqfb/ktM/dFaVzXKQiEE96Ss6nexMgfgQrg8dGnNpndFyffVDb5IdSibsu1g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.0.0-beta.51': + resolution: {integrity: sha512-uGtYKlFen9pMIPvkHPWZVDtmYhMQi5g5Ddsndg1gf3atScKYKYgs5aDP4DhHeTwGXQglhfBG7lEaOIZ4UAIWww==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-freebsd-x64@1.0.0-beta.51': + resolution: {integrity: sha512-JRoVTQtHYbZj1P07JLiuTuXjiBtIa7ag7/qgKA6CIIXnAcdl4LrOf7nfDuHPJcuRKaP5dzecMgY99itvWfmUFQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.51': + resolution: {integrity: sha512-BKATVnpPZ0TYBW9XfDwyd4kPGgvf964HiotIwUgpMrFOFYWqpZ+9ONNzMV4UFAYC7Hb5C2qgYQk/qj2OnAd4RQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.51': + resolution: {integrity: sha512-xLd7da5jkfbVsBCm1buIRdWtuXY8+hU3+6ESXY/Tk5X5DPHaifrUblhYDgmA34dQt6WyNC2kfXGgrduPEvDI6Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.51': + resolution: {integrity: sha512-EQFXTgHxxTzv3t5EmjUP/DfxzFYx9sMndfLsYaAY4DWF6KsK1fXGYsiupif6qPTViPC9eVmRm78q0pZU/kuIPg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.51': + resolution: {integrity: sha512-p5P6Xpa68w3yFaAdSzIZJbj+AfuDnMDqNSeglBXM7UlJT14Q4zwK+rV+8Mhp9MiUb4XFISZtbI/seBprhkQbiQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@rolldown/binding-linux-x64-musl@1.0.0-beta.51': + resolution: {integrity: sha512-sNVVyLa8HB8wkFipdfz1s6i0YWinwpbMWk5hO5S+XAYH2UH67YzUT13gs6wZTKg2x/3gtgXzYnHyF5wMIqoDAw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@rolldown/binding-openharmony-arm64@1.0.0-beta.51': + resolution: {integrity: sha512-e/JMTz9Q8+T3g/deEi8DK44sFWZWGKr9AOCW5e8C8SCVWzAXqYXAG7FXBWBNzWEZK0Rcwo9TQHTQ9Q0gXgdCaA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-wasm32-wasi@1.0.0-beta.51': + resolution: {integrity: sha512-We3LWqSu6J9s5Y0MK+N7fUiiu37aBGPG3Pc347EoaROuAwkCS2u9xJ5dpIyLW4B49CIbS3KaPmn4kTgPb3EyPw==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.51': + resolution: {integrity: sha512-fj56buHRuMM+r/cb6ZYfNjNvO/0xeFybI6cTkTROJatdP4fvmQ1NS8D/Lm10FCSDEOkqIz8hK3TGpbAThbPHsA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.51': + resolution: {integrity: sha512-fkqEqaeEx8AySXiDm54b/RdINb3C0VovzJA3osMhZsbn6FoD73H0AOIiaVAtGr6x63hefruVKTX8irAm4Jkt2w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.51': + resolution: {integrity: sha512-CWuLG/HMtrVcjKGa0C4GnuxONrku89g0+CsH8nT0SNhOtREXuzwgjIXNJImpE/A/DMf9JF+1Xkrq/YRr+F/rCg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@rolldown/pluginutils@1.0.0-beta.47': + resolution: {integrity: sha512-8QagwMH3kNCuzD8EWL8R2YPW5e4OrHNSAHRFDdmFqEwEaD/KcNKjVoumo+gP2vW5eKB2UPbM6vTYiGZX0ixLnw==} + + '@rolldown/pluginutils@1.0.0-beta.51': + resolution: {integrity: sha512-51/8cNXMrqWqX3o8DZidhwz1uYq0BhHDDSfVygAND1Skx5s1TDw3APSSxCMcFFedwgqGcx34gRouwY+m404BBQ==} + + '@rollup/pluginutils@5.3.0': + resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/rollup-android-arm-eabi@4.46.2': + resolution: {integrity: sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA==} + cpu: [arm] os: [android] '@rollup/rollup-android-arm64@4.46.2': @@ -1626,6 +1940,126 @@ packages: cpu: [x64] os: [win32] + '@sentry-internal/browser-utils@10.27.0': + resolution: {integrity: sha512-17tO6AXP+rmVQtLJ3ROQJF2UlFmvMWp7/8RDT5x9VM0w0tY31z8Twc0gw2KA7tcDxa5AaHDUbf9heOf+R6G6ow==} + engines: {node: '>=18'} + + '@sentry-internal/feedback@10.27.0': + resolution: {integrity: sha512-UecsIDJcv7VBwycge/MDvgSRxzevDdcItE1i0KSwlPz00rVVxLY9kV28PJ4I2E7r6/cIaP9BkbWegCEcv09NuA==} + engines: {node: '>=18'} + + '@sentry-internal/replay-canvas@10.27.0': + resolution: {integrity: sha512-inhsRYSVBpu3BI1kZphXj6uB59baJpYdyHeIPCiTfdFNBE5tngNH0HS/aedZ1g9zICw290lwvpuyrWJqp4VBng==} + engines: {node: '>=18'} + + '@sentry-internal/replay@10.27.0': + resolution: {integrity: sha512-tKSzHq1hNzB619Ssrqo25cqdQJ84R3xSSLsUWEnkGO/wcXJvpZy94gwdoS+KmH18BB1iRRRGtnMxZcUkiPSesw==} + engines: {node: '>=18'} + + '@sentry/babel-plugin-component-annotate@4.6.1': + resolution: {integrity: sha512-aSIk0vgBqv7PhX6/Eov+vlI4puCE0bRXzUG5HdCsHBpAfeMkI8Hva6kSOusnzKqs8bf04hU7s3Sf0XxGTj/1AA==} + engines: {node: '>= 14'} + + '@sentry/browser@10.27.0': + resolution: {integrity: sha512-G8q362DdKp9y1b5qkQEmhTFzyWTOVB0ps1rflok0N6bVA75IEmSDX1pqJsNuY3qy14VsVHYVwQBJQsNltQLS0g==} + engines: {node: '>=18'} + + '@sentry/bundler-plugin-core@4.6.1': + resolution: {integrity: sha512-WPeRbnMXm927m4Kr69NTArPfI+p5/34FHftdCRI3LFPMyhZDzz6J3wLy4hzaVUgmMf10eLzmq2HGEMvpQmdynA==} + engines: {node: '>= 14'} + + '@sentry/cli-darwin@2.58.2': + resolution: {integrity: sha512-MArsb3zLhA2/cbd4rTm09SmTpnEuZCoZOpuZYkrpDw1qzBVJmRFA1W1hGAQ9puzBIk/ubY3EUhhzuU3zN2uD6w==} + engines: {node: '>=10'} + os: [darwin] + + '@sentry/cli-linux-arm64@2.58.2': + resolution: {integrity: sha512-ay3OeObnbbPrt45cjeUyQjsx5ain1laj1tRszWj37NkKu55NZSp4QCg1gGBZ0gBGhckI9nInEsmKtix00alw2g==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux, freebsd, android] + + '@sentry/cli-linux-arm@2.58.2': + resolution: {integrity: sha512-HU9lTCzcHqCz/7Mt5n+cv+nFuJdc1hGD2h35Uo92GgxX3/IujNvOUfF+nMX9j6BXH6hUt73R5c0Ycq9+a3Parg==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux, freebsd, android] + + '@sentry/cli-linux-i686@2.58.2': + resolution: {integrity: sha512-CN9p0nfDFsAT1tTGBbzOUGkIllwS3hygOUyTK7LIm9z+UHw5uNgNVqdM/3Vg+02ymjkjISNB3/+mqEM5osGXdA==} + engines: {node: '>=10'} + cpu: [x86, ia32] + os: [linux, freebsd, android] + + '@sentry/cli-linux-x64@2.58.2': + resolution: {integrity: sha512-oX/LLfvWaJO50oBVOn4ZvG2SDWPq0MN8SV9eg5tt2nviq+Ryltfr7Rtoo+HfV+eyOlx1/ZXhq9Wm7OT3cQuz+A==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux, freebsd, android] + + '@sentry/cli-win32-arm64@2.58.2': + resolution: {integrity: sha512-+cl3x2HPVMpoSVGVM1IDWlAEREZrrVQj4xBb0TRKII7g3hUxRsAIcsrr7+tSkie++0FuH4go/b5fGAv51OEF3w==} + engines: {node: '>=10'} + cpu: [arm64] + os: [win32] + + '@sentry/cli-win32-i686@2.58.2': + resolution: {integrity: sha512-omFVr0FhzJ8oTJSg1Kf+gjLgzpYklY0XPfLxZ5iiMiYUKwF5uo1RJRdkUOiEAv0IqpUKnmKcmVCLaDxsWclB7Q==} + engines: {node: '>=10'} + cpu: [x86, ia32] + os: [win32] + + '@sentry/cli-win32-x64@2.58.2': + resolution: {integrity: sha512-2NAFs9UxVbRztQbgJSP5i8TB9eJQ7xraciwj/93djrSMHSEbJ0vC47TME0iifgvhlHMs5vqETOKJtfbbpQAQFA==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + + '@sentry/cli@2.58.2': + resolution: {integrity: sha512-U4u62V4vaTWF+o40Mih8aOpQKqKUbZQt9A3LorIJwaE3tO3XFLRI70eWtW2se1Qmy0RZ74zB14nYcFNFl2t4Rw==} + engines: {node: '>= 10'} + hasBin: true + + '@sentry/core@10.27.0': + resolution: {integrity: sha512-Zc68kdH7tWTDtDbV1zWIbo3Jv0fHAU2NsF5aD2qamypKgfSIMSbWVxd22qZyDBkaX8gWIPm/0Sgx6aRXRBXrYQ==} + engines: {node: '>=18'} + + '@sentry/node-core@10.27.0': + resolution: {integrity: sha512-Dzo1I64Psb7AkpyKVUlR9KYbl4wcN84W4Wet3xjLmVKMgrCo2uAT70V4xIacmoMH5QLZAx0nGfRy9yRCd4nzBg==} + engines: {node: '>=18'} + peerDependencies: + '@opentelemetry/api': ^1.9.0 + '@opentelemetry/context-async-hooks': ^1.30.1 || ^2.1.0 || ^2.2.0 + '@opentelemetry/core': ^1.30.1 || ^2.1.0 || ^2.2.0 + '@opentelemetry/instrumentation': '>=0.57.1 <1' + '@opentelemetry/resources': ^1.30.1 || ^2.1.0 || ^2.2.0 + '@opentelemetry/sdk-trace-base': ^1.30.1 || ^2.1.0 || ^2.2.0 + '@opentelemetry/semantic-conventions': ^1.37.0 + + '@sentry/node@10.27.0': + resolution: {integrity: sha512-1cQZ4+QqV9juW64Jku1SMSz+PoZV+J59lotz4oYFvCNYzex8hRAnDKvNiKW1IVg5mEEkz98mg1fvcUtiw7GTiQ==} + engines: {node: '>=18'} + + '@sentry/opentelemetry@10.27.0': + resolution: {integrity: sha512-z2vXoicuGiqlRlgL9HaYJgkin89ncMpNQy0Kje6RWyhpzLe8BRgUXlgjux7WrSrcbopDdC1OttSpZsJ/Wjk7fg==} + engines: {node: '>=18'} + peerDependencies: + '@opentelemetry/api': ^1.9.0 + '@opentelemetry/context-async-hooks': ^1.30.1 || ^2.1.0 || ^2.2.0 + '@opentelemetry/core': ^1.30.1 || ^2.1.0 || ^2.2.0 + '@opentelemetry/sdk-trace-base': ^1.30.1 || ^2.1.0 || ^2.2.0 + '@opentelemetry/semantic-conventions': ^1.37.0 + + '@sentry/react@10.27.0': + resolution: {integrity: sha512-xoIRBlO1IhLX/O9aQgVYW1F3Qhw8TdkOiZjh6mrPsnCpBLufsQ4aS1nDQi9miZuWeslW0s2zNy0ACBpICZR/sw==} + engines: {node: '>=18'} + peerDependencies: + react: ^16.14.0 || 17.x || 18.x || 19.x + + '@sentry/vite-plugin@4.6.1': + resolution: {integrity: sha512-Qvys1y3o8/bfL3ikrHnJS9zxdjt0z3POshdBl3967UcflrTqBmnGNkcVk53SlmtJWIfh85fgmrLvGYwZ2YiqNg==} + engines: {node: '>= 14'} + '@simple-libs/child-process-utils@1.0.1': resolution: {integrity: sha512-3nWd8irxvDI6v856wpPCHZ+08iQR0oHTZfzAZmnbsLzf+Sf1odraP6uKOHDZToXq3RPRV/LbqGVlSCogm9cJjg==} engines: {node: '>=18'} @@ -1662,6 +2096,9 @@ packages: react: ^18.0.0 react-dom: ^18.0.0 + '@tybys/wasm-util@0.10.1': + resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} + '@types/aria-query@5.0.4': resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} @@ -1680,12 +2117,18 @@ packages: '@types/chai@5.2.2': resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + '@types/deep-eql@4.0.2': resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/mysql@2.15.27': + resolution: {integrity: sha512-YfWiV16IY0OeBfBCk8+hXKmdTKrKlwKN1MNKAPBu5JYxLwBEZl7QzeEpGnlZb3VMGJrrGmB84gXiH+ofs/TezA==} + '@types/node@22.15.34': resolution: {integrity: sha512-8Y6E5WUupYy1Dd0II32BsWAx5MWdcnRd8L84Oys3veg1YrYtNtzgO4CFhiBg6MDSjk7Ay36HYOnU7/tuOzIzcw==} @@ -1698,6 +2141,12 @@ packages: '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} + '@types/pg-pool@2.0.6': + resolution: {integrity: sha512-TaAUE5rq2VQYxab5Ts7WZhKNmuN78Q6PiFonTDdpbx8a1H0M1vhy3rhiMjl+e2iHmogyMw7jZF4FrE6eJUy5HQ==} + + '@types/pg@8.15.6': + resolution: {integrity: sha512-NoaMtzhxOrubeL/7UZuNTrejB4MPAJ0RpxZqXQf2qXuVlTPuG6Y8p4u9dKRaue4yjmC7ZhzVO2/Yyyn25znrPQ==} + '@types/react-dom@18.3.5': resolution: {integrity: sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q==} peerDependencies: @@ -1714,9 +2163,67 @@ packages: '@types/stylis@4.2.5': resolution: {integrity: sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw==} + '@types/tedious@4.0.14': + resolution: {integrity: sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw==} + '@types/use-sync-external-store@0.0.6': resolution: {integrity: sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==} + '@universal-middleware/cloudflare@0.4.10': + resolution: {integrity: sha512-ZY+N0KKoH+H+BB3wsaD5yqTiiFtX7uklPyCBqGLqEijOtZA5ZgFIExfWDjiIUjezUBAbRB8kUZ/WlPITY+hyTg==} + + '@universal-middleware/compress@0.2.34': + resolution: {integrity: sha512-zpLaiHHEfx1ouahZ+NKc5UScsiRAsEn+wiwWMH55JAEeUQ73zymw3e1kZg45Tr/oQh8X3PL0YrRKXDdc5Lt8WA==} + + '@universal-middleware/core@0.4.13': + resolution: {integrity: sha512-k2zv5/zLWPUBxIZp/QTxkiVkG4EyqO+X6ABszBKg8ZmZpTp5ljd8uiIWdnMpSDDIN72R99RxtaMi0/vXNB75/w==} + peerDependencies: + '@cloudflare/workers-types': ^4.20251014.0 + '@hattip/core': ^0.0.49 + '@types/express': ^4 || ^5 + '@webroute/route': ^0.8.0 + elysia: ^1.4.11 + fastify: ^5.6.1 + h3: ^1.15.4 + hono: ^4.10.2 + srvx: ^0.8 || ^0.9 + peerDependenciesMeta: + '@cloudflare/workers-types': + optional: true + '@hattip/core': + optional: true + '@types/express': + optional: true + '@webroute/route': + optional: true + elysia: + optional: true + fastify: + optional: true + h3: + optional: true + hono: + optional: true + srvx: + optional: true + + '@universal-middleware/express@0.4.22': + resolution: {integrity: sha512-4aIrnK52NJmYKokZnwpWja/vT2m/HoZ8zxQyYLdokkSQdx0B1k1VsmYGeWENvpDQBgLjnfyvDzyaxch6Tib/hA==} + + '@universal-middleware/hono@0.4.17': + resolution: {integrity: sha512-NKO42xEv4oQ/fvMg4NN3je+bhBymIHi5mFWjyxAtb5ewbtkCZs9eb+aBNO+Ai1FEy2jQpkBEJMvclW5eohFw9g==} + + '@universal-middleware/sirv@0.1.24': + resolution: {integrity: sha512-BshKQ6hsb3mbgIyFguyf6QEjqAFGW2KGLd3j/N1aK2b1bicD2elsWOD5UYSb0b84VHglGmISqOu30FbfMWhMgg==} + + '@universal-middleware/srvx@0.1.1': + resolution: {integrity: sha512-nTy4BZvaEI+rFO8sWEVvZrZWwFuqEXlXPNvIBAfl16+nKcorwiwm1x+qzuDrSqLd/kr5LSsGR3/KenTvESS9dQ==} + + '@vercel/nft@0.30.4': + resolution: {integrity: sha512-wE6eAGSXScra60N2l6jWvNtVK0m+sh873CpfZW4KI2v8EHuUQp+mSEi4T+IcdPCSEDgCdAS/7bizbhQlkjzrSA==} + engines: {node: '>=18'} + hasBin: true + '@vitejs/plugin-react@5.1.1': resolution: {integrity: sha512-WQfkSw0QbQ5aJ2CHYw23ZGkqnRwqKHD/KYsMeTkZzPT4Jcf0DcBxBtwMJxnu6E7oxw5+JC6ZAiePgh28uJ1HBA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1969,11 +2476,29 @@ packages: '@zag-js/utils@0.82.2': resolution: {integrity: sha512-tN87VEEoo240O2CzQdHvtBVPF8hHqLdpNzDT+obNIQrRj4wbNQ5Ze3Zwrd6/SoBe7ImKgkwbAlgu4k5+v9sDcA==} + abbrev@3.0.1: + resolution: {integrity: sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==} + engines: {node: ^18.17.0 || >=20.5.0} + + acorn-import-attributes@1.9.5: + resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} + peerDependencies: + acorn: ^8 + acorn@8.14.1: resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} engines: {node: '>=0.4.0'} hasBin: true + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + engines: {node: '>=0.4.0'} + hasBin: true + + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + agent-base@7.1.3: resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} engines: {node: '>= 14'} @@ -2004,6 +2529,10 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + aria-query@5.1.3: resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} @@ -2021,6 +2550,9 @@ packages: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} + async-sema@3.1.1: + resolution: {integrity: sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==} + asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} @@ -2035,6 +2567,13 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} @@ -2095,6 +2634,17 @@ packages: resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} engines: {node: '>= 16'} + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + chownr@3.0.0: + resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} + engines: {node: '>=18'} + + cjs-module-lexer@1.4.3: + resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} + classnames@2.5.1: resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} @@ -2122,6 +2672,13 @@ packages: compute-scroll-into-view@3.1.1: resolution: {integrity: sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==} + confbox@0.2.2: + resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} + + consola@3.4.2: + resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} + engines: {node: ^14.18.0 || >=16.10.0} + conventional-changelog-angular@8.0.0: resolution: {integrity: sha512-CLf+zr6St0wIxos4bmaKHRXWAcsCXrJU6F4VdNDrGRK3B8LDLKoX3zuMV5GhtbGkVR/LohZ6MT6im43vZLSjmA==} engines: {node: '>=18'} @@ -2230,6 +2787,10 @@ packages: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + devalue@4.3.3: resolution: {integrity: sha512-UH8EL6H2ifcY8TbD2QsxwCC/pr5xSwPvv85LrLXVihmHVC3T3YqTCIwnR5ak0yO1KYqlxrPVOA/JVZJYPy2ATg==} @@ -2240,6 +2801,10 @@ packages: resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} engines: {node: '>=8'} + dotenv@16.6.1: + resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} + engines: {node: '>=12'} + dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} @@ -2290,11 +2855,6 @@ packages: engines: {node: '>=18'} hasBin: true - esbuild@0.25.1: - resolution: {integrity: sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==} - engines: {node: '>=18'} - hasBin: true - esbuild@0.27.2: resolution: {integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==} engines: {node: '>=18'} @@ -2308,6 +2868,9 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} @@ -2319,6 +2882,9 @@ packages: resolution: {integrity: sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==} engines: {node: '>=12.0.0'} + exsolve@1.0.8: + resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==} + fast-glob@3.3.3: resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} @@ -2345,6 +2911,9 @@ packages: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} engines: {node: ^12.20 || >= 14.13} + file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} @@ -2352,6 +2921,10 @@ packages: find-root@1.1.0: resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + for-each@0.3.5: resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} engines: {node: '>= 0.4'} @@ -2368,6 +2941,9 @@ packages: resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} engines: {node: '>=12.20.0'} + forwarded-parse@2.1.2: + resolution: {integrity: sha512-alTFZZQDKMporBH77856pXgzhEzaUVmLCDk+egLgIgHst3Tpndzz8MnKe+GzRJRfvVdn69HhpW7cmXzvtLvJAw==} + fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -2406,10 +2982,17 @@ packages: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true + glob@10.5.0: + resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} + hasBin: true + gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + graphql-tag@2.12.6: resolution: {integrity: sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==} engines: {node: '>=10'} @@ -2451,6 +3034,10 @@ packages: hoist-non-react-statics@3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + hono@4.10.7: + resolution: {integrity: sha512-icXIITfw/07Q88nLSkB9aiUrd8rYzSweK681Kjo/TSggaGbOX4RRyxxm71v+3PC8C/j+4rlxGeoTRxQDkaJkUw==} + engines: {node: '>=16.9.0'} + hosted-git-info@8.1.0: resolution: {integrity: sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw==} engines: {node: ^18.17.0 || >=20.5.0} @@ -2463,6 +3050,10 @@ packages: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} engines: {node: '>= 14'} + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + https-proxy-agent@7.0.6: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} @@ -2482,6 +3073,9 @@ packages: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} + import-in-the-middle@2.0.0: + resolution: {integrity: sha512-yNZhyQYqXpkT0AKq3F3KLasUSK4fHvebNH5hOsKQw2dhGSALvQ4U0BqUc5suziKvydO5u5hgN2hy1RJaho8U5A==} + internal-slot@1.1.0: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} @@ -2501,6 +3095,10 @@ packages: resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} engines: {node: '>= 0.4'} + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + is-boolean-object@1.2.2: resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} engines: {node: '>= 0.4'} @@ -2627,6 +3225,10 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true @@ -2650,6 +3252,13 @@ packages: magic-string@0.30.17: resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + + magic-string@0.30.8: + resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==} + engines: {node: '>=12'} + math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} @@ -2692,6 +3301,13 @@ packages: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} + minizlib@3.1.0: + resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==} + engines: {node: '>= 18'} + + module-details-from-path@1.0.4: + resolution: {integrity: sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==} + mrmime@2.0.1: resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} engines: {node: '>=10'} @@ -2712,17 +3328,39 @@ packages: engines: {node: '>=10.5.0'} deprecated: Use your platform's native DOMException instead + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + node-fetch@3.3.2: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + node-gyp-build@4.8.4: + resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} + hasBin: true + node-releases@2.0.19: resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + nopt@8.1.0: + resolution: {integrity: sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==} + engines: {node: ^18.17.0 || >=20.5.0} + hasBin: true + normalize-package-data@7.0.0: resolution: {integrity: sha512-k6U0gKRIuNCTkwHGZqblCfLfBRh+w1vI6tBo+IeJwq2M8FUiOqhX7GH+GArQGScA7azd1WfyRCvxoXDO3hQDIA==} engines: {node: ^18.17.0 || >=20.5.0} + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} @@ -2757,6 +3395,14 @@ packages: optimism@0.18.1: resolution: {integrity: sha512-mLXNwWPa9dgFyDqkNi54sjDyNJ9/fTI6WGBLgnXku1vdKY/jovHfZT5r+aiVeFFLOz+foPNOm5YJ4mqgld2GBQ==} + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} @@ -2771,6 +3417,10 @@ packages: parse5@7.2.1: resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -2799,6 +3449,17 @@ packages: perfect-freehand@1.2.2: resolution: {integrity: sha512-eh31l019WICQ03pkF3FSzHxB8n07ItqIQ++G5UV8JX0zVOXzgTGCqnRR0jJ2h9U8/2uW4W4mtGJELt9kEV0CFQ==} + pg-int8@1.0.1: + resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} + engines: {node: '>=4.0.0'} + + pg-protocol@1.10.3: + resolution: {integrity: sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ==} + + pg-types@2.2.0: + resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} + engines: {node: '>=4'} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -2814,6 +3475,9 @@ packages: resolution: {integrity: sha512-o8mkY4E/+LNUf6LzX96ht6k6CEDi65k9G2rjMtBe9Oo+VPKSvl+0GKHuH/AlG+GA5LPG/i5hrekkxUc3s2HU+Q==} hasBin: true + pkg-types@2.3.0: + resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} + playwright-chromium@1.57.0: resolution: {integrity: sha512-GCVVTbmIDrZuBxWYoQ70rehRXMb3Q7ccENe63a+rGTWwypeVAgh/DD5o5QQ898oer5pdIv3vGINUlEkHtOZQEw==} engines: {node: '>=18'} @@ -2843,6 +3507,22 @@ packages: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} + postgres-array@2.0.0: + resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} + engines: {node: '>=4'} + + postgres-bytea@1.0.0: + resolution: {integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==} + engines: {node: '>=0.10.0'} + + postgres-date@1.0.7: + resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==} + engines: {node: '>=0.10.0'} + + postgres-interval@1.2.0: + resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} + engines: {node: '>=0.10.0'} + prettier@3.5.3: resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==} engines: {node: '>=14'} @@ -2852,12 +3532,19 @@ packages: resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + progress@2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} proxy-compare@3.0.1: resolution: {integrity: sha512-V9plBAt3qjMlS1+nC8771KNf6oJ12gExvaxnNzN/9yVRLdTv/lc+oJlnSzrdYDAvBfTStPCoiaCOTmTs0adv7Q==} + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + proxy-memoize@3.0.1: resolution: {integrity: sha512-VDdG/VYtOgdGkWJx7y0o7p+zArSf2383Isci8C+BP3YXgMYDoPd3cCBjw0JdWb6YBb9sFiOPbAADDVTPJnh+9g==} @@ -3147,6 +3834,10 @@ packages: resolution: {integrity: sha512-DGrYcCWK7tvYMnWh79yrPHt+vdx9tY+1gPZa7nJQtO/p8bLTDaHp4dzwEhQB7pZ4Xe3ok4XKuEPrVuc+wlpkmw==} engines: {node: '>=0.10.0'} + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + redux-thunk@3.1.0: resolution: {integrity: sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==} peerDependencies: @@ -3162,6 +3853,10 @@ packages: resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} engines: {node: '>= 0.4'} + regexparam@3.0.0: + resolution: {integrity: sha512-RSYAtP31mvYLkAHrOlh25pCNQ5hWnT106VukGaaFfuJrZFkGRX5GhUAdPqpSDXxOhA2c4akmRuplv1mRqnBn6Q==} + engines: {node: '>=8'} + rehackt@0.1.0: resolution: {integrity: sha512-7kRDOuLHB87D/JESKxQoRwv4DzbIdwkAGQ7p6QKGdVlY1IZheUnVhlk/4UZlNUVxdAXpyxikE3URsG067ybVzw==} peerDependencies: @@ -3173,6 +3868,10 @@ packages: react: optional: true + require-in-the-middle@8.0.1: + resolution: {integrity: sha512-QT7FVMXfWOYFbeRBF6nu+I6tr2Tf3u0q8RIEjNob/heKY/nh7drD/k7eeMFmSQgnTtCzLDcCu/XEnpW2wk4xCQ==} + engines: {node: '>=9.3.0 || >=8.10.0 <9.0.0'} + requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} @@ -3186,6 +3885,10 @@ packages: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + resolve@1.22.10: resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} engines: {node: '>= 0.4'} @@ -3199,6 +3902,11 @@ packages: resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} hasBin: true + rolldown@1.0.0-beta.51: + resolution: {integrity: sha512-ZRLgPlS91l4JztLYEZnmMcd3Umcla1hkXJgiEiR4HloRJBBoeaX8qogTu5Jfu36rRMVLndzqYv0h+M5gJAkUfg==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + rollup@4.46.2: resolution: {integrity: sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -3315,9 +4023,17 @@ packages: spdx-license-ids@3.0.21: resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==} + srvx@0.9.6: + resolution: {integrity: sha512-5L4rT6qQqqb+xcoDoklUgCNdmzqJ6vbcDRwPVGRXewF55IJH0pqh0lQlrJ266ZWTKJ4mfeioqHQJeAYesS+RrQ==} + engines: {node: '>=20.16.0'} + hasBin: true + stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + standaloner@0.1.11: + resolution: {integrity: sha512-JeLFj5rKTmy3UJj7/oGUVnmFaBIWmJQVP5Hv3s2D6Ju8kVPZYbGxOhMQS45QiEr2V0ngI83d/Vv4Zh62Ojs/rQ==} + std-env@3.9.0: resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} @@ -3395,6 +4111,10 @@ packages: symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + tar@7.5.2: + resolution: {integrity: sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==} + engines: {node: '>=18'} + throttle-debounce@5.0.2: resolution: {integrity: sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==} engines: {node: '>=12.22'} @@ -3421,6 +4141,13 @@ packages: resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==} engines: {node: '>=14.0.0'} + tldts-core@7.0.19: + resolution: {integrity: sha512-lJX2dEWx0SGH4O6p+7FPwYmJ/bu1JbcGJ8RLaG9b7liIgZ85itUVEPbMtWRVrde/0fnDPEPHW10ZsKW3kVsE9A==} + + tldts@7.0.19: + resolution: {integrity: sha512-8PWx8tvC4jDB39BQw1m4x8y5MH1BcQ5xHeL2n7UVFulMPH/3Q0uiamahFJ3lXA0zO2SUyRXuVVbWSDmstlt9YA==} + hasBin: true + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -3436,10 +4163,21 @@ packages: resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} engines: {node: '>=6'} + tough-cookie@6.0.0: + resolution: {integrity: sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==} + engines: {node: '>=16'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + tr46@5.1.0: resolution: {integrity: sha512-IUWnUK7ADYR5Sl1fZlO1INDUhVhatWl7BtJWsIhwJ0UAK7ilzzIa8uIqOO/aYVWHZPJkKbEL+362wrzoeRF7bw==} engines: {node: '>=18'} + ts-deepmerge@7.0.3: + resolution: {integrity: sha512-Du/ZW2RfwV/D4cmA5rXafYjBQVuvu4qGiEEla4EmEHVHgRdx68Gftx7i66jn2bzHPwSVZY36Ae6OuDn9el4ZKA==} + engines: {node: '>=14.13.1'} + ts-invariant@0.10.3: resolution: {integrity: sha512-uivwYcQaxAucv1CzRp2n/QdYPo4ILf9VXgH19zEIjFx2EJufV16P0JtJVpYHy89DItG6Kwj2oIUjrcK5au+4tQ==} engines: {node: '>=8'} @@ -3474,6 +4212,9 @@ packages: resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} engines: {node: '>= 4.0.0'} + unplugin@1.0.1: + resolution: {integrity: sha512-aqrHaVBWW1JVKBHmGo33T5TxeL0qWzfvjWokObHA9bYmN7eNDkwOxmLjhioHl9878qDFMAaT51XNroRyuz7WxA==} + update-browserslist-db@1.1.3: resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} hasBin: true @@ -3494,20 +4235,44 @@ packages: validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} - vike@0.4.249: - resolution: {integrity: sha512-ZQpfmIclLCCLD9dsjTOwoczdjHJ7JrGww4b4vg3FpfrFZcSoNcrEtrwgbSqw9lMuYnkbfXPKFxwOf8VVp9Uftw==} - engines: {node: '>=20.19.0'} - hasBin: true + vike-photon@0.1.23: + resolution: {integrity: sha512-QKIKj3AoG9W8jVGlMZTL9cZVvphfGWa9OWXROTTUp90dm8aMv9rU7OWCwz7kPqhKUI2QmUKGhWjgqOESun9ULg==} peerDependencies: - react-streaming: '>=0.3.42' - vite: '>=6.3.0' + '@photonjs/cloudflare': '>=0.0.9' + '@photonjs/core': ^0.1.0 + '@photonjs/runtime': ^0.1.0 + '@photonjs/vercel': ^0.1.1 + vike: 0.4.252-commit-7f781cf + vite: '>=7.1' peerDependenciesMeta: - react-streaming: + '@photonjs/cloudflare': + optional: true + '@photonjs/vercel': optional: true vite: optional: true - vite-node@3.2.4: + vike-react@0.6.10: + resolution: {integrity: sha512-LzV3ZuFovlzkaWiXO9PQeiW56szVo5rM4h8UJeb58dUpAVzcjxvDoM0Q+2vinJisVrml5Wp+DjN0qWQHUu5UQQ==} + peerDependencies: + react: '>=19' + react-dom: '>=19' + vike: 0.4.252-commit-7f781cf + + vike@0.4.252-commit-7f781cf: + resolution: {integrity: sha512-EruDmaMPSdSOsos3VZ8HhMYQd88ZP3afks6rKsnx4fV4wfpMpDyXYc9FYOmAzHCwkwaIXEZevku/aa67K5ZQxg==} + engines: {node: '>=20.19.0'} + hasBin: true + peerDependencies: + react-streaming: '>=0.3.42' + vite: '>=6.3.0' + peerDependenciesMeta: + react-streaming: + optional: true + vite: + optional: true + + vite-node@3.2.4: resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true @@ -3591,10 +4356,20 @@ packages: resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} engines: {node: '>= 8'} + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + webidl-conversions@7.0.0: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} engines: {node: '>=12'} + webpack-sources@3.3.3: + resolution: {integrity: sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==} + engines: {node: '>=10.13.0'} + + webpack-virtual-modules@0.5.0: + resolution: {integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==} + whatwg-encoding@3.1.1: resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} engines: {node: '>=18'} @@ -3607,6 +4382,9 @@ packages: resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==} engines: {node: '>=18'} + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + which-boxed-primitive@1.1.1: resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} engines: {node: '>= 0.4'} @@ -3659,19 +4437,34 @@ packages: xmlchars@2.2.0: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + yallist@5.0.0: + resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} + engines: {node: '>=18'} + yaml@1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + zen-observable-ts@1.2.5: resolution: {integrity: sha512-QZWQekv6iB72Naeake9hS1KxHlotfRpe+WGNbNx5/ta+R3DNjVO2bswf63gXlWDcs+EMd7XY8HfVQyP1X6T4Zg==} zen-observable@0.8.15: resolution: {integrity: sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==} + zod@4.1.13: + resolution: {integrity: sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==} + zustand@5.0.8: resolution: {integrity: sha512-gyPKpIaxY9XcO2vSMrLbiER7QMAMGOQZVRdJ6Zi782jkbzZygq5GI9nG8g+sMgitRtndwaBSl7uiqC49o1SSiw==} engines: {node: '>=12.20.0'} @@ -3741,6 +4534,16 @@ snapshots: resize-observer-polyfill: 1.5.1 throttle-debounce: 5.0.2 + '@apm-js-collab/code-transformer@0.8.2': {} + + '@apm-js-collab/tracing-hooks@0.3.1': + dependencies: + '@apm-js-collab/code-transformer': 0.8.2 + debug: 4.4.1 + module-details-from-path: 1.0.4 + transitivePeerDependencies: + - supports-color + '@apollo/client-react-streaming@0.11.11(@apollo/client@3.13.5(@types/react@19.2.7)(graphql@16.10.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(graphql@16.10.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': dependencies: '@apollo/client': 3.13.5(@types/react@19.2.7)(graphql@16.10.0)(react-dom@19.2.1(react@19.2.1))(react@19.2.1) @@ -3996,6 +4799,8 @@ snapshots: '@brillout/picocolors@1.0.29': {} + '@brillout/picocolors@1.0.30': {} + '@brillout/release-me@0.4.12(conventional-commits-filter@5.0.0)': dependencies: '@brillout/picocolors': 1.0.29 @@ -4034,6 +4839,11 @@ snapshots: '@brillout/import': 0.2.6 '@brillout/picocolors': 1.0.29 + '@brillout/vite-plugin-server-entry@0.7.17': + dependencies: + '@brillout/import': 0.2.6 + '@brillout/picocolors': 1.0.30 + '@chakra-ui/react@3.13.0(@emotion/react@11.14.0(@types/react@19.2.7)(react@19.2.1))(react-dom@19.2.1(react@19.2.1))(react@19.2.1)': dependencies: '@ark-ui/react': 4.9.2(react-dom@19.2.1(react@19.2.1))(react@19.2.1) @@ -4077,6 +4887,22 @@ snapshots: '@csstools/css-tokenizer@3.0.3': {} + '@emnapi/core@1.7.1': + dependencies: + '@emnapi/wasi-threads': 1.1.0 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.7.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.1.0': + dependencies: + tslib: 2.8.1 + optional: true + '@emotion/babel-plugin@11.13.5': dependencies: '@babel/helper-module-imports': 7.27.1 @@ -4160,186 +4986,123 @@ snapshots: '@esbuild/aix-ppc64@0.23.1': optional: true - '@esbuild/aix-ppc64@0.25.1': - optional: true - '@esbuild/aix-ppc64@0.27.2': optional: true '@esbuild/android-arm64@0.23.1': optional: true - '@esbuild/android-arm64@0.25.1': - optional: true - '@esbuild/android-arm64@0.27.2': optional: true '@esbuild/android-arm@0.23.1': optional: true - '@esbuild/android-arm@0.25.1': - optional: true - '@esbuild/android-arm@0.27.2': optional: true '@esbuild/android-x64@0.23.1': optional: true - '@esbuild/android-x64@0.25.1': - optional: true - '@esbuild/android-x64@0.27.2': optional: true '@esbuild/darwin-arm64@0.23.1': optional: true - '@esbuild/darwin-arm64@0.25.1': - optional: true - '@esbuild/darwin-arm64@0.27.2': optional: true '@esbuild/darwin-x64@0.23.1': optional: true - '@esbuild/darwin-x64@0.25.1': - optional: true - '@esbuild/darwin-x64@0.27.2': optional: true '@esbuild/freebsd-arm64@0.23.1': optional: true - '@esbuild/freebsd-arm64@0.25.1': - optional: true - '@esbuild/freebsd-arm64@0.27.2': optional: true '@esbuild/freebsd-x64@0.23.1': optional: true - '@esbuild/freebsd-x64@0.25.1': - optional: true - '@esbuild/freebsd-x64@0.27.2': optional: true '@esbuild/linux-arm64@0.23.1': optional: true - '@esbuild/linux-arm64@0.25.1': - optional: true - '@esbuild/linux-arm64@0.27.2': optional: true '@esbuild/linux-arm@0.23.1': optional: true - '@esbuild/linux-arm@0.25.1': - optional: true - '@esbuild/linux-arm@0.27.2': optional: true '@esbuild/linux-ia32@0.23.1': optional: true - '@esbuild/linux-ia32@0.25.1': - optional: true - '@esbuild/linux-ia32@0.27.2': optional: true '@esbuild/linux-loong64@0.23.1': optional: true - '@esbuild/linux-loong64@0.25.1': - optional: true - '@esbuild/linux-loong64@0.27.2': optional: true '@esbuild/linux-mips64el@0.23.1': optional: true - '@esbuild/linux-mips64el@0.25.1': - optional: true - '@esbuild/linux-mips64el@0.27.2': optional: true '@esbuild/linux-ppc64@0.23.1': optional: true - '@esbuild/linux-ppc64@0.25.1': - optional: true - '@esbuild/linux-ppc64@0.27.2': optional: true '@esbuild/linux-riscv64@0.23.1': optional: true - '@esbuild/linux-riscv64@0.25.1': - optional: true - '@esbuild/linux-riscv64@0.27.2': optional: true '@esbuild/linux-s390x@0.23.1': optional: true - '@esbuild/linux-s390x@0.25.1': - optional: true - '@esbuild/linux-s390x@0.27.2': optional: true '@esbuild/linux-x64@0.23.1': optional: true - '@esbuild/linux-x64@0.25.1': - optional: true - '@esbuild/linux-x64@0.27.2': optional: true - '@esbuild/netbsd-arm64@0.25.1': - optional: true - '@esbuild/netbsd-arm64@0.27.2': optional: true '@esbuild/netbsd-x64@0.23.1': optional: true - '@esbuild/netbsd-x64@0.25.1': - optional: true - '@esbuild/netbsd-x64@0.27.2': optional: true '@esbuild/openbsd-arm64@0.23.1': optional: true - '@esbuild/openbsd-arm64@0.25.1': - optional: true - '@esbuild/openbsd-arm64@0.27.2': optional: true '@esbuild/openbsd-x64@0.23.1': optional: true - '@esbuild/openbsd-x64@0.25.1': - optional: true - '@esbuild/openbsd-x64@0.27.2': optional: true @@ -4349,36 +5112,24 @@ snapshots: '@esbuild/sunos-x64@0.23.1': optional: true - '@esbuild/sunos-x64@0.25.1': - optional: true - '@esbuild/sunos-x64@0.27.2': optional: true '@esbuild/win32-arm64@0.23.1': optional: true - '@esbuild/win32-arm64@0.25.1': - optional: true - '@esbuild/win32-arm64@0.27.2': optional: true '@esbuild/win32-ia32@0.23.1': optional: true - '@esbuild/win32-ia32@0.25.1': - optional: true - '@esbuild/win32-ia32@0.27.2': optional: true '@esbuild/win32-x64@0.23.1': optional: true - '@esbuild/win32-x64@0.25.1': - optional: true - '@esbuild/win32-x64@0.27.2': optional: true @@ -4414,6 +5165,10 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 + '@isaacs/fs-minipass@4.0.1': + dependencies: + minipass: 7.1.2 + '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.5.0 @@ -4428,11 +5183,33 @@ snapshots: '@jridgewell/sourcemap-codec@1.5.0': {} + '@jridgewell/sourcemap-codec@1.5.5': {} + '@jridgewell/trace-mapping@0.3.30': dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 + '@mapbox/node-pre-gyp@2.0.3': + dependencies: + consola: 3.4.2 + detect-libc: 2.1.2 + https-proxy-agent: 7.0.6 + node-fetch: 2.7.0 + nopt: 8.1.0 + semver: 7.7.1 + tar: 7.5.2 + transitivePeerDependencies: + - encoding + - supports-color + + '@napi-rs/wasm-runtime@1.0.7': + dependencies: + '@emnapi/core': 1.7.1 + '@emnapi/runtime': 1.7.1 + '@tybys/wasm-util': 0.10.1 + optional: true + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -4445,13 +5222,334 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.19.1 + '@opentelemetry/api-logs@0.208.0': + dependencies: + '@opentelemetry/api': 1.9.0 + + '@opentelemetry/api@1.9.0': {} + + '@opentelemetry/context-async-hooks@2.2.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + + '@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/semantic-conventions': 1.38.0 + + '@opentelemetry/instrumentation-amqplib@0.55.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-connect@0.52.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.38.0 + '@types/connect': 3.4.38 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-dataloader@0.26.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-express@0.57.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.38.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-fs@0.28.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-generic-pool@0.52.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-graphql@0.56.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-hapi@0.55.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.38.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-http@0.208.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.38.0 + forwarded-parse: 2.1.2 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-ioredis@0.56.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/redis-common': 0.38.2 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-kafkajs@0.18.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.38.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-knex@0.53.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.38.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-koa@0.57.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.38.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-lru-memoizer@0.53.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-mongodb@0.61.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-mongoose@0.55.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-mysql2@0.55.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.38.0 + '@opentelemetry/sql-common': 0.41.2(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-mysql@0.54.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) + '@types/mysql': 2.15.27 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-pg@0.61.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.38.0 + '@opentelemetry/sql-common': 0.41.2(@opentelemetry/api@1.9.0) + '@types/pg': 8.15.6 + '@types/pg-pool': 2.0.6 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-redis@0.57.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/redis-common': 0.38.2 + '@opentelemetry/semantic-conventions': 1.38.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-tedious@0.27.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) + '@types/tedious': 4.0.14 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-undici@0.19.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.38.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation@0.208.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.208.0 + import-in-the-middle: 2.0.0 + require-in-the-middle: 8.0.1 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/redis-common@0.38.2': {} + + '@opentelemetry/resources@2.2.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.38.0 + + '@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.38.0 + + '@opentelemetry/semantic-conventions@1.38.0': {} + + '@opentelemetry/sql-common@0.41.2(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + + '@oxc-project/types@0.98.0': {} + '@pandacss/is-valid-prop@0.41.0': {} + '@photonjs/core@0.1.13(hono@4.10.7)(srvx@0.9.6)(vite@7.3.0(@types/node@24.0.8))': + dependencies: + '@brillout/vite-plugin-server-entry': 0.7.15 + '@universal-middleware/cloudflare': 0.4.10(hono@4.10.7)(srvx@0.9.6) + '@universal-middleware/compress': 0.2.34 + '@universal-middleware/core': 0.4.13(hono@4.10.7)(srvx@0.9.6) + '@universal-middleware/express': 0.4.22(hono@4.10.7)(srvx@0.9.6) + '@universal-middleware/sirv': 0.1.24 + estree-walker: 3.0.3 + ts-deepmerge: 7.0.3 + zod: 4.1.13 + optionalDependencies: + vite: 7.3.0(@types/node@24.0.8) + transitivePeerDependencies: + - '@cloudflare/workers-types' + - '@hattip/core' + - '@types/express' + - '@webroute/route' + - elysia + - fastify + - h3 + - hono + - srvx + + '@photonjs/hono@0.1.7(hono@4.10.7)(srvx@0.9.6)(vite@7.3.0(@types/node@24.0.8))': + dependencies: + '@photonjs/core': 0.1.13(hono@4.10.7)(srvx@0.9.6)(vite@7.3.0(@types/node@24.0.8)) + '@universal-middleware/hono': 0.4.17(hono@4.10.7)(srvx@0.9.6) + optionalDependencies: + vite: 7.3.0(@types/node@24.0.8) + transitivePeerDependencies: + - '@cloudflare/workers-types' + - '@hattip/core' + - '@types/express' + - '@webroute/route' + - elysia + - fastify + - h3 + - hono + - srvx + + '@photonjs/runtime@0.1.10(hono@4.10.7)(rollup@4.46.2)(vite@7.3.0(@types/node@24.0.8))': + dependencies: + '@photonjs/core': 0.1.13(hono@4.10.7)(srvx@0.9.6)(vite@7.3.0(@types/node@24.0.8)) + '@photonjs/srvx': 0.1.7(hono@4.10.7)(srvx@0.9.6)(vite@7.3.0(@types/node@24.0.8)) + '@universal-middleware/core': 0.4.13(hono@4.10.7)(srvx@0.9.6) + '@universal-middleware/sirv': 0.1.24 + srvx: 0.9.6 + standaloner: 0.1.11(rollup@4.46.2) + optionalDependencies: + vite: 7.3.0(@types/node@24.0.8) + transitivePeerDependencies: + - '@cloudflare/workers-types' + - '@hattip/core' + - '@types/express' + - '@webroute/route' + - elysia + - encoding + - fastify + - h3 + - hono + - rollup + - supports-color + + '@photonjs/srvx@0.1.7(hono@4.10.7)(srvx@0.9.6)(vite@7.3.0(@types/node@24.0.8))': + dependencies: + '@photonjs/core': 0.1.13(hono@4.10.7)(srvx@0.9.6)(vite@7.3.0(@types/node@24.0.8)) + '@universal-middleware/srvx': 0.1.1(hono@4.10.7)(srvx@0.9.6) + optionalDependencies: + vite: 7.3.0(@types/node@24.0.8) + transitivePeerDependencies: + - '@cloudflare/workers-types' + - '@hattip/core' + - '@types/express' + - '@webroute/route' + - elysia + - fastify + - h3 + - hono + - srvx + '@pkgjs/parseargs@0.11.0': optional: true '@polka/url@1.0.0-next.28': {} + '@prisma/instrumentation@6.19.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + '@rc-component/async-validator@5.0.4': dependencies: '@babel/runtime': 7.26.10 @@ -4530,10 +5628,64 @@ snapshots: redux-thunk: 3.1.0(redux@5.0.1) reselect: 5.1.1 optionalDependencies: - react: 19.2.1 - react-redux: 9.2.0(@types/react@19.2.7)(react@19.2.1)(redux@5.0.1) - - '@rolldown/pluginutils@1.0.0-beta.47': {} + react: 19.2.1 + react-redux: 9.2.0(@types/react@19.2.7)(react@19.2.1)(redux@5.0.1) + + '@rolldown/binding-android-arm64@1.0.0-beta.51': + optional: true + + '@rolldown/binding-darwin-arm64@1.0.0-beta.51': + optional: true + + '@rolldown/binding-darwin-x64@1.0.0-beta.51': + optional: true + + '@rolldown/binding-freebsd-x64@1.0.0-beta.51': + optional: true + + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.51': + optional: true + + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.51': + optional: true + + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.51': + optional: true + + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.51': + optional: true + + '@rolldown/binding-linux-x64-musl@1.0.0-beta.51': + optional: true + + '@rolldown/binding-openharmony-arm64@1.0.0-beta.51': + optional: true + + '@rolldown/binding-wasm32-wasi@1.0.0-beta.51': + dependencies: + '@napi-rs/wasm-runtime': 1.0.7 + optional: true + + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.51': + optional: true + + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.51': + optional: true + + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.51': + optional: true + + '@rolldown/pluginutils@1.0.0-beta.47': {} + + '@rolldown/pluginutils@1.0.0-beta.51': {} + + '@rollup/pluginutils@5.3.0(rollup@4.46.2)': + dependencies: + '@types/estree': 1.0.8 + estree-walker: 2.0.2 + picomatch: 4.0.3 + optionalDependencies: + rollup: 4.46.2 '@rollup/rollup-android-arm-eabi@4.46.2': optional: true @@ -4595,6 +5747,174 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.46.2': optional: true + '@sentry-internal/browser-utils@10.27.0': + dependencies: + '@sentry/core': 10.27.0 + + '@sentry-internal/feedback@10.27.0': + dependencies: + '@sentry/core': 10.27.0 + + '@sentry-internal/replay-canvas@10.27.0': + dependencies: + '@sentry-internal/replay': 10.27.0 + '@sentry/core': 10.27.0 + + '@sentry-internal/replay@10.27.0': + dependencies: + '@sentry-internal/browser-utils': 10.27.0 + '@sentry/core': 10.27.0 + + '@sentry/babel-plugin-component-annotate@4.6.1': {} + + '@sentry/browser@10.27.0': + dependencies: + '@sentry-internal/browser-utils': 10.27.0 + '@sentry-internal/feedback': 10.27.0 + '@sentry-internal/replay': 10.27.0 + '@sentry-internal/replay-canvas': 10.27.0 + '@sentry/core': 10.27.0 + + '@sentry/bundler-plugin-core@4.6.1': + dependencies: + '@babel/core': 7.28.5 + '@sentry/babel-plugin-component-annotate': 4.6.1 + '@sentry/cli': 2.58.2 + dotenv: 16.6.1 + find-up: 5.0.0 + glob: 10.5.0 + magic-string: 0.30.8 + unplugin: 1.0.1 + transitivePeerDependencies: + - encoding + - supports-color + + '@sentry/cli-darwin@2.58.2': + optional: true + + '@sentry/cli-linux-arm64@2.58.2': + optional: true + + '@sentry/cli-linux-arm@2.58.2': + optional: true + + '@sentry/cli-linux-i686@2.58.2': + optional: true + + '@sentry/cli-linux-x64@2.58.2': + optional: true + + '@sentry/cli-win32-arm64@2.58.2': + optional: true + + '@sentry/cli-win32-i686@2.58.2': + optional: true + + '@sentry/cli-win32-x64@2.58.2': + optional: true + + '@sentry/cli@2.58.2': + dependencies: + https-proxy-agent: 5.0.1 + node-fetch: 2.7.0 + progress: 2.0.3 + proxy-from-env: 1.1.0 + which: 2.0.2 + optionalDependencies: + '@sentry/cli-darwin': 2.58.2 + '@sentry/cli-linux-arm': 2.58.2 + '@sentry/cli-linux-arm64': 2.58.2 + '@sentry/cli-linux-i686': 2.58.2 + '@sentry/cli-linux-x64': 2.58.2 + '@sentry/cli-win32-arm64': 2.58.2 + '@sentry/cli-win32-i686': 2.58.2 + '@sentry/cli-win32-x64': 2.58.2 + transitivePeerDependencies: + - encoding + - supports-color + + '@sentry/core@10.27.0': {} + + '@sentry/node-core@10.27.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.208.0(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.38.0)': + dependencies: + '@apm-js-collab/tracing-hooks': 0.3.1 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/context-async-hooks': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.38.0 + '@sentry/core': 10.27.0 + '@sentry/opentelemetry': 10.27.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.38.0) + import-in-the-middle: 2.0.0 + transitivePeerDependencies: + - supports-color + + '@sentry/node@10.27.0': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/context-async-hooks': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-amqplib': 0.55.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-connect': 0.52.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-dataloader': 0.26.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-express': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-fs': 0.28.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-generic-pool': 0.52.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-graphql': 0.56.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-hapi': 0.55.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-http': 0.208.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-ioredis': 0.56.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-kafkajs': 0.18.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-knex': 0.53.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-koa': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-lru-memoizer': 0.53.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mongodb': 0.61.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mongoose': 0.55.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mysql': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mysql2': 0.55.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-pg': 0.61.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-redis': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-tedious': 0.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-undici': 0.19.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.38.0 + '@prisma/instrumentation': 6.19.0(@opentelemetry/api@1.9.0) + '@sentry/core': 10.27.0 + '@sentry/node-core': 10.27.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.208.0(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.38.0) + '@sentry/opentelemetry': 10.27.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.38.0) + import-in-the-middle: 2.0.0 + minimatch: 9.0.5 + transitivePeerDependencies: + - supports-color + + '@sentry/opentelemetry@10.27.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.38.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/context-async-hooks': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.38.0 + '@sentry/core': 10.27.0 + + '@sentry/react@10.27.0(react@19.2.1)': + dependencies: + '@sentry/browser': 10.27.0 + '@sentry/core': 10.27.0 + hoist-non-react-statics: 3.3.2 + react: 19.2.1 + + '@sentry/vite-plugin@4.6.1': + dependencies: + '@sentry/bundler-plugin-core': 4.6.1 + unplugin: 1.0.1 + transitivePeerDependencies: + - encoding + - supports-color + '@simple-libs/child-process-utils@1.0.1': dependencies: '@simple-libs/stream-utils': 1.1.0 @@ -4639,6 +5959,11 @@ snapshots: transitivePeerDependencies: - '@types/react' + '@tybys/wasm-util@0.10.1': + dependencies: + tslib: 2.8.1 + optional: true + '@types/aria-query@5.0.4': {} '@types/babel__core@7.20.5': @@ -4666,10 +5991,18 @@ snapshots: dependencies: '@types/deep-eql': 4.0.2 + '@types/connect@3.4.38': + dependencies: + '@types/node': 24.0.8 + '@types/deep-eql@4.0.2': {} '@types/estree@1.0.8': {} + '@types/mysql@2.15.27': + dependencies: + '@types/node': 24.0.8 + '@types/node@22.15.34': dependencies: undici-types: 6.21.0 @@ -4682,6 +6015,16 @@ snapshots: '@types/parse-json@4.0.2': {} + '@types/pg-pool@2.0.6': + dependencies: + '@types/pg': 8.15.6 + + '@types/pg@8.15.6': + dependencies: + '@types/node': 24.0.8 + pg-protocol: 1.10.3 + pg-types: 2.2.0 + '@types/react-dom@18.3.5(@types/react@19.2.7)': dependencies: '@types/react': 19.2.7 @@ -4696,8 +6039,102 @@ snapshots: '@types/stylis@4.2.5': {} + '@types/tedious@4.0.14': + dependencies: + '@types/node': 24.0.8 + '@types/use-sync-external-store@0.0.6': {} + '@universal-middleware/cloudflare@0.4.10(hono@4.10.7)(srvx@0.9.6)': + dependencies: + '@universal-middleware/core': 0.4.13(hono@4.10.7)(srvx@0.9.6) + transitivePeerDependencies: + - '@cloudflare/workers-types' + - '@hattip/core' + - '@types/express' + - '@webroute/route' + - elysia + - fastify + - h3 + - hono + - srvx + + '@universal-middleware/compress@0.2.34': {} + + '@universal-middleware/core@0.4.13(hono@4.10.7)(srvx@0.9.6)': + dependencies: + regexparam: 3.0.0 + tough-cookie: 6.0.0 + optionalDependencies: + hono: 4.10.7 + srvx: 0.9.6 + + '@universal-middleware/express@0.4.22(hono@4.10.7)(srvx@0.9.6)': + dependencies: + '@universal-middleware/core': 0.4.13(hono@4.10.7)(srvx@0.9.6) + transitivePeerDependencies: + - '@cloudflare/workers-types' + - '@hattip/core' + - '@types/express' + - '@webroute/route' + - elysia + - fastify + - h3 + - hono + - srvx + + '@universal-middleware/hono@0.4.17(hono@4.10.7)(srvx@0.9.6)': + dependencies: + '@universal-middleware/core': 0.4.13(hono@4.10.7)(srvx@0.9.6) + transitivePeerDependencies: + - '@cloudflare/workers-types' + - '@hattip/core' + - '@types/express' + - '@webroute/route' + - elysia + - fastify + - h3 + - hono + - srvx + + '@universal-middleware/sirv@0.1.24': + dependencies: + mrmime: 2.0.1 + totalist: 3.0.1 + + '@universal-middleware/srvx@0.1.1(hono@4.10.7)(srvx@0.9.6)': + dependencies: + '@universal-middleware/core': 0.4.13(hono@4.10.7)(srvx@0.9.6) + transitivePeerDependencies: + - '@cloudflare/workers-types' + - '@hattip/core' + - '@types/express' + - '@webroute/route' + - elysia + - fastify + - h3 + - hono + - srvx + + '@vercel/nft@0.30.4(rollup@4.46.2)': + dependencies: + '@mapbox/node-pre-gyp': 2.0.3 + '@rollup/pluginutils': 5.3.0(rollup@4.46.2) + acorn: 8.15.0 + acorn-import-attributes: 1.9.5(acorn@8.15.0) + async-sema: 3.1.1 + bindings: 1.5.0 + estree-walker: 2.0.2 + glob: 10.5.0 + graceful-fs: 4.2.11 + node-gyp-build: 4.8.4 + picomatch: 4.0.3 + resolve-from: 5.0.0 + transitivePeerDependencies: + - encoding + - rollup + - supports-color + '@vitejs/plugin-react@5.1.1(vite@7.3.0(@types/node@24.0.8))': dependencies: '@babel/core': 7.28.5 @@ -5225,8 +6662,26 @@ snapshots: '@zag-js/utils@0.82.2': {} + abbrev@3.0.1: {} + + acorn-import-attributes@1.9.5(acorn@8.14.1): + dependencies: + acorn: 8.14.1 + + acorn-import-attributes@1.9.5(acorn@8.15.0): + dependencies: + acorn: 8.15.0 + acorn@8.14.1: {} + acorn@8.15.0: {} + + agent-base@6.0.2: + dependencies: + debug: 4.4.1 + transitivePeerDependencies: + - supports-color + agent-base@7.1.3: {} ansi-regex@5.0.1: {} @@ -5299,6 +6754,11 @@ snapshots: - luxon - moment + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + aria-query@5.1.3: dependencies: deep-equal: 2.2.3 @@ -5314,6 +6774,8 @@ snapshots: assertion-error@2.0.1: {} + async-sema@3.1.1: {} + asynckit@0.4.0: {} available-typed-arrays@1.0.7: @@ -5328,6 +6790,12 @@ snapshots: balanced-match@1.0.2: {} + binary-extensions@2.3.0: {} + + bindings@1.5.0: + dependencies: + file-uri-to-path: 1.0.0 + brace-expansion@2.0.1: dependencies: balanced-match: 1.0.2 @@ -5399,6 +6867,22 @@ snapshots: check-error@2.1.1: {} + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + chownr@3.0.0: {} + + cjs-module-lexer@1.4.3: {} + classnames@2.5.1: {} client-only@0.0.1: {} @@ -5422,6 +6906,10 @@ snapshots: compute-scroll-into-view@3.1.1: {} + confbox@0.2.2: {} + + consola@3.4.2: {} + conventional-changelog-angular@8.0.0: dependencies: compare-func: 2.0.0 @@ -5549,6 +7037,8 @@ snapshots: delayed-stream@1.0.0: {} + detect-libc@2.1.2: {} + devalue@4.3.3: {} dom-accessibility-api@0.5.16: {} @@ -5557,6 +7047,8 @@ snapshots: dependencies: is-obj: 2.0.0 + dotenv@16.6.1: {} + dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 @@ -5633,34 +7125,6 @@ snapshots: '@esbuild/win32-ia32': 0.23.1 '@esbuild/win32-x64': 0.23.1 - esbuild@0.25.1: - optionalDependencies: - '@esbuild/aix-ppc64': 0.25.1 - '@esbuild/android-arm': 0.25.1 - '@esbuild/android-arm64': 0.25.1 - '@esbuild/android-x64': 0.25.1 - '@esbuild/darwin-arm64': 0.25.1 - '@esbuild/darwin-x64': 0.25.1 - '@esbuild/freebsd-arm64': 0.25.1 - '@esbuild/freebsd-x64': 0.25.1 - '@esbuild/linux-arm': 0.25.1 - '@esbuild/linux-arm64': 0.25.1 - '@esbuild/linux-ia32': 0.25.1 - '@esbuild/linux-loong64': 0.25.1 - '@esbuild/linux-mips64el': 0.25.1 - '@esbuild/linux-ppc64': 0.25.1 - '@esbuild/linux-riscv64': 0.25.1 - '@esbuild/linux-s390x': 0.25.1 - '@esbuild/linux-x64': 0.25.1 - '@esbuild/netbsd-arm64': 0.25.1 - '@esbuild/netbsd-x64': 0.25.1 - '@esbuild/openbsd-arm64': 0.25.1 - '@esbuild/openbsd-x64': 0.25.1 - '@esbuild/sunos-x64': 0.25.1 - '@esbuild/win32-arm64': 0.25.1 - '@esbuild/win32-ia32': 0.25.1 - '@esbuild/win32-x64': 0.25.1 - esbuild@0.27.2: optionalDependencies: '@esbuild/aix-ppc64': 0.27.2 @@ -5694,6 +7158,8 @@ snapshots: escape-string-regexp@4.0.0: {} + estree-walker@2.0.2: {} + estree-walker@3.0.3: dependencies: '@types/estree': 1.0.8 @@ -5712,6 +7178,8 @@ snapshots: expect-type@1.2.1: {} + exsolve@1.0.8: {} + fast-glob@3.3.3: dependencies: '@nodelib/fs.stat': 2.0.5 @@ -5739,12 +7207,19 @@ snapshots: node-domexception: 1.0.0 web-streams-polyfill: 3.3.3 + file-uri-to-path@1.0.0: {} + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 find-root@1.1.0: {} + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + for-each@0.3.5: dependencies: is-callable: 1.2.7 @@ -5765,6 +7240,8 @@ snapshots: dependencies: fetch-blob: 3.2.0 + forwarded-parse@2.1.2: {} + fsevents@2.3.3: optional: true @@ -5809,8 +7286,19 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 1.11.1 + glob@10.5.0: + dependencies: + foreground-child: 3.3.1 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + gopd@1.2.0: {} + graceful-fs@4.2.11: {} + graphql-tag@2.12.6(graphql@16.10.0): dependencies: graphql: 16.10.0 @@ -5849,6 +7337,8 @@ snapshots: dependencies: react-is: 16.13.1 + hono@4.10.7: {} + hosted-git-info@8.1.0: dependencies: lru-cache: 10.4.3 @@ -5864,6 +7354,13 @@ snapshots: transitivePeerDependencies: - supports-color + https-proxy-agent@5.0.1: + dependencies: + agent-base: 6.0.2 + debug: 4.4.1 + transitivePeerDependencies: + - supports-color + https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.3 @@ -5884,6 +7381,13 @@ snapshots: parent-module: 1.0.1 resolve-from: 4.0.0 + import-in-the-middle@2.0.0: + dependencies: + acorn: 8.14.1 + acorn-import-attributes: 1.9.5(acorn@8.14.1) + cjs-module-lexer: 1.4.3 + module-details-from-path: 1.0.4 + internal-slot@1.1.0: dependencies: es-errors: 1.3.0 @@ -5907,6 +7411,10 @@ snapshots: dependencies: has-bigints: 1.1.0 + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + is-boolean-object@1.2.2: dependencies: call-bound: 1.0.4 @@ -6033,6 +7541,10 @@ snapshots: lines-and-columns@1.2.4: {} + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 @@ -6055,6 +7567,14 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + magic-string@0.30.8: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + math-intrinsics@1.1.0: {} meow@13.2.0: {} @@ -6084,6 +7604,12 @@ snapshots: minipass@7.1.2: {} + minizlib@3.1.0: + dependencies: + minipass: 7.1.2 + + module-details-from-path@1.0.4: {} + mrmime@2.0.1: {} ms@2.1.3: {} @@ -6094,20 +7620,32 @@ snapshots: node-domexception@1.0.0: {} + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + node-fetch@3.3.2: dependencies: data-uri-to-buffer: 4.0.1 fetch-blob: 3.2.0 formdata-polyfill: 4.0.10 + node-gyp-build@4.8.4: {} + node-releases@2.0.19: {} + nopt@8.1.0: + dependencies: + abbrev: 3.0.1 + normalize-package-data@7.0.0: dependencies: hosted-git-info: 8.1.0 semver: 7.7.1 validate-npm-package-license: 3.0.4 + normalize-path@3.0.0: {} + npm-run-path@4.0.1: dependencies: path-key: 3.1.1 @@ -6145,6 +7683,14 @@ snapshots: '@wry/trie': 0.5.0 tslib: 2.8.1 + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + package-json-from-dist@1.0.1: {} parent-module@1.0.1: @@ -6162,6 +7708,8 @@ snapshots: dependencies: entities: 4.5.0 + path-exists@4.0.0: {} + path-key@3.1.1: {} path-parse@1.0.7: {} @@ -6181,6 +7729,18 @@ snapshots: perfect-freehand@1.2.2: {} + pg-int8@1.0.1: {} + + pg-protocol@1.10.3: {} + + pg-types@2.2.0: + dependencies: + pg-int8: 1.0.1 + postgres-array: 2.0.0 + postgres-bytea: 1.0.0 + postgres-date: 1.0.7 + postgres-interval: 1.2.0 + picocolors@1.1.1: {} picomatch@2.3.1: {} @@ -6191,6 +7751,12 @@ snapshots: dependencies: pngjs: 6.0.0 + pkg-types@2.3.0: + dependencies: + confbox: 0.2.2 + exsolve: 1.0.8 + pathe: 2.0.3 + playwright-chromium@1.57.0: dependencies: playwright-core: 1.57.0 @@ -6215,6 +7781,16 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + postgres-array@2.0.0: {} + + postgres-bytea@1.0.0: {} + + postgres-date@1.0.7: {} + + postgres-interval@1.2.0: + dependencies: + xtend: 4.0.2 + prettier@3.5.3: {} pretty-format@27.5.1: @@ -6223,6 +7799,8 @@ snapshots: ansi-styles: 5.2.0 react-is: 17.0.2 + progress@2.0.3: {} + prop-types@15.8.1: dependencies: loose-envify: 1.4.0 @@ -6231,6 +7809,8 @@ snapshots: proxy-compare@3.0.1: {} + proxy-from-env@1.1.0: {} + proxy-memoize@3.0.1: dependencies: proxy-compare: 3.0.1 @@ -6602,6 +8182,10 @@ snapshots: react@19.2.1: {} + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + redux-thunk@3.1.0(redux@5.0.1): dependencies: redux: 5.0.1 @@ -6619,11 +8203,20 @@ snapshots: gopd: 1.2.0 set-function-name: 2.0.2 + regexparam@3.0.0: {} + rehackt@0.1.0(@types/react@19.2.7)(react@19.2.1): optionalDependencies: '@types/react': 19.2.7 react: 19.2.1 + require-in-the-middle@8.0.1: + dependencies: + debug: 4.4.1 + module-details-from-path: 1.0.4 + transitivePeerDependencies: + - supports-color + requires-port@1.0.0: {} reselect@5.1.1: {} @@ -6632,6 +8225,8 @@ snapshots: resolve-from@4.0.0: {} + resolve-from@5.0.0: {} + resolve@1.22.10: dependencies: is-core-module: 2.16.1 @@ -6644,6 +8239,26 @@ snapshots: dependencies: glob: 10.4.5 + rolldown@1.0.0-beta.51: + dependencies: + '@oxc-project/types': 0.98.0 + '@rolldown/pluginutils': 1.0.0-beta.51 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.0.0-beta.51 + '@rolldown/binding-darwin-arm64': 1.0.0-beta.51 + '@rolldown/binding-darwin-x64': 1.0.0-beta.51 + '@rolldown/binding-freebsd-x64': 1.0.0-beta.51 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.51 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.51 + '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.51 + '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.51 + '@rolldown/binding-linux-x64-musl': 1.0.0-beta.51 + '@rolldown/binding-openharmony-arm64': 1.0.0-beta.51 + '@rolldown/binding-wasm32-wasi': 1.0.0-beta.51 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.51 + '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.51 + '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.51 + rollup@4.46.2: dependencies: '@types/estree': 1.0.8 @@ -6789,8 +8404,22 @@ snapshots: spdx-license-ids@3.0.21: {} + srvx@0.9.6: {} + stackback@0.0.2: {} + standaloner@0.1.11(rollup@4.46.2): + dependencies: + '@vercel/nft': 0.30.4(rollup@4.46.2) + acorn: 8.15.0 + estree-walker: 3.0.3 + magic-string: 0.30.21 + rolldown: 1.0.0-beta.51 + transitivePeerDependencies: + - encoding + - rollup + - supports-color + std-env@3.9.0: {} stop-iteration-iterator@1.1.0: @@ -6840,10 +8469,12 @@ snapshots: stylis: 4.3.2 tslib: 2.6.2 - styled-jsx@5.1.6(react@19.2.1): + styled-jsx@5.1.6(@babel/core@7.28.5)(react@19.2.1): dependencies: client-only: 0.0.1 react: 19.2.1 + optionalDependencies: + '@babel/core': 7.28.5 stylis@4.2.0: {} @@ -6861,6 +8492,14 @@ snapshots: symbol-tree@3.2.4: {} + tar@7.5.2: + dependencies: + '@isaacs/fs-minipass': 4.0.1 + chownr: 3.0.0 + minipass: 7.1.2 + minizlib: 3.1.0 + yallist: 5.0.0 + throttle-debounce@5.0.2: {} tinybench@2.9.0: {} @@ -6878,6 +8517,12 @@ snapshots: tinyspy@4.0.3: {} + tldts-core@7.0.19: {} + + tldts@7.0.19: + dependencies: + tldts-core: 7.0.19 + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -6893,10 +8538,18 @@ snapshots: universalify: 0.2.0 url-parse: 1.5.10 + tough-cookie@6.0.0: + dependencies: + tldts: 7.0.19 + + tr46@0.0.3: {} + tr46@5.1.0: dependencies: punycode: 2.3.1 + ts-deepmerge@7.0.3: {} + ts-invariant@0.10.3: dependencies: tslib: 2.8.1 @@ -6918,6 +8571,13 @@ snapshots: universalify@0.2.0: {} + unplugin@1.0.1: + dependencies: + acorn: 8.14.1 + chokidar: 3.6.0 + webpack-sources: 3.3.3 + webpack-virtual-modules: 0.5.0 + update-browserslist-db@1.1.3(browserslist@4.24.4): dependencies: browserslist: 4.24.4 @@ -6940,19 +8600,55 @@ snapshots: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - vike@0.4.249(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)): + vike-photon@0.1.23(@photonjs/core@0.1.13(hono@4.10.7)(srvx@0.9.6)(vite@7.3.0(@types/node@24.0.8)))(@photonjs/runtime@0.1.10(hono@4.10.7)(rollup@4.46.2)(vite@7.3.0(@types/node@24.0.8)))(hono@4.10.7)(rollup@4.46.2)(srvx@0.9.6)(vike@0.4.252-commit-7f781cf(react-streaming@0.4.15(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)))(vite@7.3.0(@types/node@24.0.8)): + dependencies: + '@brillout/picocolors': 1.0.29 + '@brillout/vite-plugin-server-entry': 0.7.15 + '@photonjs/core': 0.1.13(hono@4.10.7)(srvx@0.9.6)(vite@7.3.0(@types/node@24.0.8)) + '@photonjs/runtime': 0.1.10(hono@4.10.7)(rollup@4.46.2)(vite@7.3.0(@types/node@24.0.8)) + '@universal-middleware/compress': 0.2.34 + '@universal-middleware/core': 0.4.13(hono@4.10.7)(srvx@0.9.6) + '@universal-middleware/sirv': 0.1.24 + pkg-types: 2.3.0 + standaloner: 0.1.11(rollup@4.46.2) + vike: 0.4.252-commit-7f781cf(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + optionalDependencies: + vite: 7.3.0(@types/node@24.0.8) + transitivePeerDependencies: + - '@cloudflare/workers-types' + - '@hattip/core' + - '@types/express' + - '@webroute/route' + - elysia + - encoding + - fastify + - h3 + - hono + - rollup + - srvx + - supports-color + + vike-react@0.6.10(react-dom@19.2.1(react@19.2.1))(react@19.2.1)(vike@0.4.252-commit-7f781cf(react-streaming@0.4.15(react-dom@19.2.1(react@19.2.1))(react@19.2.1))(vite@7.3.0(@types/node@24.0.8))): + dependencies: + react: 19.2.1 + react-dom: 19.2.1(react@19.2.1) + react-streaming: 0.4.15(react-dom@19.2.1(react@19.2.1))(react@19.2.1) + vike: 0.4.252-commit-7f781cf(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)) + + vike@0.4.252-commit-7f781cf(react-streaming@0.4.15(react@19.2.1))(vite@7.3.0(@types/node@24.0.8)): dependencies: + '@babel/core': 7.28.5 + '@babel/types': 7.28.5 '@brillout/import': 0.2.6 '@brillout/json-serializer': 0.5.21 - '@brillout/picocolors': 1.0.29 + '@brillout/picocolors': 1.0.30 '@brillout/require-shim': 0.1.2 - '@brillout/vite-plugin-server-entry': 0.7.15 - acorn: 8.14.1 + '@brillout/vite-plugin-server-entry': 0.7.17 cac: 6.7.14 es-module-lexer: 1.7.0 - esbuild: 0.25.1 + esbuild: 0.27.2 json5: 2.2.3 - magic-string: 0.30.17 + magic-string: 0.30.21 picomatch: 4.0.3 semver: 7.7.1 sirv: 3.0.1 @@ -6961,6 +8657,8 @@ snapshots: optionalDependencies: react-streaming: 0.4.15(react-dom@19.2.1(react@19.2.1))(react@19.2.1) vite: 7.3.0(@types/node@24.0.8) + transitivePeerDependencies: + - supports-color vite-node@3.2.4(@types/node@24.0.8): dependencies: @@ -7045,8 +8743,14 @@ snapshots: web-streams-polyfill@3.3.3: {} + webidl-conversions@3.0.1: {} + webidl-conversions@7.0.0: {} + webpack-sources@3.3.3: {} + + webpack-virtual-modules@0.5.0: {} + whatwg-encoding@3.1.1: dependencies: iconv-lite: 0.6.3 @@ -7058,6 +8762,11 @@ snapshots: tr46: 5.1.0 webidl-conversions: 7.0.0 + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + which-boxed-primitive@1.1.1: dependencies: is-bigint: 1.1.0 @@ -7112,16 +8821,24 @@ snapshots: xmlchars@2.2.0: {} + xtend@4.0.2: {} + yallist@3.1.1: {} + yallist@5.0.0: {} + yaml@1.10.2: {} + yocto-queue@0.1.0: {} + zen-observable-ts@1.2.5: dependencies: zen-observable: 0.8.15 zen-observable@0.8.15: {} + zod@4.1.13: {} + zustand@5.0.8(@types/react@19.2.7)(immer@10.1.3)(react@19.2.1)(use-sync-external-store@1.4.0(react@19.2.1)): optionalDependencies: '@types/react': 19.2.7 diff --git a/vike-hook-wrapper-issue.md b/vike-hook-wrapper-issue.md new file mode 100644 index 00000000..cafd08ea --- /dev/null +++ b/vike-hook-wrapper-issue.md @@ -0,0 +1,117 @@ +# Feature Request: Cumulative hook wrapper for instrumentation (Sentry, OpenTelemetry, etc.) + +## Problem + +When integrating observability tools like Sentry or OpenTelemetry with Vike, we need to wrap hook executions with spans/traces. This is essential for: + +- Measuring execution time of `+data`, `+guard`, `+onBeforeRender`, `+onRenderHtml`, etc. +- Providing users insight into which hooks are slow +- Proper distributed tracing + +### The Challenge + +Sentry (and OpenTelemetry) spans work with **async local storage** and depend on the **call stack**. This means we need to actually **wrap** the hook function execution: + +```ts +Sentry.startSpan( + { + name: "pages/product/+data", + op: "vike.hook", + attributes: { hookName: "data", pageId, urlOriginal }, + }, + async () => { + // The actual +data hook runs here + return await dataHook(pageContext) + }, +); +``` + +We cannot use before/after style hooks because the span context is lost. + +## Proposed Solution + +Add a **cumulative global hook wrapper** to vike: + +```ts +// vike-react-sentry/+config.ts +import * as Sentry from "@sentry/node" + +export default { + onWrapHook: (hookInfo, execHook) => { + return Sentry.startSpan( + { + name: hookInfo.hookFilePath, // e.g. "pages/product/+data" + op: "vike.hook", + attributes: { + "vike.hookName": hookInfo.hookName, + "vike.pageId": hookInfo.pageId, + }, + }, + () => execHook() + ) + }, + meta: { + onWrapHook: { + env: { server: true, client: true }, + cumulative: true, // Multiple wrappers compose + } + } +} +``` + +### Hook Info + +The `hookInfo` parameter should include: +- `hookName`: e.g. `"data"`, `"guard"`, `"onRenderHtml"`, `"onBeforeRender"` +- `hookFilePath`: e.g. `"pages/product/+data"`, `"vike-react/__internal/integration/onRenderHtml"` +- `pageContext`: (or relevant subset like `pageId`, `urlOriginal`, `urlPathname`) + +### Cumulative Behavior + +Multiple wrappers should compose, allowing: +- `vike-react-sentry` to add Sentry spans +- User to add custom logging/timing +- Other extensions to add their instrumentation + +```ts +// All these wrappers compose +onWrapHook: [sentryWrapper, otelWrapper, loggingWrapper] +``` + +### Implementation Location + +Vike controls all `+` file exports. When these are loaded and made available via `pageContext.config` or `pageContext.exports`, vike could wrap all callable exports with the wrapper. + +This would cover: +- **Built-in hooks**: `+data`, `+guard`, `+onBeforeRender`, `+onRenderHtml`, etc. (currently in `execHookDirectAsync`) +- **Custom config functions**: `+ApolloClient`, `+QueryClient`, or any user-defined `+` file that exports a function + +When a function is exported from a `+` file and later called (either by vike internally or by extensions via `pageContext.config.X()`), the wrapper would be applied. + +## Use Cases + +1. **Sentry Integration** (`vike-react-sentry`): Wrap all hooks with Sentry spans +2. **OpenTelemetry**: Distributed tracing with OTEL spans +3. **Custom Logging**: Log hook execution times +4. **Performance Monitoring**: Track slow hooks +5. **Debugging**: Add context around hook execution + +## Expected Result + +With this feature, `vike-react-sentry` could provide traces like: + +``` +vike:request (150ms) +├── +guard (5ms) +├── +data (80ms) +│ └── db.query (75ms) +├── +onBeforeRender (10ms) +└── +onRenderHtml (55ms) + └── react:render (50ms) +``` + +This gives users great insight into their app's performance and helps identify bottlenecks. + +## Related + +- vike-react-sentry: https://github.com/vikejs/vike-react/tree/main/packages/vike-react-sentry