<html lang="en">
<head></head>
<body>

<form id="mainForm" method="post" action="https://stackblitz.com/run" target="_self">
<input type="hidden" name="project[files][CHANGELOG.md]" value="# examples/react/todo

## 0.0.34

### Patch Changes

- Updated dependencies [[`d9c663c`](https://github.com/TanStack/db/commit/d9c663c1874b1717d72bf289277d45e875e36bc2)]:
  - @tanstack/solid-db@0.2.0
  - @tanstack/electric-db-collection@0.2.24
  - @tanstack/query-db-collection@1.0.16
  - @tanstack/trailbase-db-collection@0.1.64

## 0.0.33

### Patch Changes

- Updated dependencies []:
  - @tanstack/electric-db-collection@0.0.9
  - @tanstack/query-db-collection@0.0.9
  - @tanstack/react-db@0.0.27
  - @tanstack/trailbase-db-collection@0.0.3

## 0.0.32

### Patch Changes

- Add initial release of TrailBase collection for TanStack DB. TrailBase is a blazingly fast, open-source alternative to Firebase built on Rust, SQLite, and V8. It provides type-safe REST and realtime APIs with sub-millisecond latencies, integrated authentication, and flexible access control - all in a single executable. This collection type enables seamless integration with TrailBase backends for high-performance real-time applications. ([#228](https://github.com/TanStack/db/pull/228))

- Updated dependencies [[`09c6995`](https://github.com/TanStack/db/commit/09c6995ea9c8e6979d077ca63cbdd6215054ae78)]:
  - @tanstack/trailbase-db-collection@0.0.2
  - @tanstack/electric-db-collection@0.0.8
  - @tanstack/query-db-collection@0.0.8
  - @tanstack/react-db@0.0.26

## 0.0.31

### Patch Changes

- Updated dependencies [[`20f810e`](https://github.com/TanStack/db/commit/20f810e13a7d802bf56da6f0df89b34312ebb2fd)]:
  - @tanstack/electric-db-collection@0.0.7
  - @tanstack/query-db-collection@0.0.7
  - @tanstack/react-db@0.0.25

## 0.0.30

### Patch Changes

- Updated dependencies []:
  - @tanstack/electric-db-collection@0.0.6
  - @tanstack/query-db-collection@0.0.6
  - @tanstack/react-db@0.0.24

## 0.0.29

### Patch Changes

- Updated dependencies []:
  - @tanstack/electric-db-collection@0.0.5
  - @tanstack/query-db-collection@0.0.5
  - @tanstack/react-db@0.0.23

## 0.0.28

### Patch Changes

- Updated dependencies []:
  - @tanstack/electric-db-collection@0.0.4
  - @tanstack/query-db-collection@0.0.4
  - @tanstack/react-db@0.0.22

## 0.0.27

### Patch Changes

- Move Collections to their own packages ([#252](https://github.com/TanStack/db/pull/252))
  - Move local-only and local-storage collections to main `@tanstack/db` package
  - Create new `@tanstack/electric-db-collection` package for ElectricSQL integration
  - Create new `@tanstack/query-db-collection` package for TanStack Query integration
  - Delete `@tanstack/db-collections` package (removed from repo)
  - Update example app and documentation to use new package structure

  Why?
  - Better separation of concerns
  - Independent versioning for each collection type
  - Cleaner dependencies (electric collections don&#39;t need query deps, etc.)
  - Easier to add more collection types moving forward

- Updated dependencies [[`8e23322`](https://github.com/TanStack/db/commit/8e233229b25eabed07cdaf12948ba913786bf4f9)]:
  - @tanstack/electric-db-collection@0.0.3
  - @tanstack/query-db-collection@0.0.3
  - @tanstack/react-db@0.0.21

## 0.0.26

### Patch Changes

- Updated dependencies []:
  - @tanstack/db-collections@0.0.24
  - @tanstack/react-db@0.0.20

## 0.0.25

### Patch Changes

- - [Breaking change for the Electric Collection]: Use numbers for txid ([#245](https://github.com/TanStack/db/pull/245))
  - misc type fixes
- Updated dependencies [[`9f0b0c2`](https://github.com/TanStack/db/commit/9f0b0c28ede99273eb5914be28aff55b91c50778)]:
  - @tanstack/db-collections@0.0.23
  - @tanstack/react-db@0.0.19

## 0.0.24

### Patch Changes

- Updated dependencies [[`266bd29`](https://github.com/TanStack/db/commit/266bd29514c6c0fa9e903986ca11c5e22f4d2361)]:
  - @tanstack/db-collections@0.0.22
  - @tanstack/react-db@0.0.18

## 0.0.23

### Patch Changes

- Updated dependencies [[`1c9e867`](https://github.com/TanStack/db/commit/1c9e8676405b71a45831456c7119420975ae1456)]:
  - @tanstack/db-collections@0.0.21
  - @tanstack/react-db@0.0.17

## 0.0.22

### Patch Changes

- Updated dependencies [[`e478d53`](https://github.com/TanStack/db/commit/e478d5353cc8fc64e3a29dda1f86fba863cf6ce8)]:
  - @tanstack/react-db@0.0.16
  - @tanstack/db-collections@0.0.20

## 0.0.21

### Patch Changes

- Updated dependencies [[`0912a7c`](https://github.com/TanStack/db/commit/0912a7c165325e6981f0b702c169004e08d57f75)]:
  - @tanstack/db-collections@0.0.19
  - @tanstack/react-db@0.0.15

## 0.0.20

### Patch Changes

- Updated dependencies [[`0dede0a`](https://github.com/TanStack/db/commit/0dede0ab75e66df9797d5c898defdc66685c6f91)]:
  - @tanstack/db-collections@0.0.18

## 0.0.19

### Patch Changes

- Updated dependencies []:
  - @tanstack/db-collections@0.0.17
  - @tanstack/react-db@0.0.14

## 0.0.18

### Patch Changes

- Updated dependencies [[`945868e`](https://github.com/TanStack/db/commit/945868e95944543ccf5d778409548679a952e249), [`57b5f5d`](https://github.com/TanStack/db/commit/57b5f5de6297326a57ef205a400428af0697b48b)]:
  - @tanstack/react-db@0.0.13
  - @tanstack/db-collections@0.0.16

## 0.0.17

### Patch Changes

- Updated dependencies [[`5cafaf4`](https://github.com/TanStack/db/commit/5cafaf4f73018599ce799778029833d3fa83dbc9)]:
  - @tanstack/db-collections@0.0.15

## 0.0.16

### Patch Changes

- Updated dependencies [[`f6abe9b`](https://github.com/TanStack/db/commit/f6abe9b94b890487fe960bd72a89e4a75de89d46)]:
  - @tanstack/db-collections@0.0.14
  - @tanstack/react-db@0.0.12

## 0.0.15

### Patch Changes

- Export `ElectricCollectionUtils` &amp; allow passing generic to `createTransaction` ([#179](https://github.com/TanStack/db/pull/179))

- Updated dependencies [[`c5489ff`](https://github.com/TanStack/db/commit/c5489ff276db07a0a4b65876790ccd7f11a6f99d)]:
  - @tanstack/db-collections@0.0.13
  - @tanstack/react-db@0.0.11

## 0.0.14

### Patch Changes

- Updated dependencies []:
  - @tanstack/db-collections@0.0.12
  - @tanstack/react-db@0.0.10

## 0.0.13

### Patch Changes

- Updated dependencies []:
  - @tanstack/db-collections@0.0.11
  - @tanstack/react-db@0.0.9

## 0.0.12

### Patch Changes

- Type PendingMutation whenever possible ([#163](https://github.com/TanStack/db/pull/163))

- Updated dependencies [[`5c538cf`](https://github.com/TanStack/db/commit/5c538cf03573512a8d1bbde96962a9f7ca014708), [`b4602a0`](https://github.com/TanStack/db/commit/b4602a071cb6866bb1338e30d5802220b0d1fc49)]:
  - @tanstack/db-collections@0.0.10
  - @tanstack/react-db@0.0.8

## 0.0.11

### Patch Changes

- Updated dependencies [[`8b43ad3`](https://github.com/TanStack/db/commit/8b43ad305b277560aed660c31cf1409d22ed1e47)]:
  - @tanstack/db-collections@0.0.9
  - @tanstack/react-db@0.0.7

## 0.0.10

### Patch Changes

- This change introduces a more streamlined and intuitive API for handling mutations by allowing `onInsert`, `onUpdate`, and `onDelete` handlers to be defined directly on the collection configuration. ([#156](https://github.com/TanStack/db/pull/156))

  When `collection.insert()`, `.update()`, or `.delete()` are called outside of an explicit transaction (i.e., not within `useOptimisticMutation`), the library now automatically creates a single-operation transaction and invokes the corresponding handler to persist the change.

  Key changes:
  - **`@tanstack/db`**: The `Collection` class now supports `onInsert`, `onUpdate`, and `onDelete` in its configuration. Direct calls to mutation methods will throw an error if the corresponding handler is not defined.
  - **`@tanstack/db-collections`**:
    - `queryCollectionOptions` now accepts the new handlers and will automatically `refetch` the collection&#39;s query after a handler successfully completes. This behavior can be disabled if the handler returns `{ refetch: false }`.
    - `electricCollectionOptions` also accepts the new handlers. These handlers are now required to return an object with a transaction ID (`{ txid: string }`). The collection then automatically waits for this `txid` to be synced back before resolving the mutation, ensuring consistency.
  - **Breaking Change**: Calling `collection.insert()`, `.update()`, or `.delete()` without being inside a `useOptimisticMutation` callback and without a corresponding persistence handler (`onInsert`, etc.) configured on the collection will now throw an error.

  This new pattern simplifies the most common use cases, making the code more declarative. The `useOptimisticMutation` hook remains available for more complex scenarios, such as transactions involving multiple mutations across different collections.

  ***

  The documentation and the React Todo example application have been significantly refactored to adopt the new direct persistence handler pattern as the primary way to perform mutations.
  - The `README.md` and `docs/overview.md` files have been updated to de-emphasize `useOptimisticMutation` for simple writes. They now showcase the much simpler API of calling `collection.insert()` directly and defining persistence logic in the collection&#39;s configuration.
  - The React Todo example (`examples/react/todo/src/App.tsx`) has been completely overhauled. All instances of `useOptimisticMutation` have been removed and replaced with the new `onInsert`, `onUpdate`, and `onDelete` handlers, resulting in cleaner and more concise code.

- Updated dependencies [[`80fdac7`](https://github.com/TanStack/db/commit/80fdac76389ea741f5743bc788df375f63fb767b)]:
  - @tanstack/db-collections@0.0.8
  - @tanstack/react-db@0.0.6

## 0.0.9

### Patch Changes

- Collections must have a getId function &amp; use an id for update/delete operators ([#134](https://github.com/TanStack/db/pull/134))

- Switch to Collection options factories instead of extending the Collection class ([#145](https://github.com/TanStack/db/pull/145))

  This refactors `ElectricCollection` and `QueryCollection` into factory functions (`electricCollectionOptions` and `queryCollectionOptions`) that return standard `CollectionConfig` objects and utility functions. Also adds a `createCollection` function to standardize collection instantiation.

- Updated dependencies [[`1fbb844`](https://github.com/TanStack/db/commit/1fbb8447d8425d37cb9ab4f078ffab999b28b06c), [`ee5d026`](https://github.com/TanStack/db/commit/ee5d026715962dd0232fcaca513a8fac9189dce2), [`e4feb0c`](https://github.com/TanStack/db/commit/e4feb0c214835675b47f0aa18a72d004a423df03)]:
  - @tanstack/db-collections@0.0.7
  - @tanstack/react-db@0.0.5

## 0.0.8

### Patch Changes

- Updated dependencies []:
  - @tanstack/db-collections@0.0.6
  - @tanstack/react-db@0.0.4

## 0.0.7

### Patch Changes

- Updated dependencies [[`0bbf4c4`](https://github.com/TanStack/db/commit/0bbf4c46e01b382a70a437f05dfc09c9ff749a15)]:
  - @tanstack/db-collections@0.0.5

## 0.0.6

### Patch Changes

- Updated dependencies [[`2d0fcf1`](https://github.com/TanStack/db/commit/2d0fcf16a61a3fcd6a7220b5501640cc0f67218f)]:
  - @tanstack/db-collections@0.0.4

## 0.0.5

### Patch Changes

- Updated dependencies []:
  - @tanstack/db-collections@0.0.3
  - @tanstack/react-db@0.0.3

## 0.0.4

### Patch Changes

- Updated dependencies [[`4c82edb`](https://github.com/TanStack/db/commit/4c82edb9547f26c9de44f5bf43d4385c38920672), [`4c82edb`](https://github.com/TanStack/db/commit/4c82edb9547f26c9de44f5bf43d4385c38920672)]:
  - @tanstack/react-db@0.0.2
  - @tanstack/db-collections@0.0.2

## 0.0.3

### Patch Changes

- Updated dependencies [[`b42479c`](https://github.com/TanStack/db/commit/b42479cf95f9a820b36e01684b13a9179973f3d8)]:
  - @tanstack/react-db@0.0.3

## 0.0.2

### Patch Changes

- Updated dependencies [[`9bb6e89`](https://github.com/TanStack/db/commit/9bb6e8909cebdcd7c03091bfc12dd37f5ab2e1ea)]:
  - @tanstack/react-db@0.0.2
">
<input type="hidden" name="project[files][README.md]" value="# Todo example app

## How to run

- Go to the root of the repository and run:
  - `pnpm install`
  - `pnpm build`

- Install packages
  `pnpm install`

- Start dev server &amp; Docker containers: Postgres, Electric, TrailBase
  `pnpm dev`

- Run Postgres DB migrations
  `pnpm db:push`

- Optionally, check out the TrailBase admin UI @ http://localhost:4000/\_/admin
  (email: admin@localhost, password: secret)
">
<input type="hidden" name="project[files][docker-compose.yml]" value="version: &#39;3.8&#39;
services:
  postgres:
    image: postgres:17-alpine
    environment:
      POSTGRES_DB: todo_app
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
    ports:
      - &#39;54322:5432&#39;
    volumes:
      - ./postgres.conf:/etc/postgresql/postgresql.conf:ro
    tmpfs:
      - /var/lib/postgresql/data
      - /tmp
    command:
      - postgres
      - -c
      - config_file=/etc/postgresql/postgresql.conf
    healthcheck:
      test: [&#39;CMD-SHELL&#39;, &#39;pg_isready -U postgres&#39;]
      interval: 5s
      timeout: 5s
      retries: 5

  electric:
    image: electricsql/electric:canary
    environment:
      DATABASE_URL: postgresql://postgres:postgres@postgres:5432/todo_app?sslmode=disable
      ELECTRIC_INSECURE: true
    ports:
      - 3003:3000
    depends_on:
      postgres:
        condition: service_healthy

  trailbase:
    image: trailbase/trailbase:latest
    ports:
      - &#39;${PORT:-4000}:4000&#39;
    restart: unless-stopped
    volumes:
      - ./traildepot:/app/traildepot
    command: &#39;/app/trail --data-dir /app/traildepot run --address 0.0.0.0:4000 --dev&#39;

volumes:
  postgres_data:
">
<input type="hidden" name="project[files][drizzle.config.ts]" value="import type { Config } from &#39;drizzle-kit&#39;

export default {
  schema: `./src/db/schema.ts`,
  out: `./drizzle`,
  dialect: `postgresql`,
  casing: `snake_case`,
  dbCredentials: {
    host: process.env.DB_HOST || `localhost`,
    port: parseInt(process.env.DB_PORT || `54322`),
    user: process.env.DB_USER || `postgres`,
    password: process.env.DB_PASSWORD || `postgres`,
    database: process.env.DB_NAME || `todo_app`,
  },
} satisfies Config
">
<input type="hidden" name="project[files][index.html]" value="&lt;!doctype html&gt;
&lt;html lang=&quot;en&quot;&gt;
  &lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot; /&gt;
    &lt;link rel=&quot;icon&quot; type=&quot;image/svg+xml&quot; href=&quot;/vite.svg&quot; /&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot; /&gt;
    &lt;link href=&quot;/src/styles.css&quot; rel=&quot;stylesheet&quot; /&gt;
    &lt;title&gt;TODO App&lt;/title&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;div id=&quot;root&quot;&gt;&lt;/div&gt;
    &lt;script type=&quot;module&quot; src=&quot;/src/main.tsx&quot;&gt;&lt;/script&gt;
  &lt;/body&gt;
&lt;/html&gt;
">
<input type="hidden" name="project[files][package.json]" value="{&quot;name&quot;:&quot;@tanstack/db-example-solid-todo&quot;,&quot;private&quot;:true,&quot;version&quot;:&quot;0.0.34&quot;,&quot;dependencies&quot;:{&quot;@tanstack/electric-db-collection&quot;:&quot;https://pkg.pr.new/TanStack/db/@tanstack/electric-db-collection@4ccb9543a89033bbaecc8b25cb1b7616e694285f&quot;,&quot;@tanstack/query-core&quot;:&quot;^5.90.20&quot;,&quot;@tanstack/query-db-collection&quot;:&quot;https://pkg.pr.new/TanStack/db/@tanstack/query-db-collection@4ccb9543a89033bbaecc8b25cb1b7616e694285f&quot;,&quot;@tanstack/solid-db&quot;:&quot;https://pkg.pr.new/TanStack/db/@tanstack/solid-db@4ccb9543a89033bbaecc8b25cb1b7616e694285f&quot;,&quot;@tanstack/solid-router&quot;:&quot;^1.159.5&quot;,&quot;@tanstack/solid-start&quot;:&quot;^1.159.5&quot;,&quot;@tanstack/trailbase-db-collection&quot;:&quot;https://pkg.pr.new/TanStack/db/@tanstack/trailbase-db-collection@4ccb9543a89033bbaecc8b25cb1b7616e694285f&quot;,&quot;cors&quot;:&quot;^2.8.6&quot;,&quot;drizzle-orm&quot;:&quot;^0.45.1&quot;,&quot;drizzle-zod&quot;:&quot;^0.8.3&quot;,&quot;express&quot;:&quot;^5.2.1&quot;,&quot;postgres&quot;:&quot;^3.4.8&quot;,&quot;solid-js&quot;:&quot;^1.9.11&quot;,&quot;tailwindcss&quot;:&quot;^4.1.18&quot;,&quot;trailbase&quot;:&quot;^0.8.0&quot;,&quot;vite-tsconfig-paths&quot;:&quot;^5.1.4&quot;},&quot;devDependencies&quot;:{&quot;@eslint/js&quot;:&quot;^9.39.2&quot;,&quot;@tailwindcss/vite&quot;:&quot;^4.1.18&quot;,&quot;@types/cors&quot;:&quot;^2.8.19&quot;,&quot;@types/express&quot;:&quot;^5.0.6&quot;,&quot;@types/node&quot;:&quot;^25.2.2&quot;,&quot;@types/pg&quot;:&quot;^8.16.0&quot;,&quot;@typescript-eslint/eslint-plugin&quot;:&quot;^8.55.0&quot;,&quot;@typescript-eslint/parser&quot;:&quot;^8.55.0&quot;,&quot;concurrently&quot;:&quot;^9.2.1&quot;,&quot;dotenv&quot;:&quot;^17.2.4&quot;,&quot;drizzle-kit&quot;:&quot;^0.31.9&quot;,&quot;eslint&quot;:&quot;^9.39.2&quot;,&quot;eslint-plugin-solid&quot;:&quot;^0.14.5&quot;,&quot;pg&quot;:&quot;^8.20.0&quot;,&quot;tsx&quot;:&quot;^4.21.0&quot;,&quot;typescript&quot;:&quot;^5.9.2&quot;,&quot;vite&quot;:&quot;^7.3.0&quot;,&quot;vite-plugin-solid&quot;:&quot;^2.11.10&quot;},&quot;scripts&quot;:{&quot;build&quot;:&quot;vite build&quot;,&quot;db:ensure-config&quot;:&quot;tsx scripts/ensure-default-config.ts&quot;,&quot;db:generate&quot;:&quot;drizzle-kit generate&quot;,&quot;db:push&quot;:&quot;tsx scripts/migrate.ts&quot;,&quot;db:studio&quot;:&quot;drizzle-kit studio&quot;,&quot;dev&quot;:&quot;docker compose up -d &amp;&amp; vite dev&quot;,&quot;lint&quot;:&quot;eslint . --fix&quot;,&quot;preview&quot;:&quot;vite preview&quot;},&quot;type&quot;:&quot;module&quot;}">
<input type="hidden" name="project[files][pnpm-lock.yaml]" value="lockfileVersion: &quot;9.0&quot;

settings:
  autoInstallPeers: true
  excludeLinksFromLockfile: false

importers:
  .:
    dependencies:
      &quot;@types/use-sync-external-store&quot;:
        specifier: ^0.0.6
        version: 0.0.6
      cors:
        specifier: ^2.8.5
        version: 2.8.5
      drizzle-orm:
        specifier: ^0.39.3
        version: 0.39.3(@types/pg@8.11.11)(kysely@0.27.5)(pg@8.13.3)
      drizzle-zod:
        specifier: ^0.7.0
        version: 0.7.0(drizzle-orm@0.39.3(@types/pg@8.11.11)(kysely@0.27.5)(pg@8.13.3))(zod@3.24.2)
      express:
        specifier: ^4.19.2
        version: 4.21.2
      kysely:
        specifier: ^0.27.3
        version: 0.27.5
      mitt:
        specifier: ^3.0.1
        version: 3.0.1
      pg:
        specifier: ^8.13.3
        version: 8.13.3
      react:
        specifier: ^19.0.0
        version: 19.0.0
      react-dom:
        specifier: ^19.0.0
        version: 19.0.0(react@19.0.0)
      zod:
        specifier: ^3.24.2
        version: 3.24.2
    devDependencies:
      &quot;@eslint/js&quot;:
        specifier: ^9.19.0
        version: 9.21.0
      &quot;@tailwindcss/vite&quot;:
        specifier: ^4.0.8
        version: 4.0.8(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(lightningcss@1.29.1)(tsx@4.19.3))
      &quot;@types/cors&quot;:
        specifier: ^2.8.17
        version: 2.8.17
      &quot;@types/express&quot;:
        specifier: ^4.17.21
        version: 4.17.21
      &quot;@types/pg&quot;:
        specifier: ^8.11.11
        version: 8.11.11
      &quot;@types/react&quot;:
        specifier: ^19.0.8
        version: 19.0.10
      &quot;@types/react-dom&quot;:
        specifier: ^19.0.3
        version: 19.0.4(@types/react@19.0.10)
      &quot;@vitejs/plugin-react&quot;:
        specifier: ^4.3.4
        version: 4.3.4(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(lightningcss@1.29.1)(tsx@4.19.3))
      concurrently:
        specifier: ^9.1.2
        version: 9.1.2
      dotenv:
        specifier: ^16.4.7
        version: 16.4.7
      drizzle-kit:
        specifier: ^0.30.4
        version: 0.30.4
      eslint:
        specifier: ^9.19.0
        version: 9.21.0(jiti@2.4.2)
      eslint-plugin-react-hooks:
        specifier: ^5.0.0
        version: 5.1.0(eslint@9.21.0(jiti@2.4.2))
      eslint-plugin-react-refresh:
        specifier: ^0.4.18
        version: 0.4.19(eslint@9.21.0(jiti@2.4.2))
      globals:
        specifier: ^15.14.0
        version: 15.15.0
      tailwindcss:
        specifier: ^4.0.8
        version: 4.0.8
      tsx:
        specifier: ^4.19.3
        version: 4.19.3
      typescript:
        specifier: ~5.7.2
        version: 5.7.3
      typescript-eslint:
        specifier: ^8.22.0
        version: 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)
      vite:
        specifier: ^6.1.0
        version: 6.1.1(@types/node@22.13.5)(jiti@2.4.2)(lightningcss@1.29.1)(tsx@4.19.3)

packages:
  &quot;@ampproject/remapping@2.3.0&quot;:
    resolution:
      {
        integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==,
      }
    engines: { node: &quot;&gt;=6.0.0&quot; }

  &quot;@babel/code-frame@7.26.2&quot;:
    resolution:
      {
        integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==,
      }
    engines: { node: &quot;&gt;=6.9.0&quot; }

  &quot;@babel/compat-data@7.26.8&quot;:
    resolution:
      {
        integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==,
      }
    engines: { node: &quot;&gt;=6.9.0&quot; }

  &quot;@babel/core@7.26.9&quot;:
    resolution:
      {
        integrity: sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==,
      }
    engines: { node: &quot;&gt;=6.9.0&quot; }

  &quot;@babel/generator@7.26.9&quot;:
    resolution:
      {
        integrity: sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==,
      }
    engines: { node: &quot;&gt;=6.9.0&quot; }

  &quot;@babel/helper-compilation-targets@7.26.5&quot;:
    resolution:
      {
        integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==,
      }
    engines: { node: &quot;&gt;=6.9.0&quot; }

  &quot;@babel/helper-module-imports@7.25.9&quot;:
    resolution:
      {
        integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==,
      }
    engines: { node: &quot;&gt;=6.9.0&quot; }

  &quot;@babel/helper-module-transforms@7.26.0&quot;:
    resolution:
      {
        integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==,
      }
    engines: { node: &quot;&gt;=6.9.0&quot; }
    peerDependencies:
      &quot;@babel/core&quot;: ^7.0.0

  &quot;@babel/helper-plugin-utils@7.26.5&quot;:
    resolution:
      {
        integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==,
      }
    engines: { node: &quot;&gt;=6.9.0&quot; }

  &quot;@babel/helper-string-parser@7.25.9&quot;:
    resolution:
      {
        integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==,
      }
    engines: { node: &quot;&gt;=6.9.0&quot; }

  &quot;@babel/helper-validator-identifier@7.25.9&quot;:
    resolution:
      {
        integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==,
      }
    engines: { node: &quot;&gt;=6.9.0&quot; }

  &quot;@babel/helper-validator-option@7.25.9&quot;:
    resolution:
      {
        integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==,
      }
    engines: { node: &quot;&gt;=6.9.0&quot; }

  &quot;@babel/helpers@7.26.9&quot;:
    resolution:
      {
        integrity: sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==,
      }
    engines: { node: &quot;&gt;=6.9.0&quot; }

  &quot;@babel/parser@7.26.9&quot;:
    resolution:
      {
        integrity: sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==,
      }
    engines: { node: &quot;&gt;=6.0.0&quot; }
    hasBin: true

  &quot;@babel/plugin-transform-react-jsx-self@7.25.9&quot;:
    resolution:
      {
        integrity: sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==,
      }
    engines: { node: &quot;&gt;=6.9.0&quot; }
    peerDependencies:
      &quot;@babel/core&quot;: ^7.0.0-0

  &quot;@babel/plugin-transform-react-jsx-source@7.25.9&quot;:
    resolution:
      {
        integrity: sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==,
      }
    engines: { node: &quot;&gt;=6.9.0&quot; }
    peerDependencies:
      &quot;@babel/core&quot;: ^7.0.0-0

  &quot;@babel/template@7.26.9&quot;:
    resolution:
      {
        integrity: sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==,
      }
    engines: { node: &quot;&gt;=6.9.0&quot; }

  &quot;@babel/traverse@7.26.9&quot;:
    resolution:
      {
        integrity: sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==,
      }
    engines: { node: &quot;&gt;=6.9.0&quot; }

  &quot;@babel/types@7.26.9&quot;:
    resolution:
      {
        integrity: sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==,
      }
    engines: { node: &quot;&gt;=6.9.0&quot; }

  &quot;@drizzle-team/brocli@0.10.2&quot;:
    resolution:
      {
        integrity: sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==,
      }

  &quot;@esbuild-kit/core-utils@3.3.2&quot;:
    resolution:
      {
        integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==,
      }
    deprecated: &quot;Merged into tsx: https://tsx.is&quot;

  &quot;@esbuild-kit/esm-loader@2.6.5&quot;:
    resolution:
      {
        integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==,
      }
    deprecated: &quot;Merged into tsx: https://tsx.is&quot;

  &quot;@esbuild/aix-ppc64@0.19.12&quot;:
    resolution:
      {
        integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==,
      }
    engines: { node: &quot;&gt;=12&quot; }
    cpu: [ppc64]
    os: [aix]

  &quot;@esbuild/aix-ppc64@0.24.2&quot;:
    resolution:
      {
        integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [ppc64]
    os: [aix]

  &quot;@esbuild/aix-ppc64@0.25.0&quot;:
    resolution:
      {
        integrity: sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [ppc64]
    os: [aix]

  &quot;@esbuild/android-arm64@0.18.20&quot;:
    resolution:
      {
        integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==,
      }
    engines: { node: &quot;&gt;=12&quot; }
    cpu: [arm64]
    os: [android]

  &quot;@esbuild/android-arm64@0.19.12&quot;:
    resolution:
      {
        integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==,
      }
    engines: { node: &quot;&gt;=12&quot; }
    cpu: [arm64]
    os: [android]

  &quot;@esbuild/android-arm64@0.24.2&quot;:
    resolution:
      {
        integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [arm64]
    os: [android]

  &quot;@esbuild/android-arm64@0.25.0&quot;:
    resolution:
      {
        integrity: sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [arm64]
    os: [android]

  &quot;@esbuild/android-arm@0.18.20&quot;:
    resolution:
      {
        integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==,
      }
    engines: { node: &quot;&gt;=12&quot; }
    cpu: [arm]
    os: [android]

  &quot;@esbuild/android-arm@0.19.12&quot;:
    resolution:
      {
        integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==,
      }
    engines: { node: &quot;&gt;=12&quot; }
    cpu: [arm]
    os: [android]

  &quot;@esbuild/android-arm@0.24.2&quot;:
    resolution:
      {
        integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [arm]
    os: [android]

  &quot;@esbuild/android-arm@0.25.0&quot;:
    resolution:
      {
        integrity: sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [arm]
    os: [android]

  &quot;@esbuild/android-x64@0.18.20&quot;:
    resolution:
      {
        integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==,
      }
    engines: { node: &quot;&gt;=12&quot; }
    cpu: [x64]
    os: [android]

  &quot;@esbuild/android-x64@0.19.12&quot;:
    resolution:
      {
        integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==,
      }
    engines: { node: &quot;&gt;=12&quot; }
    cpu: [x64]
    os: [android]

  &quot;@esbuild/android-x64@0.24.2&quot;:
    resolution:
      {
        integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [x64]
    os: [android]

  &quot;@esbuild/android-x64@0.25.0&quot;:
    resolution:
      {
        integrity: sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [x64]
    os: [android]

  &quot;@esbuild/darwin-arm64@0.18.20&quot;:
    resolution:
      {
        integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==,
      }
    engines: { node: &quot;&gt;=12&quot; }
    cpu: [arm64]
    os: [darwin]

  &quot;@esbuild/darwin-arm64@0.19.12&quot;:
    resolution:
      {
        integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==,
      }
    engines: { node: &quot;&gt;=12&quot; }
    cpu: [arm64]
    os: [darwin]

  &quot;@esbuild/darwin-arm64@0.24.2&quot;:
    resolution:
      {
        integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [arm64]
    os: [darwin]

  &quot;@esbuild/darwin-arm64@0.25.0&quot;:
    resolution:
      {
        integrity: sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [arm64]
    os: [darwin]

  &quot;@esbuild/darwin-x64@0.18.20&quot;:
    resolution:
      {
        integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==,
      }
    engines: { node: &quot;&gt;=12&quot; }
    cpu: [x64]
    os: [darwin]

  &quot;@esbuild/darwin-x64@0.19.12&quot;:
    resolution:
      {
        integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==,
      }
    engines: { node: &quot;&gt;=12&quot; }
    cpu: [x64]
    os: [darwin]

  &quot;@esbuild/darwin-x64@0.24.2&quot;:
    resolution:
      {
        integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [x64]
    os: [darwin]

  &quot;@esbuild/darwin-x64@0.25.0&quot;:
    resolution:
      {
        integrity: sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [x64]
    os: [darwin]

  &quot;@esbuild/freebsd-arm64@0.18.20&quot;:
    resolution:
      {
        integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==,
      }
    engines: { node: &quot;&gt;=12&quot; }
    cpu: [arm64]
    os: [freebsd]

  &quot;@esbuild/freebsd-arm64@0.19.12&quot;:
    resolution:
      {
        integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==,
      }
    engines: { node: &quot;&gt;=12&quot; }
    cpu: [arm64]
    os: [freebsd]

  &quot;@esbuild/freebsd-arm64@0.24.2&quot;:
    resolution:
      {
        integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [arm64]
    os: [freebsd]

  &quot;@esbuild/freebsd-arm64@0.25.0&quot;:
    resolution:
      {
        integrity: sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [arm64]
    os: [freebsd]

  &quot;@esbuild/freebsd-x64@0.18.20&quot;:
    resolution:
      {
        integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==,
      }
    engines: { node: &quot;&gt;=12&quot; }
    cpu: [x64]
    os: [freebsd]

  &quot;@esbuild/freebsd-x64@0.19.12&quot;:
    resolution:
      {
        integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==,
      }
    engines: { node: &quot;&gt;=12&quot; }
    cpu: [x64]
    os: [freebsd]

  &quot;@esbuild/freebsd-x64@0.24.2&quot;:
    resolution:
      {
        integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [x64]
    os: [freebsd]

  &quot;@esbuild/freebsd-x64@0.25.0&quot;:
    resolution:
      {
        integrity: sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [x64]
    os: [freebsd]

  &quot;@esbuild/linux-arm64@0.18.20&quot;:
    resolution:
      {
        integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==,
      }
    engines: { node: &quot;&gt;=12&quot; }
    cpu: [arm64]
    os: [linux]

  &quot;@esbuild/linux-arm64@0.19.12&quot;:
    resolution:
      {
        integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==,
      }
    engines: { node: &quot;&gt;=12&quot; }
    cpu: [arm64]
    os: [linux]

  &quot;@esbuild/linux-arm64@0.24.2&quot;:
    resolution:
      {
        integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [arm64]
    os: [linux]

  &quot;@esbuild/linux-arm64@0.25.0&quot;:
    resolution:
      {
        integrity: sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [arm64]
    os: [linux]

  &quot;@esbuild/linux-arm@0.18.20&quot;:
    resolution:
      {
        integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==,
      }
    engines: { node: &quot;&gt;=12&quot; }
    cpu: [arm]
    os: [linux]

  &quot;@esbuild/linux-arm@0.19.12&quot;:
    resolution:
      {
        integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==,
      }
    engines: { node: &quot;&gt;=12&quot; }
    cpu: [arm]
    os: [linux]

  &quot;@esbuild/linux-arm@0.24.2&quot;:
    resolution:
      {
        integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [arm]
    os: [linux]

  &quot;@esbuild/linux-arm@0.25.0&quot;:
    resolution:
      {
        integrity: sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [arm]
    os: [linux]

  &quot;@esbuild/linux-ia32@0.18.20&quot;:
    resolution:
      {
        integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==,
      }
    engines: { node: &quot;&gt;=12&quot; }
    cpu: [ia32]
    os: [linux]

  &quot;@esbuild/linux-ia32@0.19.12&quot;:
    resolution:
      {
        integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==,
      }
    engines: { node: &quot;&gt;=12&quot; }
    cpu: [ia32]
    os: [linux]

  &quot;@esbuild/linux-ia32@0.24.2&quot;:
    resolution:
      {
        integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [ia32]
    os: [linux]

  &quot;@esbuild/linux-ia32@0.25.0&quot;:
    resolution:
      {
        integrity: sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [ia32]
    os: [linux]

  &quot;@esbuild/linux-loong64@0.18.20&quot;:
    resolution:
      {
        integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==,
      }
    engines: { node: &quot;&gt;=12&quot; }
    cpu: [loong64]
    os: [linux]

  &quot;@esbuild/linux-loong64@0.19.12&quot;:
    resolution:
      {
        integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==,
      }
    engines: { node: &quot;&gt;=12&quot; }
    cpu: [loong64]
    os: [linux]

  &quot;@esbuild/linux-loong64@0.24.2&quot;:
    resolution:
      {
        integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [loong64]
    os: [linux]

  &quot;@esbuild/linux-loong64@0.25.0&quot;:
    resolution:
      {
        integrity: sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [loong64]
    os: [linux]

  &quot;@esbuild/linux-mips64el@0.18.20&quot;:
    resolution:
      {
        integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==,
      }
    engines: { node: &quot;&gt;=12&quot; }
    cpu: [mips64el]
    os: [linux]

  &quot;@esbuild/linux-mips64el@0.19.12&quot;:
    resolution:
      {
        integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==,
      }
    engines: { node: &quot;&gt;=12&quot; }
    cpu: [mips64el]
    os: [linux]

  &quot;@esbuild/linux-mips64el@0.24.2&quot;:
    resolution:
      {
        integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [mips64el]
    os: [linux]

  &quot;@esbuild/linux-mips64el@0.25.0&quot;:
    resolution:
      {
        integrity: sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [mips64el]
    os: [linux]

  &quot;@esbuild/linux-ppc64@0.18.20&quot;:
    resolution:
      {
        integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==,
      }
    engines: { node: &quot;&gt;=12&quot; }
    cpu: [ppc64]
    os: [linux]

  &quot;@esbuild/linux-ppc64@0.19.12&quot;:
    resolution:
      {
        integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==,
      }
    engines: { node: &quot;&gt;=12&quot; }
    cpu: [ppc64]
    os: [linux]

  &quot;@esbuild/linux-ppc64@0.24.2&quot;:
    resolution:
      {
        integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [ppc64]
    os: [linux]

  &quot;@esbuild/linux-ppc64@0.25.0&quot;:
    resolution:
      {
        integrity: sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [ppc64]
    os: [linux]

  &quot;@esbuild/linux-riscv64@0.18.20&quot;:
    resolution:
      {
        integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==,
      }
    engines: { node: &quot;&gt;=12&quot; }
    cpu: [riscv64]
    os: [linux]

  &quot;@esbuild/linux-riscv64@0.19.12&quot;:
    resolution:
      {
        integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==,
      }
    engines: { node: &quot;&gt;=12&quot; }
    cpu: [riscv64]
    os: [linux]

  &quot;@esbuild/linux-riscv64@0.24.2&quot;:
    resolution:
      {
        integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [riscv64]
    os: [linux]

  &quot;@esbuild/linux-riscv64@0.25.0&quot;:
    resolution:
      {
        integrity: sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [riscv64]
    os: [linux]

  &quot;@esbuild/linux-s390x@0.18.20&quot;:
    resolution:
      {
        integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==,
      }
    engines: { node: &quot;&gt;=12&quot; }
    cpu: [s390x]
    os: [linux]

  &quot;@esbuild/linux-s390x@0.19.12&quot;:
    resolution:
      {
        integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==,
      }
    engines: { node: &quot;&gt;=12&quot; }
    cpu: [s390x]
    os: [linux]

  &quot;@esbuild/linux-s390x@0.24.2&quot;:
    resolution:
      {
        integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [s390x]
    os: [linux]

  &quot;@esbuild/linux-s390x@0.25.0&quot;:
    resolution:
      {
        integrity: sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [s390x]
    os: [linux]

  &quot;@esbuild/linux-x64@0.18.20&quot;:
    resolution:
      {
        integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==,
      }
    engines: { node: &quot;&gt;=12&quot; }
    cpu: [x64]
    os: [linux]

  &quot;@esbuild/linux-x64@0.19.12&quot;:
    resolution:
      {
        integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==,
      }
    engines: { node: &quot;&gt;=12&quot; }
    cpu: [x64]
    os: [linux]

  &quot;@esbuild/linux-x64@0.24.2&quot;:
    resolution:
      {
        integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [x64]
    os: [linux]

  &quot;@esbuild/linux-x64@0.25.0&quot;:
    resolution:
      {
        integrity: sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [x64]
    os: [linux]

  &quot;@esbuild/netbsd-arm64@0.24.2&quot;:
    resolution:
      {
        integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [arm64]
    os: [netbsd]

  &quot;@esbuild/netbsd-arm64@0.25.0&quot;:
    resolution:
      {
        integrity: sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [arm64]
    os: [netbsd]

  &quot;@esbuild/netbsd-x64@0.18.20&quot;:
    resolution:
      {
        integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==,
      }
    engines: { node: &quot;&gt;=12&quot; }
    cpu: [x64]
    os: [netbsd]

  &quot;@esbuild/netbsd-x64@0.19.12&quot;:
    resolution:
      {
        integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==,
      }
    engines: { node: &quot;&gt;=12&quot; }
    cpu: [x64]
    os: [netbsd]

  &quot;@esbuild/netbsd-x64@0.24.2&quot;:
    resolution:
      {
        integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [x64]
    os: [netbsd]

  &quot;@esbuild/netbsd-x64@0.25.0&quot;:
    resolution:
      {
        integrity: sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [x64]
    os: [netbsd]

  &quot;@esbuild/openbsd-arm64@0.24.2&quot;:
    resolution:
      {
        integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [arm64]
    os: [openbsd]

  &quot;@esbuild/openbsd-arm64@0.25.0&quot;:
    resolution:
      {
        integrity: sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [arm64]
    os: [openbsd]

  &quot;@esbuild/openbsd-x64@0.18.20&quot;:
    resolution:
      {
        integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==,
      }
    engines: { node: &quot;&gt;=12&quot; }
    cpu: [x64]
    os: [openbsd]

  &quot;@esbuild/openbsd-x64@0.19.12&quot;:
    resolution:
      {
        integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==,
      }
    engines: { node: &quot;&gt;=12&quot; }
    cpu: [x64]
    os: [openbsd]

  &quot;@esbuild/openbsd-x64@0.24.2&quot;:
    resolution:
      {
        integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [x64]
    os: [openbsd]

  &quot;@esbuild/openbsd-x64@0.25.0&quot;:
    resolution:
      {
        integrity: sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [x64]
    os: [openbsd]

  &quot;@esbuild/sunos-x64@0.18.20&quot;:
    resolution:
      {
        integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==,
      }
    engines: { node: &quot;&gt;=12&quot; }
    cpu: [x64]
    os: [sunos]

  &quot;@esbuild/sunos-x64@0.19.12&quot;:
    resolution:
      {
        integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==,
      }
    engines: { node: &quot;&gt;=12&quot; }
    cpu: [x64]
    os: [sunos]

  &quot;@esbuild/sunos-x64@0.24.2&quot;:
    resolution:
      {
        integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [x64]
    os: [sunos]

  &quot;@esbuild/sunos-x64@0.25.0&quot;:
    resolution:
      {
        integrity: sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [x64]
    os: [sunos]

  &quot;@esbuild/win32-arm64@0.18.20&quot;:
    resolution:
      {
        integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==,
      }
    engines: { node: &quot;&gt;=12&quot; }
    cpu: [arm64]
    os: [win32]

  &quot;@esbuild/win32-arm64@0.19.12&quot;:
    resolution:
      {
        integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==,
      }
    engines: { node: &quot;&gt;=12&quot; }
    cpu: [arm64]
    os: [win32]

  &quot;@esbuild/win32-arm64@0.24.2&quot;:
    resolution:
      {
        integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [arm64]
    os: [win32]

  &quot;@esbuild/win32-arm64@0.25.0&quot;:
    resolution:
      {
        integrity: sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [arm64]
    os: [win32]

  &quot;@esbuild/win32-ia32@0.18.20&quot;:
    resolution:
      {
        integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==,
      }
    engines: { node: &quot;&gt;=12&quot; }
    cpu: [ia32]
    os: [win32]

  &quot;@esbuild/win32-ia32@0.19.12&quot;:
    resolution:
      {
        integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==,
      }
    engines: { node: &quot;&gt;=12&quot; }
    cpu: [ia32]
    os: [win32]

  &quot;@esbuild/win32-ia32@0.24.2&quot;:
    resolution:
      {
        integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [ia32]
    os: [win32]

  &quot;@esbuild/win32-ia32@0.25.0&quot;:
    resolution:
      {
        integrity: sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [ia32]
    os: [win32]

  &quot;@esbuild/win32-x64@0.18.20&quot;:
    resolution:
      {
        integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==,
      }
    engines: { node: &quot;&gt;=12&quot; }
    cpu: [x64]
    os: [win32]

  &quot;@esbuild/win32-x64@0.19.12&quot;:
    resolution:
      {
        integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==,
      }
    engines: { node: &quot;&gt;=12&quot; }
    cpu: [x64]
    os: [win32]

  &quot;@esbuild/win32-x64@0.24.2&quot;:
    resolution:
      {
        integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [x64]
    os: [win32]

  &quot;@esbuild/win32-x64@0.25.0&quot;:
    resolution:
      {
        integrity: sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    cpu: [x64]
    os: [win32]

  &quot;@eslint-community/eslint-utils@4.4.1&quot;:
    resolution:
      {
        integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==,
      }
    engines: { node: ^12.22.0 || ^14.17.0 || &gt;=16.0.0 }
    peerDependencies:
      eslint: ^6.0.0 || ^7.0.0 || &gt;=8.0.0

  &quot;@eslint-community/regexpp@4.12.1&quot;:
    resolution:
      {
        integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==,
      }
    engines: { node: ^12.0.0 || ^14.0.0 || &gt;=16.0.0 }

  &quot;@eslint/config-array@0.19.2&quot;:
    resolution:
      {
        integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==,
      }
    engines: { node: ^18.18.0 || ^20.9.0 || &gt;=21.1.0 }

  &quot;@eslint/core@0.12.0&quot;:
    resolution:
      {
        integrity: sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==,
      }
    engines: { node: ^18.18.0 || ^20.9.0 || &gt;=21.1.0 }

  &quot;@eslint/eslintrc@3.3.0&quot;:
    resolution:
      {
        integrity: sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==,
      }
    engines: { node: ^18.18.0 || ^20.9.0 || &gt;=21.1.0 }

  &quot;@eslint/js@9.21.0&quot;:
    resolution:
      {
        integrity: sha512-BqStZ3HX8Yz6LvsF5ByXYrtigrV5AXADWLAGc7PH/1SxOb7/FIYYMszZZWiUou/GB9P2lXWk2SV4d+Z8h0nknw==,
      }
    engines: { node: ^18.18.0 || ^20.9.0 || &gt;=21.1.0 }

  &quot;@eslint/object-schema@2.1.6&quot;:
    resolution:
      {
        integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==,
      }
    engines: { node: ^18.18.0 || ^20.9.0 || &gt;=21.1.0 }

  &quot;@eslint/plugin-kit@0.2.7&quot;:
    resolution:
      {
        integrity: sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==,
      }
    engines: { node: ^18.18.0 || ^20.9.0 || &gt;=21.1.0 }

  &quot;@humanfs/core@0.19.1&quot;:
    resolution:
      {
        integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==,
      }
    engines: { node: &quot;&gt;=18.18.0&quot; }

  &quot;@humanfs/node@0.16.6&quot;:
    resolution:
      {
        integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==,
      }
    engines: { node: &quot;&gt;=18.18.0&quot; }

  &quot;@humanwhocodes/module-importer@1.0.1&quot;:
    resolution:
      {
        integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==,
      }
    engines: { node: &quot;&gt;=12.22&quot; }

  &quot;@humanwhocodes/retry@0.3.1&quot;:
    resolution:
      {
        integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==,
      }
    engines: { node: &quot;&gt;=18.18&quot; }

  &quot;@humanwhocodes/retry@0.4.2&quot;:
    resolution:
      {
        integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==,
      }
    engines: { node: &quot;&gt;=18.18&quot; }

  &quot;@jridgewell/gen-mapping@0.3.8&quot;:
    resolution:
      {
        integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==,
      }
    engines: { node: &quot;&gt;=6.0.0&quot; }

  &quot;@jridgewell/resolve-uri@3.1.2&quot;:
    resolution:
      {
        integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==,
      }
    engines: { node: &quot;&gt;=6.0.0&quot; }

  &quot;@jridgewell/set-array@1.2.1&quot;:
    resolution:
      {
        integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==,
      }
    engines: { node: &quot;&gt;=6.0.0&quot; }

  &quot;@jridgewell/sourcemap-codec@1.5.0&quot;:
    resolution:
      {
        integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==,
      }

  &quot;@jridgewell/trace-mapping@0.3.25&quot;:
    resolution:
      {
        integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==,
      }

  &quot;@nodelib/fs.scandir@2.1.5&quot;:
    resolution:
      {
        integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==,
      }
    engines: { node: &quot;&gt;= 8&quot; }

  &quot;@nodelib/fs.stat@2.0.5&quot;:
    resolution:
      {
        integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==,
      }
    engines: { node: &quot;&gt;= 8&quot; }

  &quot;@nodelib/fs.walk@1.2.8&quot;:
    resolution:
      {
        integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==,
      }
    engines: { node: &quot;&gt;= 8&quot; }

  &quot;@rollup/rollup-android-arm-eabi@4.34.8&quot;:
    resolution:
      {
        integrity: sha512-q217OSE8DTp8AFHuNHXo0Y86e1wtlfVrXiAlwkIvGRQv9zbc6mE3sjIVfwI8sYUyNxwOg0j/Vm1RKM04JcWLJw==,
      }
    cpu: [arm]
    os: [android]

  &quot;@rollup/rollup-android-arm64@4.34.8&quot;:
    resolution:
      {
        integrity: sha512-Gigjz7mNWaOL9wCggvoK3jEIUUbGul656opstjaUSGC3eT0BM7PofdAJaBfPFWWkXNVAXbaQtC99OCg4sJv70Q==,
      }
    cpu: [arm64]
    os: [android]

  &quot;@rollup/rollup-darwin-arm64@4.34.8&quot;:
    resolution:
      {
        integrity: sha512-02rVdZ5tgdUNRxIUrFdcMBZQoaPMrxtwSb+/hOfBdqkatYHR3lZ2A2EGyHq2sGOd0Owk80oV3snlDASC24He3Q==,
      }
    cpu: [arm64]
    os: [darwin]

  &quot;@rollup/rollup-darwin-x64@4.34.8&quot;:
    resolution:
      {
        integrity: sha512-qIP/elwR/tq/dYRx3lgwK31jkZvMiD6qUtOycLhTzCvrjbZ3LjQnEM9rNhSGpbLXVJYQ3rq39A6Re0h9tU2ynw==,
      }
    cpu: [x64]
    os: [darwin]

  &quot;@rollup/rollup-freebsd-arm64@4.34.8&quot;:
    resolution:
      {
        integrity: sha512-IQNVXL9iY6NniYbTaOKdrlVP3XIqazBgJOVkddzJlqnCpRi/yAeSOa8PLcECFSQochzqApIOE1GHNu3pCz+BDA==,
      }
    cpu: [arm64]
    os: [freebsd]

  &quot;@rollup/rollup-freebsd-x64@4.34.8&quot;:
    resolution:
      {
        integrity: sha512-TYXcHghgnCqYFiE3FT5QwXtOZqDj5GmaFNTNt3jNC+vh22dc/ukG2cG+pi75QO4kACohZzidsq7yKTKwq/Jq7Q==,
      }
    cpu: [x64]
    os: [freebsd]

  &quot;@rollup/rollup-linux-arm-gnueabihf@4.34.8&quot;:
    resolution:
      {
        integrity: sha512-A4iphFGNkWRd+5m3VIGuqHnG3MVnqKe7Al57u9mwgbyZ2/xF9Jio72MaY7xxh+Y87VAHmGQr73qoKL9HPbXj1g==,
      }
    cpu: [arm]
    os: [linux]

  &quot;@rollup/rollup-linux-arm-musleabihf@4.34.8&quot;:
    resolution:
      {
        integrity: sha512-S0lqKLfTm5u+QTxlFiAnb2J/2dgQqRy/XvziPtDd1rKZFXHTyYLoVL58M/XFwDI01AQCDIevGLbQrMAtdyanpA==,
      }
    cpu: [arm]
    os: [linux]

  &quot;@rollup/rollup-linux-arm64-gnu@4.34.8&quot;:
    resolution:
      {
        integrity: sha512-jpz9YOuPiSkL4G4pqKrus0pn9aYwpImGkosRKwNi+sJSkz+WU3anZe6hi73StLOQdfXYXC7hUfsQlTnjMd3s1A==,
      }
    cpu: [arm64]
    os: [linux]

  &quot;@rollup/rollup-linux-arm64-musl@4.34.8&quot;:
    resolution:
      {
        integrity: sha512-KdSfaROOUJXgTVxJNAZ3KwkRc5nggDk+06P6lgi1HLv1hskgvxHUKZ4xtwHkVYJ1Rep4GNo+uEfycCRRxht7+Q==,
      }
    cpu: [arm64]
    os: [linux]

  &quot;@rollup/rollup-linux-loongarch64-gnu@4.34.8&quot;:
    resolution:
      {
        integrity: sha512-NyF4gcxwkMFRjgXBM6g2lkT58OWztZvw5KkV2K0qqSnUEqCVcqdh2jN4gQrTn/YUpAcNKyFHfoOZEer9nwo6uQ==,
      }
    cpu: [loong64]
    os: [linux]

  &quot;@rollup/rollup-linux-powerpc64le-gnu@4.34.8&quot;:
    resolution:
      {
        integrity: sha512-LMJc999GkhGvktHU85zNTDImZVUCJ1z/MbAJTnviiWmmjyckP5aQsHtcujMjpNdMZPT2rQEDBlJfubhs3jsMfw==,
      }
    cpu: [ppc64]
    os: [linux]

  &quot;@rollup/rollup-linux-riscv64-gnu@4.34.8&quot;:
    resolution:
      {
        integrity: sha512-xAQCAHPj8nJq1PI3z8CIZzXuXCstquz7cIOL73HHdXiRcKk8Ywwqtx2wrIy23EcTn4aZ2fLJNBB8d0tQENPCmw==,
      }
    cpu: [riscv64]
    os: [linux]

  &quot;@rollup/rollup-linux-s390x-gnu@4.34.8&quot;:
    resolution:
      {
        integrity: sha512-DdePVk1NDEuc3fOe3dPPTb+rjMtuFw89gw6gVWxQFAuEqqSdDKnrwzZHrUYdac7A7dXl9Q2Vflxpme15gUWQFA==,
      }
    cpu: [s390x]
    os: [linux]

  &quot;@rollup/rollup-linux-x64-gnu@4.34.8&quot;:
    resolution:
      {
        integrity: sha512-8y7ED8gjxITUltTUEJLQdgpbPh1sUQ0kMTmufRF/Ns5tI9TNMNlhWtmPKKHCU0SilX+3MJkZ0zERYYGIVBYHIA==,
      }
    cpu: [x64]
    os: [linux]

  &quot;@rollup/rollup-linux-x64-musl@4.34.8&quot;:
    resolution:
      {
        integrity: sha512-SCXcP0ZpGFIe7Ge+McxY5zKxiEI5ra+GT3QRxL0pMMtxPfpyLAKleZODi1zdRHkz5/BhueUrYtYVgubqe9JBNQ==,
      }
    cpu: [x64]
    os: [linux]

  &quot;@rollup/rollup-win32-arm64-msvc@4.34.8&quot;:
    resolution:
      {
        integrity: sha512-YHYsgzZgFJzTRbth4h7Or0m5O74Yda+hLin0irAIobkLQFRQd1qWmnoVfwmKm9TXIZVAD0nZ+GEb2ICicLyCnQ==,
      }
    cpu: [arm64]
    os: [win32]

  &quot;@rollup/rollup-win32-ia32-msvc@4.34.8&quot;:
    resolution:
      {
        integrity: sha512-r3NRQrXkHr4uWy5TOjTpTYojR9XmF0j/RYgKCef+Ag46FWUTltm5ziticv8LdNsDMehjJ543x/+TJAek/xBA2w==,
      }
    cpu: [ia32]
    os: [win32]

  &quot;@rollup/rollup-win32-x64-msvc@4.34.8&quot;:
    resolution:
      {
        integrity: sha512-U0FaE5O1BCpZSeE6gBl3c5ObhePQSfk9vDRToMmTkbhCOgW4jqvtS5LGyQ76L1fH8sM0keRp4uDTsbjiUyjk0g==,
      }
    cpu: [x64]
    os: [win32]

  &quot;@tailwindcss/node@4.0.8&quot;:
    resolution:
      {
        integrity: sha512-FKArQpbrbwv08TNT0k7ejYXpF+R8knZFAatNc0acOxbgeqLzwb86r+P3LGOjIeI3Idqe9CVkZrh4GlsJLJKkkw==,
      }

  &quot;@tailwindcss/oxide-android-arm64@4.0.8&quot;:
    resolution:
      {
        integrity: sha512-We7K79+Sm4mwJHk26Yzu/GAj7C7myemm7PeXvpgMxyxO70SSFSL3uCcqFbz9JA5M5UPkrl7N9fkBe/Y0iazqpA==,
      }
    engines: { node: &quot;&gt;= 10&quot; }
    cpu: [arm64]
    os: [android]

  &quot;@tailwindcss/oxide-darwin-arm64@4.0.8&quot;:
    resolution:
      {
        integrity: sha512-Lv9Isi2EwkCTG1sRHNDi0uRNN1UGFdEThUAGFrydRmQZnraGLMjN8gahzg2FFnOizDl7LB2TykLUuiw833DSNg==,
      }
    engines: { node: &quot;&gt;= 10&quot; }
    cpu: [arm64]
    os: [darwin]

  &quot;@tailwindcss/oxide-darwin-x64@4.0.8&quot;:
    resolution:
      {
        integrity: sha512-fWfywfYIlSWtKoqWTjukTHLWV3ARaBRjXCC2Eo0l6KVpaqGY4c2y8snUjp1xpxUtpqwMvCvFWFaleMoz1Vhzlw==,
      }
    engines: { node: &quot;&gt;= 10&quot; }
    cpu: [x64]
    os: [darwin]

  &quot;@tailwindcss/oxide-freebsd-x64@4.0.8&quot;:
    resolution:
      {
        integrity: sha512-SO+dyvjJV9G94bnmq2288Ke0BIdvrbSbvtPLaQdqjqHR83v5L2fWADyFO+1oecHo9Owsk8MxcXh1agGVPIKIqw==,
      }
    engines: { node: &quot;&gt;= 10&quot; }
    cpu: [x64]
    os: [freebsd]

  &quot;@tailwindcss/oxide-linux-arm-gnueabihf@4.0.8&quot;:
    resolution:
      {
        integrity: sha512-ZSHggWiEblQNV69V0qUK5vuAtHP+I+S2eGrKGJ5lPgwgJeAd6GjLsVBN+Mqn2SPVfYM3BOpS9jX/zVg9RWQVDQ==,
      }
    engines: { node: &quot;&gt;= 10&quot; }
    cpu: [arm]
    os: [linux]

  &quot;@tailwindcss/oxide-linux-arm64-gnu@4.0.8&quot;:
    resolution:
      {
        integrity: sha512-xWpr6M0OZLDNsr7+bQz+3X7zcnDJZJ1N9gtBWCtfhkEtDjjxYEp+Lr5L5nc/yXlL4MyCHnn0uonGVXy3fhxaVA==,
      }
    engines: { node: &quot;&gt;= 10&quot; }
    cpu: [arm64]
    os: [linux]

  &quot;@tailwindcss/oxide-linux-arm64-musl@4.0.8&quot;:
    resolution:
      {
        integrity: sha512-5tz2IL7LN58ssGEq7h/staD7pu/izF/KeMWdlJ86WDe2Ah46LF3ET6ZGKTr5eZMrnEA0M9cVFuSPprKRHNgjeg==,
      }
    engines: { node: &quot;&gt;= 10&quot; }
    cpu: [arm64]
    os: [linux]

  &quot;@tailwindcss/oxide-linux-x64-gnu@4.0.8&quot;:
    resolution:
      {
        integrity: sha512-KSzMkhyrxAQyY2o194NKVKU9j/c+NFSoMvnHWFaNHKi3P1lb+Vq1UC19tLHrmxSkKapcMMu69D7+G1+FVGNDXQ==,
      }
    engines: { node: &quot;&gt;= 10&quot; }
    cpu: [x64]
    os: [linux]

  &quot;@tailwindcss/oxide-linux-x64-musl@4.0.8&quot;:
    resolution:
      {
        integrity: sha512-yFYKG5UtHTRimjtqxUWXBgI4Tc6NJe3USjRIVdlTczpLRxq/SFwgzGl5JbatCxgSRDPBFwRrNPxq+ukfQFGdrw==,
      }
    engines: { node: &quot;&gt;= 10&quot; }
    cpu: [x64]
    os: [linux]

  &quot;@tailwindcss/oxide-win32-arm64-msvc@4.0.8&quot;:
    resolution:
      {
        integrity: sha512-tndGujmCSba85cRCnQzXgpA2jx5gXimyspsUYae5jlPyLRG0RjXbDshFKOheVXU4TLflo7FSG8EHCBJ0EHTKdQ==,
      }
    engines: { node: &quot;&gt;= 10&quot; }
    cpu: [arm64]
    os: [win32]

  &quot;@tailwindcss/oxide-win32-x64-msvc@4.0.8&quot;:
    resolution:
      {
        integrity: sha512-T77jroAc0p4EHVVgTUiNeFn6Nj3jtD3IeNId2X+0k+N1XxfNipy81BEkYErpKLiOkNhpNFjPee8/ZVas29b2OQ==,
      }
    engines: { node: &quot;&gt;= 10&quot; }
    cpu: [x64]
    os: [win32]

  &quot;@tailwindcss/oxide@4.0.8&quot;:
    resolution:
      {
        integrity: sha512-KfMcuAu/Iw+DcV1e8twrFyr2yN8/ZDC/odIGta4wuuJOGkrkHZbvJvRNIbQNhGh7erZTYV6Ie0IeD6WC9Y8Hcw==,
      }
    engines: { node: &quot;&gt;= 10&quot; }

  &quot;@tailwindcss/vite@4.0.8&quot;:
    resolution:
      {
        integrity: sha512-+SAq44yLzYlzyrb7QTcFCdU8Xa7FOA0jp+Xby7fPMUie+MY9HhJysM7Vp+vL8qIp8ceQJfLD+FjgJuJ4lL6nyg==,
      }
    peerDependencies:
      vite: ^5.2.0 || ^6

  &quot;@types/babel__core@7.20.5&quot;:
    resolution:
      {
        integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==,
      }

  &quot;@types/babel__generator@7.6.8&quot;:
    resolution:
      {
        integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==,
      }

  &quot;@types/babel__template@7.4.4&quot;:
    resolution:
      {
        integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==,
      }

  &quot;@types/babel__traverse@7.20.6&quot;:
    resolution:
      {
        integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==,
      }

  &quot;@types/body-parser@1.19.5&quot;:
    resolution:
      {
        integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==,
      }

  &quot;@types/connect@3.4.38&quot;:
    resolution:
      {
        integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==,
      }

  &quot;@types/cors@2.8.17&quot;:
    resolution:
      {
        integrity: sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==,
      }

  &quot;@types/estree@1.0.6&quot;:
    resolution:
      {
        integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==,
      }

  &quot;@types/express-serve-static-core@4.19.6&quot;:
    resolution:
      {
        integrity: sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==,
      }

  &quot;@types/express@4.17.21&quot;:
    resolution:
      {
        integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==,
      }

  &quot;@types/http-errors@2.0.4&quot;:
    resolution:
      {
        integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==,
      }

  &quot;@types/json-schema@7.0.15&quot;:
    resolution:
      {
        integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==,
      }

  &quot;@types/mime@1.3.5&quot;:
    resolution:
      {
        integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==,
      }

  &quot;@types/node@22.13.5&quot;:
    resolution:
      {
        integrity: sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg==,
      }

  &quot;@types/pg@8.11.11&quot;:
    resolution:
      {
        integrity: sha512-kGT1qKM8wJQ5qlawUrEkXgvMSXoV213KfMGXcwfDwUIfUHXqXYXOfS1nE1LINRJVVVx5wCm70XnFlMHaIcQAfw==,
      }

  &quot;@types/qs@6.9.18&quot;:
    resolution:
      {
        integrity: sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==,
      }

  &quot;@types/range-parser@1.2.7&quot;:
    resolution:
      {
        integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==,
      }

  &quot;@types/react-dom@19.0.4&quot;:
    resolution:
      {
        integrity: sha512-4fSQ8vWFkg+TGhePfUzVmat3eC14TXYSsiiDSLI0dVLsrm9gZFABjPy/Qu6TKgl1tq1Bu1yDsuQgY3A3DOjCcg==,
      }
    peerDependencies:
      &quot;@types/react&quot;: ^19.0.0

  &quot;@types/react@19.0.10&quot;:
    resolution:
      {
        integrity: sha512-JuRQ9KXLEjaUNjTWpzuR231Z2WpIwczOkBEIvbHNCzQefFIT0L8IqE6NV6ULLyC1SI/i234JnDoMkfg+RjQj2g==,
      }

  &quot;@types/send@0.17.4&quot;:
    resolution:
      {
        integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==,
      }

  &quot;@types/serve-static@1.15.7&quot;:
    resolution:
      {
        integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==,
      }

  &quot;@types/use-sync-external-store@0.0.6&quot;:
    resolution:
      {
        integrity: sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==,
      }

  &quot;@typescript-eslint/eslint-plugin@8.25.0&quot;:
    resolution:
      {
        integrity: sha512-VM7bpzAe7JO/BFf40pIT1lJqS/z1F8OaSsUB3rpFJucQA4cOSuH2RVVVkFULN+En0Djgr29/jb4EQnedUo95KA==,
      }
    engines: { node: ^18.18.0 || ^20.9.0 || &gt;=21.1.0 }
    peerDependencies:
      &quot;@typescript-eslint/parser&quot;: ^8.0.0 || ^8.0.0-alpha.0
      eslint: ^8.57.0 || ^9.0.0
      typescript: &quot;&gt;=4.8.4 &lt;5.8.0&quot;

  &quot;@typescript-eslint/parser@8.25.0&quot;:
    resolution:
      {
        integrity: sha512-4gbs64bnbSzu4FpgMiQ1A+D+urxkoJk/kqlDJ2W//5SygaEiAP2B4GoS7TEdxgwol2el03gckFV9lJ4QOMiiHg==,
      }
    engines: { node: ^18.18.0 || ^20.9.0 || &gt;=21.1.0 }
    peerDependencies:
      eslint: ^8.57.0 || ^9.0.0
      typescript: &quot;&gt;=4.8.4 &lt;5.8.0&quot;

  &quot;@typescript-eslint/scope-manager@8.25.0&quot;:
    resolution:
      {
        integrity: sha512-6PPeiKIGbgStEyt4NNXa2ru5pMzQ8OYKO1hX1z53HMomrmiSB+R5FmChgQAP1ro8jMtNawz+TRQo/cSXrauTpg==,
      }
    engines: { node: ^18.18.0 || ^20.9.0 || &gt;=21.1.0 }

  &quot;@typescript-eslint/type-utils@8.25.0&quot;:
    resolution:
      {
        integrity: sha512-d77dHgHWnxmXOPJuDWO4FDWADmGQkN5+tt6SFRZz/RtCWl4pHgFl3+WdYCn16+3teG09DY6XtEpf3gGD0a186g==,
      }
    engines: { node: ^18.18.0 || ^20.9.0 || &gt;=21.1.0 }
    peerDependencies:
      eslint: ^8.57.0 || ^9.0.0
      typescript: &quot;&gt;=4.8.4 &lt;5.8.0&quot;

  &quot;@typescript-eslint/types@8.25.0&quot;:
    resolution:
      {
        integrity: sha512-+vUe0Zb4tkNgznQwicsvLUJgZIRs6ITeWSCclX1q85pR1iOiaj+4uZJIUp//Z27QWu5Cseiw3O3AR8hVpax7Aw==,
      }
    engines: { node: ^18.18.0 || ^20.9.0 || &gt;=21.1.0 }

  &quot;@typescript-eslint/typescript-estree@8.25.0&quot;:
    resolution:
      {
        integrity: sha512-ZPaiAKEZ6Blt/TPAx5Ot0EIB/yGtLI2EsGoY6F7XKklfMxYQyvtL+gT/UCqkMzO0BVFHLDlzvFqQzurYahxv9Q==,
      }
    engines: { node: ^18.18.0 || ^20.9.0 || &gt;=21.1.0 }
    peerDependencies:
      typescript: &quot;&gt;=4.8.4 &lt;5.8.0&quot;

  &quot;@typescript-eslint/utils@8.25.0&quot;:
    resolution:
      {
        integrity: sha512-syqRbrEv0J1wywiLsK60XzHnQe/kRViI3zwFALrNEgnntn1l24Ra2KvOAWwWbWZ1lBZxZljPDGOq967dsl6fkA==,
      }
    engines: { node: ^18.18.0 || ^20.9.0 || &gt;=21.1.0 }
    peerDependencies:
      eslint: ^8.57.0 || ^9.0.0
      typescript: &quot;&gt;=4.8.4 &lt;5.8.0&quot;

  &quot;@typescript-eslint/visitor-keys@8.25.0&quot;:
    resolution:
      {
        integrity: sha512-kCYXKAum9CecGVHGij7muybDfTS2sD3t0L4bJsEZLkyrXUImiCTq1M3LG2SRtOhiHFwMR9wAFplpT6XHYjTkwQ==,
      }
    engines: { node: ^18.18.0 || ^20.9.0 || &gt;=21.1.0 }

  &quot;@vitejs/plugin-react@4.3.4&quot;:
    resolution:
      {
        integrity: sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==,
      }
    engines: { node: ^14.18.0 || &gt;=16.0.0 }
    peerDependencies:
      vite: ^4.2.0 || ^5.0.0 || ^6.0.0

  accepts@1.3.8:
    resolution:
      {
        integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==,
      }
    engines: { node: &quot;&gt;= 0.6&quot; }

  acorn-jsx@5.3.2:
    resolution:
      {
        integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==,
      }
    peerDependencies:
      acorn: ^6.0.0 || ^7.0.0 || ^8.0.0

  acorn@8.14.0:
    resolution:
      {
        integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==,
      }
    engines: { node: &quot;&gt;=0.4.0&quot; }
    hasBin: true

  ajv@6.12.6:
    resolution:
      {
        integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==,
      }

  ansi-regex@5.0.1:
    resolution:
      {
        integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==,
      }
    engines: { node: &quot;&gt;=8&quot; }

  ansi-styles@4.3.0:
    resolution:
      {
        integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==,
      }
    engines: { node: &quot;&gt;=8&quot; }

  argparse@2.0.1:
    resolution:
      {
        integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==,
      }

  array-flatten@1.1.1:
    resolution:
      {
        integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==,
      }

  balanced-match@1.0.2:
    resolution:
      {
        integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==,
      }

  body-parser@1.20.3:
    resolution:
      {
        integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==,
      }
    engines: { node: &quot;&gt;= 0.8&quot;, npm: 1.2.8000 || &gt;= 1.4.16 }

  brace-expansion@1.1.11:
    resolution:
      {
        integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==,
      }

  brace-expansion@2.0.1:
    resolution:
      {
        integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==,
      }

  braces@3.0.3:
    resolution:
      {
        integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==,
      }
    engines: { node: &quot;&gt;=8&quot; }

  browserslist@4.24.4:
    resolution:
      {
        integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==,
      }
    engines: { node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || &gt;=13.7 }
    hasBin: true

  buffer-from@1.1.2:
    resolution:
      {
        integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==,
      }

  bytes@3.1.2:
    resolution:
      {
        integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==,
      }
    engines: { node: &quot;&gt;= 0.8&quot; }

  call-bind-apply-helpers@1.0.2:
    resolution:
      {
        integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==,
      }
    engines: { node: &quot;&gt;= 0.4&quot; }

  call-bound@1.0.3:
    resolution:
      {
        integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==,
      }
    engines: { node: &quot;&gt;= 0.4&quot; }

  callsites@3.1.0:
    resolution:
      {
        integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==,
      }
    engines: { node: &quot;&gt;=6&quot; }

  caniuse-lite@1.0.30001700:
    resolution:
      {
        integrity: sha512-2S6XIXwaE7K7erT8dY+kLQcpa5ms63XlRkMkReXjle+kf6c5g38vyMl+Z5y8dSxOFDhcFe+nxnn261PLxBSQsQ==,
      }

  chalk@4.1.2:
    resolution:
      {
        integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==,
      }
    engines: { node: &quot;&gt;=10&quot; }

  cliui@8.0.1:
    resolution:
      {
        integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==,
      }
    engines: { node: &quot;&gt;=12&quot; }

  color-convert@2.0.1:
    resolution:
      {
        integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==,
      }
    engines: { node: &quot;&gt;=7.0.0&quot; }

  color-name@1.1.4:
    resolution:
      {
        integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==,
      }

  concat-map@0.0.1:
    resolution:
      {
        integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==,
      }

  concurrently@9.1.2:
    resolution:
      {
        integrity: sha512-H9MWcoPsYddwbOGM6difjVwVZHl63nwMEwDJG/L7VGtuaJhb12h2caPG2tVPWs7emuYix252iGfqOyrz1GczTQ==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    hasBin: true

  content-disposition@0.5.4:
    resolution:
      {
        integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==,
      }
    engines: { node: &quot;&gt;= 0.6&quot; }

  content-type@1.0.5:
    resolution:
      {
        integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==,
      }
    engines: { node: &quot;&gt;= 0.6&quot; }

  convert-source-map@2.0.0:
    resolution:
      {
        integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==,
      }

  cookie-signature@1.0.6:
    resolution:
      {
        integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==,
      }

  cookie@0.7.1:
    resolution:
      {
        integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==,
      }
    engines: { node: &quot;&gt;= 0.6&quot; }

  cors@2.8.5:
    resolution:
      {
        integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==,
      }
    engines: { node: &quot;&gt;= 0.10&quot; }

  cross-spawn@7.0.6:
    resolution:
      {
        integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==,
      }
    engines: { node: &quot;&gt;= 8&quot; }

  csstype@3.1.3:
    resolution:
      {
        integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==,
      }

  debug@2.6.9:
    resolution:
      {
        integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==,
      }
    peerDependencies:
      supports-color: &quot;*&quot;
    peerDependenciesMeta:
      supports-color:
        optional: true

  debug@4.4.0:
    resolution:
      {
        integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==,
      }
    engines: { node: &quot;&gt;=6.0&quot; }
    peerDependencies:
      supports-color: &quot;*&quot;
    peerDependenciesMeta:
      supports-color:
        optional: true

  deep-is@0.1.4:
    resolution:
      {
        integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==,
      }

  depd@2.0.0:
    resolution:
      {
        integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==,
      }
    engines: { node: &quot;&gt;= 0.8&quot; }

  destroy@1.2.0:
    resolution:
      {
        integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==,
      }
    engines: { node: &quot;&gt;= 0.8&quot;, npm: 1.2.8000 || &gt;= 1.4.16 }

  detect-libc@1.0.3:
    resolution:
      {
        integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==,
      }
    engines: { node: &quot;&gt;=0.10&quot; }
    hasBin: true

  dotenv@16.4.7:
    resolution:
      {
        integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==,
      }
    engines: { node: &quot;&gt;=12&quot; }

  drizzle-kit@0.30.4:
    resolution:
      {
        integrity: sha512-B2oJN5UkvwwNHscPWXDG5KqAixu7AUzZ3qbe++KU9SsQ+cZWR4DXEPYcvWplyFAno0dhRJECNEhNxiDmFaPGyQ==,
      }
    hasBin: true

  drizzle-orm@0.39.3:
    resolution:
      {
        integrity: sha512-EZ8ZpYvDIvKU9C56JYLOmUskazhad+uXZCTCRN4OnRMsL+xAJ05dv1eCpAG5xzhsm1hqiuC5kAZUCS924u2DTw==,
      }
    peerDependencies:
      &quot;@aws-sdk/client-rds-data&quot;: &quot;&gt;=3&quot;
      &quot;@cloudflare/workers-types&quot;: &quot;&gt;=4&quot;
      &quot;@electric-sql/pglite&quot;: &quot;&gt;=0.2.0&quot;
      &quot;@libsql/client&quot;: &quot;&gt;=0.10.0&quot;
      &quot;@libsql/client-wasm&quot;: &quot;&gt;=0.10.0&quot;
      &quot;@neondatabase/serverless&quot;: &quot;&gt;=0.10.0&quot;
      &quot;@op-engineering/op-sqlite&quot;: &quot;&gt;=2&quot;
      &quot;@opentelemetry/api&quot;: ^1.4.1
      &quot;@planetscale/database&quot;: &quot;&gt;=1&quot;
      &quot;@prisma/client&quot;: &quot;*&quot;
      &quot;@tidbcloud/serverless&quot;: &quot;*&quot;
      &quot;@types/better-sqlite3&quot;: &quot;*&quot;
      &quot;@types/pg&quot;: &quot;*&quot;
      &quot;@types/sql.js&quot;: &quot;*&quot;
      &quot;@vercel/postgres&quot;: &quot;&gt;=0.8.0&quot;
      &quot;@xata.io/client&quot;: &quot;*&quot;
      better-sqlite3: &quot;&gt;=7&quot;
      bun-types: &quot;*&quot;
      expo-sqlite: &quot;&gt;=14.0.0&quot;
      knex: &quot;*&quot;
      kysely: &quot;*&quot;
      mysql2: &quot;&gt;=2&quot;
      pg: &quot;&gt;=8&quot;
      postgres: &quot;&gt;=3&quot;
      prisma: &quot;*&quot;
      sql.js: &quot;&gt;=1&quot;
      sqlite3: &quot;&gt;=5&quot;
    peerDependenciesMeta:
      &quot;@aws-sdk/client-rds-data&quot;:
        optional: true
      &quot;@cloudflare/workers-types&quot;:
        optional: true
      &quot;@electric-sql/pglite&quot;:
        optional: true
      &quot;@libsql/client&quot;:
        optional: true
      &quot;@libsql/client-wasm&quot;:
        optional: true
      &quot;@neondatabase/serverless&quot;:
        optional: true
      &quot;@op-engineering/op-sqlite&quot;:
        optional: true
      &quot;@opentelemetry/api&quot;:
        optional: true
      &quot;@planetscale/database&quot;:
        optional: true
      &quot;@prisma/client&quot;:
        optional: true
      &quot;@tidbcloud/serverless&quot;:
        optional: true
      &quot;@types/better-sqlite3&quot;:
        optional: true
      &quot;@types/pg&quot;:
        optional: true
      &quot;@types/sql.js&quot;:
        optional: true
      &quot;@vercel/postgres&quot;:
        optional: true
      &quot;@xata.io/client&quot;:
        optional: true
      better-sqlite3:
        optional: true
      bun-types:
        optional: true
      expo-sqlite:
        optional: true
      knex:
        optional: true
      kysely:
        optional: true
      mysql2:
        optional: true
      pg:
        optional: true
      postgres:
        optional: true
      prisma:
        optional: true
      sql.js:
        optional: true
      sqlite3:
        optional: true

  drizzle-zod@0.7.0:
    resolution:
      {
        integrity: sha512-xgCRYYVEzRkeXTS33GSMgoowe3vKsMNBjSI+cwG1oLQVEhAWWbqtb/AAMlm7tkmV4fG/uJjEmWzdzlEmTgWOoQ==,
      }
    peerDependencies:
      drizzle-orm: &quot;&gt;=0.36.0&quot;
      zod: &quot;&gt;=3.0.0&quot;

  dunder-proto@1.0.1:
    resolution:
      {
        integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==,
      }
    engines: { node: &quot;&gt;= 0.4&quot; }

  ee-first@1.1.1:
    resolution:
      {
        integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==,
      }

  electron-to-chromium@1.5.104:
    resolution:
      {
        integrity: sha512-Us9M2L4cO/zMBqVkJtnj353nQhMju9slHm62NprKTmdF3HH8wYOtNvDFq/JB2+ZRoGLzdvYDiATlMHs98XBM1g==,
      }

  emoji-regex@8.0.0:
    resolution:
      {
        integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==,
      }

  encodeurl@1.0.2:
    resolution:
      {
        integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==,
      }
    engines: { node: &quot;&gt;= 0.8&quot; }

  encodeurl@2.0.0:
    resolution:
      {
        integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==,
      }
    engines: { node: &quot;&gt;= 0.8&quot; }

  enhanced-resolve@5.18.1:
    resolution:
      {
        integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==,
      }
    engines: { node: &quot;&gt;=10.13.0&quot; }

  es-define-property@1.0.1:
    resolution:
      {
        integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==,
      }
    engines: { node: &quot;&gt;= 0.4&quot; }

  es-errors@1.3.0:
    resolution:
      {
        integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==,
      }
    engines: { node: &quot;&gt;= 0.4&quot; }

  es-object-atoms@1.1.1:
    resolution:
      {
        integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==,
      }
    engines: { node: &quot;&gt;= 0.4&quot; }

  esbuild-register@3.6.0:
    resolution:
      {
        integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==,
      }
    peerDependencies:
      esbuild: &quot;&gt;=0.12 &lt;1&quot;

  esbuild@0.18.20:
    resolution:
      {
        integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==,
      }
    engines: { node: &quot;&gt;=12&quot; }
    hasBin: true

  esbuild@0.19.12:
    resolution:
      {
        integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==,
      }
    engines: { node: &quot;&gt;=12&quot; }
    hasBin: true

  esbuild@0.24.2:
    resolution:
      {
        integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    hasBin: true

  esbuild@0.25.0:
    resolution:
      {
        integrity: sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==,
      }
    engines: { node: &quot;&gt;=18&quot; }
    hasBin: true

  escalade@3.2.0:
    resolution:
      {
        integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==,
      }
    engines: { node: &quot;&gt;=6&quot; }

  escape-html@1.0.3:
    resolution:
      {
        integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==,
      }

  escape-string-regexp@4.0.0:
    resolution:
      {
        integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==,
      }
    engines: { node: &quot;&gt;=10&quot; }

  eslint-plugin-react-hooks@5.1.0:
    resolution:
      {
        integrity: sha512-mpJRtPgHN2tNAvZ35AMfqeB3Xqeo273QxrHJsbBEPWODRM4r0yB6jfoROqKEYrOn27UtRPpcpHc2UqyBSuUNTw==,
      }
    engines: { node: &quot;&gt;=10&quot; }
    peerDependencies:
      eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0

  eslint-plugin-react-refresh@0.4.19:
    resolution:
      {
        integrity: sha512-eyy8pcr/YxSYjBoqIFSrlbn9i/xvxUFa8CjzAYo9cFjgGXqq1hyjihcpZvxRLalpaWmueWR81xn7vuKmAFijDQ==,
      }
    peerDependencies:
      eslint: &quot;&gt;=8.40&quot;

  eslint-scope@8.2.0:
    resolution:
      {
        integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==,
      }
    engines: { node: ^18.18.0 || ^20.9.0 || &gt;=21.1.0 }

  eslint-visitor-keys@3.4.3:
    resolution:
      {
        integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==,
      }
    engines: { node: ^12.22.0 || ^14.17.0 || &gt;=16.0.0 }

  eslint-visitor-keys@4.2.0:
    resolution:
      {
        integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==,
      }
    engines: { node: ^18.18.0 || ^20.9.0 || &gt;=21.1.0 }

  eslint@9.21.0:
    resolution:
      {
        integrity: sha512-KjeihdFqTPhOMXTt7StsDxriV4n66ueuF/jfPNC3j/lduHwr/ijDwJMsF+wyMJethgiKi5wniIE243vi07d3pg==,
      }
    engines: { node: ^18.18.0 || ^20.9.0 || &gt;=21.1.0 }
    hasBin: true
    peerDependencies:
      jiti: &quot;*&quot;
    peerDependenciesMeta:
      jiti:
        optional: true

  espree@10.3.0:
    resolution:
      {
        integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==,
      }
    engines: { node: ^18.18.0 || ^20.9.0 || &gt;=21.1.0 }

  esquery@1.6.0:
    resolution:
      {
        integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==,
      }
    engines: { node: &quot;&gt;=0.10&quot; }

  esrecurse@4.3.0:
    resolution:
      {
        integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==,
      }
    engines: { node: &quot;&gt;=4.0&quot; }

  estraverse@5.3.0:
    resolution:
      {
        integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==,
      }
    engines: { node: &quot;&gt;=4.0&quot; }

  esutils@2.0.3:
    resolution:
      {
        integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==,
      }
    engines: { node: &quot;&gt;=0.10.0&quot; }

  etag@1.8.1:
    resolution:
      {
        integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==,
      }
    engines: { node: &quot;&gt;= 0.6&quot; }

  express@4.21.2:
    resolution:
      {
        integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==,
      }
    engines: { node: &quot;&gt;= 0.10.0&quot; }

  fast-deep-equal@3.1.3:
    resolution:
      {
        integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==,
      }

  fast-glob@3.3.3:
    resolution:
      {
        integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==,
      }
    engines: { node: &quot;&gt;=8.6.0&quot; }

  fast-json-stable-stringify@2.1.0:
    resolution:
      {
        integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==,
      }

  fast-levenshtein@2.0.6:
    resolution:
      {
        integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==,
      }

  fastq@1.19.0:
    resolution:
      {
        integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==,
      }

  file-entry-cache@8.0.0:
    resolution:
      {
        integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==,
      }
    engines: { node: &quot;&gt;=16.0.0&quot; }

  fill-range@7.1.1:
    resolution:
      {
        integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==,
      }
    engines: { node: &quot;&gt;=8&quot; }

  finalhandler@1.3.1:
    resolution:
      {
        integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==,
      }
    engines: { node: &quot;&gt;= 0.8&quot; }

  find-up@5.0.0:
    resolution:
      {
        integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==,
      }
    engines: { node: &quot;&gt;=10&quot; }

  flat-cache@4.0.1:
    resolution:
      {
        integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==,
      }
    engines: { node: &quot;&gt;=16&quot; }

  flatted@3.3.3:
    resolution:
      {
        integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==,
      }

  forwarded@0.2.0:
    resolution:
      {
        integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==,
      }
    engines: { node: &quot;&gt;= 0.6&quot; }

  fresh@0.5.2:
    resolution:
      {
        integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==,
      }
    engines: { node: &quot;&gt;= 0.6&quot; }

  fsevents@2.3.3:
    resolution:
      {
        integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==,
      }
    engines: { node: ^8.16.0 || ^10.6.0 || &gt;=11.0.0 }
    os: [darwin]

  function-bind@1.1.2:
    resolution:
      {
        integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==,
      }

  gensync@1.0.0-beta.2:
    resolution:
      {
        integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==,
      }
    engines: { node: &quot;&gt;=6.9.0&quot; }

  get-caller-file@2.0.5:
    resolution:
      {
        integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==,
      }
    engines: { node: 6.* || 8.* || &gt;= 10.* }

  get-intrinsic@1.3.0:
    resolution:
      {
        integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==,
      }
    engines: { node: &quot;&gt;= 0.4&quot; }

  get-proto@1.0.1:
    resolution:
      {
        integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==,
      }
    engines: { node: &quot;&gt;= 0.4&quot; }

  get-tsconfig@4.10.0:
    resolution:
      {
        integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==,
      }

  glob-parent@5.1.2:
    resolution:
      {
        integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==,
      }
    engines: { node: &quot;&gt;= 6&quot; }

  glob-parent@6.0.2:
    resolution:
      {
        integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==,
      }
    engines: { node: &quot;&gt;=10.13.0&quot; }

  globals@11.12.0:
    resolution:
      {
        integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==,
      }
    engines: { node: &quot;&gt;=4&quot; }

  globals@14.0.0:
    resolution:
      {
        integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==,
      }
    engines: { node: &quot;&gt;=18&quot; }

  globals@15.15.0:
    resolution:
      {
        integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==,
      }
    engines: { node: &quot;&gt;=18&quot; }

  gopd@1.2.0:
    resolution:
      {
        integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==,
      }
    engines: { node: &quot;&gt;= 0.4&quot; }

  graceful-fs@4.2.11:
    resolution:
      {
        integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==,
      }

  graphemer@1.4.0:
    resolution:
      {
        integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==,
      }

  has-flag@4.0.0:
    resolution:
      {
        integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==,
      }
    engines: { node: &quot;&gt;=8&quot; }

  has-symbols@1.1.0:
    resolution:
      {
        integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==,
      }
    engines: { node: &quot;&gt;= 0.4&quot; }

  hasown@2.0.2:
    resolution:
      {
        integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==,
      }
    engines: { node: &quot;&gt;= 0.4&quot; }

  http-errors@2.0.0:
    resolution:
      {
        integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==,
      }
    engines: { node: &quot;&gt;= 0.8&quot; }

  iconv-lite@0.4.24:
    resolution:
      {
        integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==,
      }
    engines: { node: &quot;&gt;=0.10.0&quot; }

  ignore@5.3.2:
    resolution:
      {
        integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==,
      }
    engines: { node: &quot;&gt;= 4&quot; }

  import-fresh@3.3.1:
    resolution:
      {
        integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==,
      }
    engines: { node: &quot;&gt;=6&quot; }

  imurmurhash@0.1.4:
    resolution:
      {
        integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==,
      }
    engines: { node: &quot;&gt;=0.8.19&quot; }

  inherits@2.0.4:
    resolution:
      {
        integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==,
      }

  ipaddr.js@1.9.1:
    resolution:
      {
        integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==,
      }
    engines: { node: &quot;&gt;= 0.10&quot; }

  is-extglob@2.1.1:
    resolution:
      {
        integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==,
      }
    engines: { node: &quot;&gt;=0.10.0&quot; }

  is-fullwidth-code-point@3.0.0:
    resolution:
      {
        integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==,
      }
    engines: { node: &quot;&gt;=8&quot; }

  is-glob@4.0.3:
    resolution:
      {
        integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==,
      }
    engines: { node: &quot;&gt;=0.10.0&quot; }

  is-number@7.0.0:
    resolution:
      {
        integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==,
      }
    engines: { node: &quot;&gt;=0.12.0&quot; }

  isexe@2.0.0:
    resolution:
      {
        integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==,
      }

  jiti@2.4.2:
    resolution:
      {
        integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==,
      }
    hasBin: true

  js-tokens@4.0.0:
    resolution:
      {
        integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==,
      }

  js-yaml@4.1.0:
    resolution:
      {
        integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==,
      }
    hasBin: true

  jsesc@3.1.0:
    resolution:
      {
        integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==,
      }
    engines: { node: &quot;&gt;=6&quot; }
    hasBin: true

  json-buffer@3.0.1:
    resolution:
      {
        integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==,
      }

  json-schema-traverse@0.4.1:
    resolution:
      {
        integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==,
      }

  json-stable-stringify-without-jsonify@1.0.1:
    resolution:
      {
        integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==,
      }

  json5@2.2.3:
    resolution:
      {
        integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==,
      }
    engines: { node: &quot;&gt;=6&quot; }
    hasBin: true

  keyv@4.5.4:
    resolution:
      {
        integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==,
      }

  kysely@0.27.5:
    resolution:
      {
        integrity: sha512-s7hZHcQeSNKpzCkHRm8yA+0JPLjncSWnjb+2TIElwS2JAqYr+Kv3Ess+9KFfJS0C1xcQ1i9NkNHpWwCYpHMWsA==,
      }
    engines: { node: &quot;&gt;=14.0.0&quot; }

  levn@0.4.1:
    resolution:
      {
        integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==,
      }
    engines: { node: &quot;&gt;= 0.8.0&quot; }

  lightningcss-darwin-arm64@1.29.1:
    resolution:
      {
        integrity: sha512-HtR5XJ5A0lvCqYAoSv2QdZZyoHNttBpa5EP9aNuzBQeKGfbyH5+UipLWvVzpP4Uml5ej4BYs5I9Lco9u1fECqw==,
      }
    engines: { node: &quot;&gt;= 12.0.0&quot; }
    cpu: [arm64]
    os: [darwin]

  lightningcss-darwin-x64@1.29.1:
    resolution:
      {
        integrity: sha512-k33G9IzKUpHy/J/3+9MCO4e+PzaFblsgBjSGlpAaFikeBFm8B/CkO3cKU9oI4g+fjS2KlkLM/Bza9K/aw8wsNA==,
      }
    engines: { node: &quot;&gt;= 12.0.0&quot; }
    cpu: [x64]
    os: [darwin]

  lightningcss-freebsd-x64@1.29.1:
    resolution:
      {
        integrity: sha512-0SUW22fv/8kln2LnIdOCmSuXnxgxVC276W5KLTwoehiO0hxkacBxjHOL5EtHD8BAXg2BvuhsJPmVMasvby3LiQ==,
      }
    engines: { node: &quot;&gt;= 12.0.0&quot; }
    cpu: [x64]
    os: [freebsd]

  lightningcss-linux-arm-gnueabihf@1.29.1:
    resolution:
      {
        integrity: sha512-sD32pFvlR0kDlqsOZmYqH/68SqUMPNj+0pucGxToXZi4XZgZmqeX/NkxNKCPsswAXU3UeYgDSpGhu05eAufjDg==,
      }
    engines: { node: &quot;&gt;= 12.0.0&quot; }
    cpu: [arm]
    os: [linux]

  lightningcss-linux-arm64-gnu@1.29.1:
    resolution:
      {
        integrity: sha512-0+vClRIZ6mmJl/dxGuRsE197o1HDEeeRk6nzycSy2GofC2JsY4ifCRnvUWf/CUBQmlrvMzt6SMQNMSEu22csWQ==,
      }
    engines: { node: &quot;&gt;= 12.0.0&quot; }
    cpu: [arm64]
    os: [linux]

  lightningcss-linux-arm64-musl@1.29.1:
    resolution:
      {
        integrity: sha512-UKMFrG4rL/uHNgelBsDwJcBqVpzNJbzsKkbI3Ja5fg00sgQnHw/VrzUTEc4jhZ+AN2BvQYz/tkHu4vt1kLuJyw==,
      }
    engines: { node: &quot;&gt;= 12.0.0&quot; }
    cpu: [arm64]
    os: [linux]

  lightningcss-linux-x64-gnu@1.29.1:
    resolution:
      {
        integrity: sha512-u1S+xdODy/eEtjADqirA774y3jLcm8RPtYztwReEXoZKdzgsHYPl0s5V52Tst+GKzqjebkULT86XMSxejzfISw==,
      }
    engines: { node: &quot;&gt;= 12.0.0&quot; }
    cpu: [x64]
    os: [linux]

  lightningcss-linux-x64-musl@1.29.1:
    resolution:
      {
        integrity: sha512-L0Tx0DtaNUTzXv0lbGCLB/c/qEADanHbu4QdcNOXLIe1i8i22rZRpbT3gpWYsCh9aSL9zFujY/WmEXIatWvXbw==,
      }
    engines: { node: &quot;&gt;= 12.0.0&quot; }
    cpu: [x64]
    os: [linux]

  lightningcss-win32-arm64-msvc@1.29.1:
    resolution:
      {
        integrity: sha512-QoOVnkIEFfbW4xPi+dpdft/zAKmgLgsRHfJalEPYuJDOWf7cLQzYg0DEh8/sn737FaeMJxHZRc1oBreiwZCjog==,
      }
    engines: { node: &quot;&gt;= 12.0.0&quot; }
    cpu: [arm64]
    os: [win32]

  lightningcss-win32-x64-msvc@1.29.1:
    resolution:
      {
        integrity: sha512-NygcbThNBe4JElP+olyTI/doBNGJvLs3bFCRPdvuCcxZCcCZ71B858IHpdm7L1btZex0FvCmM17FK98Y9MRy1Q==,
      }
    engines: { node: &quot;&gt;= 12.0.0&quot; }
    cpu: [x64]
    os: [win32]

  lightningcss@1.29.1:
    resolution:
      {
        integrity: sha512-FmGoeD4S05ewj+AkhTY+D+myDvXI6eL27FjHIjoyUkO/uw7WZD1fBVs0QxeYWa7E17CUHJaYX/RUGISCtcrG4Q==,
      }
    engines: { node: &quot;&gt;= 12.0.0&quot; }

  locate-path@6.0.0:
    resolution:
      {
        integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==,
      }
    engines: { node: &quot;&gt;=10&quot; }

  lodash.merge@4.6.2:
    resolution:
      {
        integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==,
      }

  lodash@4.17.21:
    resolution:
      {
        integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==,
      }

  lru-cache@5.1.1:
    resolution:
      {
        integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==,
      }

  math-intrinsics@1.1.0:
    resolution:
      {
        integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==,
      }
    engines: { node: &quot;&gt;= 0.4&quot; }

  media-typer@0.3.0:
    resolution:
      {
        integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==,
      }
    engines: { node: &quot;&gt;= 0.6&quot; }

  merge-descriptors@1.0.3:
    resolution:
      {
        integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==,
      }

  merge2@1.4.1:
    resolution:
      {
        integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==,
      }
    engines: { node: &quot;&gt;= 8&quot; }

  methods@1.1.2:
    resolution:
      {
        integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==,
      }
    engines: { node: &quot;&gt;= 0.6&quot; }

  micromatch@4.0.8:
    resolution:
      {
        integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==,
      }
    engines: { node: &quot;&gt;=8.6&quot; }

  mime-db@1.52.0:
    resolution:
      {
        integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==,
      }
    engines: { node: &quot;&gt;= 0.6&quot; }

  mime-types@2.1.35:
    resolution:
      {
        integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==,
      }
    engines: { node: &quot;&gt;= 0.6&quot; }

  mime@1.6.0:
    resolution:
      {
        integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==,
      }
    engines: { node: &quot;&gt;=4&quot; }
    hasBin: true

  minimatch@3.1.2:
    resolution:
      {
        integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==,
      }

  minimatch@9.0.5:
    resolution:
      {
        integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==,
      }
    engines: { node: &quot;&gt;=16 || 14 &gt;=14.17&quot; }

  mitt@3.0.1:
    resolution:
      {
        integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==,
      }

  ms@2.0.0:
    resolution:
      {
        integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==,
      }

  ms@2.1.3:
    resolution:
      {
        integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==,
      }

  nanoid@3.3.8:
    resolution:
      {
        integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==,
      }
    engines: { node: ^10 || ^12 || ^13.7 || ^14 || &gt;=15.0.1 }
    hasBin: true

  natural-compare@1.4.0:
    resolution:
      {
        integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==,
      }

  negotiator@0.6.3:
    resolution:
      {
        integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==,
      }
    engines: { node: &quot;&gt;= 0.6&quot; }

  node-releases@2.0.19:
    resolution:
      {
        integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==,
      }

  object-assign@4.1.1:
    resolution:
      {
        integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==,
      }
    engines: { node: &quot;&gt;=0.10.0&quot; }

  object-inspect@1.13.4:
    resolution:
      {
        integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==,
      }
    engines: { node: &quot;&gt;= 0.4&quot; }

  obuf@1.1.2:
    resolution:
      {
        integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==,
      }

  on-finished@2.4.1:
    resolution:
      {
        integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==,
      }
    engines: { node: &quot;&gt;= 0.8&quot; }

  optionator@0.9.4:
    resolution:
      {
        integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==,
      }
    engines: { node: &quot;&gt;= 0.8.0&quot; }

  p-limit@3.1.0:
    resolution:
      {
        integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==,
      }
    engines: { node: &quot;&gt;=10&quot; }

  p-locate@5.0.0:
    resolution:
      {
        integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==,
      }
    engines: { node: &quot;&gt;=10&quot; }

  parent-module@1.0.1:
    resolution:
      {
        integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==,
      }
    engines: { node: &quot;&gt;=6&quot; }

  parseurl@1.3.3:
    resolution:
      {
        integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==,
      }
    engines: { node: &quot;&gt;= 0.8&quot; }

  path-exists@4.0.0:
    resolution:
      {
        integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==,
      }
    engines: { node: &quot;&gt;=8&quot; }

  path-key@3.1.1:
    resolution:
      {
        integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==,
      }
    engines: { node: &quot;&gt;=8&quot; }

  path-to-regexp@0.1.12:
    resolution:
      {
        integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==,
      }

  pg-cloudflare@1.1.1:
    resolution:
      {
        integrity: sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==,
      }

  pg-connection-string@2.7.0:
    resolution:
      {
        integrity: sha512-PI2W9mv53rXJQEOb8xNR8lH7Hr+EKa6oJa38zsK0S/ky2er16ios1wLKhZyxzD7jUReiWokc9WK5nxSnC7W1TA==,
      }

  pg-int8@1.0.1:
    resolution:
      {
        integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==,
      }
    engines: { node: &quot;&gt;=4.0.0&quot; }

  pg-numeric@1.0.2:
    resolution:
      {
        integrity: sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw==,
      }
    engines: { node: &quot;&gt;=4&quot; }

  pg-pool@3.7.1:
    resolution:
      {
        integrity: sha512-xIOsFoh7Vdhojas6q3596mXFsR8nwBQBXX5JiV7p9buEVAGqYL4yFzclON5P9vFrpu1u7Zwl2oriyDa89n0wbw==,
      }
    peerDependencies:
      pg: &quot;&gt;=8.0&quot;

  pg-protocol@1.7.1:
    resolution:
      {
        integrity: sha512-gjTHWGYWsEgy9MsY0Gp6ZJxV24IjDqdpTW7Eh0x+WfJLFsm/TJx1MzL6T0D88mBvkpxotCQ6TwW6N+Kko7lhgQ==,
      }

  pg-types@2.2.0:
    resolution:
      {
        integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==,
      }
    engines: { node: &quot;&gt;=4&quot; }

  pg-types@4.0.2:
    resolution:
      {
        integrity: sha512-cRL3JpS3lKMGsKaWndugWQoLOCoP+Cic8oseVcbr0qhPzYD5DWXK+RZ9LY9wxRf7RQia4SCwQlXk0q6FCPrVng==,
      }
    engines: { node: &quot;&gt;=10&quot; }

  pg@8.13.3:
    resolution:
      {
        integrity: sha512-P6tPt9jXbL9HVu/SSRERNYaYG++MjnscnegFh9pPHihfoBSujsrka0hyuymMzeJKFWrcG8wvCKy8rCe8e5nDUQ==,
      }
    engines: { node: &quot;&gt;= 8.0.0&quot; }
    peerDependencies:
      pg-native: &quot;&gt;=3.0.1&quot;
    peerDependenciesMeta:
      pg-native:
        optional: true

  pgpass@1.0.5:
    resolution:
      {
        integrity: sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==,
      }

  picocolors@1.1.1:
    resolution:
      {
        integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==,
      }

  picomatch@2.3.1:
    resolution:
      {
        integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==,
      }
    engines: { node: &quot;&gt;=8.6&quot; }

  postcss@8.5.3:
    resolution:
      {
        integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==,
      }
    engines: { node: ^10 || ^12 || &gt;=14 }

  postgres-array@2.0.0:
    resolution:
      {
        integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==,
      }
    engines: { node: &quot;&gt;=4&quot; }

  postgres-array@3.0.2:
    resolution:
      {
        integrity: sha512-6faShkdFugNQCLwucjPcY5ARoW1SlbnrZjmGl0IrrqewpvxvhSLHimCVzqeuULCbG0fQv7Dtk1yDbG3xv7Veog==,
      }
    engines: { node: &quot;&gt;=12&quot; }

  postgres-bytea@1.0.0:
    resolution:
      {
        integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==,
      }
    engines: { node: &quot;&gt;=0.10.0&quot; }

  postgres-bytea@3.0.0:
    resolution:
      {
        integrity: sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw==,
      }
    engines: { node: &quot;&gt;= 6&quot; }

  postgres-date@1.0.7:
    resolution:
      {
        integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==,
      }
    engines: { node: &quot;&gt;=0.10.0&quot; }

  postgres-date@2.1.0:
    resolution:
      {
        integrity: sha512-K7Juri8gtgXVcDfZttFKVmhglp7epKb1K4pgrkLxehjqkrgPhfG6OO8LHLkfaqkbpjNRnra018XwAr1yQFWGcA==,
      }
    engines: { node: &quot;&gt;=12&quot; }

  postgres-interval@1.2.0:
    resolution:
      {
        integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==,
      }
    engines: { node: &quot;&gt;=0.10.0&quot; }

  postgres-interval@3.0.0:
    resolution:
      {
        integrity: sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw==,
      }
    engines: { node: &quot;&gt;=12&quot; }

  postgres-range@1.1.4:
    resolution:
      {
        integrity: sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w==,
      }

  prelude-ls@1.2.1:
    resolution:
      {
        integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==,
      }
    engines: { node: &quot;&gt;= 0.8.0&quot; }

  proxy-addr@2.0.7:
    resolution:
      {
        integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==,
      }
    engines: { node: &quot;&gt;= 0.10&quot; }

  punycode@2.3.1:
    resolution:
      {
        integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==,
      }
    engines: { node: &quot;&gt;=6&quot; }

  qs@6.13.0:
    resolution:
      {
        integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==,
      }
    engines: { node: &quot;&gt;=0.6&quot; }

  queue-microtask@1.2.3:
    resolution:
      {
        integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==,
      }

  range-parser@1.2.1:
    resolution:
      {
        integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==,
      }
    engines: { node: &quot;&gt;= 0.6&quot; }

  raw-body@2.5.2:
    resolution:
      {
        integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==,
      }
    engines: { node: &quot;&gt;= 0.8&quot; }

  react-dom@19.0.0:
    resolution:
      {
        integrity: sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==,
      }
    peerDependencies:
      react: ^19.0.0

  react-refresh@0.14.2:
    resolution:
      {
        integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==,
      }
    engines: { node: &quot;&gt;=0.10.0&quot; }

  react@19.0.0:
    resolution:
      {
        integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==,
      }
    engines: { node: &quot;&gt;=0.10.0&quot; }

  require-directory@2.1.1:
    resolution:
      {
        integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==,
      }
    engines: { node: &quot;&gt;=0.10.0&quot; }

  resolve-from@4.0.0:
    resolution:
      {
        integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==,
      }
    engines: { node: &quot;&gt;=4&quot; }

  resolve-pkg-maps@1.0.0:
    resolution:
      {
        integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==,
      }

  reusify@1.0.4:
    resolution:
      {
        integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==,
      }
    engines: { iojs: &quot;&gt;=1.0.0&quot;, node: &quot;&gt;=0.10.0&quot; }

  rollup@4.34.8:
    resolution:
      {
        integrity: sha512-489gTVMzAYdiZHFVA/ig/iYFllCcWFHMvUHI1rpFmkoUtRlQxqh6/yiNqnYibjMZ2b/+FUQwldG+aLsEt6bglQ==,
      }
    engines: { node: &quot;&gt;=18.0.0&quot;, npm: &quot;&gt;=8.0.0&quot; }
    hasBin: true

  run-parallel@1.2.0:
    resolution:
      {
        integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==,
      }

  rxjs@7.8.2:
    resolution:
      {
        integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==,
      }

  safe-buffer@5.2.1:
    resolution:
      {
        integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==,
      }

  safer-buffer@2.1.2:
    resolution:
      {
        integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==,
      }

  scheduler@0.25.0:
    resolution:
      {
        integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==,
      }

  semver@6.3.1:
    resolution:
      {
        integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==,
      }
    hasBin: true

  semver@7.7.1:
    resolution:
      {
        integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==,
      }
    engines: { node: &quot;&gt;=10&quot; }
    hasBin: true

  send@0.19.0:
    resolution:
      {
        integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==,
      }
    engines: { node: &quot;&gt;= 0.8.0&quot; }

  serve-static@1.16.2:
    resolution:
      {
        integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==,
      }
    engines: { node: &quot;&gt;= 0.8.0&quot; }

  setprototypeof@1.2.0:
    resolution:
      {
        integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==,
      }

  shebang-command@2.0.0:
    resolution:
      {
        integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==,
      }
    engines: { node: &quot;&gt;=8&quot; }

  shebang-regex@3.0.0:
    resolution:
      {
        integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==,
      }
    engines: { node: &quot;&gt;=8&quot; }

  shell-quote@1.8.2:
    resolution:
      {
        integrity: sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==,
      }
    engines: { node: &quot;&gt;= 0.4&quot; }

  side-channel-list@1.0.0:
    resolution:
      {
        integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==,
      }
    engines: { node: &quot;&gt;= 0.4&quot; }

  side-channel-map@1.0.1:
    resolution:
      {
        integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==,
      }
    engines: { node: &quot;&gt;= 0.4&quot; }

  side-channel-weakmap@1.0.2:
    resolution:
      {
        integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==,
      }
    engines: { node: &quot;&gt;= 0.4&quot; }

  side-channel@1.1.0:
    resolution:
      {
        integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==,
      }
    engines: { node: &quot;&gt;= 0.4&quot; }

  source-map-js@1.2.1:
    resolution:
      {
        integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==,
      }
    engines: { node: &quot;&gt;=0.10.0&quot; }

  source-map-support@0.5.21:
    resolution:
      {
        integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==,
      }

  source-map@0.6.1:
    resolution:
      {
        integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==,
      }
    engines: { node: &quot;&gt;=0.10.0&quot; }

  split2@4.2.0:
    resolution:
      {
        integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==,
      }
    engines: { node: &quot;&gt;= 10.x&quot; }

  statuses@2.0.1:
    resolution:
      {
        integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==,
      }
    engines: { node: &quot;&gt;= 0.8&quot; }

  string-width@4.2.3:
    resolution:
      {
        integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==,
      }
    engines: { node: &quot;&gt;=8&quot; }

  strip-ansi@6.0.1:
    resolution:
      {
        integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==,
      }
    engines: { node: &quot;&gt;=8&quot; }

  strip-json-comments@3.1.1:
    resolution:
      {
        integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==,
      }
    engines: { node: &quot;&gt;=8&quot; }

  supports-color@7.2.0:
    resolution:
      {
        integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==,
      }
    engines: { node: &quot;&gt;=8&quot; }

  supports-color@8.1.1:
    resolution:
      {
        integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==,
      }
    engines: { node: &quot;&gt;=10&quot; }

  tailwindcss@4.0.8:
    resolution:
      {
        integrity: sha512-Me7N5CKR+D2A1xdWA5t5+kjjT7bwnxZOE6/yDI/ixJdJokszsn2n++mdU5yJwrsTpqFX2B9ZNMBJDwcqk9C9lw==,
      }

  tapable@2.2.1:
    resolution:
      {
        integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==,
      }
    engines: { node: &quot;&gt;=6&quot; }

  to-regex-range@5.0.1:
    resolution:
      {
        integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==,
      }
    engines: { node: &quot;&gt;=8.0&quot; }

  toidentifier@1.0.1:
    resolution:
      {
        integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==,
      }
    engines: { node: &quot;&gt;=0.6&quot; }

  tree-kill@1.2.2:
    resolution:
      {
        integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==,
      }
    hasBin: true

  ts-api-utils@2.0.1:
    resolution:
      {
        integrity: sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==,
      }
    engines: { node: &quot;&gt;=18.12&quot; }
    peerDependencies:
      typescript: &quot;&gt;=4.8.4&quot;

  tslib@2.8.1:
    resolution:
      {
        integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==,
      }

  tsx@4.19.3:
    resolution:
      {
        integrity: sha512-4H8vUNGNjQ4V2EOoGw005+c+dGuPSnhpPBPHBtsZdGZBk/iJb4kguGlPWaZTZ3q5nMtFOEsY0nRDlh9PJyd6SQ==,
      }
    engines: { node: &quot;&gt;=18.0.0&quot; }
    hasBin: true

  type-check@0.4.0:
    resolution:
      {
        integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==,
      }
    engines: { node: &quot;&gt;= 0.8.0&quot; }

  type-is@1.6.18:
    resolution:
      {
        integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==,
      }
    engines: { node: &quot;&gt;= 0.6&quot; }

  typescript-eslint@8.25.0:
    resolution:
      {
        integrity: sha512-TxRdQQLH4g7JkoFlYG3caW5v1S6kEkz8rqt80iQJZUYPq1zD1Ra7HfQBJJ88ABRaMvHAXnwRvRB4V+6sQ9xN5Q==,
      }
    engines: { node: ^18.18.0 || ^20.9.0 || &gt;=21.1.0 }
    peerDependencies:
      eslint: ^8.57.0 || ^9.0.0
      typescript: &quot;&gt;=4.8.4 &lt;5.8.0&quot;

  typescript@5.7.3:
    resolution:
      {
        integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==,
      }
    engines: { node: &quot;&gt;=14.17&quot; }
    hasBin: true

  undici-types@6.20.0:
    resolution:
      {
        integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==,
      }

  unpipe@1.0.0:
    resolution:
      {
        integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==,
      }
    engines: { node: &quot;&gt;= 0.8&quot; }

  update-browserslist-db@1.1.2:
    resolution:
      {
        integrity: sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==,
      }
    hasBin: true
    peerDependencies:
      browserslist: &quot;&gt;= 4.21.0&quot;

  uri-js@4.4.1:
    resolution:
      {
        integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==,
      }

  utils-merge@1.0.1:
    resolution:
      {
        integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==,
      }
    engines: { node: &quot;&gt;= 0.4.0&quot; }

  vary@1.1.2:
    resolution:
      {
        integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==,
      }
    engines: { node: &quot;&gt;= 0.8&quot; }

  vite@6.1.1:
    resolution:
      {
        integrity: sha512-4GgM54XrwRfrOp297aIYspIti66k56v16ZnqHvrIM7mG+HjDlAwS7p+Srr7J6fGvEdOJ5JcQ/D9T7HhtdXDTzA==,
      }
    engines: { node: ^18.0.0 || ^20.0.0 || &gt;=22.0.0 }
    hasBin: true
    peerDependencies:
      &quot;@types/node&quot;: ^18.0.0 || ^20.0.0 || &gt;=22.0.0
      jiti: &quot;&gt;=1.21.0&quot;
      less: &quot;*&quot;
      lightningcss: ^1.21.0
      sass: &quot;*&quot;
      sass-embedded: &quot;*&quot;
      stylus: &quot;*&quot;
      sugarss: &quot;*&quot;
      terser: ^5.16.0
      tsx: ^4.8.1
      yaml: ^2.4.2
    peerDependenciesMeta:
      &quot;@types/node&quot;:
        optional: true
      jiti:
        optional: true
      less:
        optional: true
      lightningcss:
        optional: true
      sass:
        optional: true
      sass-embedded:
        optional: true
      stylus:
        optional: true
      sugarss:
        optional: true
      terser:
        optional: true
      tsx:
        optional: true
      yaml:
        optional: true

  which@2.0.2:
    resolution:
      {
        integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==,
      }
    engines: { node: &quot;&gt;= 8&quot; }
    hasBin: true

  word-wrap@1.2.5:
    resolution:
      {
        integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==,
      }
    engines: { node: &quot;&gt;=0.10.0&quot; }

  wrap-ansi@7.0.0:
    resolution:
      {
        integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==,
      }
    engines: { node: &quot;&gt;=10&quot; }

  xtend@4.0.2:
    resolution:
      {
        integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==,
      }
    engines: { node: &quot;&gt;=0.4&quot; }

  y18n@5.0.8:
    resolution:
      {
        integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==,
      }
    engines: { node: &quot;&gt;=10&quot; }

  yallist@3.1.1:
    resolution:
      {
        integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==,
      }

  yargs-parser@21.1.1:
    resolution:
      {
        integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==,
      }
    engines: { node: &quot;&gt;=12&quot; }

  yargs@17.7.2:
    resolution:
      {
        integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==,
      }
    engines: { node: &quot;&gt;=12&quot; }

  yocto-queue@0.1.0:
    resolution:
      {
        integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==,
      }
    engines: { node: &quot;&gt;=10&quot; }

  zod@3.24.2:
    resolution:
      {
        integrity: sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==,
      }

snapshots:
  &quot;@ampproject/remapping@2.3.0&quot;:
    dependencies:
      &quot;@jridgewell/gen-mapping&quot;: 0.3.8
      &quot;@jridgewell/trace-mapping&quot;: 0.3.25

  &quot;@babel/code-frame@7.26.2&quot;:
    dependencies:
      &quot;@babel/helper-validator-identifier&quot;: 7.25.9
      js-tokens: 4.0.0
      picocolors: 1.1.1

  &quot;@babel/compat-data@7.26.8&quot;: {}

  &quot;@babel/core@7.26.9&quot;:
    dependencies:
      &quot;@ampproject/remapping&quot;: 2.3.0
      &quot;@babel/code-frame&quot;: 7.26.2
      &quot;@babel/generator&quot;: 7.26.9
      &quot;@babel/helper-compilation-targets&quot;: 7.26.5
      &quot;@babel/helper-module-transforms&quot;: 7.26.0(@babel/core@7.26.9)
      &quot;@babel/helpers&quot;: 7.26.9
      &quot;@babel/parser&quot;: 7.26.9
      &quot;@babel/template&quot;: 7.26.9
      &quot;@babel/traverse&quot;: 7.26.9
      &quot;@babel/types&quot;: 7.26.9
      convert-source-map: 2.0.0
      debug: 4.4.0
      gensync: 1.0.0-beta.2
      json5: 2.2.3
      semver: 6.3.1
    transitivePeerDependencies:
      - supports-color

  &quot;@babel/generator@7.26.9&quot;:
    dependencies:
      &quot;@babel/parser&quot;: 7.26.9
      &quot;@babel/types&quot;: 7.26.9
      &quot;@jridgewell/gen-mapping&quot;: 0.3.8
      &quot;@jridgewell/trace-mapping&quot;: 0.3.25
      jsesc: 3.1.0

  &quot;@babel/helper-compilation-targets@7.26.5&quot;:
    dependencies:
      &quot;@babel/compat-data&quot;: 7.26.8
      &quot;@babel/helper-validator-option&quot;: 7.25.9
      browserslist: 4.24.4
      lru-cache: 5.1.1
      semver: 6.3.1

  &quot;@babel/helper-module-imports@7.25.9&quot;:
    dependencies:
      &quot;@babel/traverse&quot;: 7.26.9
      &quot;@babel/types&quot;: 7.26.9
    transitivePeerDependencies:
      - supports-color

  &quot;@babel/helper-module-transforms@7.26.0(@babel/core@7.26.9)&quot;:
    dependencies:
      &quot;@babel/core&quot;: 7.26.9
      &quot;@babel/helper-module-imports&quot;: 7.25.9
      &quot;@babel/helper-validator-identifier&quot;: 7.25.9
      &quot;@babel/traverse&quot;: 7.26.9
    transitivePeerDependencies:
      - supports-color

  &quot;@babel/helper-plugin-utils@7.26.5&quot;: {}

  &quot;@babel/helper-string-parser@7.25.9&quot;: {}

  &quot;@babel/helper-validator-identifier@7.25.9&quot;: {}

  &quot;@babel/helper-validator-option@7.25.9&quot;: {}

  &quot;@babel/helpers@7.26.9&quot;:
    dependencies:
      &quot;@babel/template&quot;: 7.26.9
      &quot;@babel/types&quot;: 7.26.9

  &quot;@babel/parser@7.26.9&quot;:
    dependencies:
      &quot;@babel/types&quot;: 7.26.9

  &quot;@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.9)&quot;:
    dependencies:
      &quot;@babel/core&quot;: 7.26.9
      &quot;@babel/helper-plugin-utils&quot;: 7.26.5

  &quot;@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.9)&quot;:
    dependencies:
      &quot;@babel/core&quot;: 7.26.9
      &quot;@babel/helper-plugin-utils&quot;: 7.26.5

  &quot;@babel/template@7.26.9&quot;:
    dependencies:
      &quot;@babel/code-frame&quot;: 7.26.2
      &quot;@babel/parser&quot;: 7.26.9
      &quot;@babel/types&quot;: 7.26.9

  &quot;@babel/traverse@7.26.9&quot;:
    dependencies:
      &quot;@babel/code-frame&quot;: 7.26.2
      &quot;@babel/generator&quot;: 7.26.9
      &quot;@babel/parser&quot;: 7.26.9
      &quot;@babel/template&quot;: 7.26.9
      &quot;@babel/types&quot;: 7.26.9
      debug: 4.4.0
      globals: 11.12.0
    transitivePeerDependencies:
      - supports-color

  &quot;@babel/types@7.26.9&quot;:
    dependencies:
      &quot;@babel/helper-string-parser&quot;: 7.25.9
      &quot;@babel/helper-validator-identifier&quot;: 7.25.9

  &quot;@drizzle-team/brocli@0.10.2&quot;: {}

  &quot;@esbuild-kit/core-utils@3.3.2&quot;:
    dependencies:
      esbuild: 0.18.20
      source-map-support: 0.5.21

  &quot;@esbuild-kit/esm-loader@2.6.5&quot;:
    dependencies:
      &quot;@esbuild-kit/core-utils&quot;: 3.3.2
      get-tsconfig: 4.10.0

  &quot;@esbuild/aix-ppc64@0.19.12&quot;:
    optional: true

  &quot;@esbuild/aix-ppc64@0.24.2&quot;:
    optional: true

  &quot;@esbuild/aix-ppc64@0.25.0&quot;:
    optional: true

  &quot;@esbuild/android-arm64@0.18.20&quot;:
    optional: true

  &quot;@esbuild/android-arm64@0.19.12&quot;:
    optional: true

  &quot;@esbuild/android-arm64@0.24.2&quot;:
    optional: true

  &quot;@esbuild/android-arm64@0.25.0&quot;:
    optional: true

  &quot;@esbuild/android-arm@0.18.20&quot;:
    optional: true

  &quot;@esbuild/android-arm@0.19.12&quot;:
    optional: true

  &quot;@esbuild/android-arm@0.24.2&quot;:
    optional: true

  &quot;@esbuild/android-arm@0.25.0&quot;:
    optional: true

  &quot;@esbuild/android-x64@0.18.20&quot;:
    optional: true

  &quot;@esbuild/android-x64@0.19.12&quot;:
    optional: true

  &quot;@esbuild/android-x64@0.24.2&quot;:
    optional: true

  &quot;@esbuild/android-x64@0.25.0&quot;:
    optional: true

  &quot;@esbuild/darwin-arm64@0.18.20&quot;:
    optional: true

  &quot;@esbuild/darwin-arm64@0.19.12&quot;:
    optional: true

  &quot;@esbuild/darwin-arm64@0.24.2&quot;:
    optional: true

  &quot;@esbuild/darwin-arm64@0.25.0&quot;:
    optional: true

  &quot;@esbuild/darwin-x64@0.18.20&quot;:
    optional: true

  &quot;@esbuild/darwin-x64@0.19.12&quot;:
    optional: true

  &quot;@esbuild/darwin-x64@0.24.2&quot;:
    optional: true

  &quot;@esbuild/darwin-x64@0.25.0&quot;:
    optional: true

  &quot;@esbuild/freebsd-arm64@0.18.20&quot;:
    optional: true

  &quot;@esbuild/freebsd-arm64@0.19.12&quot;:
    optional: true

  &quot;@esbuild/freebsd-arm64@0.24.2&quot;:
    optional: true

  &quot;@esbuild/freebsd-arm64@0.25.0&quot;:
    optional: true

  &quot;@esbuild/freebsd-x64@0.18.20&quot;:
    optional: true

  &quot;@esbuild/freebsd-x64@0.19.12&quot;:
    optional: true

  &quot;@esbuild/freebsd-x64@0.24.2&quot;:
    optional: true

  &quot;@esbuild/freebsd-x64@0.25.0&quot;:
    optional: true

  &quot;@esbuild/linux-arm64@0.18.20&quot;:
    optional: true

  &quot;@esbuild/linux-arm64@0.19.12&quot;:
    optional: true

  &quot;@esbuild/linux-arm64@0.24.2&quot;:
    optional: true

  &quot;@esbuild/linux-arm64@0.25.0&quot;:
    optional: true

  &quot;@esbuild/linux-arm@0.18.20&quot;:
    optional: true

  &quot;@esbuild/linux-arm@0.19.12&quot;:
    optional: true

  &quot;@esbuild/linux-arm@0.24.2&quot;:
    optional: true

  &quot;@esbuild/linux-arm@0.25.0&quot;:
    optional: true

  &quot;@esbuild/linux-ia32@0.18.20&quot;:
    optional: true

  &quot;@esbuild/linux-ia32@0.19.12&quot;:
    optional: true

  &quot;@esbuild/linux-ia32@0.24.2&quot;:
    optional: true

  &quot;@esbuild/linux-ia32@0.25.0&quot;:
    optional: true

  &quot;@esbuild/linux-loong64@0.18.20&quot;:
    optional: true

  &quot;@esbuild/linux-loong64@0.19.12&quot;:
    optional: true

  &quot;@esbuild/linux-loong64@0.24.2&quot;:
    optional: true

  &quot;@esbuild/linux-loong64@0.25.0&quot;:
    optional: true

  &quot;@esbuild/linux-mips64el@0.18.20&quot;:
    optional: true

  &quot;@esbuild/linux-mips64el@0.19.12&quot;:
    optional: true

  &quot;@esbuild/linux-mips64el@0.24.2&quot;:
    optional: true

  &quot;@esbuild/linux-mips64el@0.25.0&quot;:
    optional: true

  &quot;@esbuild/linux-ppc64@0.18.20&quot;:
    optional: true

  &quot;@esbuild/linux-ppc64@0.19.12&quot;:
    optional: true

  &quot;@esbuild/linux-ppc64@0.24.2&quot;:
    optional: true

  &quot;@esbuild/linux-ppc64@0.25.0&quot;:
    optional: true

  &quot;@esbuild/linux-riscv64@0.18.20&quot;:
    optional: true

  &quot;@esbuild/linux-riscv64@0.19.12&quot;:
    optional: true

  &quot;@esbuild/linux-riscv64@0.24.2&quot;:
    optional: true

  &quot;@esbuild/linux-riscv64@0.25.0&quot;:
    optional: true

  &quot;@esbuild/linux-s390x@0.18.20&quot;:
    optional: true

  &quot;@esbuild/linux-s390x@0.19.12&quot;:
    optional: true

  &quot;@esbuild/linux-s390x@0.24.2&quot;:
    optional: true

  &quot;@esbuild/linux-s390x@0.25.0&quot;:
    optional: true

  &quot;@esbuild/linux-x64@0.18.20&quot;:
    optional: true

  &quot;@esbuild/linux-x64@0.19.12&quot;:
    optional: true

  &quot;@esbuild/linux-x64@0.24.2&quot;:
    optional: true

  &quot;@esbuild/linux-x64@0.25.0&quot;:
    optional: true

  &quot;@esbuild/netbsd-arm64@0.24.2&quot;:
    optional: true

  &quot;@esbuild/netbsd-arm64@0.25.0&quot;:
    optional: true

  &quot;@esbuild/netbsd-x64@0.18.20&quot;:
    optional: true

  &quot;@esbuild/netbsd-x64@0.19.12&quot;:
    optional: true

  &quot;@esbuild/netbsd-x64@0.24.2&quot;:
    optional: true

  &quot;@esbuild/netbsd-x64@0.25.0&quot;:
    optional: true

  &quot;@esbuild/openbsd-arm64@0.24.2&quot;:
    optional: true

  &quot;@esbuild/openbsd-arm64@0.25.0&quot;:
    optional: true

  &quot;@esbuild/openbsd-x64@0.18.20&quot;:
    optional: true

  &quot;@esbuild/openbsd-x64@0.19.12&quot;:
    optional: true

  &quot;@esbuild/openbsd-x64@0.24.2&quot;:
    optional: true

  &quot;@esbuild/openbsd-x64@0.25.0&quot;:
    optional: true

  &quot;@esbuild/sunos-x64@0.18.20&quot;:
    optional: true

  &quot;@esbuild/sunos-x64@0.19.12&quot;:
    optional: true

  &quot;@esbuild/sunos-x64@0.24.2&quot;:
    optional: true

  &quot;@esbuild/sunos-x64@0.25.0&quot;:
    optional: true

  &quot;@esbuild/win32-arm64@0.18.20&quot;:
    optional: true

  &quot;@esbuild/win32-arm64@0.19.12&quot;:
    optional: true

  &quot;@esbuild/win32-arm64@0.24.2&quot;:
    optional: true

  &quot;@esbuild/win32-arm64@0.25.0&quot;:
    optional: true

  &quot;@esbuild/win32-ia32@0.18.20&quot;:
    optional: true

  &quot;@esbuild/win32-ia32@0.19.12&quot;:
    optional: true

  &quot;@esbuild/win32-ia32@0.24.2&quot;:
    optional: true

  &quot;@esbuild/win32-ia32@0.25.0&quot;:
    optional: true

  &quot;@esbuild/win32-x64@0.18.20&quot;:
    optional: true

  &quot;@esbuild/win32-x64@0.19.12&quot;:
    optional: true

  &quot;@esbuild/win32-x64@0.24.2&quot;:
    optional: true

  &quot;@esbuild/win32-x64@0.25.0&quot;:
    optional: true

  &quot;@eslint-community/eslint-utils@4.4.1(eslint@9.21.0(jiti@2.4.2))&quot;:
    dependencies:
      eslint: 9.21.0(jiti@2.4.2)
      eslint-visitor-keys: 3.4.3

  &quot;@eslint-community/regexpp@4.12.1&quot;: {}

  &quot;@eslint/config-array@0.19.2&quot;:
    dependencies:
      &quot;@eslint/object-schema&quot;: 2.1.6
      debug: 4.4.0
      minimatch: 3.1.2
    transitivePeerDependencies:
      - supports-color

  &quot;@eslint/core@0.12.0&quot;:
    dependencies:
      &quot;@types/json-schema&quot;: 7.0.15

  &quot;@eslint/eslintrc@3.3.0&quot;:
    dependencies:
      ajv: 6.12.6
      debug: 4.4.0
      espree: 10.3.0
      globals: 14.0.0
      ignore: 5.3.2
      import-fresh: 3.3.1
      js-yaml: 4.1.0
      minimatch: 3.1.2
      strip-json-comments: 3.1.1
    transitivePeerDependencies:
      - supports-color

  &quot;@eslint/js@9.21.0&quot;: {}

  &quot;@eslint/object-schema@2.1.6&quot;: {}

  &quot;@eslint/plugin-kit@0.2.7&quot;:
    dependencies:
      &quot;@eslint/core&quot;: 0.12.0
      levn: 0.4.1

  &quot;@humanfs/core@0.19.1&quot;: {}

  &quot;@humanfs/node@0.16.6&quot;:
    dependencies:
      &quot;@humanfs/core&quot;: 0.19.1
      &quot;@humanwhocodes/retry&quot;: 0.3.1

  &quot;@humanwhocodes/module-importer@1.0.1&quot;: {}

  &quot;@humanwhocodes/retry@0.3.1&quot;: {}

  &quot;@humanwhocodes/retry@0.4.2&quot;: {}

  &quot;@jridgewell/gen-mapping@0.3.8&quot;:
    dependencies:
      &quot;@jridgewell/set-array&quot;: 1.2.1
      &quot;@jridgewell/sourcemap-codec&quot;: 1.5.0
      &quot;@jridgewell/trace-mapping&quot;: 0.3.25

  &quot;@jridgewell/resolve-uri@3.1.2&quot;: {}

  &quot;@jridgewell/set-array@1.2.1&quot;: {}

  &quot;@jridgewell/sourcemap-codec@1.5.0&quot;: {}

  &quot;@jridgewell/trace-mapping@0.3.25&quot;:
    dependencies:
      &quot;@jridgewell/resolve-uri&quot;: 3.1.2
      &quot;@jridgewell/sourcemap-codec&quot;: 1.5.0

  &quot;@nodelib/fs.scandir@2.1.5&quot;:
    dependencies:
      &quot;@nodelib/fs.stat&quot;: 2.0.5
      run-parallel: 1.2.0

  &quot;@nodelib/fs.stat@2.0.5&quot;: {}

  &quot;@nodelib/fs.walk@1.2.8&quot;:
    dependencies:
      &quot;@nodelib/fs.scandir&quot;: 2.1.5
      fastq: 1.19.0

  &quot;@rollup/rollup-android-arm-eabi@4.34.8&quot;:
    optional: true

  &quot;@rollup/rollup-android-arm64@4.34.8&quot;:
    optional: true

  &quot;@rollup/rollup-darwin-arm64@4.34.8&quot;:
    optional: true

  &quot;@rollup/rollup-darwin-x64@4.34.8&quot;:
    optional: true

  &quot;@rollup/rollup-freebsd-arm64@4.34.8&quot;:
    optional: true

  &quot;@rollup/rollup-freebsd-x64@4.34.8&quot;:
    optional: true

  &quot;@rollup/rollup-linux-arm-gnueabihf@4.34.8&quot;:
    optional: true

  &quot;@rollup/rollup-linux-arm-musleabihf@4.34.8&quot;:
    optional: true

  &quot;@rollup/rollup-linux-arm64-gnu@4.34.8&quot;:
    optional: true

  &quot;@rollup/rollup-linux-arm64-musl@4.34.8&quot;:
    optional: true

  &quot;@rollup/rollup-linux-loongarch64-gnu@4.34.8&quot;:
    optional: true

  &quot;@rollup/rollup-linux-powerpc64le-gnu@4.34.8&quot;:
    optional: true

  &quot;@rollup/rollup-linux-riscv64-gnu@4.34.8&quot;:
    optional: true

  &quot;@rollup/rollup-linux-s390x-gnu@4.34.8&quot;:
    optional: true

  &quot;@rollup/rollup-linux-x64-gnu@4.34.8&quot;:
    optional: true

  &quot;@rollup/rollup-linux-x64-musl@4.34.8&quot;:
    optional: true

  &quot;@rollup/rollup-win32-arm64-msvc@4.34.8&quot;:
    optional: true

  &quot;@rollup/rollup-win32-ia32-msvc@4.34.8&quot;:
    optional: true

  &quot;@rollup/rollup-win32-x64-msvc@4.34.8&quot;:
    optional: true

  &quot;@tailwindcss/node@4.0.8&quot;:
    dependencies:
      enhanced-resolve: 5.18.1
      jiti: 2.4.2
      tailwindcss: 4.0.8

  &quot;@tailwindcss/oxide-android-arm64@4.0.8&quot;:
    optional: true

  &quot;@tailwindcss/oxide-darwin-arm64@4.0.8&quot;:
    optional: true

  &quot;@tailwindcss/oxide-darwin-x64@4.0.8&quot;:
    optional: true

  &quot;@tailwindcss/oxide-freebsd-x64@4.0.8&quot;:
    optional: true

  &quot;@tailwindcss/oxide-linux-arm-gnueabihf@4.0.8&quot;:
    optional: true

  &quot;@tailwindcss/oxide-linux-arm64-gnu@4.0.8&quot;:
    optional: true

  &quot;@tailwindcss/oxide-linux-arm64-musl@4.0.8&quot;:
    optional: true

  &quot;@tailwindcss/oxide-linux-x64-gnu@4.0.8&quot;:
    optional: true

  &quot;@tailwindcss/oxide-linux-x64-musl@4.0.8&quot;:
    optional: true

  &quot;@tailwindcss/oxide-win32-arm64-msvc@4.0.8&quot;:
    optional: true

  &quot;@tailwindcss/oxide-win32-x64-msvc@4.0.8&quot;:
    optional: true

  &quot;@tailwindcss/oxide@4.0.8&quot;:
    optionalDependencies:
      &quot;@tailwindcss/oxide-android-arm64&quot;: 4.0.8
      &quot;@tailwindcss/oxide-darwin-arm64&quot;: 4.0.8
      &quot;@tailwindcss/oxide-darwin-x64&quot;: 4.0.8
      &quot;@tailwindcss/oxide-freebsd-x64&quot;: 4.0.8
      &quot;@tailwindcss/oxide-linux-arm-gnueabihf&quot;: 4.0.8
      &quot;@tailwindcss/oxide-linux-arm64-gnu&quot;: 4.0.8
      &quot;@tailwindcss/oxide-linux-arm64-musl&quot;: 4.0.8
      &quot;@tailwindcss/oxide-linux-x64-gnu&quot;: 4.0.8
      &quot;@tailwindcss/oxide-linux-x64-musl&quot;: 4.0.8
      &quot;@tailwindcss/oxide-win32-arm64-msvc&quot;: 4.0.8
      &quot;@tailwindcss/oxide-win32-x64-msvc&quot;: 4.0.8

  &quot;@tailwindcss/vite@4.0.8(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(lightningcss@1.29.1)(tsx@4.19.3))&quot;:
    dependencies:
      &quot;@tailwindcss/node&quot;: 4.0.8
      &quot;@tailwindcss/oxide&quot;: 4.0.8
      lightningcss: 1.29.1
      tailwindcss: 4.0.8
      vite: 6.1.1(@types/node@22.13.5)(jiti@2.4.2)(lightningcss@1.29.1)(tsx@4.19.3)

  &quot;@types/babel__core@7.20.5&quot;:
    dependencies:
      &quot;@babel/parser&quot;: 7.26.9
      &quot;@babel/types&quot;: 7.26.9
      &quot;@types/babel__generator&quot;: 7.6.8
      &quot;@types/babel__template&quot;: 7.4.4
      &quot;@types/babel__traverse&quot;: 7.20.6

  &quot;@types/babel__generator@7.6.8&quot;:
    dependencies:
      &quot;@babel/types&quot;: 7.26.9

  &quot;@types/babel__template@7.4.4&quot;:
    dependencies:
      &quot;@babel/parser&quot;: 7.26.9
      &quot;@babel/types&quot;: 7.26.9

  &quot;@types/babel__traverse@7.20.6&quot;:
    dependencies:
      &quot;@babel/types&quot;: 7.26.9

  &quot;@types/body-parser@1.19.5&quot;:
    dependencies:
      &quot;@types/connect&quot;: 3.4.38
      &quot;@types/node&quot;: 22.13.5

  &quot;@types/connect@3.4.38&quot;:
    dependencies:
      &quot;@types/node&quot;: 22.13.5

  &quot;@types/cors@2.8.17&quot;:
    dependencies:
      &quot;@types/node&quot;: 22.13.5

  &quot;@types/estree@1.0.6&quot;: {}

  &quot;@types/express-serve-static-core@4.19.6&quot;:
    dependencies:
      &quot;@types/node&quot;: 22.13.5
      &quot;@types/qs&quot;: 6.9.18
      &quot;@types/range-parser&quot;: 1.2.7
      &quot;@types/send&quot;: 0.17.4

  &quot;@types/express@4.17.21&quot;:
    dependencies:
      &quot;@types/body-parser&quot;: 1.19.5
      &quot;@types/express-serve-static-core&quot;: 4.19.6
      &quot;@types/qs&quot;: 6.9.18
      &quot;@types/serve-static&quot;: 1.15.7

  &quot;@types/http-errors@2.0.4&quot;: {}

  &quot;@types/json-schema@7.0.15&quot;: {}

  &quot;@types/mime@1.3.5&quot;: {}

  &quot;@types/node@22.13.5&quot;:
    dependencies:
      undici-types: 6.20.0

  &quot;@types/pg@8.11.11&quot;:
    dependencies:
      &quot;@types/node&quot;: 22.13.5
      pg-protocol: 1.7.1
      pg-types: 4.0.2

  &quot;@types/qs@6.9.18&quot;: {}

  &quot;@types/range-parser@1.2.7&quot;: {}

  &quot;@types/react-dom@19.0.4(@types/react@19.0.10)&quot;:
    dependencies:
      &quot;@types/react&quot;: 19.0.10

  &quot;@types/react@19.0.10&quot;:
    dependencies:
      csstype: 3.1.3

  &quot;@types/send@0.17.4&quot;:
    dependencies:
      &quot;@types/mime&quot;: 1.3.5
      &quot;@types/node&quot;: 22.13.5

  &quot;@types/serve-static@1.15.7&quot;:
    dependencies:
      &quot;@types/http-errors&quot;: 2.0.4
      &quot;@types/node&quot;: 22.13.5
      &quot;@types/send&quot;: 0.17.4

  &quot;@types/use-sync-external-store@0.0.6&quot;: {}

  &quot;@typescript-eslint/eslint-plugin@8.25.0(@typescript-eslint/parser@8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)&quot;:
    dependencies:
      &quot;@eslint-community/regexpp&quot;: 4.12.1
      &quot;@typescript-eslint/parser&quot;: 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)
      &quot;@typescript-eslint/scope-manager&quot;: 8.25.0
      &quot;@typescript-eslint/type-utils&quot;: 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)
      &quot;@typescript-eslint/utils&quot;: 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)
      &quot;@typescript-eslint/visitor-keys&quot;: 8.25.0
      eslint: 9.21.0(jiti@2.4.2)
      graphemer: 1.4.0
      ignore: 5.3.2
      natural-compare: 1.4.0
      ts-api-utils: 2.0.1(typescript@5.7.3)
      typescript: 5.7.3
    transitivePeerDependencies:
      - supports-color

  &quot;@typescript-eslint/parser@8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)&quot;:
    dependencies:
      &quot;@typescript-eslint/scope-manager&quot;: 8.25.0
      &quot;@typescript-eslint/types&quot;: 8.25.0
      &quot;@typescript-eslint/typescript-estree&quot;: 8.25.0(typescript@5.7.3)
      &quot;@typescript-eslint/visitor-keys&quot;: 8.25.0
      debug: 4.4.0
      eslint: 9.21.0(jiti@2.4.2)
      typescript: 5.7.3
    transitivePeerDependencies:
      - supports-color

  &quot;@typescript-eslint/scope-manager@8.25.0&quot;:
    dependencies:
      &quot;@typescript-eslint/types&quot;: 8.25.0
      &quot;@typescript-eslint/visitor-keys&quot;: 8.25.0

  &quot;@typescript-eslint/type-utils@8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)&quot;:
    dependencies:
      &quot;@typescript-eslint/typescript-estree&quot;: 8.25.0(typescript@5.7.3)
      &quot;@typescript-eslint/utils&quot;: 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)
      debug: 4.4.0
      eslint: 9.21.0(jiti@2.4.2)
      ts-api-utils: 2.0.1(typescript@5.7.3)
      typescript: 5.7.3
    transitivePeerDependencies:
      - supports-color

  &quot;@typescript-eslint/types@8.25.0&quot;: {}

  &quot;@typescript-eslint/typescript-estree@8.25.0(typescript@5.7.3)&quot;:
    dependencies:
      &quot;@typescript-eslint/types&quot;: 8.25.0
      &quot;@typescript-eslint/visitor-keys&quot;: 8.25.0
      debug: 4.4.0
      fast-glob: 3.3.3
      is-glob: 4.0.3
      minimatch: 9.0.5
      semver: 7.7.1
      ts-api-utils: 2.0.1(typescript@5.7.3)
      typescript: 5.7.3
    transitivePeerDependencies:
      - supports-color

  &quot;@typescript-eslint/utils@8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)&quot;:
    dependencies:
      &quot;@eslint-community/eslint-utils&quot;: 4.4.1(eslint@9.21.0(jiti@2.4.2))
      &quot;@typescript-eslint/scope-manager&quot;: 8.25.0
      &quot;@typescript-eslint/types&quot;: 8.25.0
      &quot;@typescript-eslint/typescript-estree&quot;: 8.25.0(typescript@5.7.3)
      eslint: 9.21.0(jiti@2.4.2)
      typescript: 5.7.3
    transitivePeerDependencies:
      - supports-color

  &quot;@typescript-eslint/visitor-keys@8.25.0&quot;:
    dependencies:
      &quot;@typescript-eslint/types&quot;: 8.25.0
      eslint-visitor-keys: 4.2.0

  &quot;@vitejs/plugin-react@4.3.4(vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(lightningcss@1.29.1)(tsx@4.19.3))&quot;:
    dependencies:
      &quot;@babel/core&quot;: 7.26.9
      &quot;@babel/plugin-transform-react-jsx-self&quot;: 7.25.9(@babel/core@7.26.9)
      &quot;@babel/plugin-transform-react-jsx-source&quot;: 7.25.9(@babel/core@7.26.9)
      &quot;@types/babel__core&quot;: 7.20.5
      react-refresh: 0.14.2
      vite: 6.1.1(@types/node@22.13.5)(jiti@2.4.2)(lightningcss@1.29.1)(tsx@4.19.3)
    transitivePeerDependencies:
      - supports-color

  accepts@1.3.8:
    dependencies:
      mime-types: 2.1.35
      negotiator: 0.6.3

  acorn-jsx@5.3.2(acorn@8.14.0):
    dependencies:
      acorn: 8.14.0

  acorn@8.14.0: {}

  ajv@6.12.6:
    dependencies:
      fast-deep-equal: 3.1.3
      fast-json-stable-stringify: 2.1.0
      json-schema-traverse: 0.4.1
      uri-js: 4.4.1

  ansi-regex@5.0.1: {}

  ansi-styles@4.3.0:
    dependencies:
      color-convert: 2.0.1

  argparse@2.0.1: {}

  array-flatten@1.1.1: {}

  balanced-match@1.0.2: {}

  body-parser@1.20.3:
    dependencies:
      bytes: 3.1.2
      content-type: 1.0.5
      debug: 2.6.9
      depd: 2.0.0
      destroy: 1.2.0
      http-errors: 2.0.0
      iconv-lite: 0.4.24
      on-finished: 2.4.1
      qs: 6.13.0
      raw-body: 2.5.2
      type-is: 1.6.18
      unpipe: 1.0.0
    transitivePeerDependencies:
      - supports-color

  brace-expansion@1.1.11:
    dependencies:
      balanced-match: 1.0.2
      concat-map: 0.0.1

  brace-expansion@2.0.1:
    dependencies:
      balanced-match: 1.0.2

  braces@3.0.3:
    dependencies:
      fill-range: 7.1.1

  browserslist@4.24.4:
    dependencies:
      caniuse-lite: 1.0.30001700
      electron-to-chromium: 1.5.104
      node-releases: 2.0.19
      update-browserslist-db: 1.1.2(browserslist@4.24.4)

  buffer-from@1.1.2: {}

  bytes@3.1.2: {}

  call-bind-apply-helpers@1.0.2:
    dependencies:
      es-errors: 1.3.0
      function-bind: 1.1.2

  call-bound@1.0.3:
    dependencies:
      call-bind-apply-helpers: 1.0.2
      get-intrinsic: 1.3.0

  callsites@3.1.0: {}

  caniuse-lite@1.0.30001700: {}

  chalk@4.1.2:
    dependencies:
      ansi-styles: 4.3.0
      supports-color: 7.2.0

  cliui@8.0.1:
    dependencies:
      string-width: 4.2.3
      strip-ansi: 6.0.1
      wrap-ansi: 7.0.0

  color-convert@2.0.1:
    dependencies:
      color-name: 1.1.4

  color-name@1.1.4: {}

  concat-map@0.0.1: {}

  concurrently@9.1.2:
    dependencies:
      chalk: 4.1.2
      lodash: 4.17.21
      rxjs: 7.8.2
      shell-quote: 1.8.2
      supports-color: 8.1.1
      tree-kill: 1.2.2
      yargs: 17.7.2

  content-disposition@0.5.4:
    dependencies:
      safe-buffer: 5.2.1

  content-type@1.0.5: {}

  convert-source-map@2.0.0: {}

  cookie-signature@1.0.6: {}

  cookie@0.7.1: {}

  cors@2.8.5:
    dependencies:
      object-assign: 4.1.1
      vary: 1.1.2

  cross-spawn@7.0.6:
    dependencies:
      path-key: 3.1.1
      shebang-command: 2.0.0
      which: 2.0.2

  csstype@3.1.3: {}

  debug@2.6.9:
    dependencies:
      ms: 2.0.0

  debug@4.4.0:
    dependencies:
      ms: 2.1.3

  deep-is@0.1.4: {}

  depd@2.0.0: {}

  destroy@1.2.0: {}

  detect-libc@1.0.3: {}

  dotenv@16.4.7: {}

  drizzle-kit@0.30.4:
    dependencies:
      &quot;@drizzle-team/brocli&quot;: 0.10.2
      &quot;@esbuild-kit/esm-loader&quot;: 2.6.5
      esbuild: 0.19.12
      esbuild-register: 3.6.0(esbuild@0.19.12)
    transitivePeerDependencies:
      - supports-color

  drizzle-orm@0.39.3(@types/pg@8.11.11)(kysely@0.27.5)(pg@8.13.3):
    optionalDependencies:
      &quot;@types/pg&quot;: 8.11.11
      kysely: 0.27.5
      pg: 8.13.3

  drizzle-zod@0.7.0(drizzle-orm@0.39.3(@types/pg@8.11.11)(kysely@0.27.5)(pg@8.13.3))(zod@3.24.2):
    dependencies:
      drizzle-orm: 0.39.3(@types/pg@8.11.11)(kysely@0.27.5)(pg@8.13.3)
      zod: 3.24.2

  dunder-proto@1.0.1:
    dependencies:
      call-bind-apply-helpers: 1.0.2
      es-errors: 1.3.0
      gopd: 1.2.0

  ee-first@1.1.1: {}

  electron-to-chromium@1.5.104: {}

  emoji-regex@8.0.0: {}

  encodeurl@1.0.2: {}

  encodeurl@2.0.0: {}

  enhanced-resolve@5.18.1:
    dependencies:
      graceful-fs: 4.2.11
      tapable: 2.2.1

  es-define-property@1.0.1: {}

  es-errors@1.3.0: {}

  es-object-atoms@1.1.1:
    dependencies:
      es-errors: 1.3.0

  esbuild-register@3.6.0(esbuild@0.19.12):
    dependencies:
      debug: 4.4.0
      esbuild: 0.19.12
    transitivePeerDependencies:
      - supports-color

  esbuild@0.18.20:
    optionalDependencies:
      &quot;@esbuild/android-arm&quot;: 0.18.20
      &quot;@esbuild/android-arm64&quot;: 0.18.20
      &quot;@esbuild/android-x64&quot;: 0.18.20
      &quot;@esbuild/darwin-arm64&quot;: 0.18.20
      &quot;@esbuild/darwin-x64&quot;: 0.18.20
      &quot;@esbuild/freebsd-arm64&quot;: 0.18.20
      &quot;@esbuild/freebsd-x64&quot;: 0.18.20
      &quot;@esbuild/linux-arm&quot;: 0.18.20
      &quot;@esbuild/linux-arm64&quot;: 0.18.20
      &quot;@esbuild/linux-ia32&quot;: 0.18.20
      &quot;@esbuild/linux-loong64&quot;: 0.18.20
      &quot;@esbuild/linux-mips64el&quot;: 0.18.20
      &quot;@esbuild/linux-ppc64&quot;: 0.18.20
      &quot;@esbuild/linux-riscv64&quot;: 0.18.20
      &quot;@esbuild/linux-s390x&quot;: 0.18.20
      &quot;@esbuild/linux-x64&quot;: 0.18.20
      &quot;@esbuild/netbsd-x64&quot;: 0.18.20
      &quot;@esbuild/openbsd-x64&quot;: 0.18.20
      &quot;@esbuild/sunos-x64&quot;: 0.18.20
      &quot;@esbuild/win32-arm64&quot;: 0.18.20
      &quot;@esbuild/win32-ia32&quot;: 0.18.20
      &quot;@esbuild/win32-x64&quot;: 0.18.20

  esbuild@0.19.12:
    optionalDependencies:
      &quot;@esbuild/aix-ppc64&quot;: 0.19.12
      &quot;@esbuild/android-arm&quot;: 0.19.12
      &quot;@esbuild/android-arm64&quot;: 0.19.12
      &quot;@esbuild/android-x64&quot;: 0.19.12
      &quot;@esbuild/darwin-arm64&quot;: 0.19.12
      &quot;@esbuild/darwin-x64&quot;: 0.19.12
      &quot;@esbuild/freebsd-arm64&quot;: 0.19.12
      &quot;@esbuild/freebsd-x64&quot;: 0.19.12
      &quot;@esbuild/linux-arm&quot;: 0.19.12
      &quot;@esbuild/linux-arm64&quot;: 0.19.12
      &quot;@esbuild/linux-ia32&quot;: 0.19.12
      &quot;@esbuild/linux-loong64&quot;: 0.19.12
      &quot;@esbuild/linux-mips64el&quot;: 0.19.12
      &quot;@esbuild/linux-ppc64&quot;: 0.19.12
      &quot;@esbuild/linux-riscv64&quot;: 0.19.12
      &quot;@esbuild/linux-s390x&quot;: 0.19.12
      &quot;@esbuild/linux-x64&quot;: 0.19.12
      &quot;@esbuild/netbsd-x64&quot;: 0.19.12
      &quot;@esbuild/openbsd-x64&quot;: 0.19.12
      &quot;@esbuild/sunos-x64&quot;: 0.19.12
      &quot;@esbuild/win32-arm64&quot;: 0.19.12
      &quot;@esbuild/win32-ia32&quot;: 0.19.12
      &quot;@esbuild/win32-x64&quot;: 0.19.12

  esbuild@0.24.2:
    optionalDependencies:
      &quot;@esbuild/aix-ppc64&quot;: 0.24.2
      &quot;@esbuild/android-arm&quot;: 0.24.2
      &quot;@esbuild/android-arm64&quot;: 0.24.2
      &quot;@esbuild/android-x64&quot;: 0.24.2
      &quot;@esbuild/darwin-arm64&quot;: 0.24.2
      &quot;@esbuild/darwin-x64&quot;: 0.24.2
      &quot;@esbuild/freebsd-arm64&quot;: 0.24.2
      &quot;@esbuild/freebsd-x64&quot;: 0.24.2
      &quot;@esbuild/linux-arm&quot;: 0.24.2
      &quot;@esbuild/linux-arm64&quot;: 0.24.2
      &quot;@esbuild/linux-ia32&quot;: 0.24.2
      &quot;@esbuild/linux-loong64&quot;: 0.24.2
      &quot;@esbuild/linux-mips64el&quot;: 0.24.2
      &quot;@esbuild/linux-ppc64&quot;: 0.24.2
      &quot;@esbuild/linux-riscv64&quot;: 0.24.2
      &quot;@esbuild/linux-s390x&quot;: 0.24.2
      &quot;@esbuild/linux-x64&quot;: 0.24.2
      &quot;@esbuild/netbsd-arm64&quot;: 0.24.2
      &quot;@esbuild/netbsd-x64&quot;: 0.24.2
      &quot;@esbuild/openbsd-arm64&quot;: 0.24.2
      &quot;@esbuild/openbsd-x64&quot;: 0.24.2
      &quot;@esbuild/sunos-x64&quot;: 0.24.2
      &quot;@esbuild/win32-arm64&quot;: 0.24.2
      &quot;@esbuild/win32-ia32&quot;: 0.24.2
      &quot;@esbuild/win32-x64&quot;: 0.24.2

  esbuild@0.25.0:
    optionalDependencies:
      &quot;@esbuild/aix-ppc64&quot;: 0.25.0
      &quot;@esbuild/android-arm&quot;: 0.25.0
      &quot;@esbuild/android-arm64&quot;: 0.25.0
      &quot;@esbuild/android-x64&quot;: 0.25.0
      &quot;@esbuild/darwin-arm64&quot;: 0.25.0
      &quot;@esbuild/darwin-x64&quot;: 0.25.0
      &quot;@esbuild/freebsd-arm64&quot;: 0.25.0
      &quot;@esbuild/freebsd-x64&quot;: 0.25.0
      &quot;@esbuild/linux-arm&quot;: 0.25.0
      &quot;@esbuild/linux-arm64&quot;: 0.25.0
      &quot;@esbuild/linux-ia32&quot;: 0.25.0
      &quot;@esbuild/linux-loong64&quot;: 0.25.0
      &quot;@esbuild/linux-mips64el&quot;: 0.25.0
      &quot;@esbuild/linux-ppc64&quot;: 0.25.0
      &quot;@esbuild/linux-riscv64&quot;: 0.25.0
      &quot;@esbuild/linux-s390x&quot;: 0.25.0
      &quot;@esbuild/linux-x64&quot;: 0.25.0
      &quot;@esbuild/netbsd-arm64&quot;: 0.25.0
      &quot;@esbuild/netbsd-x64&quot;: 0.25.0
      &quot;@esbuild/openbsd-arm64&quot;: 0.25.0
      &quot;@esbuild/openbsd-x64&quot;: 0.25.0
      &quot;@esbuild/sunos-x64&quot;: 0.25.0
      &quot;@esbuild/win32-arm64&quot;: 0.25.0
      &quot;@esbuild/win32-ia32&quot;: 0.25.0
      &quot;@esbuild/win32-x64&quot;: 0.25.0

  escalade@3.2.0: {}

  escape-html@1.0.3: {}

  escape-string-regexp@4.0.0: {}

  eslint-plugin-react-hooks@5.1.0(eslint@9.21.0(jiti@2.4.2)):
    dependencies:
      eslint: 9.21.0(jiti@2.4.2)

  eslint-plugin-react-refresh@0.4.19(eslint@9.21.0(jiti@2.4.2)):
    dependencies:
      eslint: 9.21.0(jiti@2.4.2)

  eslint-scope@8.2.0:
    dependencies:
      esrecurse: 4.3.0
      estraverse: 5.3.0

  eslint-visitor-keys@3.4.3: {}

  eslint-visitor-keys@4.2.0: {}

  eslint@9.21.0(jiti@2.4.2):
    dependencies:
      &quot;@eslint-community/eslint-utils&quot;: 4.4.1(eslint@9.21.0(jiti@2.4.2))
      &quot;@eslint-community/regexpp&quot;: 4.12.1
      &quot;@eslint/config-array&quot;: 0.19.2
      &quot;@eslint/core&quot;: 0.12.0
      &quot;@eslint/eslintrc&quot;: 3.3.0
      &quot;@eslint/js&quot;: 9.21.0
      &quot;@eslint/plugin-kit&quot;: 0.2.7
      &quot;@humanfs/node&quot;: 0.16.6
      &quot;@humanwhocodes/module-importer&quot;: 1.0.1
      &quot;@humanwhocodes/retry&quot;: 0.4.2
      &quot;@types/estree&quot;: 1.0.6
      &quot;@types/json-schema&quot;: 7.0.15
      ajv: 6.12.6
      chalk: 4.1.2
      cross-spawn: 7.0.6
      debug: 4.4.0
      escape-string-regexp: 4.0.0
      eslint-scope: 8.2.0
      eslint-visitor-keys: 4.2.0
      espree: 10.3.0
      esquery: 1.6.0
      esutils: 2.0.3
      fast-deep-equal: 3.1.3
      file-entry-cache: 8.0.0
      find-up: 5.0.0
      glob-parent: 6.0.2
      ignore: 5.3.2
      imurmurhash: 0.1.4
      is-glob: 4.0.3
      json-stable-stringify-without-jsonify: 1.0.1
      lodash.merge: 4.6.2
      minimatch: 3.1.2
      natural-compare: 1.4.0
      optionator: 0.9.4
    optionalDependencies:
      jiti: 2.4.2
    transitivePeerDependencies:
      - supports-color

  espree@10.3.0:
    dependencies:
      acorn: 8.14.0
      acorn-jsx: 5.3.2(acorn@8.14.0)
      eslint-visitor-keys: 4.2.0

  esquery@1.6.0:
    dependencies:
      estraverse: 5.3.0

  esrecurse@4.3.0:
    dependencies:
      estraverse: 5.3.0

  estraverse@5.3.0: {}

  esutils@2.0.3: {}

  etag@1.8.1: {}

  express@4.21.2:
    dependencies:
      accepts: 1.3.8
      array-flatten: 1.1.1
      body-parser: 1.20.3
      content-disposition: 0.5.4
      content-type: 1.0.5
      cookie: 0.7.1
      cookie-signature: 1.0.6
      debug: 2.6.9
      depd: 2.0.0
      encodeurl: 2.0.0
      escape-html: 1.0.3
      etag: 1.8.1
      finalhandler: 1.3.1
      fresh: 0.5.2
      http-errors: 2.0.0
      merge-descriptors: 1.0.3
      methods: 1.1.2
      on-finished: 2.4.1
      parseurl: 1.3.3
      path-to-regexp: 0.1.12
      proxy-addr: 2.0.7
      qs: 6.13.0
      range-parser: 1.2.1
      safe-buffer: 5.2.1
      send: 0.19.0
      serve-static: 1.16.2
      setprototypeof: 1.2.0
      statuses: 2.0.1
      type-is: 1.6.18
      utils-merge: 1.0.1
      vary: 1.1.2
    transitivePeerDependencies:
      - supports-color

  fast-deep-equal@3.1.3: {}

  fast-glob@3.3.3:
    dependencies:
      &quot;@nodelib/fs.stat&quot;: 2.0.5
      &quot;@nodelib/fs.walk&quot;: 1.2.8
      glob-parent: 5.1.2
      merge2: 1.4.1
      micromatch: 4.0.8

  fast-json-stable-stringify@2.1.0: {}

  fast-levenshtein@2.0.6: {}

  fastq@1.19.0:
    dependencies:
      reusify: 1.0.4

  file-entry-cache@8.0.0:
    dependencies:
      flat-cache: 4.0.1

  fill-range@7.1.1:
    dependencies:
      to-regex-range: 5.0.1

  finalhandler@1.3.1:
    dependencies:
      debug: 2.6.9
      encodeurl: 2.0.0
      escape-html: 1.0.3
      on-finished: 2.4.1
      parseurl: 1.3.3
      statuses: 2.0.1
      unpipe: 1.0.0
    transitivePeerDependencies:
      - supports-color

  find-up@5.0.0:
    dependencies:
      locate-path: 6.0.0
      path-exists: 4.0.0

  flat-cache@4.0.1:
    dependencies:
      flatted: 3.3.3
      keyv: 4.5.4

  flatted@3.3.3: {}

  forwarded@0.2.0: {}

  fresh@0.5.2: {}

  fsevents@2.3.3:
    optional: true

  function-bind@1.1.2: {}

  gensync@1.0.0-beta.2: {}

  get-caller-file@2.0.5: {}

  get-intrinsic@1.3.0:
    dependencies:
      call-bind-apply-helpers: 1.0.2
      es-define-property: 1.0.1
      es-errors: 1.3.0
      es-object-atoms: 1.1.1
      function-bind: 1.1.2
      get-proto: 1.0.1
      gopd: 1.2.0
      has-symbols: 1.1.0
      hasown: 2.0.2
      math-intrinsics: 1.1.0

  get-proto@1.0.1:
    dependencies:
      dunder-proto: 1.0.1
      es-object-atoms: 1.1.1

  get-tsconfig@4.10.0:
    dependencies:
      resolve-pkg-maps: 1.0.0

  glob-parent@5.1.2:
    dependencies:
      is-glob: 4.0.3

  glob-parent@6.0.2:
    dependencies:
      is-glob: 4.0.3

  globals@11.12.0: {}

  globals@14.0.0: {}

  globals@15.15.0: {}

  gopd@1.2.0: {}

  graceful-fs@4.2.11: {}

  graphemer@1.4.0: {}

  has-flag@4.0.0: {}

  has-symbols@1.1.0: {}

  hasown@2.0.2:
    dependencies:
      function-bind: 1.1.2

  http-errors@2.0.0:
    dependencies:
      depd: 2.0.0
      inherits: 2.0.4
      setprototypeof: 1.2.0
      statuses: 2.0.1
      toidentifier: 1.0.1

  iconv-lite@0.4.24:
    dependencies:
      safer-buffer: 2.1.2

  ignore@5.3.2: {}

  import-fresh@3.3.1:
    dependencies:
      parent-module: 1.0.1
      resolve-from: 4.0.0

  imurmurhash@0.1.4: {}

  inherits@2.0.4: {}

  ipaddr.js@1.9.1: {}

  is-extglob@2.1.1: {}

  is-fullwidth-code-point@3.0.0: {}

  is-glob@4.0.3:
    dependencies:
      is-extglob: 2.1.1

  is-number@7.0.0: {}

  isexe@2.0.0: {}

  jiti@2.4.2: {}

  js-tokens@4.0.0: {}

  js-yaml@4.1.0:
    dependencies:
      argparse: 2.0.1

  jsesc@3.1.0: {}

  json-buffer@3.0.1: {}

  json-schema-traverse@0.4.1: {}

  json-stable-stringify-without-jsonify@1.0.1: {}

  json5@2.2.3: {}

  keyv@4.5.4:
    dependencies:
      json-buffer: 3.0.1

  kysely@0.27.5: {}

  levn@0.4.1:
    dependencies:
      prelude-ls: 1.2.1
      type-check: 0.4.0

  lightningcss-darwin-arm64@1.29.1:
    optional: true

  lightningcss-darwin-x64@1.29.1:
    optional: true

  lightningcss-freebsd-x64@1.29.1:
    optional: true

  lightningcss-linux-arm-gnueabihf@1.29.1:
    optional: true

  lightningcss-linux-arm64-gnu@1.29.1:
    optional: true

  lightningcss-linux-arm64-musl@1.29.1:
    optional: true

  lightningcss-linux-x64-gnu@1.29.1:
    optional: true

  lightningcss-linux-x64-musl@1.29.1:
    optional: true

  lightningcss-win32-arm64-msvc@1.29.1:
    optional: true

  lightningcss-win32-x64-msvc@1.29.1:
    optional: true

  lightningcss@1.29.1:
    dependencies:
      detect-libc: 1.0.3
    optionalDependencies:
      lightningcss-darwin-arm64: 1.29.1
      lightningcss-darwin-x64: 1.29.1
      lightningcss-freebsd-x64: 1.29.1
      lightningcss-linux-arm-gnueabihf: 1.29.1
      lightningcss-linux-arm64-gnu: 1.29.1
      lightningcss-linux-arm64-musl: 1.29.1
      lightningcss-linux-x64-gnu: 1.29.1
      lightningcss-linux-x64-musl: 1.29.1
      lightningcss-win32-arm64-msvc: 1.29.1
      lightningcss-win32-x64-msvc: 1.29.1

  locate-path@6.0.0:
    dependencies:
      p-locate: 5.0.0

  lodash.merge@4.6.2: {}

  lodash@4.17.21: {}

  lru-cache@5.1.1:
    dependencies:
      yallist: 3.1.1

  math-intrinsics@1.1.0: {}

  media-typer@0.3.0: {}

  merge-descriptors@1.0.3: {}

  merge2@1.4.1: {}

  methods@1.1.2: {}

  micromatch@4.0.8:
    dependencies:
      braces: 3.0.3
      picomatch: 2.3.1

  mime-db@1.52.0: {}

  mime-types@2.1.35:
    dependencies:
      mime-db: 1.52.0

  mime@1.6.0: {}

  minimatch@3.1.2:
    dependencies:
      brace-expansion: 1.1.11

  minimatch@9.0.5:
    dependencies:
      brace-expansion: 2.0.1

  mitt@3.0.1: {}

  ms@2.0.0: {}

  ms@2.1.3: {}

  nanoid@3.3.8: {}

  natural-compare@1.4.0: {}

  negotiator@0.6.3: {}

  node-releases@2.0.19: {}

  object-assign@4.1.1: {}

  object-inspect@1.13.4: {}

  obuf@1.1.2: {}

  on-finished@2.4.1:
    dependencies:
      ee-first: 1.1.1

  optionator@0.9.4:
    dependencies:
      deep-is: 0.1.4
      fast-levenshtein: 2.0.6
      levn: 0.4.1
      prelude-ls: 1.2.1
      type-check: 0.4.0
      word-wrap: 1.2.5

  p-limit@3.1.0:
    dependencies:
      yocto-queue: 0.1.0

  p-locate@5.0.0:
    dependencies:
      p-limit: 3.1.0

  parent-module@1.0.1:
    dependencies:
      callsites: 3.1.0

  parseurl@1.3.3: {}

  path-exists@4.0.0: {}

  path-key@3.1.1: {}

  path-to-regexp@0.1.12: {}

  pg-cloudflare@1.1.1:
    optional: true

  pg-connection-string@2.7.0: {}

  pg-int8@1.0.1: {}

  pg-numeric@1.0.2: {}

  pg-pool@3.7.1(pg@8.13.3):
    dependencies:
      pg: 8.13.3

  pg-protocol@1.7.1: {}

  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

  pg-types@4.0.2:
    dependencies:
      pg-int8: 1.0.1
      pg-numeric: 1.0.2
      postgres-array: 3.0.2
      postgres-bytea: 3.0.0
      postgres-date: 2.1.0
      postgres-interval: 3.0.0
      postgres-range: 1.1.4

  pg@8.13.3:
    dependencies:
      pg-connection-string: 2.7.0
      pg-pool: 3.7.1(pg@8.13.3)
      pg-protocol: 1.7.1
      pg-types: 2.2.0
      pgpass: 1.0.5
    optionalDependencies:
      pg-cloudflare: 1.1.1

  pgpass@1.0.5:
    dependencies:
      split2: 4.2.0

  picocolors@1.1.1: {}

  picomatch@2.3.1: {}

  postcss@8.5.3:
    dependencies:
      nanoid: 3.3.8
      picocolors: 1.1.1
      source-map-js: 1.2.1

  postgres-array@2.0.0: {}

  postgres-array@3.0.2: {}

  postgres-bytea@1.0.0: {}

  postgres-bytea@3.0.0:
    dependencies:
      obuf: 1.1.2

  postgres-date@1.0.7: {}

  postgres-date@2.1.0: {}

  postgres-interval@1.2.0:
    dependencies:
      xtend: 4.0.2

  postgres-interval@3.0.0: {}

  postgres-range@1.1.4: {}

  prelude-ls@1.2.1: {}

  proxy-addr@2.0.7:
    dependencies:
      forwarded: 0.2.0
      ipaddr.js: 1.9.1

  punycode@2.3.1: {}

  qs@6.13.0:
    dependencies:
      side-channel: 1.1.0

  queue-microtask@1.2.3: {}

  range-parser@1.2.1: {}

  raw-body@2.5.2:
    dependencies:
      bytes: 3.1.2
      http-errors: 2.0.0
      iconv-lite: 0.4.24
      unpipe: 1.0.0

  react-dom@19.0.0(react@19.0.0):
    dependencies:
      react: 19.0.0
      scheduler: 0.25.0

  react-refresh@0.14.2: {}

  react@19.0.0: {}

  require-directory@2.1.1: {}

  resolve-from@4.0.0: {}

  resolve-pkg-maps@1.0.0: {}

  reusify@1.0.4: {}

  rollup@4.34.8:
    dependencies:
      &quot;@types/estree&quot;: 1.0.6
    optionalDependencies:
      &quot;@rollup/rollup-android-arm-eabi&quot;: 4.34.8
      &quot;@rollup/rollup-android-arm64&quot;: 4.34.8
      &quot;@rollup/rollup-darwin-arm64&quot;: 4.34.8
      &quot;@rollup/rollup-darwin-x64&quot;: 4.34.8
      &quot;@rollup/rollup-freebsd-arm64&quot;: 4.34.8
      &quot;@rollup/rollup-freebsd-x64&quot;: 4.34.8
      &quot;@rollup/rollup-linux-arm-gnueabihf&quot;: 4.34.8
      &quot;@rollup/rollup-linux-arm-musleabihf&quot;: 4.34.8
      &quot;@rollup/rollup-linux-arm64-gnu&quot;: 4.34.8
      &quot;@rollup/rollup-linux-arm64-musl&quot;: 4.34.8
      &quot;@rollup/rollup-linux-loongarch64-gnu&quot;: 4.34.8
      &quot;@rollup/rollup-linux-powerpc64le-gnu&quot;: 4.34.8
      &quot;@rollup/rollup-linux-riscv64-gnu&quot;: 4.34.8
      &quot;@rollup/rollup-linux-s390x-gnu&quot;: 4.34.8
      &quot;@rollup/rollup-linux-x64-gnu&quot;: 4.34.8
      &quot;@rollup/rollup-linux-x64-musl&quot;: 4.34.8
      &quot;@rollup/rollup-win32-arm64-msvc&quot;: 4.34.8
      &quot;@rollup/rollup-win32-ia32-msvc&quot;: 4.34.8
      &quot;@rollup/rollup-win32-x64-msvc&quot;: 4.34.8
      fsevents: 2.3.3

  run-parallel@1.2.0:
    dependencies:
      queue-microtask: 1.2.3

  rxjs@7.8.2:
    dependencies:
      tslib: 2.8.1

  safe-buffer@5.2.1: {}

  safer-buffer@2.1.2: {}

  scheduler@0.25.0: {}

  semver@6.3.1: {}

  semver@7.7.1: {}

  send@0.19.0:
    dependencies:
      debug: 2.6.9
      depd: 2.0.0
      destroy: 1.2.0
      encodeurl: 1.0.2
      escape-html: 1.0.3
      etag: 1.8.1
      fresh: 0.5.2
      http-errors: 2.0.0
      mime: 1.6.0
      ms: 2.1.3
      on-finished: 2.4.1
      range-parser: 1.2.1
      statuses: 2.0.1
    transitivePeerDependencies:
      - supports-color

  serve-static@1.16.2:
    dependencies:
      encodeurl: 2.0.0
      escape-html: 1.0.3
      parseurl: 1.3.3
      send: 0.19.0
    transitivePeerDependencies:
      - supports-color

  setprototypeof@1.2.0: {}

  shebang-command@2.0.0:
    dependencies:
      shebang-regex: 3.0.0

  shebang-regex@3.0.0: {}

  shell-quote@1.8.2: {}

  side-channel-list@1.0.0:
    dependencies:
      es-errors: 1.3.0
      object-inspect: 1.13.4

  side-channel-map@1.0.1:
    dependencies:
      call-bound: 1.0.3
      es-errors: 1.3.0
      get-intrinsic: 1.3.0
      object-inspect: 1.13.4

  side-channel-weakmap@1.0.2:
    dependencies:
      call-bound: 1.0.3
      es-errors: 1.3.0
      get-intrinsic: 1.3.0
      object-inspect: 1.13.4
      side-channel-map: 1.0.1

  side-channel@1.1.0:
    dependencies:
      es-errors: 1.3.0
      object-inspect: 1.13.4
      side-channel-list: 1.0.0
      side-channel-map: 1.0.1
      side-channel-weakmap: 1.0.2

  source-map-js@1.2.1: {}

  source-map-support@0.5.21:
    dependencies:
      buffer-from: 1.1.2
      source-map: 0.6.1

  source-map@0.6.1: {}

  split2@4.2.0: {}

  statuses@2.0.1: {}

  string-width@4.2.3:
    dependencies:
      emoji-regex: 8.0.0
      is-fullwidth-code-point: 3.0.0
      strip-ansi: 6.0.1

  strip-ansi@6.0.1:
    dependencies:
      ansi-regex: 5.0.1

  strip-json-comments@3.1.1: {}

  supports-color@7.2.0:
    dependencies:
      has-flag: 4.0.0

  supports-color@8.1.1:
    dependencies:
      has-flag: 4.0.0

  tailwindcss@4.0.8: {}

  tapable@2.2.1: {}

  to-regex-range@5.0.1:
    dependencies:
      is-number: 7.0.0

  toidentifier@1.0.1: {}

  tree-kill@1.2.2: {}

  ts-api-utils@2.0.1(typescript@5.7.3):
    dependencies:
      typescript: 5.7.3

  tslib@2.8.1: {}

  tsx@4.19.3:
    dependencies:
      esbuild: 0.25.0
      get-tsconfig: 4.10.0
    optionalDependencies:
      fsevents: 2.3.3

  type-check@0.4.0:
    dependencies:
      prelude-ls: 1.2.1

  type-is@1.6.18:
    dependencies:
      media-typer: 0.3.0
      mime-types: 2.1.35

  typescript-eslint@8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3):
    dependencies:
      &quot;@typescript-eslint/eslint-plugin&quot;: 8.25.0(@typescript-eslint/parser@8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)
      &quot;@typescript-eslint/parser&quot;: 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)
      &quot;@typescript-eslint/utils&quot;: 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)
      eslint: 9.21.0(jiti@2.4.2)
      typescript: 5.7.3
    transitivePeerDependencies:
      - supports-color

  typescript@5.7.3: {}

  undici-types@6.20.0: {}

  unpipe@1.0.0: {}

  update-browserslist-db@1.1.2(browserslist@4.24.4):
    dependencies:
      browserslist: 4.24.4
      escalade: 3.2.0
      picocolors: 1.1.1

  uri-js@4.4.1:
    dependencies:
      punycode: 2.3.1

  utils-merge@1.0.1: {}

  vary@1.1.2: {}

  vite@6.1.1(@types/node@22.13.5)(jiti@2.4.2)(lightningcss@1.29.1)(tsx@4.19.3):
    dependencies:
      esbuild: 0.24.2
      postcss: 8.5.3
      rollup: 4.34.8
    optionalDependencies:
      &quot;@types/node&quot;: 22.13.5
      fsevents: 2.3.3
      jiti: 2.4.2
      lightningcss: 1.29.1
      tsx: 4.19.3

  which@2.0.2:
    dependencies:
      isexe: 2.0.0

  word-wrap@1.2.5: {}

  wrap-ansi@7.0.0:
    dependencies:
      ansi-styles: 4.3.0
      string-width: 4.2.3
      strip-ansi: 6.0.1

  xtend@4.0.2: {}

  y18n@5.0.8: {}

  yallist@3.1.1: {}

  yargs-parser@21.1.1: {}

  yargs@17.7.2:
    dependencies:
      cliui: 8.0.1
      escalade: 3.2.0
      get-caller-file: 2.0.5
      require-directory: 2.1.1
      string-width: 4.2.3
      y18n: 5.0.8
      yargs-parser: 21.1.1

  yocto-queue@0.1.0: {}

  zod@3.24.2: {}
">
<input type="hidden" name="project[files][postgres.conf]" value="listen_addresses = &#39;*&#39;
max_connections = 100
shared_buffers = 128MB
dynamic_shared_memory_type = posix
max_wal_size = 1GB
min_wal_size = 80MB
log_timezone = &#39;UTC&#39;
datestyle = &#39;iso, mdy&#39;
timezone = &#39;UTC&#39;
lc_messages = &#39;en_US.utf8&#39;
lc_monetary = &#39;en_US.utf8&#39;
lc_numeric = &#39;en_US.utf8&#39;
lc_time = &#39;en_US.utf8&#39;
default_text_search_config = &#39;pg_catalog.english&#39;
wal_level = logical
max_replication_slots = 10
max_wal_senders = 10
">
<input type="hidden" name="project[files][tsconfig.json]" value="{
  &quot;extends&quot;: &quot;../../../tsconfig.json&quot;,
  &quot;compilerOptions&quot;: {
    &quot;baseUrl&quot;: &quot;.&quot;,
    &quot;module&quot;: &quot;ES2022&quot;,
    &quot;jsx&quot;: &quot;preserve&quot;,
    &quot;jsxImportSource&quot;: &quot;solid-js&quot;,
    &quot;moduleResolution&quot;: &quot;bundler&quot;,
    &quot;paths&quot;: {
      &quot;@/*&quot;: [&quot;./src/*&quot;]
    }
  },
  &quot;include&quot;: [
    &quot;src/**/*.ts&quot;,
    &quot;src/**/*.tsx&quot;,
    &quot;scripts/**/*.ts&quot;,
    &quot;vite.config.ts&quot;,
    &quot;drizzle.config.ts&quot;,
    &quot;app.config.ts&quot;
  ],
  &quot;exclude&quot;: [&quot;node_modules&quot;, &quot;dist&quot;]
}
">
<input type="hidden" name="project[files][vite.config.ts]" value="import { defineConfig } from &#39;vite&#39;
import solid from &#39;vite-plugin-solid&#39;
import tailwindcss from &#39;@tailwindcss/vite&#39;
import { tanstackStart } from &#39;@tanstack/solid-start/plugin/vite&#39;
import viteTsConfigPaths from &#39;vite-tsconfig-paths&#39;

// https://vitejs.dev/config/
export default defineConfig({
  ssr: { external: [`drizzle-orm`] },
  plugins: [
    viteTsConfigPaths({
      projects: [`./tsconfig.json`],
    }),
    tailwindcss(),
    tanstackStart({
      srcDirectory: `src`,
      start: { entry: `./start.tsx` },
      server: { entry: `./server.ts` },
    }),
    solid({ ssr: true }),
  ],
})
">
<input type="hidden" name="project[files][drizzle/0000_whole_sprite.sql]" value="CREATE TABLE &quot;todos&quot; (
	&quot;id&quot; serial PRIMARY KEY NOT NULL,
	&quot;text&quot; text NOT NULL,
	&quot;completed&quot; boolean DEFAULT false NOT NULL,
	&quot;created_at&quot; timestamp with time zone DEFAULT now() NOT NULL,
	&quot;updated_at&quot; timestamp with time zone DEFAULT now() NOT NULL
);
">
<input type="hidden" name="project[files][drizzle/0001_sturdy_titania.sql]" value="CREATE TABLE &quot;config&quot; (
	&quot;id&quot; serial PRIMARY KEY NOT NULL,
	&quot;key&quot; text NOT NULL,
	&quot;value&quot; text NOT NULL,
	&quot;created_at&quot; timestamp with time zone DEFAULT now() NOT NULL,
	&quot;updated_at&quot; timestamp with time zone DEFAULT now() NOT NULL,
	CONSTRAINT &quot;config_key_unique&quot; UNIQUE(&quot;key&quot;)
);
">
<input type="hidden" name="project[files][drizzle/0002_update_timestamps_trigger.sql]" value="-- Custom SQL migration file, put your code below! --

-- Create a function to update the updated_at timestamp
CREATE OR REPLACE FUNCTION update_updated_at_column()
RETURNS TRIGGER AS $$
BEGIN
    NEW.updated_at = NOW();
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

-- Create trigger for todos table
DROP TRIGGER IF EXISTS update_todos_updated_at ON &quot;todos&quot;;
CREATE TRIGGER update_todos_updated_at
BEFORE UPDATE ON &quot;todos&quot;
FOR EACH ROW
EXECUTE FUNCTION update_updated_at_column();

-- Create trigger for config table
DROP TRIGGER IF EXISTS update_config_updated_at ON &quot;config&quot;;
CREATE TRIGGER update_config_updated_at
BEFORE UPDATE ON &quot;config&quot;
FOR EACH ROW
EXECUTE FUNCTION update_updated_at_column();

-- Insert default config for background color
INSERT INTO &quot;config&quot; (&quot;key&quot;, &quot;value&quot;)
VALUES (&#39;backgroundColor&#39;, &#39;#f5f5f5&#39;)
ON CONFLICT (&quot;key&quot;) DO NOTHING;">
<input type="hidden" name="project[files][public/vite.svg]" value="&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; aria-hidden=&quot;true&quot; role=&quot;img&quot; class=&quot;iconify iconify--logos&quot; width=&quot;31.88&quot; height=&quot;32&quot; preserveAspectRatio=&quot;xMidYMid meet&quot; viewBox=&quot;0 0 256 257&quot;&gt;&lt;defs&gt;&lt;linearGradient id=&quot;IconifyId1813088fe1fbc01fb466&quot; x1=&quot;-.828%&quot; x2=&quot;57.636%&quot; y1=&quot;7.652%&quot; y2=&quot;78.411%&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#41D1FF&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#BD34FE&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;linearGradient id=&quot;IconifyId1813088fe1fbc01fb467&quot; x1=&quot;43.376%&quot; x2=&quot;50.316%&quot; y1=&quot;2.242%&quot; y2=&quot;89.03%&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#FFEA83&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;8.333%&quot; stop-color=&quot;#FFDD35&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#FFA800&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;/defs&gt;&lt;path fill=&quot;url(#IconifyId1813088fe1fbc01fb466)&quot; d=&quot;M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z&quot;&gt;&lt;/path&gt;&lt;path fill=&quot;url(#IconifyId1813088fe1fbc01fb467)&quot; d=&quot;M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;">
<input type="hidden" name="project[files][scripts/migrate.ts]" value="import { drizzle } from &#39;drizzle-orm/node-postgres&#39;
import { migrate } from &#39;drizzle-orm/node-postgres/migrator&#39;
import pkg from &#39;pg&#39;
import * as dotenv from &#39;dotenv&#39;

dotenv.config()

const { Pool } = pkg
const pool = new Pool({
  host: process.env.DB_HOST || `localhost`,
  port: parseInt(process.env.DB_PORT || `54322`),
  user: process.env.DB_USER || `postgres`,
  password: process.env.DB_PASSWORD || `postgres`,
  database: process.env.DB_NAME || `todo_app`,
})

const db = drizzle(pool)

async function main() {
  console.log(`Running migrations...`)
  await migrate(db, { migrationsFolder: `./drizzle` })
  console.log(`Migrations completed!`)
  await pool.end()
}

main().catch((err) =&gt; {
  console.error(`Migration failed!`, err)
  process.exit(1)
})
">
<input type="hidden" name="project[files][src/index.css]" value="@import &#39;tailwindcss&#39;;

html,
body {
  margin: 0;
  padding: 0;
}

button {
  margin: 0;
  padding: 0;
  border: 0;
  background: none;
  font-size: 100%;
  vertical-align: baseline;
  font-family: inherit;
  font-weight: inherit;
  color: inherit;
  appearance: none;
}

body {
  font:
    14px &#39;Helvetica Neue&#39;,
    Helvetica,
    Arial,
    sans-serif;
  line-height: 1.4em;
  background: #f5f5f5;
  color: #4d4d4d;
  margin: 0 auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  font-weight: 300;
}

:root {
  font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
  line-height: 1.5;
  font-weight: 400;

  color-scheme: light dark;
  color: rgba(255, 255, 255, 0.87);
  background-color: #242424;

  font-synthesis: none;
  text-rendering: optimizeLegibility;
}

a {
  font-weight: 500;
  color: #646cff;
  text-decoration: inherit;
}
a:hover {
  color: #535bf2;
}

h1 {
  font-size: 3.2em;
  line-height: 1.1;
}

button {
  border-radius: 8px;
  border: 1px solid transparent;
  padding: 0.6em 1.2em;
  font-size: 1em;
  font-weight: 500;
  font-family: inherit;
  background-color: #1a1a1a;
  cursor: pointer;
  transition: border-color 0.25s;
}
button:hover {
  border-color: #646cff;
}
button:focus,
button:focus-visible {
  outline: 4px auto -webkit-focus-ring-color;
}

@media (prefers-color-scheme: light) {
  :root {
    color: #213547;
    background-color: #ffffff;
  }
  a:hover {
    color: #747bff;
  }
  button {
    background-color: #f9f9f9;
  }
}
">
<input type="hidden" name="project[files][src/routeTree.gen.ts]" value="/* eslint-disable */

// @ts-nocheck

// noinspection JSUnusedGlobalSymbols

// This file was automatically generated by TanStack Router.
// You should NOT make any changes in this file as it will be overwritten.
// Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified.

import { Route as rootRouteImport } from &#39;./routes/__root&#39;
import { Route as TrailbaseRouteImport } from &#39;./routes/trailbase&#39;
import { Route as QueryRouteImport } from &#39;./routes/query&#39;
import { Route as ElectricRouteImport } from &#39;./routes/electric&#39;
import { Route as IndexRouteImport } from &#39;./routes/index&#39;
import { Route as ApiTodosRouteImport } from &#39;./routes/api/todos&#39;
import { Route as ApiConfigRouteImport } from &#39;./routes/api/config&#39;
import { Route as ApiTodosIdRouteImport } from &#39;./routes/api/todos.$id&#39;
import { Route as ApiConfigIdRouteImport } from &#39;./routes/api/config.$id&#39;

const TrailbaseRoute = TrailbaseRouteImport.update({
  id: &#39;/trailbase&#39;,
  path: &#39;/trailbase&#39;,
  getParentRoute: () =&gt; rootRouteImport,
} as any)
const QueryRoute = QueryRouteImport.update({
  id: &#39;/query&#39;,
  path: &#39;/query&#39;,
  getParentRoute: () =&gt; rootRouteImport,
} as any)
const ElectricRoute = ElectricRouteImport.update({
  id: &#39;/electric&#39;,
  path: &#39;/electric&#39;,
  getParentRoute: () =&gt; rootRouteImport,
} as any)
const IndexRoute = IndexRouteImport.update({
  id: &#39;/&#39;,
  path: &#39;/&#39;,
  getParentRoute: () =&gt; rootRouteImport,
} as any)
const ApiTodosRoute = ApiTodosRouteImport.update({
  id: &#39;/api/todos&#39;,
  path: &#39;/api/todos&#39;,
  getParentRoute: () =&gt; rootRouteImport,
} as any)
const ApiConfigRoute = ApiConfigRouteImport.update({
  id: &#39;/api/config&#39;,
  path: &#39;/api/config&#39;,
  getParentRoute: () =&gt; rootRouteImport,
} as any)
const ApiTodosIdRoute = ApiTodosIdRouteImport.update({
  id: &#39;/$id&#39;,
  path: &#39;/$id&#39;,
  getParentRoute: () =&gt; ApiTodosRoute,
} as any)
const ApiConfigIdRoute = ApiConfigIdRouteImport.update({
  id: &#39;/$id&#39;,
  path: &#39;/$id&#39;,
  getParentRoute: () =&gt; ApiConfigRoute,
} as any)

export interface FileRoutesByFullPath {
  &#39;/&#39;: typeof IndexRoute
  &#39;/electric&#39;: typeof ElectricRoute
  &#39;/query&#39;: typeof QueryRoute
  &#39;/trailbase&#39;: typeof TrailbaseRoute
  &#39;/api/config&#39;: typeof ApiConfigRouteWithChildren
  &#39;/api/todos&#39;: typeof ApiTodosRouteWithChildren
  &#39;/api/config/$id&#39;: typeof ApiConfigIdRoute
  &#39;/api/todos/$id&#39;: typeof ApiTodosIdRoute
}
export interface FileRoutesByTo {
  &#39;/&#39;: typeof IndexRoute
  &#39;/electric&#39;: typeof ElectricRoute
  &#39;/query&#39;: typeof QueryRoute
  &#39;/trailbase&#39;: typeof TrailbaseRoute
  &#39;/api/config&#39;: typeof ApiConfigRouteWithChildren
  &#39;/api/todos&#39;: typeof ApiTodosRouteWithChildren
  &#39;/api/config/$id&#39;: typeof ApiConfigIdRoute
  &#39;/api/todos/$id&#39;: typeof ApiTodosIdRoute
}
export interface FileRoutesById {
  __root__: typeof rootRouteImport
  &#39;/&#39;: typeof IndexRoute
  &#39;/electric&#39;: typeof ElectricRoute
  &#39;/query&#39;: typeof QueryRoute
  &#39;/trailbase&#39;: typeof TrailbaseRoute
  &#39;/api/config&#39;: typeof ApiConfigRouteWithChildren
  &#39;/api/todos&#39;: typeof ApiTodosRouteWithChildren
  &#39;/api/config/$id&#39;: typeof ApiConfigIdRoute
  &#39;/api/todos/$id&#39;: typeof ApiTodosIdRoute
}
export interface FileRouteTypes {
  fileRoutesByFullPath: FileRoutesByFullPath
  fullPaths:
    | &#39;/&#39;
    | &#39;/electric&#39;
    | &#39;/query&#39;
    | &#39;/trailbase&#39;
    | &#39;/api/config&#39;
    | &#39;/api/todos&#39;
    | &#39;/api/config/$id&#39;
    | &#39;/api/todos/$id&#39;
  fileRoutesByTo: FileRoutesByTo
  to:
    | &#39;/&#39;
    | &#39;/electric&#39;
    | &#39;/query&#39;
    | &#39;/trailbase&#39;
    | &#39;/api/config&#39;
    | &#39;/api/todos&#39;
    | &#39;/api/config/$id&#39;
    | &#39;/api/todos/$id&#39;
  id:
    | &#39;__root__&#39;
    | &#39;/&#39;
    | &#39;/electric&#39;
    | &#39;/query&#39;
    | &#39;/trailbase&#39;
    | &#39;/api/config&#39;
    | &#39;/api/todos&#39;
    | &#39;/api/config/$id&#39;
    | &#39;/api/todos/$id&#39;
  fileRoutesById: FileRoutesById
}
export interface RootRouteChildren {
  IndexRoute: typeof IndexRoute
  ElectricRoute: typeof ElectricRoute
  QueryRoute: typeof QueryRoute
  TrailbaseRoute: typeof TrailbaseRoute
  ApiConfigRoute: typeof ApiConfigRouteWithChildren
  ApiTodosRoute: typeof ApiTodosRouteWithChildren
}

declare module &#39;@tanstack/solid-router&#39; {
  interface FileRoutesByPath {
    &#39;/trailbase&#39;: {
      id: &#39;/trailbase&#39;
      path: &#39;/trailbase&#39;
      fullPath: &#39;/trailbase&#39;
      preLoaderRoute: typeof TrailbaseRouteImport
      parentRoute: typeof rootRouteImport
    }
    &#39;/query&#39;: {
      id: &#39;/query&#39;
      path: &#39;/query&#39;
      fullPath: &#39;/query&#39;
      preLoaderRoute: typeof QueryRouteImport
      parentRoute: typeof rootRouteImport
    }
    &#39;/electric&#39;: {
      id: &#39;/electric&#39;
      path: &#39;/electric&#39;
      fullPath: &#39;/electric&#39;
      preLoaderRoute: typeof ElectricRouteImport
      parentRoute: typeof rootRouteImport
    }
    &#39;/&#39;: {
      id: &#39;/&#39;
      path: &#39;/&#39;
      fullPath: &#39;/&#39;
      preLoaderRoute: typeof IndexRouteImport
      parentRoute: typeof rootRouteImport
    }
    &#39;/api/todos&#39;: {
      id: &#39;/api/todos&#39;
      path: &#39;/api/todos&#39;
      fullPath: &#39;/api/todos&#39;
      preLoaderRoute: typeof ApiTodosRouteImport
      parentRoute: typeof rootRouteImport
    }
    &#39;/api/config&#39;: {
      id: &#39;/api/config&#39;
      path: &#39;/api/config&#39;
      fullPath: &#39;/api/config&#39;
      preLoaderRoute: typeof ApiConfigRouteImport
      parentRoute: typeof rootRouteImport
    }
    &#39;/api/todos/$id&#39;: {
      id: &#39;/api/todos/$id&#39;
      path: &#39;/$id&#39;
      fullPath: &#39;/api/todos/$id&#39;
      preLoaderRoute: typeof ApiTodosIdRouteImport
      parentRoute: typeof ApiTodosRoute
    }
    &#39;/api/config/$id&#39;: {
      id: &#39;/api/config/$id&#39;
      path: &#39;/$id&#39;
      fullPath: &#39;/api/config/$id&#39;
      preLoaderRoute: typeof ApiConfigIdRouteImport
      parentRoute: typeof ApiConfigRoute
    }
  }
}

interface ApiConfigRouteChildren {
  ApiConfigIdRoute: typeof ApiConfigIdRoute
}

const ApiConfigRouteChildren: ApiConfigRouteChildren = {
  ApiConfigIdRoute: ApiConfigIdRoute,
}

const ApiConfigRouteWithChildren = ApiConfigRoute._addFileChildren(
  ApiConfigRouteChildren,
)

interface ApiTodosRouteChildren {
  ApiTodosIdRoute: typeof ApiTodosIdRoute
}

const ApiTodosRouteChildren: ApiTodosRouteChildren = {
  ApiTodosIdRoute: ApiTodosIdRoute,
}

const ApiTodosRouteWithChildren = ApiTodosRoute._addFileChildren(
  ApiTodosRouteChildren,
)

const rootRouteChildren: RootRouteChildren = {
  IndexRoute: IndexRoute,
  ElectricRoute: ElectricRoute,
  QueryRoute: QueryRoute,
  TrailbaseRoute: TrailbaseRoute,
  ApiConfigRoute: ApiConfigRouteWithChildren,
  ApiTodosRoute: ApiTodosRouteWithChildren,
}
export const routeTree = rootRouteImport
  ._addFileChildren(rootRouteChildren)
  ._addFileTypes&lt;FileRouteTypes&gt;()

import type { getRouter } from &#39;./router.tsx&#39;
import type { startInstance } from &#39;./start.tsx&#39;
declare module &#39;@tanstack/solid-start&#39; {
  interface Register {
    ssr: true
    router: Awaited&lt;ReturnType&lt;typeof getRouter&gt;&gt;
    config: Awaited&lt;ReturnType&lt;typeof startInstance.getOptions&gt;&gt;
  }
}
">
<input type="hidden" name="project[files][src/router.tsx]" value="import { createRouter as createTanstackRouter } from &#39;@tanstack/solid-router&#39;

// Import the generated route tree
import { routeTree } from &#39;./routeTree.gen&#39;
import { NotFound } from &#39;./components/NotFound&#39;

import &#39;./styles.css&#39;

// Create a new router instance
export function getRouter() {
  return createTanstackRouter({
    routeTree,
    scrollRestoration: true,
    defaultPreloadStaleTime: 0,
    defaultNotFoundComponent: NotFound,
  })
}
">
<input type="hidden" name="project[files][src/server.ts]" value="import handler from &#39;@tanstack/solid-start/server-entry&#39;

export default {
  fetch(request: Request) {
    return handler.fetch(request)
  },
}
">
<input type="hidden" name="project[files][src/start.tsx]" value="import { createStart } from &#39;@tanstack/solid-start&#39;

export const startInstance = createStart(() =&gt; {
  return {
    defaultSsr: false,
  }
})
">
<input type="hidden" name="project[files][src/styles.css]" value="@import &#39;tailwindcss&#39;;

body {
  @apply m-0;
  font-family:
    -apple-system, BlinkMacSystemFont, &#39;Segoe UI&#39;, &#39;Roboto&#39;, &#39;Oxygen&#39;, &#39;Ubuntu&#39;,
    &#39;Cantarell&#39;, &#39;Fira Sans&#39;, &#39;Droid Sans&#39;, &#39;Helvetica Neue&#39;, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

code {
  font-family:
    source-code-pro, Menlo, Monaco, Consolas, &#39;Courier New&#39;, monospace;
}
">
<input type="hidden" name="project[files][src/vite-env.d.ts]" value="/// &lt;reference types=&quot;vite/client&quot; /&gt;
">
<input type="hidden" name="project[files][traildepot/.gitignore]" value="# Deployment-specific directories:
backups/
data/
secrets/
uploads/

trailbase.js
trailbase.d.ts
">
<input type="hidden" name="project[files][traildepot/config.textproto]" value="email {}
server {
  application_name: &quot;TanStack-DB TrailBase Example&quot;
  logs_retention_sec: 604800
}
auth {
  auth_token_ttl_sec: 3600
  refresh_token_ttl_sec: 2592000
}
jobs {}
record_apis: [
  {
    name: &quot;todos&quot;
    table_name: &quot;todos&quot;
    acl_world: [CREATE, READ, UPDATE, DELETE]
    enable_subscriptions: true
  },
  {
    name: &quot;config&quot;
    table_name: &quot;config&quot;
    acl_world: [CREATE, READ, UPDATE, DELETE]
    enable_subscriptions: true
  }
]
">
<input type="hidden" name="project[files][drizzle/meta/0000_snapshot.json]" value="{
  &quot;id&quot;: &quot;1649b703-2b2d-413c-8185-15390a9d97e7&quot;,
  &quot;prevId&quot;: &quot;00000000-0000-0000-0000-000000000000&quot;,
  &quot;version&quot;: &quot;7&quot;,
  &quot;dialect&quot;: &quot;postgresql&quot;,
  &quot;tables&quot;: {
    &quot;public.todos&quot;: {
      &quot;name&quot;: &quot;todos&quot;,
      &quot;schema&quot;: &quot;&quot;,
      &quot;columns&quot;: {
        &quot;id&quot;: {
          &quot;name&quot;: &quot;id&quot;,
          &quot;type&quot;: &quot;serial&quot;,
          &quot;primaryKey&quot;: true,
          &quot;notNull&quot;: true
        },
        &quot;text&quot;: {
          &quot;name&quot;: &quot;text&quot;,
          &quot;type&quot;: &quot;text&quot;,
          &quot;primaryKey&quot;: false,
          &quot;notNull&quot;: true
        },
        &quot;completed&quot;: {
          &quot;name&quot;: &quot;completed&quot;,
          &quot;type&quot;: &quot;boolean&quot;,
          &quot;primaryKey&quot;: false,
          &quot;notNull&quot;: true,
          &quot;default&quot;: false
        },
        &quot;created_at&quot;: {
          &quot;name&quot;: &quot;created_at&quot;,
          &quot;type&quot;: &quot;timestamp with time zone&quot;,
          &quot;primaryKey&quot;: false,
          &quot;notNull&quot;: true,
          &quot;default&quot;: &quot;now()&quot;
        },
        &quot;updated_at&quot;: {
          &quot;name&quot;: &quot;updated_at&quot;,
          &quot;type&quot;: &quot;timestamp with time zone&quot;,
          &quot;primaryKey&quot;: false,
          &quot;notNull&quot;: true,
          &quot;default&quot;: &quot;now()&quot;
        }
      },
      &quot;indexes&quot;: {},
      &quot;foreignKeys&quot;: {},
      &quot;compositePrimaryKeys&quot;: {},
      &quot;uniqueConstraints&quot;: {},
      &quot;policies&quot;: {},
      &quot;checkConstraints&quot;: {},
      &quot;isRLSEnabled&quot;: false
    }
  },
  &quot;enums&quot;: {},
  &quot;schemas&quot;: {},
  &quot;sequences&quot;: {},
  &quot;roles&quot;: {},
  &quot;policies&quot;: {},
  &quot;views&quot;: {},
  &quot;_meta&quot;: {
    &quot;columns&quot;: {},
    &quot;schemas&quot;: {},
    &quot;tables&quot;: {}
  }
}
">
<input type="hidden" name="project[files][drizzle/meta/0001_snapshot.json]" value="{
  &quot;id&quot;: &quot;1b3a815a-1865-451b-b646-983e995ee97e&quot;,
  &quot;prevId&quot;: &quot;1649b703-2b2d-413c-8185-15390a9d97e7&quot;,
  &quot;version&quot;: &quot;7&quot;,
  &quot;dialect&quot;: &quot;postgresql&quot;,
  &quot;tables&quot;: {
    &quot;public.config&quot;: {
      &quot;name&quot;: &quot;config&quot;,
      &quot;schema&quot;: &quot;&quot;,
      &quot;columns&quot;: {
        &quot;id&quot;: {
          &quot;name&quot;: &quot;id&quot;,
          &quot;type&quot;: &quot;serial&quot;,
          &quot;primaryKey&quot;: true,
          &quot;notNull&quot;: true
        },
        &quot;key&quot;: {
          &quot;name&quot;: &quot;key&quot;,
          &quot;type&quot;: &quot;text&quot;,
          &quot;primaryKey&quot;: false,
          &quot;notNull&quot;: true
        },
        &quot;value&quot;: {
          &quot;name&quot;: &quot;value&quot;,
          &quot;type&quot;: &quot;text&quot;,
          &quot;primaryKey&quot;: false,
          &quot;notNull&quot;: true
        },
        &quot;created_at&quot;: {
          &quot;name&quot;: &quot;created_at&quot;,
          &quot;type&quot;: &quot;timestamp with time zone&quot;,
          &quot;primaryKey&quot;: false,
          &quot;notNull&quot;: true,
          &quot;default&quot;: &quot;now()&quot;
        },
        &quot;updated_at&quot;: {
          &quot;name&quot;: &quot;updated_at&quot;,
          &quot;type&quot;: &quot;timestamp with time zone&quot;,
          &quot;primaryKey&quot;: false,
          &quot;notNull&quot;: true,
          &quot;default&quot;: &quot;now()&quot;
        }
      },
      &quot;indexes&quot;: {},
      &quot;foreignKeys&quot;: {},
      &quot;compositePrimaryKeys&quot;: {},
      &quot;uniqueConstraints&quot;: {
        &quot;config_key_unique&quot;: {
          &quot;name&quot;: &quot;config_key_unique&quot;,
          &quot;nullsNotDistinct&quot;: false,
          &quot;columns&quot;: [&quot;key&quot;]
        }
      },
      &quot;policies&quot;: {},
      &quot;checkConstraints&quot;: {},
      &quot;isRLSEnabled&quot;: false
    },
    &quot;public.todos&quot;: {
      &quot;name&quot;: &quot;todos&quot;,
      &quot;schema&quot;: &quot;&quot;,
      &quot;columns&quot;: {
        &quot;id&quot;: {
          &quot;name&quot;: &quot;id&quot;,
          &quot;type&quot;: &quot;serial&quot;,
          &quot;primaryKey&quot;: true,
          &quot;notNull&quot;: true
        },
        &quot;text&quot;: {
          &quot;name&quot;: &quot;text&quot;,
          &quot;type&quot;: &quot;text&quot;,
          &quot;primaryKey&quot;: false,
          &quot;notNull&quot;: true
        },
        &quot;completed&quot;: {
          &quot;name&quot;: &quot;completed&quot;,
          &quot;type&quot;: &quot;boolean&quot;,
          &quot;primaryKey&quot;: false,
          &quot;notNull&quot;: true,
          &quot;default&quot;: false
        },
        &quot;created_at&quot;: {
          &quot;name&quot;: &quot;created_at&quot;,
          &quot;type&quot;: &quot;timestamp with time zone&quot;,
          &quot;primaryKey&quot;: false,
          &quot;notNull&quot;: true,
          &quot;default&quot;: &quot;now()&quot;
        },
        &quot;updated_at&quot;: {
          &quot;name&quot;: &quot;updated_at&quot;,
          &quot;type&quot;: &quot;timestamp with time zone&quot;,
          &quot;primaryKey&quot;: false,
          &quot;notNull&quot;: true,
          &quot;default&quot;: &quot;now()&quot;
        }
      },
      &quot;indexes&quot;: {},
      &quot;foreignKeys&quot;: {},
      &quot;compositePrimaryKeys&quot;: {},
      &quot;uniqueConstraints&quot;: {},
      &quot;policies&quot;: {},
      &quot;checkConstraints&quot;: {},
      &quot;isRLSEnabled&quot;: false
    }
  },
  &quot;enums&quot;: {},
  &quot;schemas&quot;: {},
  &quot;sequences&quot;: {},
  &quot;roles&quot;: {},
  &quot;policies&quot;: {},
  &quot;views&quot;: {},
  &quot;_meta&quot;: {
    &quot;columns&quot;: {},
    &quot;schemas&quot;: {},
    &quot;tables&quot;: {}
  }
}
">
<input type="hidden" name="project[files][drizzle/meta/0002_snapshot.json]" value="{
  &quot;id&quot;: &quot;017c3a1c-9d70-4fed-ad07-9a2e1ab49bb4&quot;,
  &quot;prevId&quot;: &quot;1b3a815a-1865-451b-b646-983e995ee97e&quot;,
  &quot;version&quot;: &quot;7&quot;,
  &quot;dialect&quot;: &quot;postgresql&quot;,
  &quot;tables&quot;: {
    &quot;public.config&quot;: {
      &quot;name&quot;: &quot;config&quot;,
      &quot;schema&quot;: &quot;&quot;,
      &quot;columns&quot;: {
        &quot;id&quot;: {
          &quot;name&quot;: &quot;id&quot;,
          &quot;type&quot;: &quot;serial&quot;,
          &quot;primaryKey&quot;: true,
          &quot;notNull&quot;: true
        },
        &quot;key&quot;: {
          &quot;name&quot;: &quot;key&quot;,
          &quot;type&quot;: &quot;text&quot;,
          &quot;primaryKey&quot;: false,
          &quot;notNull&quot;: true
        },
        &quot;value&quot;: {
          &quot;name&quot;: &quot;value&quot;,
          &quot;type&quot;: &quot;text&quot;,
          &quot;primaryKey&quot;: false,
          &quot;notNull&quot;: true
        },
        &quot;created_at&quot;: {
          &quot;name&quot;: &quot;created_at&quot;,
          &quot;type&quot;: &quot;timestamp with time zone&quot;,
          &quot;primaryKey&quot;: false,
          &quot;notNull&quot;: true,
          &quot;default&quot;: &quot;now()&quot;
        },
        &quot;updated_at&quot;: {
          &quot;name&quot;: &quot;updated_at&quot;,
          &quot;type&quot;: &quot;timestamp with time zone&quot;,
          &quot;primaryKey&quot;: false,
          &quot;notNull&quot;: true,
          &quot;default&quot;: &quot;now()&quot;
        }
      },
      &quot;indexes&quot;: {},
      &quot;foreignKeys&quot;: {},
      &quot;compositePrimaryKeys&quot;: {},
      &quot;uniqueConstraints&quot;: {
        &quot;config_key_unique&quot;: {
          &quot;name&quot;: &quot;config_key_unique&quot;,
          &quot;columns&quot;: [&quot;key&quot;],
          &quot;nullsNotDistinct&quot;: false
        }
      },
      &quot;policies&quot;: {},
      &quot;checkConstraints&quot;: {},
      &quot;isRLSEnabled&quot;: false
    },
    &quot;public.todos&quot;: {
      &quot;name&quot;: &quot;todos&quot;,
      &quot;schema&quot;: &quot;&quot;,
      &quot;columns&quot;: {
        &quot;id&quot;: {
          &quot;name&quot;: &quot;id&quot;,
          &quot;type&quot;: &quot;serial&quot;,
          &quot;primaryKey&quot;: true,
          &quot;notNull&quot;: true
        },
        &quot;text&quot;: {
          &quot;name&quot;: &quot;text&quot;,
          &quot;type&quot;: &quot;text&quot;,
          &quot;primaryKey&quot;: false,
          &quot;notNull&quot;: true
        },
        &quot;completed&quot;: {
          &quot;name&quot;: &quot;completed&quot;,
          &quot;type&quot;: &quot;boolean&quot;,
          &quot;primaryKey&quot;: false,
          &quot;notNull&quot;: true,
          &quot;default&quot;: false
        },
        &quot;created_at&quot;: {
          &quot;name&quot;: &quot;created_at&quot;,
          &quot;type&quot;: &quot;timestamp with time zone&quot;,
          &quot;primaryKey&quot;: false,
          &quot;notNull&quot;: true,
          &quot;default&quot;: &quot;now()&quot;
        },
        &quot;updated_at&quot;: {
          &quot;name&quot;: &quot;updated_at&quot;,
          &quot;type&quot;: &quot;timestamp with time zone&quot;,
          &quot;primaryKey&quot;: false,
          &quot;notNull&quot;: true,
          &quot;default&quot;: &quot;now()&quot;
        }
      },
      &quot;indexes&quot;: {},
      &quot;foreignKeys&quot;: {},
      &quot;compositePrimaryKeys&quot;: {},
      &quot;uniqueConstraints&quot;: {},
      &quot;policies&quot;: {},
      &quot;checkConstraints&quot;: {},
      &quot;isRLSEnabled&quot;: false
    }
  },
  &quot;enums&quot;: {},
  &quot;schemas&quot;: {},
  &quot;views&quot;: {},
  &quot;sequences&quot;: {},
  &quot;roles&quot;: {},
  &quot;policies&quot;: {},
  &quot;_meta&quot;: {
    &quot;columns&quot;: {},
    &quot;schemas&quot;: {},
    &quot;tables&quot;: {}
  }
}
">
<input type="hidden" name="project[files][drizzle/meta/_journal.json]" value="{
  &quot;version&quot;: &quot;7&quot;,
  &quot;dialect&quot;: &quot;postgresql&quot;,
  &quot;entries&quot;: [
    {
      &quot;idx&quot;: 0,
      &quot;version&quot;: &quot;7&quot;,
      &quot;when&quot;: 1740502196428,
      &quot;tag&quot;: &quot;0000_whole_sprite&quot;,
      &quot;breakpoints&quot;: true
    },
    {
      &quot;idx&quot;: 1,
      &quot;version&quot;: &quot;7&quot;,
      &quot;when&quot;: 1740601351239,
      &quot;tag&quot;: &quot;0001_sturdy_titania&quot;,
      &quot;breakpoints&quot;: true
    },
    {
      &quot;idx&quot;: 2,
      &quot;version&quot;: &quot;7&quot;,
      &quot;when&quot;: 1740606615508,
      &quot;tag&quot;: &quot;0002_update_timestamps_trigger&quot;,
      &quot;breakpoints&quot;: true
    }
  ]
}
">
<input type="hidden" name="project[files][src/api/server.ts]" value="import express from &#39;express&#39;
import cors from &#39;cors&#39;
import { sql } from &#39;../db/postgres&#39;
import {
  validateInsertConfig,
  validateInsertTodo,
  validateUpdateConfig,
  validateUpdateTodo,
} from &#39;../db/validation&#39;
import type { Express } from &#39;express&#39;
import type { Txid } from &#39;@tanstack/electric-db-collection&#39;

// Create Express app
const app: Express = express()
const PORT = process.env.PORT || 3001

// Middleware
app.use(cors())
app.use(express.json())

// Health check endpoint
app.get(`/api/health`, (req, res) =&gt; {
  res.status(200).json({ status: `ok` })
})

// Generate a transaction ID
async function generateTxId(tx: any): Promise&lt;Txid&gt; {
  // The ::xid cast strips off the epoch, giving you the raw 32-bit value
  // that matches what PostgreSQL sends in logical replication streams
  // (and then exposed through Electric which we&#39;ll match against
  // in the client).
  const result = await tx`SELECT pg_current_xact_id()::xid::text as txid`
  const txid = result[0]?.txid

  if (txid === undefined) {
    throw new Error(`Failed to get transaction ID`)
  }

  return parseInt(txid, 10)
}

// ===== TODOS API =====

// GET all todos
app.get(`/api/todos`, async (req, res) =&gt; {
  try {
    const todos = await sql`SELECT * FROM todos`
    return res.status(200).json(todos)
  } catch (error) {
    console.error(`Error fetching todos:`, error)
    return res.status(500).json({
      error: `Failed to fetch todos`,
      details: error instanceof Error ? error.message : String(error),
    })
  }
})

// GET a single todo by ID
app.get(`/api/todos/:id`, async (req, res) =&gt; {
  try {
    const { id } = req.params
    const [todo] = await sql`SELECT * FROM todos WHERE id = ${id}`

    if (!todo) {
      return res.status(404).json({ error: `Todo not found` })
    }

    return res.status(200).json(todo)
  } catch (error) {
    console.error(`Error fetching todo:`, error)
    return res.status(500).json({
      error: `Failed to fetch todo`,
      details: error instanceof Error ? error.message : String(error),
    })
  }
})

// POST create a new todo
app.post(`/api/todos`, async (req, res) =&gt; {
  try {
    const todoData = validateInsertTodo(req.body)

    let txid!: Txid
    const newTodo = await sql.begin(async (tx) =&gt; {
      txid = await generateTxId(tx)

      const [result] = await tx`
        INSERT INTO todos ${tx(todoData)}
        RETURNING *
      `
      return result
    })

    return res.status(201).json({ todo: newTodo, txid })
  } catch (error) {
    console.error(`Error creating todo:`, error)
    return res.status(500).json({
      error: `Failed to create todo`,
      details: error instanceof Error ? error.message : String(error),
    })
  }
})

// PUT update a todo
app.put(`/api/todos/:id`, async (req, res) =&gt; {
  try {
    const { id } = req.params
    const todoData = validateUpdateTodo(req.body)

    let txid!: Txid
    const updatedTodo = await sql.begin(async (tx) =&gt; {
      txid = await generateTxId(tx)

      const [result] = await tx`
        UPDATE todos
        SET ${tx(todoData)}
        WHERE id = ${id}
        RETURNING *
      `

      if (!result) {
        throw new Error(`Todo not found`)
      }

      return result
    })

    return res.status(200).json({ todo: updatedTodo, txid })
  } catch (error) {
    if (error instanceof Error &amp;&amp; error.message === `Todo not found`) {
      return res.status(404).json({ error: `Todo not found` })
    }

    console.error(`Error updating todo:`, error)
    return res.status(500).json({
      error: `Failed to update todo`,
      details: error instanceof Error ? error.message : String(error),
    })
  }
})

// DELETE a todo
app.delete(`/api/todos/:id`, async (req, res) =&gt; {
  try {
    const { id } = req.params

    let txid!: Txid
    await sql.begin(async (tx) =&gt; {
      txid = await generateTxId(tx)

      const [result] = await tx`
        DELETE FROM todos
        WHERE id = ${id}
        RETURNING id
      `

      if (!result) {
        throw new Error(`Todo not found`)
      }
    })

    return res.status(200).json({ success: true, txid })
  } catch (error) {
    if (error instanceof Error &amp;&amp; error.message === `Todo not found`) {
      return res.status(404).json({ error: `Todo not found` })
    }

    console.error(`Error deleting todo:`, error)
    return res.status(500).json({
      error: `Failed to delete todo`,
      details: error instanceof Error ? error.message : String(error),
    })
  }
})

// ===== CONFIG API =====

// GET all config entries
app.get(`/api/config`, async (req, res) =&gt; {
  try {
    const config = await sql`SELECT * FROM config`
    return res.status(200).json(config)
  } catch (error) {
    console.error(`Error fetching config:`, error)
    return res.status(500).json({
      error: `Failed to fetch config`,
      details: error instanceof Error ? error.message : String(error),
    })
  }
})

// GET a single config by ID
app.get(`/api/config/:id`, async (req, res) =&gt; {
  try {
    const { id } = req.params
    const [config] = await sql`SELECT * FROM config WHERE id = ${id}`

    if (!config) {
      return res.status(404).json({ error: `Config not found` })
    }

    return res.status(200).json(config)
  } catch (error) {
    console.error(`Error fetching config:`, error)
    return res.status(500).json({
      error: `Failed to fetch config`,
      details: error instanceof Error ? error.message : String(error),
    })
  }
})

// POST create a new config
app.post(`/api/config`, async (req, res) =&gt; {
  try {
    console.log(`POST /api/config`, req.body)
    const configData = validateInsertConfig(req.body)

    let txid!: Txid
    const newConfig = await sql.begin(async (tx) =&gt; {
      txid = await generateTxId(tx)

      const [result] = await tx`
        INSERT INTO config ${tx(configData)}
        RETURNING *
      `
      return result
    })

    return res.status(201).json({ config: newConfig, txid })
  } catch (error) {
    console.error(`Error creating config:`, error)
    return res.status(500).json({
      error: `Failed to create config`,
      details: error instanceof Error ? error.message : String(error),
    })
  }
})

// PUT update a config
app.put(`/api/config/:id`, async (req, res) =&gt; {
  try {
    const { id } = req.params
    const configData = validateUpdateConfig(req.body)

    let txid!: Txid
    const updatedConfig = await sql.begin(async (tx) =&gt; {
      txid = await generateTxId(tx)

      const [result] = await tx`
        UPDATE config
        SET ${tx(configData)}
        WHERE id = ${id}
        RETURNING *
      `

      if (!result) {
        throw new Error(`Config not found`)
      }

      return result
    })

    return res.status(200).json({ config: updatedConfig, txid })
  } catch (error) {
    if (error instanceof Error &amp;&amp; error.message === `Config not found`) {
      return res.status(404).json({ error: `Config not found` })
    }

    console.error(`Error updating config:`, error)
    return res.status(500).json({
      error: `Failed to update config`,
      details: error instanceof Error ? error.message : String(error),
    })
  }
})

// DELETE a config
app.delete(`/api/config/:id`, async (req, res) =&gt; {
  try {
    const { id } = req.params

    let txid!: Txid
    await sql.begin(async (tx) =&gt; {
      txid = await generateTxId(tx)

      const [result] = await tx`
        DELETE FROM config
        WHERE id = ${id}
        RETURNING id
      `

      if (!result) {
        throw new Error(`Config not found`)
      }
    })

    return res.status(200).json({ success: true, txid })
  } catch (error) {
    if (error instanceof Error &amp;&amp; error.message === `Config not found`) {
      return res.status(404).json({ error: `Config not found` })
    }

    console.error(`Error deleting config:`, error)
    return res.status(500).json({
      error: `Failed to delete config`,
      details: error instanceof Error ? error.message : String(error),
    })
  }
})

// Start server
app.listen(PORT, () =&gt; {
  console.log(`Server running on port ${PORT}`)
})

export default app
">
<input type="hidden" name="project[files][src/assets/react.svg]" value="&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; aria-hidden=&quot;true&quot; role=&quot;img&quot; class=&quot;iconify iconify--logos&quot; width=&quot;35.93&quot; height=&quot;32&quot; preserveAspectRatio=&quot;xMidYMid meet&quot; viewBox=&quot;0 0 256 228&quot;&gt;&lt;path fill=&quot;#00D8FF&quot; d=&quot;M210.483 73.824a171.49 171.49 0 0 0-8.24-2.597c.465-1.9.893-3.777 1.273-5.621c6.238-30.281 2.16-54.676-11.769-62.708c-13.355-7.7-35.196.329-57.254 19.526a171.23 171.23 0 0 0-6.375 5.848a155.866 155.866 0 0 0-4.241-3.917C100.759 3.829 77.587-4.822 63.673 3.233C50.33 10.957 46.379 33.89 51.995 62.588a170.974 170.974 0 0 0 1.892 8.48c-3.28.932-6.445 1.924-9.474 2.98C17.309 83.498 0 98.307 0 113.668c0 15.865 18.582 31.778 46.812 41.427a145.52 145.52 0 0 0 6.921 2.165a167.467 167.467 0 0 0-2.01 9.138c-5.354 28.2-1.173 50.591 12.134 58.266c13.744 7.926 36.812-.22 59.273-19.855a145.567 145.567 0 0 0 5.342-4.923a168.064 168.064 0 0 0 6.92 6.314c21.758 18.722 43.246 26.282 56.54 18.586c13.731-7.949 18.194-32.003 12.4-61.268a145.016 145.016 0 0 0-1.535-6.842c1.62-.48 3.21-.974 4.76-1.488c29.348-9.723 48.443-25.443 48.443-41.52c0-15.417-17.868-30.326-45.517-39.844Zm-6.365 70.984c-1.4.463-2.836.91-4.3 1.345c-3.24-10.257-7.612-21.163-12.963-32.432c5.106-11 9.31-21.767 12.459-31.957c2.619.758 5.16 1.557 7.61 2.4c23.69 8.156 38.14 20.213 38.14 29.504c0 9.896-15.606 22.743-40.946 31.14Zm-10.514 20.834c2.562 12.94 2.927 24.64 1.23 33.787c-1.524 8.219-4.59 13.698-8.382 15.893c-8.067 4.67-25.32-1.4-43.927-17.412a156.726 156.726 0 0 1-6.437-5.87c7.214-7.889 14.423-17.06 21.459-27.246c12.376-1.098 24.068-2.894 34.671-5.345a134.17 134.17 0 0 1 1.386 6.193ZM87.276 214.515c-7.882 2.783-14.16 2.863-17.955.675c-8.075-4.657-11.432-22.636-6.853-46.752a156.923 156.923 0 0 1 1.869-8.499c10.486 2.32 22.093 3.988 34.498 4.994c7.084 9.967 14.501 19.128 21.976 27.15a134.668 134.668 0 0 1-4.877 4.492c-9.933 8.682-19.886 14.842-28.658 17.94ZM50.35 144.747c-12.483-4.267-22.792-9.812-29.858-15.863c-6.35-5.437-9.555-10.836-9.555-15.216c0-9.322 13.897-21.212 37.076-29.293c2.813-.98 5.757-1.905 8.812-2.773c3.204 10.42 7.406 21.315 12.477 32.332c-5.137 11.18-9.399 22.249-12.634 32.792a134.718 134.718 0 0 1-6.318-1.979Zm12.378-84.26c-4.811-24.587-1.616-43.134 6.425-47.789c8.564-4.958 27.502 2.111 47.463 19.835a144.318 144.318 0 0 1 3.841 3.545c-7.438 7.987-14.787 17.08-21.808 26.988c-12.04 1.116-23.565 2.908-34.161 5.309a160.342 160.342 0 0 1-1.76-7.887Zm110.427 27.268a347.8 347.8 0 0 0-7.785-12.803c8.168 1.033 15.994 2.404 23.343 4.08c-2.206 7.072-4.956 14.465-8.193 22.045a381.151 381.151 0 0 0-7.365-13.322Zm-45.032-43.861c5.044 5.465 10.096 11.566 15.065 18.186a322.04 322.04 0 0 0-30.257-.006c4.974-6.559 10.069-12.652 15.192-18.18ZM82.802 87.83a323.167 323.167 0 0 0-7.227 13.238c-3.184-7.553-5.909-14.98-8.134-22.152c7.304-1.634 15.093-2.97 23.209-3.984a321.524 321.524 0 0 0-7.848 12.897Zm8.081 65.352c-8.385-.936-16.291-2.203-23.593-3.793c2.26-7.3 5.045-14.885 8.298-22.6a321.187 321.187 0 0 0 7.257 13.246c2.594 4.48 5.28 8.868 8.038 13.147Zm37.542 31.03c-5.184-5.592-10.354-11.779-15.403-18.433c4.902.192 9.899.29 14.978.29c5.218 0 10.376-.117 15.453-.343c-4.985 6.774-10.018 12.97-15.028 18.486Zm52.198-57.817c3.422 7.8 6.306 15.345 8.596 22.52c-7.422 1.694-15.436 3.058-23.88 4.071a382.417 382.417 0 0 0 7.859-13.026a347.403 347.403 0 0 0 7.425-13.565Zm-16.898 8.101a358.557 358.557 0 0 1-12.281 19.815a329.4 329.4 0 0 1-23.444.823c-7.967 0-15.716-.248-23.178-.732a310.202 310.202 0 0 1-12.513-19.846h.001a307.41 307.41 0 0 1-10.923-20.627a310.278 310.278 0 0 1 10.89-20.637l-.001.001a307.318 307.318 0 0 1 12.413-19.761c7.613-.576 15.42-.876 23.31-.876H128c7.926 0 15.743.303 23.354.883a329.357 329.357 0 0 1 12.335 19.695a358.489 358.489 0 0 1 11.036 20.54a329.472 329.472 0 0 1-11 20.722Zm22.56-122.124c8.572 4.944 11.906 24.881 6.52 51.026c-.344 1.668-.73 3.367-1.15 5.09c-10.622-2.452-22.155-4.275-34.23-5.408c-7.034-10.017-14.323-19.124-21.64-27.008a160.789 160.789 0 0 1 5.888-5.4c18.9-16.447 36.564-22.941 44.612-18.3ZM128 90.808c12.625 0 22.86 10.235 22.86 22.86s-10.235 22.86-22.86 22.86s-22.86-10.235-22.86-22.86s10.235-22.86 22.86-22.86Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;">
<input type="hidden" name="project[files][src/components/NotFound.tsx]" value="import { Link } from &#39;@tanstack/solid-router&#39;

export function NotFound() {
  return (
    &lt;div class=&quot;min-h-screen flex items-center justify-center bg-gray-50&quot;&gt;
      &lt;div class=&quot;max-w-md w-full bg-white rounded-lg shadow-lg p-8 text-center&quot;&gt;
        &lt;div class=&quot;text-6xl font-bold text-gray-300 mb-4&quot;&gt;404&lt;/div&gt;
        &lt;h1 class=&quot;text-2xl font-bold text-gray-800 mb-4&quot;&gt;Page Not Found&lt;/h1&gt;
        &lt;p class=&quot;text-gray-600 mb-8&quot;&gt;
          The page you&#39;re looking for doesn&#39;t exist or has been moved.
        &lt;/p&gt;

        &lt;div class=&quot;space-y-4&quot;&gt;
          &lt;Link to=&quot;/&quot; class=&quot;block w-full&quot;&gt;
            &lt;button class=&quot;w-full px-6 py-3 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors&quot;&gt;
              Go Home
            &lt;/button&gt;
          &lt;/Link&gt;

          &lt;div class=&quot;flex space-x-4&quot;&gt;
            &lt;Link to=&quot;/query&quot; class=&quot;flex-1&quot;&gt;
              &lt;button class=&quot;w-full px-4 py-2 bg-green-100 text-green-700 rounded-lg hover:bg-green-200 transition-colors text-sm&quot;&gt;
                Query Demo
              &lt;/button&gt;
            &lt;/Link&gt;
            &lt;Link to=&quot;/electric&quot; class=&quot;flex-1&quot;&gt;
              &lt;button class=&quot;w-full px-4 py-2 bg-blue-100 text-blue-700 rounded-lg hover:bg-blue-200 transition-colors text-sm&quot;&gt;
                Electric Demo
              &lt;/button&gt;
            &lt;/Link&gt;
            &lt;Link to=&quot;/trailbase&quot; class=&quot;flex-1&quot;&gt;
              &lt;button class=&quot;w-full px-4 py-2 bg-purple-100 text-purple-700 rounded-lg hover:bg-purple-200 transition-colors text-sm&quot;&gt;
                TrailBase Demo
              &lt;/button&gt;
            &lt;/Link&gt;
          &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  )
}
">
<input type="hidden" name="project[files][src/components/TodoApp.tsx]" value="import { Link } from &#39;@tanstack/solid-router&#39;
import { For, Show, createSignal } from &#39;solid-js&#39;
import type { JSX } from &#39;solid-js&#39;
import type { Collection } from &#39;@tanstack/solid-db&#39;
import type { SelectConfig, SelectTodo } from &#39;../db/validation&#39;

interface TodoAppProps {
  todos: Array&lt;SelectTodo&gt;
  configData: Array&lt;SelectConfig&gt;
  todoCollection: Collection&lt;SelectTodo&gt;
  configCollection: Collection&lt;SelectConfig&gt;
  title: string
}

export function TodoApp(props: TodoAppProps) {
  const [newTodo, setNewTodo] = createSignal(``)

  // Define a type-safe helper function to get config values
  const getConfigValue = (key: string): string =&gt; {
    for (const config of props.configData) {
      if (config.key === key) {
        return config.value
      }
    }
    return ``
  }

  // Define a helper function to update config values
  const setConfigValue = (key: string, value: string): void =&gt; {
    for (const config of props.configData) {
      if (config.key === key) {
        props.configCollection.update(config.id, (draft) =&gt; {
          draft.value = value
        })
        return
      }
    }

    // If the config doesn&#39;t exist yet, create it
    props.configCollection.insert({
      id: Math.round(Math.random() * 1000000),
      key,
      value,
      created_at: new Date(),
      updated_at: new Date(),
    })
  }

  const backgroundColor = getConfigValue(`backgroundColor`)

  // Function to generate a complementary color
  const getComplementaryColor = (hexColor: string): string =&gt; {
    // Default to a nice blue if no color is provided
    if (!hexColor) return `#3498db`

    // Remove the hash if it exists
    const color = hexColor.replace(`#`, ``)

    // Convert hex to RGB
    const r = parseInt(color.substr(0, 2), 16)
    const g = parseInt(color.substr(2, 2), 16)
    const b = parseInt(color.substr(4, 2), 16)

    // Calculate complementary color (inverting the RGB values)
    const compR = 255 - r
    const compG = 255 - g
    const compB = 255 - b

    // Convert back to hex
    const compHex =
      `#` +
      ((1 &lt;&lt; 24) + (compR &lt;&lt; 16) + (compG &lt;&lt; 8) + compB).toString(16).slice(1)

    // Calculate brightness of the background
    const brightness = r * 0.299 + g * 0.587 + b * 0.114

    // If the complementary color doesn&#39;t have enough contrast, adjust it
    const compBrightness = compR * 0.299 + compG * 0.587 + compB * 0.114
    const brightnessDiff = Math.abs(brightness - compBrightness)

    if (brightnessDiff &lt; 128) {
      // Not enough contrast, use a more vibrant alternative
      if (brightness &gt; 128) {
        // Dark color for light background
        return `#8e44ad` // Purple
      } else {
        // Light color for dark background
        return `#f1c40f` // Yellow
      }
    }

    return compHex
  }

  const titleColor = getComplementaryColor(backgroundColor)

  const handleColorChange: JSX.CustomEventHandlersCamelCase&lt;HTMLInputElement&gt;[`onInput`] =
    (e) =&gt; {
      const newColor = e.target.value
      setConfigValue(`backgroundColor`, newColor)
    }

  const handleSubmit: JSX.CustomEventHandlersCamelCase&lt;HTMLFormElement&gt;[`onSubmit`] =
    (e) =&gt; {
      e.preventDefault()
      if (!newTodo().trim()) return

      props.todoCollection.insert({
        text: newTodo(),
        completed: false,
        id: Math.round(Math.random() * 1000000),
        created_at: new Date(),
        updated_at: new Date(),
      })
      setNewTodo(``)
    }

  const activeTodos = props.todos.filter((todo) =&gt; !todo.completed)
  const completedTodos = props.todos.filter((todo) =&gt; todo.completed)

  return (
    &lt;div
      class=&quot;min-h-screen flex items-start justify-center overflow-auto py-8&quot;
      style={{ &#39;background-color&#39;: backgroundColor }}
    &gt;
      &lt;div style={{ width: `550px` }} class=&quot;mx-auto relative&quot;&gt;
        &lt;div class=&quot;text-center mb-8&quot;&gt;
          &lt;h1 class=&quot;text-[70px] font-bold mb-4&quot; style={{ color: titleColor }}&gt;
            {props.title}
          &lt;/h1&gt;

          {/* Navigation */}
          &lt;div class=&quot;flex justify-center gap-4 mb-4&quot;&gt;
            &lt;Link
              to=&quot;/&quot;
              class=&quot;px-4 py-2 bg-gray-500 text-white rounded hover:bg-gray-600 transition-colors&quot;
            &gt;
              ← Home
            &lt;/Link&gt;
            &lt;Link
              to=&quot;/query&quot;
              class=&quot;px-4 py-2 bg-green-700 text-white rounded hover:bg-green-800 transition-colors&quot;
            &gt;
              Query
            &lt;/Link&gt;
            &lt;Link
              to=&quot;/electric&quot;
              class=&quot;px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600 transition-colors&quot;
            &gt;
              Electric
            &lt;/Link&gt;
            &lt;Link
              to=&quot;/trailbase&quot;
              class=&quot;px-4 py-2 bg-purple-600 text-white rounded hover:bg-purple-700 transition-colors&quot;
            &gt;
              TrailBase
            &lt;/Link&gt;
          &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class=&quot;mb-4 flex justify-end&quot;&gt;
          &lt;div class=&quot;flex items-center&quot;&gt;
            &lt;label
              for=&quot;colorPicker&quot;
              class=&quot;mr-2 text-sm font-medium text-gray-700&quot;
              style={{ color: titleColor }}
            &gt;
              Background Color:
            &lt;/label&gt;
            &lt;input
              type=&quot;color&quot;
              id=&quot;colorPicker&quot;
              value={backgroundColor}
              onInput={handleColorChange}
              class=&quot;cursor-pointer border border-gray-300 rounded&quot;
            /&gt;
          &lt;/div&gt;
        &lt;/div&gt;

        &lt;div class=&quot;bg-white shadow-[0_2px_4px_0_rgba(0,0,0,0.2),0_25px_50px_0_rgba(0,0,0,0.1)] relative&quot;&gt;
          &lt;form onSubmit={handleSubmit} class=&quot;relative&quot;&gt;
            &lt;Show when={props.todos.length &gt; 0}&gt;
              &lt;button
                type=&quot;button&quot;
                class=&quot;absolute left-0 w-12 h-full text-[30px] text-[#e6e6e6] hover:text-[#4d4d4d]&quot;
                onClick={() =&gt; {
                  const allCompleted =
                    completedTodos.length === props.todos.length
                  const todosToToggle = allCompleted
                    ? completedTodos
                    : activeTodos
                  props.todoCollection.update(
                    todosToToggle.map((todo) =&gt; todo.id),
                    (drafts) =&gt; {
                      drafts.forEach(
                        (draft) =&gt; (draft.completed = !allCompleted),
                      )
                    },
                  )
                }}
              &gt;
                ❯
              &lt;/button&gt;
            &lt;/Show&gt;
            &lt;input
              type=&quot;text&quot;
              value={newTodo()}
              onChange={(e) =&gt; setNewTodo(e.target.value)}
              placeholder=&quot;What needs to be done?&quot;
              class=&quot;w-full py-4 pl-[60px] pr-4 text-2xl font-light border-none shadow-[inset_0_-2px_1px_rgba(0,0,0,0.03)] box-border&quot;
              style={{
                background: `rgba(0, 0, 0, 0.003)`,
              }}
            /&gt;
          &lt;/form&gt;

          &lt;Show when={props.todos.length &gt; 0}&gt;
            &lt;&gt;
              &lt;ul class=&quot;my-0 mx-0 p-0 list-none&quot;&gt;
                &lt;For each={props.todos}&gt;
                  {(todo) =&gt; (
                    &lt;li class=&quot;relative border-b border-[#ededed] last:border-none group&quot;&gt;
                      &lt;div class=&quot;flex items-center h-[58px] pl-[60px]&quot;&gt;
                        &lt;input
                          type=&quot;checkbox&quot;
                          checked={todo.completed}
                          onChange={() =&gt;
                            props.todoCollection.update(todo.id, (draft) =&gt; {
                              draft.completed = !draft.completed
                            })
                          }
                          class=&quot;absolute left-[12px] top-0 bottom-0 my-auto h-[40px] w-[40px] cursor-pointer&quot;
                        /&gt;
                        &lt;label
                          class={`block leading-[1.2] py-[15px] px-[15px] text-2xl transition-colors ${
                            todo.completed ? `text-[#d9d9d9] line-through` : ``
                          }`}
                        &gt;
                          {todo.text}
                        &lt;/label&gt;
                        &lt;button
                          onClick={() =&gt; {
                            props.todoCollection.delete(todo.id)
                          }}
                          class=&quot;hidden group-hover:block absolute right-[10px] w-[40px] h-[40px] my-auto top-0 bottom-0 text-[30px] text-[#cc9a9a] hover:text-[#af5b5e] transition-colors&quot;
                        &gt;
                          ×
                        &lt;/button&gt;
                      &lt;/div&gt;
                    &lt;/li&gt;
                  )}
                &lt;/For&gt;
              &lt;/ul&gt;

              &lt;footer class=&quot;text-[14px] text-[#777] py-[10px] px-[15px] h-[40px] relative border-t border-[#e6e6e6] flex justify-between items-center&quot;&gt;
                &lt;span class=&quot;text-[inherit]&quot;&gt;
                  {activeTodos.length}
                  {` `}
                  {activeTodos.length === 1 ? `item` : `items`} left
                &lt;/span&gt;
                {completedTodos.length &gt; 0 &amp;&amp; (
                  &lt;button
                    onClick={() =&gt; {
                      props.todoCollection.delete(
                        completedTodos.map((todo) =&gt; todo.id),
                      )
                    }}
                    class=&quot;text-inherit hover:underline&quot;
                  &gt;
                    Clear completed
                  &lt;/button&gt;
                )}
              &lt;/footer&gt;
            &lt;/&gt;
          &lt;/Show&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  )
}
">
<input type="hidden" name="project[files][src/db/index.ts]" value="import { drizzle } from &#39;drizzle-orm/node-postgres&#39;
import { Pool } from &#39;pg&#39;
import * as schema from &#39;./schema&#39;

// Create a PostgreSQL pool
const pool = new Pool({
  host: process.env.DB_HOST || `localhost`,
  port: parseInt(process.env.DB_PORT || `5432`),
  user: process.env.DB_USER || `postgres`,
  password: process.env.DB_PASSWORD,
  database: process.env.DB_NAME || `todo_app`,
})

// Create drizzle database instance
export const db = drizzle(pool, { schema })
">
<input type="hidden" name="project[files][src/db/postgres.ts]" value="import postgres from &#39;postgres&#39;

// Create a postgres instance
export const sql = postgres({
  host: `localhost`,
  port: 54322,
  user: `postgres`,
  password: `postgres`,
  database: `todo_app`,
})
">
<input type="hidden" name="project[files][src/db/schema.ts]" value="import { boolean, pgTable, serial, text, timestamp } from &#39;drizzle-orm/pg-core&#39;

export const todos = pgTable(`todos`, {
  id: serial(`id`).primaryKey(),
  text: text(`text`).notNull(),
  completed: boolean(`completed`).notNull().default(false),
  created_at: timestamp(`created_at`, { withTimezone: true })
    .defaultNow()
    .notNull(),
  updated_at: timestamp(`updated_at`, { withTimezone: true })
    .notNull()
    .defaultNow(),
})

export type Todo = typeof todos.$inferSelect
export type NewTodo = typeof todos.$inferInsert

export const config = pgTable(`config`, {
  id: serial(`id`).primaryKey(),
  key: text(`key`).notNull().unique(),
  value: text(`value`).notNull(),
  created_at: timestamp(`created_at`, { withTimezone: true })
    .notNull()
    .defaultNow(),
  updated_at: timestamp(`updated_at`, { withTimezone: true })
    .notNull()
    .defaultNow(),
})

export type Config = typeof config.$inferSelect
export type NewConfig = typeof config.$inferInsert
">
<input type="hidden" name="project[files][src/db/validation.ts]" value="import { createInsertSchema, createSelectSchema } from &#39;drizzle-zod&#39;
import { config, todos } from &#39;./schema&#39;
import type { z } from &#39;zod&#39;

// Auto-generated schemas from Drizzle schema (omit auto-generated fields)
export const insertTodoSchema = createInsertSchema(todos).omit({
  id: true,
  created_at: true,
  updated_at: true,
})
export const selectTodoSchema = createSelectSchema(todos)

// Partial schema for updates
export const updateTodoSchema = insertTodoSchema.partial().strict()

// Config schemas (omit auto-generated fields)
export const insertConfigSchema = createInsertSchema(config).omit({
  id: true,
  created_at: true,
  updated_at: true,
})
export const selectConfigSchema = createSelectSchema(config)
export const updateConfigSchema = insertConfigSchema.partial().strict()

// Type inference
export type InsertTodo = z.infer&lt;typeof insertTodoSchema&gt;
export type SelectTodo = z.infer&lt;typeof selectTodoSchema&gt;
export type UpdateTodo = z.infer&lt;typeof updateTodoSchema&gt;

export type InsertConfig = z.infer&lt;typeof insertConfigSchema&gt;
export type SelectConfig = z.infer&lt;typeof selectConfigSchema&gt;
export type UpdateConfig = z.infer&lt;typeof updateConfigSchema&gt;

// Validation functions
export const validateInsertTodo = (data: unknown): InsertTodo =&gt; {
  const parsed = insertTodoSchema.parse(data)
  if (parsed.text === `really hard todo`) {
    throw new Error(`we don&#39;t want to do really hard todos`)
  }
  return parsed
}

export const validateSelectTodo = (data: unknown): SelectTodo =&gt; {
  return selectTodoSchema.parse(data)
}

export const validateUpdateTodo = (data: unknown): UpdateTodo =&gt; {
  return updateTodoSchema.parse(data)
}

export const validateInsertConfig = (data: unknown): InsertConfig =&gt; {
  return insertConfigSchema.parse(data)
}

export const validateSelectConfig = (data: unknown): SelectConfig =&gt; {
  return selectConfigSchema.parse(data)
}

export const validateUpdateConfig = (data: unknown): UpdateConfig =&gt; {
  return updateConfigSchema.parse(data)
}

// Safe parsing functions that return Result type instead of throwing
export const safeParseInsertTodo = (data: unknown) =&gt; {
  return insertTodoSchema.safeParse(data)
}

export const safeParseSelectTodo = (data: unknown) =&gt; {
  return selectTodoSchema.safeParse(data)
}

export const safeParseUpdateTodo = (data: unknown) =&gt; {
  return updateTodoSchema.safeParse(data)
}

export const safeParseInsertConfig = (data: unknown) =&gt; {
  return insertConfigSchema.safeParse(data)
}

export const safeParseSelectConfig = (data: unknown) =&gt; {
  return selectConfigSchema.safeParse(data)
}

export const safeParseUpdateConfig = (data: unknown) =&gt; {
  return updateConfigSchema.safeParse(data)
}
">
<input type="hidden" name="project[files][src/lib/api.ts]" value="import type { SelectConfig, SelectTodo } from &#39;../db/validation&#39;

// API helper for todos and config
const API_BASE_URL = `/api`

export const api = {
  // Todo API methods
  todos: {
    getAll: async (): Promise&lt;Array&lt;SelectTodo&gt;&gt; =&gt; {
      const response = await fetch(`${API_BASE_URL}/todos`)
      if (!response.ok)
        throw new Error(`HTTP error! Status: ${response.status}`)
      return response.json()
    },
    getById: async (id: number): Promise&lt;SelectTodo&gt; =&gt; {
      const response = await fetch(`${API_BASE_URL}/todos/${id}`)
      if (!response.ok)
        throw new Error(`HTTP error! Status: ${response.status}`)
      return response.json()
    },
    create: async (
      todo: Partial&lt;SelectTodo&gt;,
    ): Promise&lt;{ todo: SelectTodo; txid: number }&gt; =&gt; {
      const response = await fetch(`${API_BASE_URL}/todos`, {
        method: `POST`,
        headers: { &#39;Content-Type&#39;: `application/json` },
        body: JSON.stringify(todo),
      })
      if (!response.ok)
        throw new Error(`HTTP error! Status: ${response.status}`)
      return response.json()
    },
    update: async (
      id: unknown,
      changes: Partial&lt;SelectTodo&gt;,
    ): Promise&lt;{ todo: SelectTodo; txid: number }&gt; =&gt; {
      const response = await fetch(`${API_BASE_URL}/todos/${id}`, {
        method: `PUT`,
        headers: { &#39;Content-Type&#39;: `application/json` },
        body: JSON.stringify(changes),
      })
      if (!response.ok)
        throw new Error(`HTTP error! Status: ${response.status}`)
      return response.json()
    },
    delete: async (
      id: unknown,
    ): Promise&lt;{ success: boolean; txid: number }&gt; =&gt; {
      const response = await fetch(`${API_BASE_URL}/todos/${id}`, {
        method: `DELETE`,
      })
      if (!response.ok)
        throw new Error(`HTTP error! Status: ${response.status}`)
      return response.json()
    },
  },

  // Config API methods
  config: {
    getAll: async (): Promise&lt;Array&lt;SelectConfig&gt;&gt; =&gt; {
      const response = await fetch(`${API_BASE_URL}/config`)
      if (!response.ok)
        throw new Error(`HTTP error! Status: ${response.status}`)
      return response.json()
    },
    getById: async (id: number): Promise&lt;SelectConfig&gt; =&gt; {
      const response = await fetch(`${API_BASE_URL}/config/${id}`)
      if (!response.ok)
        throw new Error(`HTTP error! Status: ${response.status}`)
      return response.json()
    },
    create: async (
      config: Partial&lt;SelectConfig&gt;,
    ): Promise&lt;{ config: SelectConfig; txid: number }&gt; =&gt; {
      const response = await fetch(`${API_BASE_URL}/config`, {
        method: `POST`,
        headers: { &#39;Content-Type&#39;: `application/json` },
        body: JSON.stringify(config),
      })
      if (!response.ok)
        throw new Error(`HTTP error! Status: ${response.status}`)
      return response.json()
    },
    update: async (
      id: number,
      changes: Partial&lt;SelectConfig&gt;,
    ): Promise&lt;{ config: SelectConfig; txid: number }&gt; =&gt; {
      const response = await fetch(`${API_BASE_URL}/config/${id}`, {
        method: `PUT`,
        headers: { &#39;Content-Type&#39;: `application/json` },
        body: JSON.stringify(changes),
      })
      if (!response.ok)
        throw new Error(`HTTP error! Status: ${response.status}`)
      return response.json()
    },
    delete: async (id: number): Promise&lt;{ success: boolean; txid: number }&gt; =&gt; {
      const response = await fetch(`${API_BASE_URL}/config/${id}`, {
        method: `DELETE`,
      })
      if (!response.ok)
        throw new Error(`HTTP error! Status: ${response.status}`)
      return response.json()
    },
  },
}
">
<input type="hidden" name="project[files][src/lib/collections.ts]" value="import { createCollection } from &#39;@tanstack/solid-db&#39;
import { electricCollectionOptions } from &#39;@tanstack/electric-db-collection&#39;
import { queryCollectionOptions } from &#39;@tanstack/query-db-collection&#39;
import { trailBaseCollectionOptions } from &#39;@tanstack/trailbase-db-collection&#39;
import { QueryClient } from &#39;@tanstack/query-core&#39;
import { initClient } from &#39;trailbase&#39;
import { selectConfigSchema, selectTodoSchema } from &#39;../db/validation&#39;
import { api } from &#39;./api&#39;
import type { SelectConfig, SelectTodo } from &#39;../db/validation&#39;

// Create a query client for query collections
const queryClient = new QueryClient()

// Create a TrailBase client.
const trailBaseClient = initClient(`http://localhost:4000`)

// Electric Todo Collection
export const electricTodoCollection = createCollection(
  electricCollectionOptions({
    id: `todos`,
    shapeOptions: {
      url: `http://localhost:3003/v1/shape`,
      params: {
        table: `todos`,
      },
      parser: {
        timestamptz: (date: string) =&gt; new Date(date),
      },
    },
    getKey: (item) =&gt; item.id,
    schema: selectTodoSchema,
    onInsert: async ({ transaction }) =&gt; {
      const {
        id: _id,
        created_at: _f,
        updated_at: _ff,
        ...modified
      } = transaction.mutations[0].modified
      const response = await api.todos.create(modified)
      return { txid: response.txid }
    },
    onUpdate: async ({ transaction }) =&gt; {
      const txids = await Promise.all(
        transaction.mutations.map(async (mutation) =&gt; {
          const { original, changes } = mutation
          const response = await api.todos.update(original.id, changes)
          return response.txid
        }),
      )
      return { txid: txids }
    },
    onDelete: async ({ transaction }) =&gt; {
      const txids = await Promise.all(
        transaction.mutations.map(async (mutation) =&gt; {
          const { original } = mutation
          const response = await api.todos.delete(original.id)
          return response.txid
        }),
      )
      return { txid: txids }
    },
  }),
)

// Query Todo Collection
export const queryTodoCollection = createCollection(
  queryCollectionOptions({
    id: `todos`,
    queryKey: [`todos`],
    refetchInterval: 3000,
    queryFn: async () =&gt; {
      const todos = await api.todos.getAll()
      return todos.map((todo) =&gt; ({
        ...todo,
        created_at: new Date(todo.created_at),
        updated_at: new Date(todo.updated_at),
      }))
    },
    getKey: (item) =&gt; item.id,
    schema: selectTodoSchema,
    queryClient,
    onInsert: async ({ transaction }) =&gt; {
      const {
        id: _id,
        created_at: _crea,
        updated_at: _up,
        ...modified
      } = transaction.mutations[0].modified
      return await api.todos.create(modified)
    },
    onUpdate: async ({ transaction }) =&gt; {
      return await Promise.all(
        transaction.mutations.map(async (mutation) =&gt; {
          const { original, changes } = mutation
          return await api.todos.update(original.id, changes)
        }),
      )
    },
    onDelete: async ({ transaction }) =&gt; {
      return await Promise.all(
        transaction.mutations.map(async (mutation) =&gt; {
          const { original } = mutation
          await api.todos.delete(original.id)
        }),
      )
    },
  }),
)

type Todo = {
  id: number
  text: string
  completed: boolean
  created_at: number
  updated_at: number
}

// TrailBase Todo Collection
export const trailBaseTodoCollection = createCollection(
  trailBaseCollectionOptions&lt;SelectTodo, Todo&gt;({
    id: `todos`,
    getKey: (item) =&gt; item.id,
    recordApi: trailBaseClient.records(`todos`),
    // Re-using the example&#39;s drizzle-schema requires remapping the items.
    parse: {
      created_at: (ts) =&gt; new Date(ts * 1000),
      updated_at: (ts) =&gt; new Date(ts * 1000),
    },
    serialize: {
      created_at: (date) =&gt; Math.floor(date.valueOf() / 1000),
      updated_at: (date) =&gt; Math.floor(date.valueOf() / 1000),
    },
  }),
)

// Electric Config Collection
export const electricConfigCollection = createCollection(
  electricCollectionOptions({
    id: `config`,
    shapeOptions: {
      url: `http://localhost:3003/v1/shape`,
      params: {
        table: `config`,
      },
      parser: {
        timestamptz: (date: string) =&gt; new Date(date),
      },
    },
    getKey: (item) =&gt; item.id,
    schema: selectConfigSchema,
    onInsert: async ({ transaction }) =&gt; {
      const modified = transaction.mutations[0].modified
      const response = await api.config.create(modified)
      return { txid: response.txid }
    },
    onUpdate: async ({ transaction }) =&gt; {
      const txids = await Promise.all(
        transaction.mutations.map(async (mutation) =&gt; {
          const { original, changes } = mutation
          const response = await api.config.update(original.id, changes)
          return response.txid
        }),
      )
      return { txid: txids }
    },
  }),
)

// Query Config Collection
export const queryConfigCollection = createCollection(
  queryCollectionOptions({
    id: `config`,
    queryKey: [`config`],
    refetchInterval: 3000,
    queryFn: async () =&gt; {
      const configs = await api.config.getAll()
      return configs.map((config) =&gt; ({
        ...config,
        created_at: new Date(config.created_at),
        updated_at: new Date(config.updated_at),
      }))
    },
    getKey: (item) =&gt; item.id,
    schema: selectConfigSchema,
    queryClient,
    onInsert: async ({ transaction }) =&gt; {
      const modified = transaction.mutations[0].modified
      const response = await api.config.create(modified)
      return { txid: response.txid }
    },
    onUpdate: async ({ transaction }) =&gt; {
      const txids = await Promise.all(
        transaction.mutations.map(async (mutation) =&gt; {
          const { original, changes } = mutation
          const response = await api.config.update(original.id, changes)
          return response.txid
        }),
      )
      return { txid: txids }
    },
  }),
)

type Config = {
  id: number
  key: string
  value: string
  created_at: number
  updated_at: number
}

// TrailBase Config Collection
export const trailBaseConfigCollection = createCollection(
  trailBaseCollectionOptions&lt;SelectConfig, Config&gt;({
    id: `config`,
    getKey: (item) =&gt; item.id,
    recordApi: trailBaseClient.records(`config`),
    // Re-using the example&#39;s drizzle-schema requires remapping the items.
    parse: {
      created_at: (ts) =&gt; new Date(ts * 1000),
      updated_at: (ts) =&gt; new Date(ts * 1000),
    },
    serialize: {
      created_at: (date) =&gt; Math.floor(date.valueOf() / 1000),
      updated_at: (date) =&gt; Math.floor(date.valueOf() / 1000),
    },
  }),
)
">
<input type="hidden" name="project[files][src/routes/__root.tsx]" value="import {
  HeadContent,
  Outlet,
  Scripts,
  createRootRoute,
} from &#39;@tanstack/solid-router&#39;
import { HydrationScript } from &#39;solid-js/web&#39;
import appCss from &#39;../styles.css?url&#39;
import type { ParentProps } from &#39;solid-js&#39;

export const Route = createRootRoute({
  head: () =&gt; ({
    meta: [
      {
        charSet: `utf-8`,
      },
      {
        name: `viewport`,
        content: `width=device-width, initial-scale=1`,
      },
      {
        title: `TanStack Solid DB Example`,
      },
    ],
    links: [
      {
        rel: `stylesheet`,
        href: appCss,
      },
    ],
  }),
  shellComponent: RootDocument,
  component: () =&gt; &lt;Outlet /&gt;,
})

function RootDocument(props: ParentProps) {
  return (
    &lt;html lang=&quot;en&quot;&gt;
      &lt;head&gt;
        &lt;HeadContent /&gt;
        &lt;HydrationScript /&gt;
      &lt;/head&gt;
      &lt;body&gt;
        {props.children}
        &lt;Scripts /&gt;
      &lt;/body&gt;
    &lt;/html&gt;
  )
}
">
<input type="hidden" name="project[files][src/routes/electric.tsx]" value="import { createFileRoute } from &#39;@tanstack/solid-router&#39;
import { useLiveQuery } from &#39;@tanstack/solid-db&#39;
import { Suspense } from &#39;solid-js&#39;
import {
  electricConfigCollection,
  electricTodoCollection,
} from &#39;../lib/collections&#39;
import { TodoApp } from &#39;../components/TodoApp&#39;

export const Route = createFileRoute(`/electric`)({
  component: ElectricPage,
  ssr: false,
  loader: async () =&gt; {
    await Promise.all([
      electricTodoCollection.preload(),
      electricConfigCollection.preload(),
    ])

    return null
  },
})

function ElectricPage() {
  // Get data using live queries with Electric collections
  const todos = useLiveQuery((q) =&gt;
    q
      .from({ todo: electricTodoCollection })
      .orderBy(({ todo }) =&gt; todo.created_at, `asc`),
  )

  const configData = useLiveQuery((q) =&gt;
    q.from({ config: electricConfigCollection }),
  )

  return (
    &lt;Suspense fallback=&quot;Loading...&quot;&gt;
      &lt;TodoApp
        todos={todos()}
        configData={configData()}
        todoCollection={electricTodoCollection}
        configCollection={electricConfigCollection}
        title=&quot;todos (electric)&quot;
      /&gt;
    &lt;/Suspense&gt;
  )
}
">
<input type="hidden" name="project[files][src/routes/index.tsx]" value="import { Link, createFileRoute } from &#39;@tanstack/solid-router&#39;

export const Route = createFileRoute(`/`)({
  component: HomePage,
})

function HomePage() {
  return (
    &lt;div class=&quot;min-h-screen flex items-center justify-center bg-gray-50&quot;&gt;
      &lt;div class=&quot;max-w-md w-full bg-white rounded-lg shadow-lg p-8&quot;&gt;
        &lt;h1 class=&quot;text-3xl font-bold text-center mb-8 text-gray-800&quot;&gt;
          TanStack Solid DB Demo
        &lt;/h1&gt;

        &lt;p class=&quot;text-gray-600 text-center mb-8&quot;&gt;
          Choose a collection type to see how TanStack Solid DB works with
          different data sources:
        &lt;/p&gt;

        &lt;div class=&quot;space-y-4&quot;&gt;
          &lt;Link to=&quot;/query&quot; class=&quot;block w-full&quot;&gt;
            &lt;button class=&quot;w-full px-6 py-4 bg-green-700 text-white rounded-lg hover:bg-green-800 transition-colors text-left&quot;&gt;
              &lt;div class=&quot;font-semibold&quot;&gt;Query Collections&lt;/div&gt;
              &lt;div class=&quot;text-sm opacity-90 mt-1&quot;&gt;
                Traditional polling with TanStack Query
              &lt;/div&gt;
            &lt;/button&gt;
          &lt;/Link&gt;
          &lt;Link to=&quot;/electric&quot; class=&quot;block w-full&quot;&gt;
            &lt;button class=&quot;w-full px-6 py-4 bg-blue-500 text-white rounded-lg hover:bg-blue-600 transition-colors text-left&quot;&gt;
              &lt;div class=&quot;font-semibold&quot;&gt;Electric Collections&lt;/div&gt;
              &lt;div class=&quot;text-sm opacity-90 mt-1&quot;&gt;
                Real-time sync with ElectricSQL
              &lt;/div&gt;
            &lt;/button&gt;
          &lt;/Link&gt;
          &lt;Link to=&quot;/trailbase&quot; class=&quot;block w-full&quot;&gt;
            &lt;button class=&quot;w-full px-6 py-4 bg-purple-600 text-white rounded-lg hover:bg-purple-700 transition-colors text-left&quot;&gt;
              &lt;div class=&quot;font-semibold&quot;&gt;TrailBase Collections&lt;/div&gt;
              &lt;div class=&quot;text-sm opacity-90 mt-1&quot;&gt;
                Real-time sync with TrailBase
              &lt;/div&gt;
            &lt;/button&gt;
          &lt;/Link&gt;
        &lt;/div&gt;

        &lt;div class=&quot;mt-8 text-xs text-center text-gray-500&quot;&gt;
          All examples use the same API and UI components, showcasing the
          unified interface of TanStack Solid DB.
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  )
}
">
<input type="hidden" name="project[files][src/routes/query.tsx]" value="import { createFileRoute } from &#39;@tanstack/solid-router&#39;
import { useLiveQuery } from &#39;@tanstack/solid-db&#39;
import { Suspense } from &#39;solid-js&#39;
import { queryConfigCollection, queryTodoCollection } from &#39;../lib/collections&#39;
import { TodoApp } from &#39;../components/TodoApp&#39;

export const Route = createFileRoute(`/query`)({
  component: QueryPage,
  ssr: false,
  loader: async () =&gt; {
    await Promise.all([
      queryTodoCollection.preload(),
      queryConfigCollection.preload(),
    ])

    return null
  },
})

function QueryPage() {
  // Get data using live queries with Query collections
  const todos = useLiveQuery((q) =&gt;
    q
      .from({ todo: queryTodoCollection })
      .orderBy(({ todo }) =&gt; todo.created_at, `asc`),
  )

  const configData = useLiveQuery((q) =&gt;
    q.from({ config: queryConfigCollection }),
  )

  return (
    &lt;Suspense fallback=&quot;Loading...&quot;&gt;
      &lt;TodoApp
        todos={todos()}
        configData={configData()}
        todoCollection={queryTodoCollection}
        configCollection={queryConfigCollection}
        title=&quot;todos (query)&quot;
      /&gt;
    &lt;/Suspense&gt;
  )
}
">
<input type="hidden" name="project[files][src/routes/trailbase.tsx]" value="import { createFileRoute } from &#39;@tanstack/solid-router&#39;
import { useLiveQuery } from &#39;@tanstack/solid-db&#39;
import {
  trailBaseConfigCollection,
  trailBaseTodoCollection,
} from &#39;../lib/collections&#39;
import { TodoApp } from &#39;../components/TodoApp&#39;

export const Route = createFileRoute(`/trailbase`)({
  component: TrailBasePage,
  ssr: false,
  loader: async () =&gt; {
    await Promise.all([
      trailBaseTodoCollection.preload(),
      trailBaseConfigCollection.preload(),
    ])

    return null
  },
})

function TrailBasePage() {
  // Get data using live queries with Electric collections
  const { data: todos } = useLiveQuery((q) =&gt;
    q
      .from({ todo: trailBaseTodoCollection })
      .orderBy(({ todo }) =&gt; todo.created_at, `asc`),
  )

  const { data: configData } = useLiveQuery((q) =&gt;
    q.from({ config: trailBaseConfigCollection }),
  )

  return (
    &lt;TodoApp
      todos={todos}
      configData={configData}
      todoCollection={trailBaseTodoCollection}
      configCollection={trailBaseConfigCollection}
      title=&quot;todos (TrailBase)&quot;
    /&gt;
  )
}
">
<input type="hidden" name="project[files][traildepot/migrations/U1752518650__add_admin_user.sql]" value="-- Create default admin user with top &quot;secret&quot; password.
INSERT INTO _user
  (email, password_hash, verified, admin)
VALUES
  (&#39;admin@localhost&#39;, (hash_password(&#39;secret&#39;)), TRUE, TRUE);
">
<input type="hidden" name="project[files][traildepot/migrations/U1752518653__create_table_todos.sql]" value="CREATE TABLE todos (
  &quot;id&quot;          INTEGER PRIMARY KEY NOT NULL,
  &quot;text&quot;        TEXT NOT NULL,
  &quot;completed&quot;   INTEGER NOT NULL DEFAULT 0,
  &quot;created_at&quot;  INTEGER NOT NULL DEFAULT(UNIXEPOCH()),
  &quot;updated_at&quot;  INTEGER NOT NULL DEFAULT(UNIXEPOCH())
) STRICT;

CREATE TRIGGER _todos__update_trigger AFTER UPDATE ON todos FOR EACH ROW
  BEGIN
    UPDATE todos SET updated_at = UNIXEPOCH() WHERE id = OLD.id;
  END;
">
<input type="hidden" name="project[files][traildepot/migrations/U1752518746__create_table_config.sql]" value="CREATE TABLE config (
  &quot;id&quot;          INTEGER PRIMARY KEY NOT NULL,
  &quot;key&quot;         TEXT NOT NULL,
  &quot;value&quot;       TEXT NOT NULL,
  &quot;created_at&quot;  INTEGER NOT NULL DEFAULT(UNIXEPOCH()),
  &quot;updated_at&quot;  INTEGER NOT NULL DEFAULT(UNIXEPOCH())
) STRICT;

CREATE UNIQUE INDEX _config_key_index ON config (&quot;key&quot;);

CREATE TRIGGER _config__update_trigger AFTER UPDATE ON config FOR EACH ROW
  BEGIN
    UPDATE config SET updated_at = UNIXEPOCH() WHERE id = OLD.id;
  END;

-- Insert default config for background color
INSERT INTO config (&quot;key&quot;, &quot;value&quot;) VALUES (&#39;backgroundColor&#39;, &#39;#f5f5f5&#39;);
">
<input type="hidden" name="project[files][src/routes/api/config.$id.ts]" value="import { createFileRoute } from &#39;@tanstack/solid-router&#39;
import { json } from &#39;@tanstack/solid-start&#39;
import { sql } from &#39;../../db/postgres&#39;
import { validateUpdateConfig } from &#39;../../db/validation&#39;
import type { Txid } from &#39;@tanstack/electric-db-collection&#39;

// Generate a transaction ID
async function generateTxId(tx: any): Promise&lt;Txid&gt; {
  const result = await tx`SELECT pg_current_xact_id()::xid::text as txid`
  const txid = result[0]?.txid

  if (txid === undefined) {
    throw new Error(`Failed to get transaction ID`)
  }

  return parseInt(txid, 10)
}

export const Route = createFileRoute(`/api/config/$id`)({
  server: {
    handlers: {
      GET: async ({ params }) =&gt; {
        try {
          const { id } = params
          const [config] = await sql`SELECT * FROM config WHERE id = ${id}`

          if (!config) {
            return json({ error: `Config not found` }, { status: 404 })
          }

          return json(config)
        } catch (error) {
          console.error(`Error fetching config:`, error)
          return json(
            {
              error: `Failed to fetch config`,
              details: error instanceof Error ? error.message : String(error),
            },
            { status: 500 },
          )
        }
      },
      PUT: async ({ params, request }) =&gt; {
        try {
          const { id } = params
          const body = await request.json()
          const configData = validateUpdateConfig(body)

          let txid!: Txid
          const updatedConfig = await sql.begin(async (tx) =&gt; {
            txid = await generateTxId(tx)

            const [result] = await tx`
          UPDATE config
          SET ${tx(configData)}
          WHERE id = ${id}
          RETURNING *
        `

            if (!result) {
              throw new Error(`Config not found`)
            }

            return result
          })

          return json({ config: updatedConfig, txid })
        } catch (error) {
          if (error instanceof Error &amp;&amp; error.message === `Config not found`) {
            return json({ error: `Config not found` }, { status: 404 })
          }

          console.error(`Error updating config:`, error)
          return json(
            {
              error: `Failed to update config`,
              details: error instanceof Error ? error.message : String(error),
            },
            { status: 500 },
          )
        }
      },
      DELETE: async ({ params }) =&gt; {
        try {
          const { id } = params

          let txid!: Txid
          await sql.begin(async (tx) =&gt; {
            txid = await generateTxId(tx)

            const [result] = await tx`
          DELETE FROM config
          WHERE id = ${id}
          RETURNING id
        `

            if (!result) {
              throw new Error(`Config not found`)
            }
          })

          return json({ success: true, txid })
        } catch (error) {
          if (error instanceof Error &amp;&amp; error.message === `Config not found`) {
            return json({ error: `Config not found` }, { status: 404 })
          }

          console.error(`Error deleting config:`, error)
          return json(
            {
              error: `Failed to delete config`,
              details: error instanceof Error ? error.message : String(error),
            },
            { status: 500 },
          )
        }
      },
    },
  },
})
">
<input type="hidden" name="project[files][src/routes/api/config.ts]" value="import { createFileRoute } from &#39;@tanstack/solid-router&#39;
import { json } from &#39;@tanstack/solid-start&#39;
import { sql } from &#39;../../db/postgres&#39;
import { validateInsertConfig } from &#39;../../db/validation&#39;
import type { Txid } from &#39;@tanstack/electric-db-collection&#39;

// Generate a transaction ID
async function generateTxId(tx: any): Promise&lt;Txid&gt; {
  const result = await tx`SELECT pg_current_xact_id()::xid::text as txid`
  const txid = result[0]?.txid

  if (txid === undefined) {
    throw new Error(`Failed to get transaction ID`)
  }

  return parseInt(txid, 10)
}

export const Route = createFileRoute(`/api/config`)({
  server: {
    handlers: {
      GET: async ({ request: _request }) =&gt; {
        try {
          const config = await sql`SELECT * FROM config`
          return json(config)
        } catch (error) {
          console.error(`Error fetching config:`, error)
          return json(
            {
              error: `Failed to fetch config`,
              details: error instanceof Error ? error.message : String(error),
            },
            { status: 500 },
          )
        }
      },
      POST: async ({ request }) =&gt; {
        try {
          const body = await request.json()
          console.log(`POST /api/config`, body)
          const configData = validateInsertConfig(body)

          let txid!: Txid
          const newConfig = await sql.begin(async (tx) =&gt; {
            txid = await generateTxId(tx)

            const [result] = await tx`
          INSERT INTO config ${tx(configData)}
          RETURNING *
        `
            return result
          })

          return json({ config: newConfig, txid }, { status: 201 })
        } catch (error) {
          console.error(`Error creating config:`, error)
          return json(
            {
              error: `Failed to create config`,
              details: error instanceof Error ? error.message : String(error),
            },
            { status: 500 },
          )
        }
      },
    },
  },
})
">
<input type="hidden" name="project[files][src/routes/api/todos.$id.ts]" value="import { createFileRoute } from &#39;@tanstack/solid-router&#39;
import { json } from &#39;@tanstack/solid-start&#39;
import { sql } from &#39;../../db/postgres&#39;
import { validateUpdateTodo } from &#39;../../db/validation&#39;
import type { Txid } from &#39;@tanstack/electric-db-collection&#39;

// Generate a transaction ID
async function generateTxId(tx: any): Promise&lt;Txid&gt; {
  const result = await tx`SELECT pg_current_xact_id()::xid::text as txid`
  const txid = result[0]?.txid

  if (txid === undefined) {
    throw new Error(`Failed to get transaction ID`)
  }

  return parseInt(txid, 10)
}

export const Route = createFileRoute(`/api/todos/$id`)({
  server: {
    handlers: {
      GET: async ({ params }) =&gt; {
        try {
          const { id } = params
          const [todo] = await sql`SELECT * FROM todos WHERE id = ${id}`

          if (!todo) {
            return json({ error: `Todo not found` }, { status: 404 })
          }

          return json(todo)
        } catch (error) {
          console.error(`Error fetching todo:`, error)
          return json(
            {
              error: `Failed to fetch todo`,
              details: error instanceof Error ? error.message : String(error),
            },
            { status: 500 },
          )
        }
      },
      PUT: async ({ params, request }) =&gt; {
        try {
          const { id } = params
          const body = await request.json()
          const todoData = validateUpdateTodo(body)

          let txid!: Txid
          const updatedTodo = await sql.begin(async (tx) =&gt; {
            txid = await generateTxId(tx)

            const [result] = await tx`
          UPDATE todos
          SET ${tx(todoData)}
          WHERE id = ${id}
          RETURNING *
        `

            if (!result) {
              throw new Error(`Todo not found`)
            }

            return result
          })

          return json({ todo: updatedTodo, txid })
        } catch (error) {
          if (error instanceof Error &amp;&amp; error.message === `Todo not found`) {
            return json({ error: `Todo not found` }, { status: 404 })
          }

          console.error(`Error updating todo:`, error)
          return json(
            {
              error: `Failed to update todo`,
              details: error instanceof Error ? error.message : String(error),
            },
            { status: 500 },
          )
        }
      },
      DELETE: async ({ params }) =&gt; {
        try {
          const { id } = params

          let txid!: Txid
          await sql.begin(async (tx) =&gt; {
            txid = await generateTxId(tx)

            const [result] = await tx`
          DELETE FROM todos
          WHERE id = ${id}
          RETURNING id
        `

            if (!result) {
              throw new Error(`Todo not found`)
            }
          })

          return json({ success: true, txid })
        } catch (error) {
          if (error instanceof Error &amp;&amp; error.message === `Todo not found`) {
            return json({ error: `Todo not found` }, { status: 404 })
          }

          console.error(`Error deleting todo:`, error)
          return json(
            {
              error: `Failed to delete todo`,
              details: error instanceof Error ? error.message : String(error),
            },
            { status: 500 },
          )
        }
      },
    },
  },
})
">
<input type="hidden" name="project[files][src/routes/api/todos.ts]" value="import { createFileRoute } from &#39;@tanstack/solid-router&#39;
import { json } from &#39;@tanstack/solid-start&#39;
import { sql } from &#39;../../db/postgres&#39;
import { validateInsertTodo } from &#39;../../db/validation&#39;
import type { Txid } from &#39;@tanstack/electric-db-collection&#39;

// Generate a transaction ID
async function generateTxId(tx: any): Promise&lt;Txid&gt; {
  // The ::xid cast strips off the epoch, giving you the raw 32-bit value
  // that matches what PostgreSQL sends in logical replication streams
  // (and then exposed through Electric which we&#39;ll match against
  // in the client).
  const result = await tx`SELECT pg_current_xact_id()::xid::text as txid`
  const txid = result[0]?.txid

  if (txid === undefined) {
    throw new Error(`Failed to get transaction ID`)
  }

  return parseInt(txid, 10)
}

export const Route = createFileRoute(`/api/todos`)({
  server: {
    handlers: {
      GET: async ({ request: _request }) =&gt; {
        try {
          const todos = await sql`SELECT * FROM todos`
          return json(todos)
        } catch (error) {
          console.error(`Error fetching todos:`, error)
          return json(
            {
              error: `Failed to fetch todos`,
              details: error instanceof Error ? error.message : String(error),
            },
            { status: 500 },
          )
        }
      },
      POST: async ({ request }) =&gt; {
        try {
          const body = await request.json()
          const todoData = validateInsertTodo(body)

          let txid!: Txid
          const newTodo = await sql.begin(async (tx) =&gt; {
            txid = await generateTxId(tx)

            const [result] = await tx`
          INSERT INTO todos ${tx(todoData)}
          RETURNING *
        `
            return result
          })

          return json({ todo: newTodo, txid }, { status: 201 })
        } catch (error) {
          console.error(`Error creating todo:`, error)
          return json(
            {
              error: `Failed to create todo`,
              details: error instanceof Error ? error.message : String(error),
            },
            { status: 500 },
          )
        }
      },
    },
  },
})
">
<input type="hidden" name="project[description]" value="generated by https://pkg.pr.new">
<input type="hidden" name="project[template]" value="node">
<input type="hidden" name="project[title]" value="@tanstack/db-example-solid-todo">
</form>
<script>document.getElementById("mainForm").submit();</script>

</body></html>